]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of /home/stefan/git/u-boot/u-boot
authorStefan Roese <sr@denx.de>
Sun, 13 Jan 2008 14:04:37 +0000 (15:04 +0100)
committerStefan Roese <sr@denx.de>
Sun, 13 Jan 2008 14:04:37 +0000 (15:04 +0100)
733 files changed:
.gitignore
CHANGELOG
CREDITS
MAINTAINERS
MAKEALL
Makefile
README
api/Makefile [new file with mode: 0644]
api/README [new file with mode: 0644]
api/api.c [new file with mode: 0644]
api/api_net.c [new file with mode: 0644]
api/api_platform-arm.c [new file with mode: 0644]
api/api_platform-ppc.c [new file with mode: 0644]
api/api_private.h [new file with mode: 0644]
api/api_storage.c [new file with mode: 0644]
api_examples/Makefile [new file with mode: 0644]
api_examples/crt0.S [new file with mode: 0644]
api_examples/demo.c [new file with mode: 0644]
api_examples/glue.c [new file with mode: 0644]
api_examples/glue.h [new file with mode: 0644]
api_examples/libgenwrap.c [new file with mode: 0644]
board/BuS/EB+MCF-EV123/u-boot.lds
board/LEOX/elpt860/u-boot.lds
board/MAI/AmigaOneG3SE/u-boot.lds
board/Marvell/db64360/u-boot.lds
board/Marvell/db64460/u-boot.lds
board/RPXClassic/u-boot.lds
board/RPXlite/u-boot.lds
board/RPXlite_dw/u-boot.lds
board/RRvision/u-boot.lds
board/adder/u-boot.lds
board/ads5121/ads5121.c
board/ads5121/u-boot.lds
board/adsvix/u-boot.lds
board/altera/dk1c20/u-boot.lds
board/altera/dk1s10/u-boot.lds
board/altera/ep1c20/u-boot.lds
board/altera/ep1s10/u-boot.lds
board/altera/ep1s40/u-boot.lds
board/amcc/acadia/u-boot-nand.lds
board/amcc/acadia/u-boot.lds
board/amcc/bamboo/bamboo.c
board/amcc/bamboo/u-boot-nand.lds
board/amcc/bamboo/u-boot.lds
board/amcc/bubinga/u-boot.lds
board/amcc/ebony/u-boot.lds
board/amcc/katmai/katmai.c
board/amcc/katmai/u-boot.lds
board/amcc/kilauea/Makefile [new file with mode: 0644]
board/amcc/kilauea/cmd_pll.c [new file with mode: 0644]
board/amcc/kilauea/config.mk [new file with mode: 0644]
board/amcc/kilauea/init.S [new file with mode: 0644]
board/amcc/kilauea/kilauea.c [new file with mode: 0644]
board/amcc/kilauea/memory.c [new file with mode: 0644]
board/amcc/kilauea/u-boot-nand.lds [new file with mode: 0644]
board/amcc/kilauea/u-boot.lds [new file with mode: 0644]
board/amcc/luan/luan.c
board/amcc/luan/u-boot.lds
board/amcc/makalu/Makefile [new file with mode: 0644]
board/amcc/makalu/cmd_pll.c [new file with mode: 0644]
board/amcc/makalu/config.mk [new file with mode: 0644]
board/amcc/makalu/init.S [new file with mode: 0644]
board/amcc/makalu/makalu.c [new file with mode: 0644]
board/amcc/makalu/memory.c [new file with mode: 0644]
board/amcc/makalu/u-boot.lds [new file with mode: 0644]
board/amcc/ocotea/u-boot.lds
board/amcc/sequoia/init.S
board/amcc/sequoia/sdram.c
board/amcc/sequoia/sdram.h [deleted file]
board/amcc/sequoia/sequoia.c
board/amcc/sequoia/u-boot-nand.lds
board/amcc/sequoia/u-boot.lds
board/amcc/taihu/u-boot.lds
board/amcc/taishan/showinfo.c
board/amcc/taishan/u-boot.lds
board/amcc/walnut/u-boot.lds
board/amcc/yosemite/u-boot.lds
board/amcc/yucca/u-boot.lds
board/amcc/yucca/yucca.c
board/amirix/ap1000/u-boot.lds
board/apollon/Makefile [new file with mode: 0644]
board/apollon/apollon.c [new file with mode: 0644]
board/apollon/config.mk [new file with mode: 0644]
board/apollon/lowlevel_init.S [new file with mode: 0644]
board/apollon/mem.c [new file with mode: 0644]
board/apollon/mem.h [new file with mode: 0644]
board/apollon/sys_info.c [new file with mode: 0644]
board/apollon/u-boot.lds [new file with mode: 0644]
board/armadillo/u-boot.lds
board/assabet/u-boot.lds
board/at91rm9200dk/u-boot.lds
board/atmel/atstk1000/u-boot.lds
board/atum8548/Makefile [new file with mode: 0644]
board/atum8548/atum8548.c [new file with mode: 0644]
board/atum8548/config.mk [new file with mode: 0644]
board/atum8548/init.S [new file with mode: 0644]
board/atum8548/u-boot.lds [new file with mode: 0644]
board/c2mon/u-boot.lds
board/cerf250/u-boot.lds
board/cm4008/u-boot.lds
board/cm41xx/u-boot.lds
board/cm5200/u-boot.lds
board/cmc_pu2/u-boot.lds
board/cobra5272/u-boot.lds
board/cogent/u-boot.lds
board/cradle/u-boot.lds
board/cray/L1/u-boot.lds
board/csb226/u-boot.lds
board/csb272/u-boot.lds
board/csb472/u-boot.lds
board/csb637/u-boot.lds
board/dave/B2/u-boot.lds
board/dave/PPChameleonEVB/u-boot.lds
board/davinci/dv-evm/u-boot.lds
board/davinci/schmoogie/u-boot.lds
board/davinci/sonata/u-boot.lds
board/dbau1x00/u-boot.lds
board/delta/u-boot.lds
board/dnp1110/u-boot.lds
board/eltec/bab7xx/u-boot.lds
board/eltec/elppc/u-boot.lds
board/eltec/mhpc/u-boot.lds
board/emk/top860/u-boot.lds
board/ep7312/u-boot.lds
board/ep88x/u-boot.lds
board/eric/u-boot.lds
board/esd/adciop/u-boot.lds
board/esd/apc405/u-boot.lds
board/esd/ar405/u-boot.lds
board/esd/ash405/u-boot.lds
board/esd/canbt/u-boot.lds
board/esd/cms700/u-boot.lds
board/esd/common/lcd.c
board/esd/cpci2dp/u-boot.lds
board/esd/cpci405/u-boot.lds
board/esd/cpci440/cpci440.c [deleted file]
board/esd/cpci440/init.S [deleted file]
board/esd/cpci440/strataflash.c [deleted file]
board/esd/cpci750/u-boot.lds
board/esd/cpciiser4/u-boot.lds
board/esd/dasa_sim/u-boot.lds
board/esd/dp405/u-boot.lds
board/esd/du405/u-boot.lds
board/esd/hh405/u-boot.lds
board/esd/hub405/u-boot.lds
board/esd/ocrtc/cmd_ocrtc.c
board/esd/ocrtc/u-boot.lds
board/esd/pci405/cmd_pci405.c
board/esd/pci405/pci405.c
board/esd/pci405/u-boot.lds
board/esd/plu405/plu405.c
board/esd/plu405/u-boot.lds
board/esd/pmc405/u-boot.lds
board/esd/pmc440/Makefile [moved from board/esd/cpci440/Makefile with 90% similarity]
board/esd/pmc440/cmd_pmc440.c [new file with mode: 0644]
board/esd/pmc440/config.mk [moved from board/esd/cpci440/config.mk with 88% similarity]
board/esd/pmc440/fpga.c [new file with mode: 0644]
board/esd/pmc440/fpga.h [new file with mode: 0644]
board/esd/pmc440/init.S [new file with mode: 0644]
board/esd/pmc440/pmc440.c [new file with mode: 0644]
board/esd/pmc440/pmc440.h [new file with mode: 0644]
board/esd/pmc440/sdram.c [new file with mode: 0644]
board/esd/pmc440/u-boot-nand.lds [new file with mode: 0644]
board/esd/pmc440/u-boot.lds [moved from board/esd/cpci440/u-boot.lds with 87% similarity]
board/esd/tasreg/u-boot.lds
board/esd/voh405/u-boot.lds
board/esd/voh405/voh405.c
board/esd/vom405/u-boot.lds
board/esd/wuh405/u-boot.lds
board/esteem192e/u-boot.lds
board/etx094/u-boot.lds
board/evb4510/u-boot.lds
board/evb64260/u-boot.lds
board/exbitgen/u-boot.lds
board/fads/u-boot.lds
board/flagadm/u-boot.lds
board/freescale/common/Makefile
board/freescale/common/fsl_diu_fb.c [new file with mode: 0644]
board/freescale/common/fsl_diu_fb.h [new file with mode: 0644]
board/freescale/common/fsl_logo_bmp.c [new file with mode: 0644]
board/freescale/m5235evb/u-boot.lds
board/freescale/m5249evb/u-boot.lds
board/freescale/m5253evbe/u-boot.lds
board/freescale/m5329evb/u-boot.lds
board/freescale/m54455evb/u-boot.lds
board/freescale/mpc8313erdb/mpc8313erdb.c
board/freescale/mpc8323erdb/mpc8323erdb.c
board/freescale/mpc832xemds/mpc832xemds.c
board/freescale/mpc832xemds/pci.c
board/freescale/mpc8349emds/mpc8349emds.c
board/freescale/mpc8349emds/pci.c
board/freescale/mpc8349itx/mpc8349itx.c
board/freescale/mpc8349itx/pci.c
board/freescale/mpc8360emds/mpc8360emds.c
board/freescale/mpc8360emds/pci.c
board/freescale/mpc8360erdk/Makefile [new file with mode: 0644]
board/freescale/mpc8360erdk/config.mk [moved from post/board/lwmon5/Makefile with 89% similarity]
board/freescale/mpc8360erdk/mpc8360erdk.c [new file with mode: 0644]
board/freescale/mpc837xemds/Makefile [new file with mode: 0644]
board/freescale/mpc837xemds/config.mk [new file with mode: 0644]
board/freescale/mpc837xemds/mpc837xemds.c [new file with mode: 0644]
board/freescale/mpc837xemds/pci.c [new file with mode: 0644]
board/freescale/mpc8540ads/init.S
board/freescale/mpc8540ads/u-boot.lds
board/freescale/mpc8541cds/init.S
board/freescale/mpc8541cds/u-boot.lds
board/freescale/mpc8544ds/init.S
board/freescale/mpc8544ds/u-boot.lds
board/freescale/mpc8548cds/init.S
board/freescale/mpc8548cds/u-boot.lds
board/freescale/mpc8555cds/init.S
board/freescale/mpc8555cds/u-boot.lds
board/freescale/mpc8560ads/init.S
board/freescale/mpc8560ads/u-boot.lds
board/freescale/mpc8568mds/bcsr.c
board/freescale/mpc8568mds/bcsr.h
board/freescale/mpc8568mds/init.S
board/freescale/mpc8568mds/mpc8568mds.c
board/freescale/mpc8568mds/u-boot.lds
board/freescale/mpc8610hpcd/Makefile [new file with mode: 0644]
board/freescale/mpc8610hpcd/config.mk [new file with mode: 0644]
board/freescale/mpc8610hpcd/init.S [new file with mode: 0644]
board/freescale/mpc8610hpcd/mpc8610hpcd.c [new file with mode: 0644]
board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c [new file with mode: 0644]
board/freescale/mpc8610hpcd/u-boot.lds [new file with mode: 0644]
board/freescale/mpc8641hpcn/mpc8641hpcn.c
board/freescale/mpc8641hpcn/u-boot.lds
board/g2000/u-boot.lds
board/gcplus/u-boot.lds
board/gen860t/fpga.c
board/gen860t/gen860t.c
board/gen860t/u-boot-flashenv.lds
board/gen860t/u-boot.lds
board/genietv/u-boot.lds
board/gth/u-boot.lds
board/gth2/u-boot.lds
board/hermes/u-boot.lds
board/hymod/u-boot.lds
board/icu862/u-boot.lds
board/idmr/u-boot.lds
board/impa7/u-boot.lds
board/incaip/u-boot.lds
board/inka4x0/Makefile
board/inka4x0/flash.c [deleted file]
board/inka4x0/hyb25d512160bf-5.h [new file with mode: 0644]
board/inka4x0/inka4x0.c
board/inka4x0/k4h511638c.h [new file with mode: 0644]
board/inka4x0/mt46v16m16-75.h
board/inka4x0/mt46v32m16-75.h [new file with mode: 0644]
board/inka4x0/mt48lc16m16a2-75.h
board/innokom/u-boot.lds
board/integratorap/split_by_variant.sh
board/integratorcp/split_by_variant.sh
board/ip860/u-boot.lds
board/ivm/u-boot.lds
board/ixdp425/u-boot.lds
board/jse/u-boot.lds
board/kb9202/u-boot.lds
board/korat/Makefile [new file with mode: 0644]
board/korat/config.mk [new file with mode: 0644]
board/korat/init.S [new file with mode: 0644]
board/korat/korat.c [new file with mode: 0644]
board/korat/u-boot.lds [new file with mode: 0644]
board/kup/kup4k/u-boot.lds
board/kup/kup4x/u-boot.lds
board/lantec/u-boot.lds
board/lart/u-boot.lds
board/logodl/u-boot.lds
board/lpc2292sodimm/u-boot.lds
board/lpd7a40x/u-boot.lds
board/lubbock/u-boot.lds
board/lwmon/u-boot.lds
board/lwmon5/init.S
board/lwmon5/lwmon5.c
board/lwmon5/sdram.c
board/lwmon5/sdram.h [deleted file]
board/lwmon5/u-boot.lds
board/m5271evb/u-boot.lds
board/m5272c3/u-boot.lds
board/m5282evb/u-boot.lds
board/mbx8xx/u-boot.lds
board/mgcoge/Makefile [new file with mode: 0644]
board/mgcoge/config.mk [new file with mode: 0644]
board/mgcoge/mgcoge.c [new file with mode: 0644]
board/mgsuvd/Makefile [new file with mode: 0644]
board/mgsuvd/config.mk [new file with mode: 0644]
board/mgsuvd/mgsuvd.c [new file with mode: 0644]
board/mgsuvd/u-boot.lds [moved from board/amcc/yucca/u-boot.lds.debug with 85% similarity]
board/ml2/u-boot.lds
board/modnet50/u-boot.lds
board/mousse/u-boot.lds
board/mp2usb/u-boot.lds
board/mpc7448hpc2/u-boot.lds
board/mpc8540eval/init.S
board/mpc8540eval/u-boot.lds
board/mpl/common/common_util.c
board/mpl/common/flash.c
board/mpl/mip405/u-boot.lds
board/mpl/pip405/u-boot.lds
board/mpl/vcma9/u-boot.lds
board/ms7722se/u-boot.lds
board/ms7750se/u-boot.lds
board/munices/Makefile [new file with mode: 0644]
board/munices/config.mk [new file with mode: 0644]
board/munices/mt48lc16m16a2-75.h [new file with mode: 0644]
board/munices/munices.c [new file with mode: 0644]
board/munices/u-boot.lds [new file with mode: 0644]
board/mvs1/u-boot.lds
board/mx1ads/u-boot.lds
board/mx1fs2/u-boot.lds
board/nc650/u-boot.lds
board/netphone/u-boot.lds
board/netstal/hcu4/u-boot.lds
board/netstal/hcu5/sdram.c
board/netstal/hcu5/u-boot.lds
board/netstar/eeprom.lds
board/netstar/u-boot.lds
board/netta/u-boot.lds
board/netta2/u-boot.lds
board/netvia/u-boot.lds
board/ns9750dev/u-boot.lds
board/nx823/u-boot.lds
board/omap1510inn/u-boot.lds
board/omap1610inn/u-boot.lds
board/omap2420h4/u-boot.lds
board/omap5912osk/u-boot.lds
board/omap730p2/u-boot.lds
board/pb1x00/u-boot.lds
board/pcippc2/u-boot.lds
board/pcs440ep/u-boot.lds
board/pleb2/u-boot.lds
board/pm854/init.S
board/pm854/u-boot.lds
board/pm856/init.S
board/pm856/u-boot.lds
board/ppmc7xx/u-boot.lds
board/prodrive/alpr/u-boot.lds
board/prodrive/p3mx/u-boot.lds
board/prodrive/p3p440/u-boot.lds
board/prodrive/pdnb3/u-boot.lds
board/psyent/pci5441/u-boot.lds
board/psyent/pk1c20/u-boot.lds
board/purple/u-boot.lds
board/pxa255_idp/u-boot.lds
board/quantum/u-boot.lds
board/r360mpi/u-boot.lds
board/r5200/u-boot.lds
board/rbc823/u-boot.lds
board/rmu/u-boot.lds
board/rsdproto/u-boot.lds
board/sandburst/karef/u-boot.lds
board/sandburst/karef/u-boot.lds.debug
board/sandburst/metrobox/u-boot.lds
board/sandburst/metrobox/u-boot.lds.debug
board/sbc2410x/u-boot.lds
board/sbc405/u-boot.lds
board/sbc8349/pci.c
board/sbc8349/sbc8349.c
board/sbc8548/Makefile [new file with mode: 0644]
board/sbc8548/config.mk [new file with mode: 0644]
board/sbc8548/init.S [new file with mode: 0644]
board/sbc8548/sbc8548.c [new file with mode: 0644]
board/sbc8548/u-boot.lds [new file with mode: 0644]
board/sbc8560/init.S
board/sbc8560/u-boot.lds
board/sbc8641d/u-boot.lds
board/sc3/sc3.c
board/sc3/u-boot.lds
board/sc520_cdp/u-boot.lds
board/sc520_spunk/u-boot.lds
board/scb9328/u-boot.lds
board/shannon/u-boot.lds
board/siemens/CCM/u-boot.lds
board/siemens/IAD210/u-boot.lds
board/siemens/SMN42/u-boot.lds
board/siemens/pcu_e/u-boot.lds
board/sixnet/u-boot.lds
board/smdk2400/u-boot.lds
board/smdk2410/u-boot.lds
board/snmc/qs850/u-boot.lds
board/snmc/qs860t/u-boot.lds
board/spc1920/u-boot.lds
board/spd8xx/u-boot.lds
board/ssv/adnpesc1/u-boot.lds
board/ssv/common/cmd_sled.c
board/stxgp3/init.S
board/stxgp3/u-boot.lds
board/stxssa/init.S
board/stxssa/u-boot.lds
board/stxxtc/u-boot.lds
board/svm_sc8xx/u-boot.lds
board/sx1/u-boot.lds
board/tb0229/u-boot.lds
board/tqm5200/tqm5200.c
board/tqm85xx/init.S
board/tqm85xx/u-boot.lds
board/tqm8xx/tqm8xx.c
board/tqm8xx/u-boot.lds
board/trab/u-boot.lds
board/trizepsiv/u-boot.lds
board/uc100/u-boot.lds
board/v37/u-boot.lds
board/versatile/split_by_variant.sh
board/versatile/u-boot.lds
board/voiceblue/eeprom.lds
board/voiceblue/u-boot.lds
board/w7o/u-boot.lds
board/wepep250/u-boot.lds
board/westel/amx860/u-boot.lds
board/xaeniax/u-boot.lds
board/xilinx/ml300/ml300.c
board/xilinx/ml300/u-boot.lds
board/xm250/u-boot.lds
board/xpedite1k/u-boot.lds
board/xpedite1k/u-boot.lds.debug
board/xsengine/u-boot.lds
board/zeus/u-boot.lds
board/zylonite/u-boot.lds
common/ACEX1K.c
common/Makefile
common/altera.c
common/cmd_bdinfo.c
common/cmd_bmp.c
common/cmd_fdt.c
common/cmd_fpga.c
common/cmd_i2c.c
common/cmd_jffs2.c
common/cmd_mii.c
common/cmd_nand.c
common/cmd_nvedit.c
common/cmd_terminal.c [new file with mode: 0644]
common/cyclon2.c
common/env_nand.c
common/env_onenand.c
common/fdt_support.c
common/fpga.c
common/main.c
common/serial.c
common/spartan2.c
common/spartan3.c
common/usb.c
common/usb_kbd.c
common/virtex2.c
common/xilinx.c
cpu/ixp/npe/npe.c
cpu/ixp/serial.c
cpu/mpc512x/cpu.c
cpu/mpc512x/fec.c
cpu/mpc512x/i2c.c
cpu/mpc512x/serial.c
cpu/mpc512x/speed.c
cpu/mpc5xx/u-boot.lds
cpu/mpc5xxx/fec.c
cpu/mpc5xxx/firmware_sc_task_bestcomm.impl.S
cpu/mpc5xxx/u-boot-customlayout.lds
cpu/mpc5xxx/u-boot.lds
cpu/mpc8220/u-boot.lds
cpu/mpc824x/u-boot.lds
cpu/mpc8260/ether_scc.c
cpu/mpc8260/u-boot.lds
cpu/mpc83xx/Makefile
cpu/mpc83xx/cpu.c
cpu/mpc83xx/cpu_init.c
cpu/mpc83xx/fdt.c [new file with mode: 0644]
cpu/mpc83xx/pci.c
cpu/mpc83xx/spd_sdram.c
cpu/mpc83xx/speed.c
cpu/mpc83xx/start.S
cpu/mpc83xx/u-boot.lds
cpu/mpc85xx/fdt.c
cpu/mpc85xx/spd_sdram.c
cpu/mpc85xx/start.S
cpu/mpc86xx/cpu.c
cpu/mpc86xx/spd_sdram.c
cpu/mpc8xx/cpu.c
cpu/mpc8xx/cpu_init.c
cpu/mpc8xx/fec.c
cpu/mpc8xx/serial.c
cpu/mpc8xx/upatch.c
cpu/ppc4xx/40x_spd_sdram.c
cpu/ppc4xx/44x_spd_ddr.c
cpu/ppc4xx/44x_spd_ddr2.c
cpu/ppc4xx/4xx_enet.c
cpu/ppc4xx/4xx_pci.c [moved from cpu/ppc4xx/405gp_pci.c with 98% similarity]
cpu/ppc4xx/4xx_pcie.c [moved from cpu/ppc4xx/440spe_pcie.c with 54% similarity]
cpu/ppc4xx/4xx_uart.c [moved from cpu/ppc4xx/serial.c with 56% similarity]
cpu/ppc4xx/Makefile
cpu/ppc4xx/cache.S [new file with mode: 0644]
cpu/ppc4xx/commproc.c
cpu/ppc4xx/cpu.c
cpu/ppc4xx/cpu_init.c
cpu/ppc4xx/denali_data_eye.c [new file with mode: 0644]
cpu/ppc4xx/denali_spd_ddr2.c [new file with mode: 0644]
cpu/ppc4xx/fdt.c [new file with mode: 0644]
cpu/ppc4xx/gpio.c
cpu/ppc4xx/interrupts.c
cpu/ppc4xx/iop480_uart.c [new file with mode: 0644]
cpu/ppc4xx/kgdb.S
cpu/ppc4xx/miiphy.c
cpu/ppc4xx/ndfc.c
cpu/ppc4xx/speed.c
cpu/ppc4xx/start.S
cpu/ppc4xx/tlb.c
cpu/ppc4xx/usb.c
cpu/ppc4xx/usbdev.c
cpu/pxa/start.S
cpu/pxa/usb.c
doc/README.atum8548 [new file with mode: 0644]
doc/README.generic_usb_ohci
doc/README.modnet50
doc/README.mpc837xemds [new file with mode: 0644]
doc/README.mpc8610hpcd [new file with mode: 0644]
doc/README.nand
doc/README.sbc8548 [new file with mode: 0644]
drivers/hwmon/Makefile
drivers/hwmon/ds1775.c
drivers/hwmon/lm73.c [new file with mode: 0644]
drivers/mtd/nand/nand_util.c
drivers/net/dc2114x.c
drivers/net/eepro100.c
drivers/net/macb.c
drivers/net/ne2000.c
drivers/net/pcnet.c
drivers/net/rtl8139.c
drivers/net/rtl8169.c
drivers/net/sk98lin/Makefile
drivers/net/tsec.c
drivers/net/tsi108_eth.c
drivers/net/uli526x.c
drivers/qe/qe.c
drivers/qe/qe.h
drivers/qe/uec.c
drivers/rtc/Makefile
drivers/rtc/m41t60.c [new file with mode: 0644]
drivers/rtc/rx8025.c [new file with mode: 0644]
drivers/rtc/x1205.c [new file with mode: 0644]
drivers/usb/isp116x-hcd.c
drivers/usb/usb_ohci.c
drivers/usb/usbdcore_mpc8xx.c
drivers/video/Makefile
drivers/video/cfb_console.c
drivers/video/mb862xx.c [new file with mode: 0644]
examples/mips.lds
examples/nios.lds
examples/nios2.lds
fs/cramfs/cramfs.c
fs/ext2/ext2fs.c
fs/fat/fat.c
fs/jffs2/jffs2_1pass.c
include/.gitignore
include/405_mal.h
include/4xx_i2c.h
include/api_public.h [new file with mode: 0644]
include/asm-arm/arch-arm1136/mux.h
include/asm-arm/arch-arm1136/omap2420.h
include/asm-arm/mach-types.h
include/asm-ppc/4xx_pci.h [moved from include/405gp_pci.h with 100% similarity]
include/asm-ppc/4xx_pcie.h [moved from cpu/ppc4xx/440spe_pcie.h with 53% similarity]
include/asm-ppc/cache.h
include/asm-ppc/global_data.h
include/asm-ppc/gpio.h
include/asm-ppc/immap_83xx.h
include/asm-ppc/immap_qe.h
include/asm-ppc/mmu.h
include/asm-ppc/ppc4xx-intvec.h [moved from cpu/ppc4xx/vecnum.h with 77% similarity]
include/asm-ppc/processor.h
include/asm-ppc/u-boot.h
include/bcd.h [new file with mode: 0644]
include/common.h
include/commproc.h
include/config_cmd_all.h
include/configs/ADCIOP.h
include/configs/AP1000.h
include/configs/AR405.h
include/configs/ASH405.h
include/configs/ATUM8548.h [new file with mode: 0644]
include/configs/CANBT.h
include/configs/CATcenter.h
include/configs/CMS700.h
include/configs/CPCI2DP.h
include/configs/CPCI405.h
include/configs/CPCI4052.h
include/configs/CPCI405AB.h
include/configs/CPCI405DT.h
include/configs/CPCI440.h [deleted file]
include/configs/CPCIISER4.h
include/configs/CRAYL1.h
include/configs/DASA_SIM.h
include/configs/DP405.h
include/configs/DU405.h
include/configs/ERIC.h
include/configs/EXBITGEN.h
include/configs/G2000.h
include/configs/GEN860T.h
include/configs/HH405.h
include/configs/HUB405.h
include/configs/JSE.h
include/configs/KAREF.h
include/configs/M54455EVB.h
include/configs/METROBOX.h
include/configs/MIP405.h
include/configs/ML2.h
include/configs/MPC8313ERDB.h
include/configs/MPC8323ERDB.h
include/configs/MPC832XEMDS.h
include/configs/MPC8349EMDS.h
include/configs/MPC8349ITX.h
include/configs/MPC8360EMDS.h
include/configs/MPC8360ERDK.h [new file with mode: 0644]
include/configs/MPC837XEMDS.h [new file with mode: 0644]
include/configs/MPC8540ADS.h
include/configs/MPC8540EVAL.h
include/configs/MPC8541CDS.h
include/configs/MPC8544DS.h
include/configs/MPC8548CDS.h
include/configs/MPC8555CDS.h
include/configs/MPC8560ADS.h
include/configs/MPC8568MDS.h
include/configs/MPC8610HPCD.h [new file with mode: 0644]
include/configs/MPC8641HPCN.h
include/configs/OCRTC.h
include/configs/ORSG.h
include/configs/PCI405.h
include/configs/PIP405.h
include/configs/PLU405.h
include/configs/PM854.h
include/configs/PM856.h
include/configs/PMC405.h
include/configs/PMC440.h [new file with mode: 0644]
include/configs/PPChameleonEVB.h
include/configs/SBC8540.h
include/configs/SX1.h
include/configs/TK885D.h [new file with mode: 0644]
include/configs/TQM5200.h
include/configs/TQM834x.h
include/configs/TQM85xx.h
include/configs/VOH405.h
include/configs/VOM405.h
include/configs/W7OLMC.h
include/configs/W7OLMG.h
include/configs/WUH405.h
include/configs/XPEDITE1K.h
include/configs/acadia.h
include/configs/ads5121.h
include/configs/alpr.h
include/configs/apollon.h [new file with mode: 0755]
include/configs/bamboo.h
include/configs/bubinga.h
include/configs/csb272.h
include/configs/csb472.h
include/configs/ebony.h
include/configs/hcu4.h
include/configs/hcu5.h
include/configs/inka4x0.h
include/configs/integratorcp.h
include/configs/katmai.h
include/configs/kilauea.h [new file with mode: 0644]
include/configs/korat.h [new file with mode: 0644]
include/configs/luan.h
include/configs/lwmon5.h
include/configs/makalu.h [new file with mode: 0644]
include/configs/mgcoge.h [new file with mode: 0644]
include/configs/mgsuvd.h [new file with mode: 0644]
include/configs/ml300.h
include/configs/munices.h [new file with mode: 0644]
include/configs/ocotea.h
include/configs/omap1510inn.h
include/configs/omap2420h4.h
include/configs/omap5912osk.h
include/configs/p3p440.h
include/configs/pcs440ep.h
include/configs/sbc405.h
include/configs/sbc8349.h
include/configs/sbc8548.h [new file with mode: 0644]
include/configs/sbc8560.h
include/configs/sc3.h
include/configs/sequoia.h
include/configs/stxgp3.h
include/configs/stxssa.h
include/configs/taihu.h
include/configs/taishan.h
include/configs/walnut.h
include/configs/yosemite.h
include/configs/yucca.h
include/configs/zeus.h
include/dtt.h
include/e500.h
include/fdt_support.h
include/libfdt.h
include/linux/mtd/nand.h
include/mb862xx.h [new file with mode: 0644]
include/mpc83xx.h
include/net.h
include/ppc405.h
include/ppc440.h
include/ppc4xx.h
include/ppc4xx_enet.h
include/serial.h
include/spartan2.h
include/spartan3.h
include/xilinx.h
lib_arm/board.c
lib_generic/vsprintf.c
lib_ppc/board.c
lib_ppc/cache.c
libfdt/fdt_rw.c
nand_spl/board/amcc/acadia/Makefile
nand_spl/board/amcc/acadia/u-boot.lds
nand_spl/board/amcc/bamboo/Makefile
nand_spl/board/amcc/bamboo/sdram.c
nand_spl/board/amcc/bamboo/u-boot.lds
nand_spl/board/amcc/kilauea/Makefile [new file with mode: 0644]
nand_spl/board/amcc/kilauea/config.mk [new file with mode: 0644]
nand_spl/board/amcc/kilauea/u-boot.lds [new file with mode: 0644]
nand_spl/board/amcc/sequoia/Makefile
nand_spl/board/amcc/sequoia/u-boot.lds
nand_spl/nand_boot.c
net/eth.c
net/net.c
post/cpu/ppc4xx/Makefile
post/cpu/ppc4xx/cache.c
post/cpu/ppc4xx/denali_ecc.c [moved from post/board/lwmon5/ecc.c with 77% similarity]
post/cpu/ppc4xx/ether.c
post/cpu/ppc4xx/uart.c
post/lib_ppc/cpu.c
post/tests.c
tools/Makefile
tools/easylogo/Makefile
tools/easylogo/easylogo.c
tools/env/Makefile
tools/env/README
tools/env/fw_env.c
tools/env/fw_env.h

index 67fed082c8301959b82230904569675f06e8c422..cda275ec73b289c3c230ff9195ecaae4c800b71a 100644 (file)
@@ -1,13 +1,41 @@
+#
+# NOTE! Don't add files that are generated in specific
+# subdirectories here. Add them in the ".gitignore" file
+# in that subdirectory instead.
+#
+# Normal rules
+#
+
+*.rej
 *.orig
 *.a
 *.o
-*.depend
-System.map
+
+#
+# Top-level generic files
+#
+
+/System.map
 /u-boot
 /u-boot.map
 /u-boot.bin
 /u-boot.srec
+
+#
+# Generated files
+#
+
+*.depend
 /LOG
 /errlog
 /reloc_off
 
+# stgit generated dirs
+patches-*
+
+# quilt's files
+patches
+series
+
+# cscope files
+cscope.*
index ef5c7ea98b5ddff1d742e176187f4ef856a3b25a..17e9c68d7aa2507e128528ed99fd32c2cd9a57ba 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
-commit 467bcee11fe26ad422f2de971aa70866079870f2
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Fri Dec 14 15:36:18 2007 +0100
+commit f6db945649e5e9d0c7efe33b507d243cdc86cf03
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 15:15:17 2008 +0100
 
-    cfi_flash: Add manufacturer-specific fixups
+    Fixed syntax error in function init_e300_core() of mpc83xx/start.S if
 
-    Run fixups based on the JEDEC manufacturer ID independent of the
-    command set ID.
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-    This changes current behaviour: Previously, geometry reversal for AMD
-    chips were done based on the command set ID, while they are now done
-    based on the JEDEC manufacturer and device ID.
+commit fa05664cd8c7ab1ecf062aa73b992b7b58bba49c
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 15:15:16 2008 +0100
 
-    Also add fixup for top-boot Atmel chips. A fixup is needed for
-    AT49BV6416(T) too, but since u-boot currently only reads the low byte
-    of the device ID, there's no way to tell it apart from AT49BV642D,
-    which should not have this fixup. Since AT49BV642D support is
-    necessary to get ATNGW100 board support into mainline, I've commented
-    out the fixup for now.
+    MUNICes: Set the right CFG_DEFAULT_MBAR value.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-commit 0ddf06ddf6b4bd057ad4c5f0dffea7870ba06a2a
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Fri Dec 14 15:36:17 2007 +0100
+commit 5fb2b2342ece8d786c6f7fdba1bc273febd3b3d2
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 15:15:15 2008 +0100
 
-    cfi_flash: Add cmdset-specific init functions
+    added the config File for the MUNICes board.
 
-    Move things like reading JEDEC IDs and fixing up geometry reversal
-    into separate functions. The geometry reversal fixup is now performed
-    by altering the qry structure directly, which makes the sector init
-    code slightly cleaner.
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+commit 6341d9d723b71b4c0bf86f979e4cb228c02fd09d
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 15:15:14 2008 +0100
 
-commit e23741f4a6d8047520ef0d4971762749b3587d32
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Fri Dec 14 15:36:16 2007 +0100
+    added basic support for the MUNICes board.
 
-    cfi_flash: Read whole QRY structure in one go
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-    Read out the whole CFI Standard Query structure after successful cfi
-    identification. This allows subsequent code to access this information
-    directly without having to go through flash_read_uchar() and friends.
+commit 3bb77fb09a1caabf5a292cc5b486a78b977fbe19
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Jan 12 00:39:37 2008 +0100
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Update CHANGELOG and MAINTAINERS files.
 
-commit df9c25ea04b38a0e05d4f8c73c5cc144cdafa7db
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Mon Dec 17 11:02:44 2007 +0100
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    AVR32: Fix logic inversion in disable_interrupts()
+commit 5ba7390c3cb579172be66888a371707b47b5be4e
+Author: Anatolij Gustschin <agust@denx.de>
+Date:  Fri Jan 11 02:15:02 2008 +0100
 
-    disable_interrupts() should return nonzero if interrupts were
-    _enabled_ before, not disabled.
+    Fix compilation problem in common/cmd_bmp.c
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    common/cmd_bmp.c fails to compile if CONFIG_VIDEO_BMP_GZIP
+    isn't defined. This patch fix this.
 
-commit acac475212cbedb17b321a363a1c878e2b47b37f
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Fri Dec 14 16:51:22 2007 +0100
+    Signed-off-by: Anatolij Gustschin <agust@denx.de>
 
-    AVR32: Enable interrupts at bootup
+commit 5aa437baae5fe629abeab99bef793a2a1fc71b58
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 01:12:09 2008 +0100
 
-    The timer code depends on the timer interrupt to keep track of the
-    upper 32 bits of the cycle counter. This obviously doesn't work when
-    interrupts are disabled the whole time.
+    Fix defaultconfig for the mgcoge board.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-commit 9570bcd87f4db255514f43b6701746c412f8fef0
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Nov 15 10:03:45 2007 +0100
+commit ac9db066b26935f31bff15c98168b19faeb603f3
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 01:12:08 2008 +0100
 
-    AVR32: Fix wrong pin setup for USART3
+    Added support for the mgcoge board from keymile.
 
-    As reported by Gerhard Berghofer:
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-    in "gpio_enable_usart3" the correct pins for USART 3 are PB17 and PB18
-    instead of PB18 and PB19.
+commit b423d055cc2e13c4ef1f0389c3fa2988d0eed818
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 01:12:07 2008 +0100
 
-    which is obviously correct. There's currently no code that uses
-    USART3, but custom boards may run into problems.
+    Enable SMC microcode relocation patch for SMC1.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-commit 09ea0de03dcc3ee7af045b0b572227bda2c1c918
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Nov 1 12:44:20 2007 +0100
+commit 381e4e639720d8d2efb8066c7c48ec9588cb28c7
+Author: Heiko Schocher <hs@denx.de>
+Date:  Fri Jan 11 01:12:06 2008 +0100
 
-    README: Remove ATSTK1000 daughterboard list
+    Added support for the mgsuvd board from keymile.
 
-    As noted by Kim Phillips, these lists tend to become out of date.
+    Signed-off-by: Heiko Schocher <hs@denx.de>
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+commit bf05293973b348f6946c9df92cd3c65ece42d0be
+Author: James Yang <james.yang@freescale.com>
+Date:  Thu Jan 10 16:02:07 2008 -0600
 
-commit c81cbbad21cb0ae983e2e796211202234cdc8be2
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Tue Oct 30 14:56:36 2007 +0100
+    Fix 64-bit vsprintf.
 
-    Add ATSTK100[234] to MAINTAINERS
+    There were some size and unsigned problems.
+    Also add support for "ll" size modifier in format string like glibc
 
-    Add all the ATSTK1000 daughterboards to MAINTAINERS along with their
-    "mother". Also update the entry for ATSTK1000 to be not only about the
-    AP7000 CPU; it's intended to handle all CPUs in the AT32AP family.
+    Signed-off-by: James Yang <James.Yang@freescale.com>
+    Acked-by: Jon Loeliger <jdl@freescale.com>
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+commit 92fa37eac530860643afa26ae347af3d23d67309
+Author: Larry Johnson <lrj@acm.org>
+Date:  Wed Jan 9 12:42:35 2008 -0500
 
-commit 64ff2357b1727213803591813dbc779c924bf772
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Mon Oct 29 13:02:54 2007 +0100
+    Remove superfluous preprocessor conditionals from LM73 driver
 
-    AVR32: Add support for the ATSTK1004 board
+    (1) Remove unused symbol "CFG_EEPROM_PAGE_WRITE_ENABLE".
 
-    ATSTK1004 is a daughterboard for ATSTK1000 with the AT32AP7002 CPU,
-    which is a derivative of AT32AP7000.
+    (2) Use conditional Makefile.o.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Signed-off-by: Larry Johnson <lrj@acm.org>
 
-commit 667568db157f374b85abd7e03596ddd1f0b25681
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Mon Oct 29 13:02:54 2007 +0100
+commit efc6f447c1b940d1650c4b854c5598a595ddc3da
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Thu Jan 10 17:59:07 2008 +0100
 
-    AVR32: Add support for the ATSTK1003 board
+    Add support for the TK885D baseboard from TELE-DATA
 
-    ATSTK1003 is a daughterboard for ATSTK1000 with the AT32AP7001 CPU,
-    which is a derivative of AT32AP7000.
+    The TK885D board uses a TQM885D module from TQ, this port adds an
+    own configuration file and adds a last_stage_init() method to
+    configure the two PHYs, depending on the phy_auto_nego environment
+    variable.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
 
-commit 5fee84a794a51ec830548cda485a770efb018b92
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Mon Oct 29 13:23:33 2007 +0100
+commit 0ec595243dc99edcd248bbcfbfd5a1dc860bde89
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Jan 10 02:22:05 2008 -0600
 
-    AVR32: Make some AT32AP700x peripherals optional
+    Fix compiler warning
 
-    Add a chip-features file providing definitions of the form
+    main.c: In function 'readline_into_buffer':
+    main.c:927: warning: unused variable 'p_buf'
 
-    AT32AP700x_CHIP_HAS_<peripheral>
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
 
-    to indicate the availability of the given peripheral on the currently
-    selected chip.
+commit bed53753dd1d7e6bcbea4339be0fb7760214cc35
+Author: Anatolij Gustschin <agust@denx.de>
+Date:  Fri Jan 11 14:30:01 2008 +0100
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Add Fujitsu CoralP/Lime video driver
 
-commit 36f28f8a9605ee5dcfa330482cfc62171261af97
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Mon Oct 29 13:09:56 2007 +0100
+    Signed-off-by: Anatolij Gustschin <agust@denx.de>
+    Signed-off-by: Rodolfo Giometti <giometti@linux.it>
 
-    AVR32: Rename at32ap7000 -> at32ap700x
+commit 20c450ef61ef2eb1c96f9b59ba0eb8d849bba058
+Author: Anatolij Gustschin <agust@denx.de>
+Date:  Fri Jan 11 02:39:47 2008 +0100
 
-    The SoC-specific code for all the AT32AP700x CPUs is practically
-    identical; the only difference is that some chips have less features
-    than others. By doing this rename, we can add support for the AP7000
-    derivatives simply by making some features conditional.
+    Fix video console newline and carriage return handling
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Lines of the lenght CONSOLE_COLS or greater than CONSOLE_COLS
+    are not displayed correctly. This is an attempt to fix
+    this issue. Also add carriage return handling.
 
-commit 4d5fa99c73f354e7cf985efcf417ea55ca2f6a5e
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Fri Jun 29 18:22:34 2007 +0200
+    Signed-off-by: Anatolij Gustschin <agust@denx.de>
+    Signed-off-by: Rodolfo Giometti <giometti@linux.it>
 
-    atmel_mci: Show SR when block read fails
+commit d5a163d6baa04f5a8edcc10ebc6fad08657d3093
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Jan 11 15:53:58 2008 +0100
 
-    Show controller status as well as card status when an error occurs
-    during block read.
+    ppc4xx: Fix sdram init on Sequoia boards
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Clear possible errors in MCSR resulting from data-eye-search.
+    If not done, then we could get an interrupt later on when
+    exceptions are enabled.
 
-commit 12d30aa79779c2aa7a998bbae4c075f822a53004
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:34 2007 +0100
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    cfi_flash: Use map_physmem() and unmap_physmem()
+commit d610a60730b7464f6f659db49d264d89a7c71061
+Author: Anatolij Gustschin <agust@denx.de>
+Date:  Fri Jan 11 15:31:09 2008 +0100
 
-    Use map_physmem() and unmap_physmem() to convert from physical to
-    virtual addresses. This gives the arch a chance to provide an uncached
-    mapping for flash accesses.
+    ppc4xx: Rework Lime support for lwmon5
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Rework Lime support for lwmon5 using new video driver
 
-commit 4d7d6936eb29af7cca330937808312aa5f61454d
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:33 2007 +0100
+    Signed-off-by: Anatolij Gustschin <agust@denx.de>
 
-    Introduce map_physmem() and unmap_physmem()
+commit ff41ffc93c1592e77a44bdbebd5d781739f3aae0
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Jan 11 14:55:16 2008 +0100
 
-    map_physmem() returns a virtual address which can be used to access a
-    given physical address without involving the cache. unmap_physmem()
-    should be called when the virtual address returned by map_physmem() is
-    no longer needed.
+    ppc4xx: Update PMC440 config file
 
-    This patch adds a stub implementation which simply returns the
-    physical address cast to a uchar * for all architectures except AVR32,
-    which converts the physical address to an uncached virtual mapping.
-    unmap_physmem() is a no-op on all architectures, but if any
-    architecture needs to do such mappings through the TLB, this is the
-    hook where those TLB entries can be invalidated.
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+commit e3edcb36f14f0aabb6f50e96014d6877f73d64ea
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Jan 11 14:55:08 2008 +0100
 
-commit cdbaefb5f5f03e54455d0439dcf6dbd97ead1f9d
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:32 2007 +0100
+    ppx4xx: Fix sdram init on PMC440 boards
 
-    cfi_flash: Introduce read and write accessors
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Introduce flash_read{8,16,32,64) and flash_write{8,16,32,64} and use
-    them to access the flash memory. This makes it clearer when the flash
-    is actually being accessed; merely dereferencing a volatile pointer
-    looks just like any other kind of access.
+commit 061aad4d320dddce26247699dcf2875ee2ea1366
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:09:33 2008 +0800
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    mpc83xx: Fix the bug of 266MHz data rate DDR
 
-commit 812711ce6b3a386125dcf0d6a59588e461abbb87
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:31 2007 +0100
+    The DDR doesn't work on the 266MHz data rate,
+    the patch fix the bug.
 
-    Implement __raw_{read,write}[bwl] on all architectures
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    This adds implementations of __raw_read[bwl] and __raw_write[bwl] to
-    m68k, ppc, nios and nios2. The m68k and ppc implementations were taken
-    from Linux.
+commit ded08317ad9e340b887bf2eb46e9565a0f610a93
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:08:26 2008 +0800
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    mpc83xx: Make the code more readable
 
-commit be60a9021c82fc5aecd5b2b1fc96f70a9c81bbcd
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Sat Oct 6 18:55:36 2007 +0200
+    Format the code, make it more readable
 
-    cfi_flash: Reorder functions and eliminate extra prototypes
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Reorder the functions in cfi_flash.c so that each function only uses
-    functions that have been defined before it. This allows the static
-    prototype declarations near the top to be eliminated and might allow
-    gcc to do a better job inlining functions.
+commit 7e74d63d1a211fbc34ec424e2dc6726601f323d0
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:07:23 2008 +0800
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    mpc83xx: Reduce the latency of DDR
 
-commit 3055793bcbdf24b1f8117f606ffb766d32eb766f
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:29 2007 +0100
+    Reduce the AL from 2 to 1 clock to improve the performance.
 
-    cfi_flash: Make some needlessly global functions static
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Make functions not declared in any header file static.
+commit 6f3931a2bed5412c20d5e5536c865fbd657f7d28
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:06:05 2008 +0800
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    mpc83xx: Fix the wrong definition of MPC8315E
 
-commit 7e5b9b471518c5652febc68ba62b432193d6abf4
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Thu Dec 13 12:56:28 2007 +0100
+    According to the latest user manual of MPC8315E,
+    1) The SVCOD of HRCWL is different than 837x
+    2) The SCCR has changes
 
-    cfi_flash: Break long lines
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    This patch tries to keep all lines in the cfi_flash driver below 80
-    columns. There are a few lines left which don't fit this requirement
-    because I couldn't find any trivial way to break them (i.e. it would
-    take some restructuring, which I intend to do in a later patch.)
+commit ec2638ea08a537a1bd409db873aaaa33a053ebae
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:05:00 2008 +0800
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    mpc83xx: Fix the typo in mpc83xx.h
 
-commit 42026c9cb3a76849b41e6e24abfb7b56807a5c1a
-Author: Bartlomiej Sieka <tur@semihalf.com>
-Date:  Tue Dec 11 13:59:57 2007 +0100
+    The SPCR about TSEC priority is wrong.
 
-    CFI: synchronize command offsets with Linux CFI driver
+    Signed-off-by: Michael Barkowski <Michael.Barkowski@freescale.com>
+    Signed-off-by: Joe D'Abbraccio <Joe.D'abbraccio@freescale.com>
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Fixes non-working CFI Flash on the Inka4x0 board.
+commit c86ef2cd9ef81935049231fa89f36c7b793f2d4b
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:04:13 2008 +0800
 
-    Signed-off-by: Bartlomiej Sieka <tur@semihalf.com>
+    mpc83xx: Fix the typo in global data struct
 
-commit 8ff3de61fc5f9b3b21647bce081a3b7f710f0d4d
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Fri Dec 7 12:17:34 2007 -0600
+    Fix the typo in global_data.h
 
-    Handle MPC85xx PCIe reset errata (PCI-Ex 38)
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    On the MPC85xx boards that have PCIe enable the PCIe errata fix.
-    (MPC8544DS, MPC8548CDS, MPC8568MDS).
+commit 2c5b48fc205c3e2752910da8f39209ed075929e5
+Author: Dave Liu <r63238@freescale.com>
+Date:  Thu Jan 10 23:03:03 2008 +0800
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    mpc83xx: Remove cache config from config.h
 
-commit 82ac8c97145a4c3bf8b3dbfad00fa96e920f9b9c
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Fri Dec 7 12:04:30 2007 -0600
+    clean up the cache config from configs.h of board
 
-    Update Freescale MPC85xx ADS/CDS/MDS board config
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    * Enabled CONFIG_CMD_ELF
+commit fab6f556bbbbd1bb35a5433161f7f173c18df559
+Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date:  Wed Jan 9 20:57:47 2008 +0300
+
+    mpc83xx: add support for the MPC8360E-RDK
+
+    This is MPC8360E based board with:
+    - 256MB fixed SDRAM;
+    - 8MB Intel Strata NOR flash;
+    - StMICRO 64MiB NAND flash;
+    - two 10/100/1000 ethernet ports connected via Broadcom
+      BCM5481 PHYs;
+    - two 10/100 ethernet ports connected via National
+      DP83848 PHYs;
+    - one PCI and one miniPCI slots;
+    - four serial ports (two NS16550-compatible, two UCCs);
+    - four USB ports working through MPC8360E "FHCI" USB controller;
+    - Fujitsu MB86277 graphics controller;
+    - Analog to Digital Converter/Touchscreen controller, AD7843
+      connected to SPI.
+
+    Features not supported in this patch are:
+    - StMICRO 64MiB NAND flash (patch sent);
+    - MINT framebuffer initialization (patch is pending);
+    - Fetching production information from the EEPROM via I2C;
+    - FHCI USB;
+    - Two slow UCCs used as RS-485 UARTs.
+
+    Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit b3d2cde7a3aa1e83b7968cdff929e52c8cc617bb
+Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date:  Wed Jan 9 20:57:40 2008 +0300
 
-commit d435793229ce29a42797c1edc39f5b34f987f91a
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Fri Dec 7 04:59:26 2007 -0600
+    mpc83xx: add "fsl, qe" compatible fixups
 
-    Handle Asynchronous DDR clock on 85xx
+    New device trees will use "fsl,qe" compatible properties.
 
-    The MPC8572 introduces the concept of an asynchronous DDR clock with
-    regards to the platform clock.
+    Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Introduce get_ddr_freq() to report the DDR freq regardless of sync/async
-    mode.
+commit 977b57583a7c34010e566a09a679ec3c1836f996
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Wed Jan 9 15:24:06 2008 -0600
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    mpc83xx: add missing CONFIG_HAS_ETH0 defines
 
-commit 22abb2d2eaf7b795a6923c6273ec9cb53fda9a10
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 10:34:28 2007 -0600
+    the new libfdt code only updates eth0 if CONFIG_HAS_ETH0
+    is defined; add the define to the missing board configs.
 
-    Update Freescale MPC85xx ADS/CDS/MDS board config
+    Thanks to Emilian Medve for finding this.
 
-    * Removed some misc environment setup
-    * Enabled CONFIG_CMDLINE_EDITING
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit b830b7f1635984ba607219fcbd78597c28eeb529
+Author: Becky Bruce <bgill@freescale.com>
+Date:  Thu Jan 10 14:00:28 2008 -0600
 
-commit 415a613babb84d5e5d5b42e8e553868c71fc3a64
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 10:47:44 2007 -0600
+    86xx: Support 2GB DIMMs
 
-    Move the MPC8541/MPC8555/MPC8548 CDS board under board/freescale.
+    Configure the number of bits used to address the banks inside the SDRAM
+    device.  The default register value of 0 means 2 bits to address 4 banks.
+    Higher capacity devices like a 2GB DIMM require 3 bits to address 8 banks.
 
-    Minor path corrections needed to ensure buildability.
+    Signed-off-by: Becky Bruce <bgill@freescale.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 4d332dbeb08f5863d1ea69d91a00c5499d3a87ed
+Author: Niklaus Giger <niklausgiger@gmx.ch>
+Date:  Thu Jan 10 18:50:33 2008 +0100
 
-commit c2d943ffbfd3359b3b45d177b437379d2cb86fbf
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 10:16:18 2007 -0600
+    ppc4xx: Make Sequoia boot vxWorks
 
-    Move the MPC8540 ADS board under board/freescale.
+    vxWorks expects in
+    TLB 0 a entry for the Machine Check interrupt
+    TLB 1 a entry for the RAM
+    TLB 2 a entry for the EBC
+    TLB 3 a entry for the boot flash
 
-    Minor path corrections needed to ensure buildability.
+    After changing the baudrate to 9600 I had no problems to boot the
+    vxWorks image as distributed by WindRiver (Revision 2.0/1 from
+    June 18, 2007)
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Niklaus Giger <niklaus.giger@netstal.com>
 
-commit 870ceac5b3a3486c109396e005af81ae762b5710
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 10:14:50 2007 -0600
+commit 6d8184b00c0d1d7090e4a2f514e310d98a394f8d
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Wed Jan 9 23:10:27 2008 -0500
 
-    Move the MPC8560 ADS board under board/freescale.
+    ppc4xx: Fix dflush() to restore DVLIM register
 
-    Minor path corrections needed to ensure buildability.
+    Signed-off-by: Larry Johnson <lrj@acm.org>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 252f60b068d1f94190b5bcfda169db582387e15e
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Thu Jan 10 03:52:44 2008 -0500
 
-commit acbca876fb3fec25cd9c55b0efc81ff618ff5262
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 10:13:47 2007 -0600
+    Nios2: remove common/cmd_bdinfo.c unused variable.
 
-    Move the MPC8568 MDS board under board/freescale.
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Scott McNutt <smcnutt@psyent.com>
 
-    Minor path corrections needed to ensure buildability.
+commit 422b1a01602b6e2fbf8444a1192c7ba31461fd4c
+Author: Ben Warren <biggerbadderben@gmail.com>
+Date:  Wed Jan 9 18:15:53 2008 -0500
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Fix Ethernet init() return codes
 
-commit a853d56c59b33415304531443633808736acfc6e
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 02:18:59 2007 -0600
+    Change return values of init() functions in all Ethernet drivers to conform
+    to the following:
 
-    Use standard LAWAR_TRGT_IF_* defines for LAW setup on 85xx
+       >=0: Success
+       <0:  Failure
 
-    We already had defines for LAWAR_TRGT_IF_* that we should use
-    rather than creating new ones.  Also, added some missing defines for
-    PCIE targets.
+    All drivers going forward should return 0 on success.  Current drivers that
+    return 1 on success were left as-is to minimize changes.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
+    Acked-by: Stefan Roese <sr@denx.de>
+    Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Acked-by: Kim Phillips <kim.phillips@freescale.com>
+    Acked-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    Acked-By: Timur Tabi <timur@freescale.com>
 
-commit 04db400892da37b76a585e332a0c137954ad2015
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 02:10:09 2007 -0600
+commit d3a6532cbe263d992f49e86ac95bede28e96f9c8
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Thu Jan 10 00:55:14 2008 +0100
 
-    Stop using immap_t on 85xx
+    Coding Style cleanup; update CHANGELOG
 
-    In the future the offsets to various blocks may not be in same location.
-    Move to using CFG_MPC85xx_*_ADDR as the base of the registers
-    instead of getting it via &immap.
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 17a41e4492121ccf9fa2c10c2cb1a6d1c18d74f7
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Wed Jan 9 16:56:54 2008 -0600
 
-commit 2714223f8e04ab3e4133ff65872eef366d90bfea
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 01:23:09 2007 -0600
+    Add QE brg freq and correct qe bus freq fdt update code
 
-    Remove CONFIG_OF_FLAT_TREE related code from mpc85xx since we now use libfdt
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 890dfef06c2d169a3356359596890754dfb8ee1c
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Wed Jan 9 16:34:51 2008 -0600
 
-commit c480861bf000156e6a3e932c258db59ff2212dd3
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 01:06:19 2007 -0600
+    Remove cache config from ATUM8548 and sbc8548 configs
 
-    Update MPC8568 MDS to use libfdt
+    These boards weren't updated by Kumar's config patch because they
+    weren't in the tree, yet.
 
-    Updated the MPC8568 MDS config to use libfdt and assume use of aliases for
-    ethernet, pci, and serial for the various fixups that are done.
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit b8ec2385038c094b07ec5b49336289a46b6e9cc6
+Author: Timur Tabi <timur@freescale.com>
+Date:  Mon Jan 7 13:31:19 2008 -0600
 
-commit 1563f56e0c68f6920f956382d6d13bee3f01c0f7
-Author: Haiying Wang <Haiying.Wang@freescale.com>
-Date:  Wed Nov 14 15:52:06 2007 -0500
+    85xx: add ability to upload QE firmware
 
-    Add PCI Express support on MPC8568MDS
+    Define the layout of a binary blob that contains a QE firmware and instructions
+    on how to upload it.  Add function qe_upload_firmware() to parse the blob and
+    perform the actual upload. Add command-line command "qe fw" to take a firmware
+    blob in memory and upload it.  Update ft_cpu_setup() on 85xx to create the
+    'firmware' device tree node if U-Boot has uploaded a firmware.  Fully define
+    'struct rsp' in immap_qe.h to include the actual RISC Special Registers.
 
-    Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Timur Tabi <timur@freescale.com>
 
-commit b90d25497625b90ffa3f2911a0895ca237556ff5
+commit b009f3eca99bb7b9e6ba6639a8909a138dd5e9fe
 Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 00:11:44 2007 -0600
+Date:  Tue Jan 8 01:22:21 2008 -0600
 
-    Update MPC85xx CDS to use libfdt
+    85xx: Remove cache config from configs.h
 
-    Updated the MPC85xx CDS config to use libfdt and assume use of aliases for
-    ethernet, pci, and serial for the various fixups that are done.
+    Either use the standard defines in asm/cache.h or grab the information
+    at runtime from the L1CFG SPR.
+
+    Also, minor cleanup in cache.h to make the code a bit more readable.
 
     Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
 
-commit 0fd5ec66b10521a057ad73e69ab5f0f9eafba255
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 28 22:54:27 2007 -0600
+commit b964e9368f45372aaf1da0c13fe56f6d81ae8e96
+Author: robert lazarski <robertlazarski@gmail.com>
+Date:  Fri Dec 21 10:39:27 2007 -0500
 
-    Update MPC8540 ADS to use libfdt
+    mpc85xx: Add support for ATUM8548 (updated)
 
-    Updated the MPC8540 ADS config to use libfdt and assume use of aliases for
-    ethernet, pci, and serial for the various fixups that are done.
+    Add support for Instituto Atlantico's ATUM8548 board
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: robert lazarski <robertlazarski@gmail.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
 
-commit 5ce715802f6c50dc78b3405b92f184b1e3710519
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 28 22:40:31 2007 -0600
+commit 7bd6104b71de9bca80ac8e0936003443bb42f2fc
+Author: robert lazarski <robertlazarski@gmail.com>
+Date:  Fri Dec 21 10:36:37 2007 -0500
 
-    Update MPC8560 ADS to use libfdt
+    mpc85xx: Add support for ATUM8548 (updated)
 
-    Updated the MPC8560 ADS config to use libfdt and assume use of aliases for
-    ethernet, pci, and serial for the various fixups that are done.
+    Add support for Instituto Atlantico's ATUM8548 board
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: robert lazarski <robertlazarski@gmail.com>
 
-commit aafeefbdb8b029f5ca2a195598d0a501a606eea9
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 28 00:36:33 2007 -0600
+commit 9e3ed392d2c8965e24c942b58796c31c644c2f70
+Author: Joe Hamman <joe.hamman@embeddedspecialties.com>
+Date:  Thu Dec 13 06:45:14 2007 -0600
 
-    Stop using immap_t for cpm offset on 85xx
+    mpc85xx: Add support for SBC8548 (updated)
 
-    In the future the offsets to various blocks may not be in same location.
-    Move to using CFG_MPC85xx_CPM_ADDR as the base of the CPM registers
-    instead of getting it via &immap->im_cpm.
+    Add support for Wind River's SBC8548 reference board.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off by: Joe Hamman <joe.hamman@embeddedspecialties.com>
 
-commit f59b55a5b8fcadaa99781ba48e7a38e956afa527
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Tue Nov 27 23:25:02 2007 -0600
+commit 11c45ebd46d6517b51b7a92dd52a618b2f4e5586
+Author: Joe Hamman <joe.hamman@embeddedspecialties.com>
+Date:  Thu Dec 13 06:45:08 2007 -0600
 
-    Stop using immap_t for guts offset on 85xx
+    mpc85xx: Add support for SBC8548 (updated)
 
-    In the future the offsets to various blocks may not be in same location.
-    Move to using CFG_MPC85xx_GUTS_ADDR as the base of the guts registers
-    instead of getting it via &immap->im_gur.
+    Add support for Wind River's SBC8548 reference board.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off by: Joe Hamman <joe.hamman@embeddedspecialties.com>
+    Signed-off by: Andy Fleming <afleming@freescale.com>
 
-commit 50c03c8cf494d91cdec39670d95337c743e16ec9
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Tue Nov 27 22:42:34 2007 -0600
+commit 64d4bcb087c2ece1c4d0de8efe85e0075e5b1594
+Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date:  Mon Oct 22 19:58:19 2007 +0400
 
-    Update MPC8544 DS config
+    MPC8568E-MDS: set up QE pario for UART1
 
-    * Removed HAS_ETH2/HAS_ETH3 - MPC8544 only has TSEC1/2
-    * Removed some misc environment setup
-    * Moved to using fdtfile & fdtaddr as fdt env var names
-    * Enabled CONFIG_CMDLINE_EDITING
+    To use UART1 on the MPC8568E-MDS, QE pario pins PC[0:3] should
+    be set up appropriately.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
 
-commit addce57e2e4c49e77ffb2020a84690713bb18b47
+commit ad162249cb371e9e38971676f09be791e5f3cf4a
+Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date:  Mon Oct 22 18:12:46 2007 +0400
+
+    MPC8568E-MDS: reset UCCs to use them reliably
+
+    In order to use GETH1 and GETH2 on the MPC8568E-MDS, we should reset
+    UCCs.
+
+    p.s Similar code exists in the Linux kernel board file (for capability
+    reasons with older U-Boots), but should be removed some day.
+
+    Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
+
+commit 2146cf56821c3364786ca94a7306008c5824b238
 Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Mon Nov 26 17:12:24 2007 -0600
+Date:  Wed Dec 19 01:18:15 2007 -0600
 
-    Update MPC8544DS to use libfdt
+    Reworked FSL Book-E TLB macros to be more readable
 
-    Updated the MPC8544DS config to use libfdt and assume use of aliases for
-    ethernet, pci, and serial for the various fixups that are done.
+    The old macros made it difficult to know what WIMGE and perm bits
+    were set for a TLB entry.  Actually use the bit masks for these items
+    since they are only a single bit.
+
+    Also moved the macros into mmu.h out of e500.h since they aren't specific
+    to e500.
 
     Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
 
-commit f852ce72f100cabd1f11c21c085a0ad8eca9fb65
+commit 1d47273d46925929f8f2c1913cd96d7257aade88
 Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Nov 29 00:15:30 2007 -0600
+Date:  Tue Dec 18 23:21:51 2007 -0600
 
-    Add libfdt based ft_cpu_setup for mpc85xx
+    Use FSL Book-E MMU macros from Linux Kernel
+
+    Grab the FSL Book-E MAS register macros from Linux.  Also added
+    defines for page sizes up to 4TB and removed SHAREN since it doesnt
+    really exist.
 
     Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
 
-commit 9692c2734a47f23b44a0f68042a3e2ca8d1bfb39
-Author: Stefan Roese <sr@denx.de>
-Date:  Sat Dec 8 08:25:09 2007 +0100
+commit 02df4a270f817ef6ec39047a01b55fecdc5f3b37
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Wed Jan 9 13:51:32 2008 -0600
 
-    CFI: Coding style cleanup
+    Fix my own merge stupidity
 
-    Signed-off-by: Stefan Roese <sr@denx.de>
+    Way back in August I merged Heiko's patch:
+    566a494f592: [PCS440EP] upgrade the PCS440EP board
 
-commit 81b20ccc2d795ae9a1199db5a50ad9c28d1e4d22
-Author: Michael Schwingen <michael@schwingen.org>
-Date:  Fri Dec 7 23:35:02 2007 +0100
+    with Jon's CONFIG_COMMANDS patches.
 
-    CFI: support JEDEC flash roms in CFI-flash framework
+    This was done in commit: 6bf6f114dcdd97ec3f80c2761ed40e31229d6b78
 
-    The following patch adds support for non-CFI flash ROMS, by hooking into the
-    CFI flash code and using most of its code, as recently discussed here in the
-    thread "Mixing CFI and non-CFI flashs".
+    However, in the process, I left out some of Heiko's good changes.
 
-    Signed-off-by: Michael Schwingen <michael@schwingen.org>
-    Signed-off-by: Stefan Roese <sr@denx.de>
+    Now Heiko's and Jon's patches are properly merged in fat_register_device()
 
-commit c01b17dd856fa120b2970f50d9598546a4927ec3
-Author: Gerald Van Baren <vanbaren@cideas.com>
-Date:  Wed Nov 28 21:24:50 2007 -0500
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
 
-    Conditionally compile fdt_fixup_ethernet()
+commit 6636b62a6efc7f14e6e788788631ae7a7fca4537
+Author: James Yang <James.Yang@freescale.com>
+Date:  Wed Jan 9 11:17:49 2008 -0600
 
-    Fix compiler warnings: On boards that don't have ethernets defined,
-    don't compile fdt_fixup_ethernet().
+    Expose parse_line() globally.
 
-commit 246d4ae6bc282bc1841224e1c5fc49dc925e0bf7
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Tue Nov 27 21:59:46 2007 -0600
+    Add new function readline_into_buffer() that allows the
+    output of readline to be put into a pointer to char buffer.
 
-    Convert boards that set memory node to use fdt_fixup_memory()
+    This refactoring allows other functions besides the
+    main command loop to also use the same input mechanism.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: James Yang <James.Yang@freescale.com>
+    Acked-by: Jon Loeliger <jdl@freescale.com>
 
-commit 151c8b09b35eebe8fd9139cb6c1d91c27b22f058
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Mon Nov 26 17:06:15 2007 -0600
+commit 7ca90513486abd4ae50bd1b7403f47cc58c5ad25
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Wed Jan 9 01:15:25 2008 +0100
 
-    Added fdt_fixup_stdout that uses aliases to set linux,stdout-path
+    trivial: fix consequences of a bad merge
 
-    We use a combination of the serialN alias and CONFIG_CONS_INDEX to
-    determine which serial alias we should set linux,stdout-path to.
+    Fix what looks like a merge artifact.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
 
-commit 3c9272813fad84c691d0e4989bb18a3ffebdebfc
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Mon Nov 26 14:57:45 2007 -0600
+commit 4785a694c0045996ccf0ac5b8edf531efc1b730e
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Thu Jan 3 10:51:15 2008 +0800
 
-    Add common memory fixup function
+    Add Ctrl combo key support to usb keyboard driver.
 
-    Add the function fdt_fixup_memory() to fixup the /memory node of the fdt
+    Ctrl combo key support is added, which is very useful to input Ctrl-C
+    for interrupt current job.
+    Also add usb_event_poll() calling to usb_kbd_testc(), which can get
+    key input when tstc() is called.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
 
-commit 9c9109e7fcf7ac2ca19c95b8ac54b8d1c773b157
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Mon Nov 26 11:19:12 2007 -0600
+commit 10c7382bc5d5e64c47f94ac2ca78cc574442e82d
+Author: Marcel Ziswiler <marcel@ziswiler.com>
+Date:  Sun Dec 30 03:30:56 2007 +0100
 
-    Conditionally compile fdt_support.c
+    fix various comments
 
-    Modify common/Makefile to conditionally compile fdt_support.c based
-    on CONFIG_OF_LIBFDT.
+    Signed-off-by: Marcel Ziswiler <marcel@ziswiler.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 7817cb2083d982923752fe0f12b67c0e7c09a027
+Author: Marcel Ziswiler <marcel@ziswiler.com>
+Date:  Sun Dec 30 03:30:46 2007 +0100
 
-commit d88e7ba0980773479e1a64badb293116071b7ef0
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Mon Nov 26 10:41:40 2007 -0600
+    fix comments with new drivers organization
 
-    Fix build breakage due to libfdt import
+    Signed-off-by: Marcel Ziswiler <marcel@ziswiler.com>
 
-    The IDS8247 got lost in the update and need an API update
-    do to rename of functions in libfdt.
+commit a9b410dc7d2a4721c408b13abfc037988150f145
+Author: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+Date:  Fri Dec 28 12:50:59 2007 +0900
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Remove the obsolete terse version of do_mii()
 
-commit 28f384b171bbf1fb2dafb1046e6d259a6b2f8714
-Author: Gerald Van Baren <vanbaren@cideas.com>
-Date:  Fri Nov 23 19:43:20 2007 -0500
+    We now have more useful version of do_mii() and everybody use it.
+    Gerald Van Baren says:
 
-    Add spaces around the = in the fdt print format.
+    > When I originally wrote the mii command 6(!) years ago, I wrote a
+    > verbose version that printed human readable decomposition of the flags,
+    > etc., and a terse one that didn't print as much stuff and thus had a
+    > smaller memory footprint.
+    >
+    > It sounds like the terse version has withered and died, apparently
+    > people are only using the verbose version (which is very understandable,
+    > I do myself).
 
+    Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
     Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
 
-commit 29592ecba3b932b9b152bcec6c0c0806412db4a3
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Fri Dec 7 01:25:38 2007 +0900
+commit 01c687aa6e065bd4faf80f723361e798941dd6b0
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:  Thu Dec 27 13:42:56 2007 -0500
 
-    sh: Moved driver of the SuperH dependence
+    Do not reference sha1.c when building mkimage.
 
-    The composition of the directory in the drivers/ changed.
-    I moved SuperH serial driver and marubun PCMCIA driver.
+    remove sha1.o from mkimage linking since it isn't actually used.
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+    Signed-Off-By: Mike Frysinger <vapier@gentoo.org>
 
-commit 41be969f4957115ed7b1fe8b890bfaee99d7a7a2
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Thu Dec 6 10:21:19 2007 +0100
+commit b9173af73e524d37c812f210173cf83385c5171a
+Author: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+Date:  Thu Dec 27 15:39:54 2007 +0900
 
-    Release v1.3.1
+    common/cmd_mii.c: Add sanity argc check
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    If type mii command without arguments, we suffer from uninitialized argv[]
+    entries; for example we MIPS get stuck by TLB error.
 
-commit cf5933ba1e97a1cd8f5f24070e820f21d976eaeb
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Thu Dec 6 10:21:03 2007 +0100
+    Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
 
-    ADS5121 Board: fix compile problem.
+commit 500856eb1707ed17d9204baa61dd59948d3b2899
+Author: Rafal Jaworowski <raj@semihalf.com>
+Date:  Wed Jan 9 19:39:36 2008 +0100
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    API for external applications.
 
-commit 8d4f040a3c15036a6ea25a9c39e7d89fefa8440d
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Mon Dec 3 00:15:28 2007 +0100
+    This is an API for external (standalone) applications running on top of
+    U-Boot, and is meant to be more extensible and robust than the existing
+    jumptable mechanism. It is similar to UNIX syscall approach. See api/README
+    for more details.
 
-    Prepare for 1.3.1-rc1
+    Included is the demo application using this new framework (api_examples).
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    Please note this is still an experimental feature, and is turned off by
+    default.
 
-commit 260eea5676ca46903a335686cc020b29c4ca46fe
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Thu Nov 29 01:21:54 2007 +0900
+    Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
 
-    sh: Add SuperH boards maintainer to MAINTAINERS file
+commit fe8dd0b2220b7c02b0d4c9c4f9967879970477b1
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Wed Jan 9 12:14:55 2008 -0600
 
-    Add MS7750SE and MS7722SE's board maintainer to MAINTAINERS file.
+    86xx: Remove cache config from configs.h
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+    Just use the standard defines in asm/cache.h.
 
-commit aa9c4f1d22701a92347c1c81f34d12c8ad3a3747
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Thu Nov 29 00:13:04 2007 +0900
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
 
-    sh: Add ms7750se support in MAKEALL
+commit 26a41790f8eba19ad450e18ae91351daf485b3e2
+Author: Rafal Jaworowski <raj@semihalf.com>
+Date:  Wed Jan 9 18:05:27 2008 +0100
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+    Globalize envmatch()
 
-commit c7144373427a178332bf9754131c8c34c52c200a
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 27 09:44:53 2007 +0100
+    The newly introduced API (routines related to env vars) will need to call
+    it.
 
-    sh: Add sh3 and sh4 support in MAKEALL
+    Signed-off-by: Rafal Zabdyr <armo@semihalf.com>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+commit 1df170f8b2a99e1e2f940f9f0b56511e1e4c9e1f
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Fri Jan 4 12:07:27 2008 -0600
 
-commit 130080874a3d28450098481a262c5f7c855e908d
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Sun Nov 25 02:51:17 2007 +0900
+    Convert MPC8610HPCD to use libfdt.
 
-    sh: Add document for SuperH.
+    Assumes the presence of the aliases node in the DTS to
+    locate the pci and serial nodes for fixups.
 
-    This document is a summary of information concerning SuperH of U-Boot.
+    Use consistent fdtaddr and fdtfile in environment variables.
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
 
-commit 33ecdc2f9d64926e1a6067b28f3a0aefc3b6d23d
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Sun Nov 25 02:39:31 2007 +0900
+commit c9974ab0a4d3731cdb76a7599d9fe9445d764d60
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Fri Jan 4 11:58:23 2008 -0600
 
-    sh: Add marubun's pcmcia driver
+    8610: Fix lingering compile warnings.
 
-    Marubun pcmcia is a chip for PCMCIA used with SuperH.
-    Of course, this can be used even by other architectures.
-    When use this driver, came to be able to use CompactFlash
-    and Ethernet.
+    Turn off DEBUG.
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
 
-commit febd86b969b975289ed948f1ac0eb9722da41ced
-Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-Date:  Sun Nov 25 02:32:13 2007 +0900
+commit 6007f3251c0967adc13f2ed8be1b924ddc30124d
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 9 15:14:46 2008 +0100
 
-    sh: Update SuperH SCIF driver
+    Coding Style cleanup, update CHANGELOG
 
-    - Changed volatile unsigned to vu_.
-    - Changed Makefile for kconfig.
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+commit fc6414eca55f1fc108fb12fc8cdc43bd8b4463f9
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:  Tue Dec 18 04:29:55 2007 -0500
 
-commit a5f601fd1b1278deae5aa9fc27a232b0d1c1c788
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Mon Nov 26 19:18:21 2007 +0100
+    fix easylogo on big endian dev systems
 
-    Cleanup coding style; update CHANGELOG
+    didnt realize how out of shape easylogo actually was until i tried using it.
+    this patch does byte swapping as need be on the input tga header since the tga
+    is in little endian but the host could just as well be big endian. i didnt
+    bother using bswap macros or such stuff from system headers as nothing in
+    POSIX dictates byte swapping functionality.
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    Signed-Off-By: Mike Frysinger <vapier@gentoo.org>
 
-commit 3deca9d44767efd1b83f4b701f0dbf21a7595f7b
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sun Nov 25 22:39:25 2007 +0100
+commit 38d299c2db81bd889c601b5dfc12c4e83ef83333
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:  Tue Dec 18 03:23:25 2007 -0500
 
-    MAKEALL: add missing 512x boards in ppc
+    cleanup easylogo
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    - make the Makefile not suck
+    - include proper headers for prototypes
+    - fix obvious broken handling of strchr() when handling '.' in filenames
 
-commit a340c325e668ca7386c2276387681720be9c3757
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sun Nov 25 18:45:47 2007 +0100
+    Signed-Off-By: Mike Frysinger <vapier@gentoo.org>
 
-    Makefile : fix tags ctags etags with new drivers organization
+commit 883e3925d99a8dd69c5b0201cba5b1887f88f95c
+Author: raptorbrino@aim.com <raptorbrino@aim.com>
+Date:  Thu Dec 13 21:23:28 2007 -0500
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Fix build problems under Cygwin
 
-commit 87ddedd6ad804427ce125ceaa076d7a4f74e9d5d
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sun Nov 25 18:45:47 2007 +0100
+    This patch allows u-boot to build without error in a cygwin
+    environment.  Cygwin does not define __u64 in it's
+    include/asm/types.h file.  The -idirafter flag in the u-boot
+    build causes the inclusion of the cygwin types.h file as opposed
+    to u-bot/include/asm/types.h file which does define __u64.
+    Subsequently, sha1.c compile fails due to unknown symbol.
 
-    Makefile : fix tags ctags etags with new drivers organization
+    Signed-off-by: Brian Miller <raptorbrino@netscape.net>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit 43ef1c381f9195504a2488f5cb909227eb97d475
+Author: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Date:  Fri Nov 30 17:29:59 2007 +0100
 
-commit 59829cc189378c142c13d2aa8d9a897d8bef3961
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 21:26:56 2007 +0100
+    cmd_bmp: Add support for displaying gzip compressed bmps
 
-    drivers/mtd : move mtd drivers to drivers/mtd
+    The existing code can show information about a gzip compressed BMP
+    image, but can't actually display it.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Therefore, move the decompression code out of bmp_info() and use it in
+    bmp_display() as well in order to display a compressed BMP image.
 
-commit 318c0b90431f2648552e5ade78833f42652ce859
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 21:17:55 2007 +0100
+    Also, clean things up a bit and fix a memory leak while we're at it.
 
-    drivers/misc : move misc drivers to drivers/misc
+    [hskinnemoen@atmel.com: a bit of refactoring]
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit d197ffd8172c6fdef38733424640a9a47295d6e9
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Thu Nov 29 21:15:56 2007 +0100
 
-commit 33daf5b7858807cb4ce4158c2c56524671c14c08
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 21:13:59 2007 +0100
+    Fix and optimize MII operations on FEC (MPC8xx) controllers
 
-    drivers/block : move block drivers to drivers/block
+    This patch fixes several issues at least on a MPC885 based system with two
+    FEC interfaces used in MII mode.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    1. PHY discovery should first read PHY_PHYIDR2 register and only then
+       PHY_PHYIDR1 like cpu/mpc8xx/fec.c::mii_discover_phy() does it,
+       otherwise the values read are wrong. Also notice, that PHY discovery
+       cannot work on MPC88x / MPC87x in setups with both FECs active at all
+       in its present form, because for both interfaces the registers from FEC
+       1 are used to communicate over MII.
 
-commit 0c698dcaa70275eb8814f665b545547cee013892
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 20:59:50 2007 +0100
+    2. Remove code duplication for resetting the FEC by isolating it into a
+       separate function.
 
-    drivers/rtc : move rtc drivers to drivers/rtc
+    3. Initialize MII on FEC 1 when communicating over FEC 2 in fec_init().
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    4. Optimize mii_init() to only reset the FEC 1 controller once.
 
-commit f868cc5a50757d94f36c312395481cb0f187d9e6
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 20:14:44 2007 +0100
+    5. Fix a typo in mii_init() using index i instead of j thus potentially
+       leading to unpredictable results.
 
-    drivers/hwmon : move hardware monitor drviers to drivers/hwmon
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit 6a5e1d75bf106fa157e9ce68bcaf4b13e8a1d214
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Tue Nov 20 13:14:20 2007 +0100
 
-commit 16b195c82a18cbfd164800f17a1ef9db2e48331a
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 19:46:45 2007 +0100
+    Fix endianness conversions in rtl8169 driver
 
-    drivers/input : move input drivers to drivers/input
+    It is unclear on what platforms this driver has been tested, since
+    noone up to now defines CONFIG_RTL8169 in the board configuration
+    header. Now it has been fixed for a big-endian mpc8241 based
+    linkstation platform. This patch presents the necessary endianness
+    conversion fixes.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
 
-commit e4558666293364fc3af1c1d9381ca933fa0f1275
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 19:40:11 2007 +0100
+commit 58694f9709c0c3e3178e349ae748d98cfb0c639a
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Thu Jan 3 10:51:15 2008 +0800
 
-    drivers/usb : move usb drivers to drivers/usb
+    Add Ctrl combo key support to usb keyboard driver.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Ctrl combo key support is added, which is very useful to input Ctrl-C
+    for interrupt current job.
+    Also add usb_event_poll() calling to usb_kbd_testc(), which can get
+    key input when tstc() is called.
 
-commit 1378df792a7ff3abd1bf54a63f5475784f5b083c
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 24 19:33:38 2007 +0100
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-    drivers/serial : move serial drivers to drivers/serial
+commit 07eb02687f008721974a2fb54cd7fdc28033ab3c
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 9 13:43:38 2008 +0100
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Coding Style clenaup; update CHANGELOG
 
-commit 2439e4bfa111babf4bc07ba20efbf3e36036813e
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Wed Nov 21 21:19:24 2007 +0100
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    drivers/net : move net drivers to drivers/net
+commit c26acc1a43b31ddca5add42fd0360ff0eee90c80
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:13:11 2007 +0100
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Remove bit swapping in Xilinx Spartan bitfile loading
 
-commit 352d259130b349fe9593b8dada641bd78a9659e5
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 20 20:41:48 2007 +0100
+    This patch removes the unnecessary bit swapping when
+    booting .bit files with the 'fpga loadb' command.
 
-    drivers/video : move video drivers to drivers/video
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit 437fc7327f0611f82937858f2d80e4cd61b40984
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:13:05 2007 +0100
 
-commit 73646217186aa17afc8e305c5f06f06dd335eaad
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 20 20:33:09 2007 +0100
+    Fix MSB check in Xilinx Spartan slave serial mode
 
-    drivers/pcmcia : move pcmcia drivers to drivers/pcmcia
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit 3bff4ffa33729a42645e328a21e8d16488872958
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:12:56 2007 +0100
 
-commit 93a686ee9c5ddc6fa368c32cfbfde6f6724599fc
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 20 20:28:09 2007 +0100
+    Add new Xilinx Spartan FPGA types
 
-    drivers/pci : move pci drivers to drivers/pci
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit 21d39d598c4e74d4e7761608c79dba2715d40a4c
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:12:43 2007 +0100
 
-commit 9162352817579840d7802da6d85872b3ca003c97
-Author: Gerald Van Baren <vanbaren@cideas.com>
-Date:  Thu Nov 22 17:23:23 2007 -0500
+    Add pre and post configuration callbacks for Spartan FPGAs
 
-    Fix fdt printing for updated libfdt
+    This patch adds a post configuration callback for Spartan2/3 FPGAs.
+    pre and post configuration callback are now optional and
+    not called when the function pointer is set to NULL.
 
-    Also improve printing (adopt dtc v1 "c style" hex format), whitespace cleanup.
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+commit 0133502e39ff89b67c26cb4015e0e7e8d9571184
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:12:34 2007 +0100
 
-commit 9eb77cea1fa12d5969eb26a1d1d81da381bd6b1c
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 21 13:30:15 2007 -0600
+    Improve configuration of FPGA subsystem
 
-    Add additional fdt fixup helper functions
+    This patch removes the FPGA subsystem configuration through
+    the CONFIG_FPGA bitmask configuration option.
 
-    Added the following fdt fixup helpers:
-     * do_fixup_by_prop{_u32} - Find matching nodes by property name/value
-     * do_fixup_by_compat{_u32} - Find matching nodes by compat
+    See README for the new options:
 
-    The _u32 variants work the same only the property they are setting
-    is know to be a 32-bit integer instead of a byte buffer.
+       CONFIG_FPGA,
+       CONFIG_FPGA_<vendor>,
+       CONFIG_FPGA_<family>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-commit ab544633abdd14f4dd5d92e500b73eb59ef57e67
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 21 11:11:03 2007 -0600
+commit 95c6bc7d4a3588b452baca610f8c795a83630477
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 16:55:17 2007 +0100
 
-    Add fdt_fixup_ethernet helper to set mac addresses
+    Add Epson RX8025 RTC support
 
-    Added a fixup helper that uses aliases to set mac addresses
-    in the device tree based on the bd_t
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 1208a2dfde02bedd3c5bda29a606632b8e0be058
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 16:57:23 2007 +0100
 
-commit dbaf07ce620aab249e3502b20a986234a6af1d3a
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 21 14:07:46 2007 -0600
+    serial: Make default_serial_console() a weak function
 
-    Fix warnings from import of libfdt
+    With this patch it is possible to reimplement default_serial_console()
+    in board specific code. This will be done in the upcomming PMC440
+    U-Boot port. This also allows the lwmon board maintainer to
+    remove the '#if !defined(CONFIG_LWMON) ...' from common/serial.c.
 
-    cmd_fdt.c: In function fdt_print:
-    cmd_fdt.c:586: warning: assignment discards qualifiers from pointer target type
-    cmd_fdt.c:613: warning: assignment discards qualifiers from pointer target type
-    cmd_fdt.c:635: warning: assignment discards qualifiers from pointer target type
-    cmd_fdt.c:636: warning: assignment discards qualifiers from pointer target type
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit d16471ee05ce7ac5392bc0e9fe3ff4b58a768f33
+Author: Harald Welte <laforge@openmoko.org>
+Date:  Wed Dec 19 14:14:47 2007 +0100
 
-commit 8d04f02f6224e6983f4812ea4da704950ec8539c
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Oct 24 11:04:22 2007 -0500
+    add 'terminal program' functionality
 
-    Update libfdt from device tree compiler (dtc)
+    This patch adds a 'cu' like serial terminal command to u-boot
+    using which you can access other serial ports from the system console.
 
-    Update libfdt to commit 8eaf5e358366017aa2e846c5038d1aa19958314e from
-    the device tree compiler (dtc) project.
+    OpenMoko uses this in their Neo1973 phones to get access to the GSM
+    Modem and GPS chip from the bootloader.
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Signed-off-by: Harald Welte <laforge@openmoko.org>
 
-commit e93becf80d732b64aef81b23e8b6ece02c40533d
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Sat Nov 3 19:46:28 2007 -0500
+commit 62d4f4365341576f5a5307b2b205a5aa2e3c6be6
+Author: Harald Welte <laforge@openmoko.org>
+Date:  Wed Dec 19 14:12:53 2007 +0100
 
-    Move do_fixup* for libfdt into common code
+    Re-introduce the 'nand read.oob' and 'nand write.oob' commands
+    that used to exist with the legacy NAND code
 
-    Moved the generic fixup handling code out of cpu/mpc5xxx and cpu/mpc8260
-    into common/fdt_support.c and renamed:
+    Signed-off-by: Harald Welte <laforge@openmoko.org>
 
-    do_fixup() -> do_fixup_by_path()
-    do_fixup_u32()     -> do_fixup_by_path_u32()
+commit f540c42d9564854b19ce9bbb70affe172529fe70
+Author: Harald Welte <laforge@openmoko.org>
+Date:  Wed Dec 19 14:09:58 2007 +0100
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Fix building with CRAMFS but not JFFS2 support
 
-commit f738b4a75998f42a7408defadc9baac7a31c92db
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Thu Oct 25 16:15:07 2007 -0500
+    Signed-off-by: Harald Welte <laforge@openmoko.org>
 
-    Make no options to fdt print default to '/'
+commit 23d0baf967fecdaf1804f045f6339337c5607eec
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Dec 22 15:52:58 2007 +0100
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    Allow CONFIG_AUTO_COMPLETE and command history CONFIG_CMDLINE_EDITING at the sametime
 
-commit a3c2933e02503fe36ade2c1b65af46f2b7a168e7
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Oct 24 10:21:57 2007 -0500
+    Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
 
-    Removed some nonused fdt functions and moved fdt_find_and_setprop out of libfdt
+commit 23776ff292966a85d811126933830bed48211826
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Dec 11 10:53:12 2007 +0100
 
-    Removed:
-       fdt_node_is_compatible
-       fdt_find_node_by_type
-       fdt_find_compatible_node
+    ARM: support board-specific ethernet PHY init
 
-    To ease merge of newer libfdt as we aren't using them anywhere at this time.
+    Add until the new phylib will be arrived
 
-    Also moved fdt_find_and_setprop out of libfdt into fdt_support.c for the same
-    reason.
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+commit 7b74ebe723e576baedf5a8b6240589b19b845a1b
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Dec 8 16:34:08 2007 +0100
 
-commit 98e2867cc85409b919f862e6c16026461ec955df
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Wed Nov 21 09:19:37 2007 -0700
+    IXP: Add full baud-rate support for ixp42x, ixp45x and ixp46x
 
-    [BUILD] Remove libraries when updating autoconf.mk
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
 
-    Fix library problems caused by conditional compilation.  Using
-    autoconf.mk to decide which files to compile has caused a problem when
-    changing configuration from one board to another without clearing out
-    the library (*.a) files.
+commit a2df4da31b1a1e41e3e9e1358cfc52b806046ce1
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Dec 9 11:01:10 2007 +0100
 
-    It used to be that the linker was always passed the same list of .o
-    files when building the .a files.  However, that is not longer true
-    with conditional compilation.  Now, a different board config will have
-    a different file list passed to the linker.  The problem occurs when
-    a library has already been built and the board config is changed.
+    Add missing file in gitignore and comments
 
-    Since the linker will update instead of replace a preexisting library,
-    then if the file list changes to remove some object files the old
-    objects will still exist in the library.
+    based on Linux source tree's .gitignore files
 
-    The solution is to remove all old library files when autoconf.mk is
-    made.
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+commit 435dc8fcdb3bc61d3d490773a8f369f98a20c868
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 9 11:36:21 2008 +0100
 
-commit ed1353d74b9ce8a7fcd660570b848a184d614b5f
-Author: Kumar Gala <galak@kernel.crashing.org>
-Date:  Wed Nov 21 08:49:50 2007 -0600
+    Coding Style cleanup, update CHANGELOG
 
-    [BUILD] conditionally compile libfdt/*.c in libfdt/Makefile
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    Modify libfdt/Makefile to conditionally compile the *.c files based
-    on the board config.
+commit b2e2142c500c48a57f18f9dd30e66c13caea0971
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Jan 9 10:38:58 2008 +0100
 
-    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+    POST: Execute SPR test after relocation
 
-commit 4a43719a7738712811d822ca8125427b27a55cdc
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:31 2007 -0600
+    On LWMON5 we now use d-cache as init-ram and stack. The SPR POST test uses
+    self modifying code and this doesn't work with stack in d-cache, since
+    I can't move the code from d-cache to i-cache. We move the SPR test to
+    be executed a little later, after relocation. Then stack is located in
+    SDRAM and this self-modifying code is no problem anymore.
 
-    [BUILD] conditionally compile common/cmd_*.c in common/Makefile
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Modify common/Makefile to conditionally compile the cmd_*.c files based
-    on the board config.
+commit 8f24e0637ae113500d8bd60d80d57afcc0aa8bde
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Jan 9 10:28:20 2008 +0100
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    ppc4xx: Change LWMON5 to not use OCM for init-ram and POST anymore
 
-commit 2f155f6c0a1f5e9a306a3f1f4fbe067db7ced3b1
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:31 2007 -0600
+    This patch configures the LWMON5 port to use d-cache as init-ram and
+    the unused GPT0_COMP6 as POST WORD storage.
 
-    [BUILD] Generate include/autoconf.mk from board config files
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Use cpp and sed to postprocess config.h and import the defined values
-    into include/autoconf.mk.  autoconf.mk is then included by config.mk to
-    give 'make' access to the board configuration.
+commit 1754f50b710194f886b6f2831803d8960171a14d
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Jan 9 10:25:46 2008 +0100
 
-    Doing this enables conditional compilation at the Makefile level instead
-    of by wrapping every .c file with #ifdef/#endif wrappers.
+    ppc4xx: Add CFG_POST_ALT_WORD_ADDR to support non OCM POST WORD storage
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    The privious 4xx POST implementation only supported storing the POST
+    WORD in OCM. Since we need to reserve the OCM on LWMON5 for the logbuffer
+    we need to store the POST WORD in some other non volatile location.
+    This patch adds CFG_POST_ALT_WORD_ADDR to specify an address for such
+    a location.
 
-commit 080c646dbf474a109c3f85718fb01ce042a38c45
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 20 20:14:18 2007 +0100
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    drivers/i2c : move i2c drivers to drivers/i2c
+commit e02c521d94b45d7b05aa522e4ccde6b74bf5fe57
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Jan 9 10:23:16 2008 +0100
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    ppc4xx: Add 44x cache locking to better support init-ram in d-cache
 
-commit 9a337ddc154a10a26f117fd147b009abcdeba75a
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Mon Nov 19 22:20:24 2007 +0100
+    This patch adds support for locking the init-ram/stack in d-cache,
+    so that other regions may use d-cache as well
 
-    Prepare for 1.3.0 release.
+    Note, that this current implementation locks exactly 4k of d-cache,
+    so please make sure that you don't define a bigger init-ram area. Take
+    a look at the lwmon5 440EPx implementation as a reference.
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit f30ad49b16bf998b03c1a5228b6c86369d61c258
-Author: Haiying Wang <Haiying.Wang@freescale.com>
-Date:  Mon Nov 19 10:02:13 2007 -0500
+commit 0ddb89601a8d29e808db450366752ffdc6267c53
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 9 10:16:33 2008 +0100
 
-    Move CONFIG_QE out of CONFIG_PCI wrap for MPC8568MDS
+    Fix memset bug in ext2fs_read_file()
 
-    CONFIG_QE shouldn't be in the wrap of CONFIG_PCI, fix it.
+    ext2fs_read_file() had the function arguments swapped.
 
-    Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
+    Pointed out by Mike Montour, 19 Dec 2007 22:34:25 -0800
 
-commit f8c320609366176b31104d9bf5e295232e1c7f1d
-Author: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
-Date:  Mon Nov 19 11:14:16 2007 +0900
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-    [MIPS] board/gth2/lowlevel_init.S: Fix a build warning
+commit 32d6f1bc09175f3b77469771e839bc7255a9f22e
+Author: Markus Klotzbücher <mk@denx.de>
+Date:  Tue Jan 5 08:17:15 1988 +0100
 
-    lowlevel_init.S: Assembler messages:
-    lowlevel_init.S:413: Warning: Pretending global symbol used as branch target is local.
+    Fix problems with usb storage devices on MPC5200 /TQM5200
 
-    Looking at codes, the `memtest' and `clearmem' are intentional mixed
-    use of `global symbols' and `label' for debugging purpose. To make it
-    build, just disable global-symbols-use for now. As a result `memtest'
-    still remains as unused, but leave it be...
+    The MPC5200 OHCI controller operates in big endian, so
+    CFG_OHCI_BE_CONTROLLER must be defined for it to work properly.
 
-    Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-commit e8da58f2bc092891e8cc92b927ed5c4bd0cb0cab
+commit 46f6e5019048b103d7693d5310de0f1cfbaf4c19
 Author: Wolfgang Denk <wd@denx.de>
-Date:  Mon Nov 19 12:59:14 2007 +0100
+Date:  Tue Jan 8 22:58:27 2008 +0100
 
-    Fix build problems with mp2usb board
+    Fix compile problem with new env code.
 
     Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-commit 6bf4c686afca1e86e1c384d59218f914605713bf
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sun Nov 18 18:36:11 2007 +0100
+commit 64b3727b9779d86127cd576e392a987de5ebb9fd
+Author: Markus Klotzbücher <mk@denx.de>
+Date:  Tue Nov 27 10:23:20 2007 +0100
 
-    s3c24x0: Fix usb_ohci.c missing in Makefile
-    and usb_ohci.c warning differ in signedness
+    tools: fix fw_printenv tool to compile again
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    This patch updates the fw_printenv/fw_setenv userspace tool to include
+    the correct MTD header in order to compile against current kernel
+    headers. Backward compatibility is preserved by introducing an option
+    MTD_VERSION which can be set to "old" for compilation using the old MTD
+    headers. Along with this a number of warnings are fixed.
 
-commit 6073f61e078da5ddb521b56256bcc36508589883
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sun Nov 18 12:55:02 2007 +0100
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-    pb1x00 board: Fix u16 status declaration when PCMCIA is defined
+commit 1f84021a85abeb837d2ce0dc84297b4f1d45d516
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Jan 8 15:40:09 2008 +0100
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    ppc4xx: assign PCI interrupts on seuqoia boards
 
-commit 8412d814ce8bf5570a2b747f1e7fd321097fe987
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Sun Nov 18 17:11:09 2007 +0100
+    Some operating systems rely on assigned PCI interrupts.
 
-    Fix compiler warnings for ARM systems.
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+commit 6e9233d30afe57cb6e148fbfa4895e7810196fac
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Jan 8 15:50:49 2008 +0100
 
-commit 409ecdc0bb47dd28b0af6c25ffd658d22cc36b37
+    ppc4xx: Move cpu/ppc4xx/vecnum.h into include path
+
+    This patch allows the use of 4xx interrupt vector number defines
+    in board specific code outside cpu/ppc4xx.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 580d1d3186a2bc6dbdb626941b716dae1788e51e
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Jan 8 15:39:01 2008 +0100
+
+    ppc4xx: Fix UIC2 vector number base
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit ff5fb8a6ccba56e3482d0e297d8cfb7faa040811
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Jan 8 12:49:58 2008 +0100
+
+    ppc4xx: Update PLB/PCI divider for PMC440 board
+
+    This patch updates the PLB/PCI divider when running at
+    400MHz CPU frequency from 4 to 3 which results in 44MHz PCI sync clock.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 7d5d75633174867316a0c0f2fca5ceb2cf312cde
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Jan 8 11:13:09 2008 +0100
+
+    ppc4xx: Disable error message when no NAND chip is installed on PMC440
+
+    Add CFG_NAND_QUIET_TEST option to disable error message when
+    no NAND chip is installed on PMC440 boards.
+
+    Disable a couple of config defines that are only used for NAND_U_BOOT.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit c83d7ca4dadd44ae430235077f63b64a11f36f6e
 Author: Wolfgang Denk <wd@denx.de>
-Date:  Sun Nov 18 16:36:27 2007 +0100
+Date:  Tue Jan 8 22:58:27 2008 +0100
 
-    Fix compiler warnings for PPC systems. Update CHANGELOG.
+    Fix compile problem with new env code.
 
     Signed-off-by: Wolfgang Denk <wd@denx.de>
 
-commit 079c2c4fa71c0d1ebef394508df9088df8a308d3
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Sat Nov 17 11:31:10 2007 +0100
+commit 6de66b35426312a21174a9bf0576a094e2904bea
+Author: Markus Klotzbücher <mk@denx.de>
+Date:  Tue Nov 27 10:23:20 2007 +0100
 
-    Fix warning differ in signedness in net/net.c and net/nfs.c
+    tools: fix fw_printenv tool to compile again
 
-commit 7e14fc65368cbd2861b1207453da55a4fc7b3f81
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Nov 17 20:42:45 2007 +0900
+    This patch updates the fw_printenv/fw_setenv userspace tool to include
+    the correct MTD header in order to compile against current kernel
+    headers. Backward compatibility is preserved by introducing an option
+    MTD_VERSION which can be set to "old" for compilation using the old MTD
+    headers. Along with this a number of warnings are fixed.
 
-    gth2.c: Fix a warning on gth2 build.
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-    gth2.c: In function 'misc_init_r':
-    gth2.c:434: warning: pointer targets in passing argument 2 of 'setenv' differ in signedness
+commit ad3006fe7e84667021753b74247b0bafd97ba35f
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Mon Jan 7 23:47:32 2008 -0500
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    LIBFDT: use memmove() instead of memcpy()
 
-commit 2309c130aa4c84b91bd874a41269c923eb61b555
+    This is partial patch from the DTC/libfdt
+    commit  67b6b33b9b413a450a72135b5dc59c0a1e33e647
+    Author: David Gibson <david@gibson.dropbear.id.au>
+    Date:   Wed Nov 21 11:56:14 2007 +1100
+
+       The patch also fixes one genuine bug caught by valgrind -
+       _packblocks() in fdt_rw.c was using memcpy() where it should have been
+       using memmove().
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit aec7135bc300e3340d18f203347ee00c5b5f68c0
+Author: David Gibson <david@gibson.dropbear.id.au>
+Date:  Mon Dec 17 14:42:07 2007 +1100
+
+    libfdt: Add more documentation (patch the seventh)
+
+    This patch adds more documenting comments to libfdt.h.  Specifically,
+    these document the read/write functions (not including fdt_open_into()
+    and fdt_pack(), for now).
+
+    Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+
+commit 9d4450b5adc36623e9c1de1f92539db77ad0c57e
+Author: David Gibson <david@gibson.dropbear.id.au>
+Date:  Mon Dec 17 14:41:52 2007 +1100
+
+    libfdt: Add more documentation (patch the sixth)
+
+    This patch adds some more documenting comments to libfdt.h.
+    Specifically this documents all the write-in-place functions.
+
+    Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
+
+commit b60af3d4c1680487ee37e11aa1b3db6dec04d8f0
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sat Dec 29 22:45:27 2007 -0500
+
+    Fine grained per property /chosen updating.
+
+    Implement a suggestion by Scott Wood to make the /chosen handling fine
+    grained.  Don't overwrite pre-existing properties on a per-property basis,
+    so if /chosen exists but a necessary /chosen/property doesn't, it gets
+    created.  If a /chosen property exists, it is NOT overwritten unless the
+    "force" flag is true.
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit 238cb7a423c6eaa36496efb788cfb9798cea7f95
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sat Jan 5 15:33:29 2008 -0500
+
+    Improve the FDT help message.
+
+    Add a note that "fdt copy" makes the new address active.
+    Remove most of the extra hints at the end of the fdt help.
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit ea6d8be153ceaf16958f8009cea6d75f3ff58d92
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sat Jan 5 14:52:04 2008 -0500
+
+    Support setting FDT properties with optional values.
+
+    Fix a bug found and documented by Bartlomiej Sieka where the optional
+    value on "fdt set <path> <prop> [<val>]" wasn't optional.
+
+    => fdt mknode / testnode
+    => fdt print /testnode
+    testnode {
+    };
+    => fdt set /testnode testprop
+    => fdt print /testnode
+    testnode {
+           testprop;
+    };
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit 22fb2246df91bfc840d87f0c5910818bad55577a
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 11:56:30 2007 +0100
+
+    Add fdt_find_and_setprop() to fdt_support.h
+
+    fdt_find_and_setprop() is used by several 4xx boards and it's
+    missing in the appropriate header. This patch eliminates a
+    warning when building U-Boot for such boards.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+    Acked-by: Stefan Roese <sr@denx.de>
+
+commit 802b769bac17b0560d3535a42c502469ee190cd1
 Author: Stefan Roese <sr@denx.de>
-Date:  Sat Nov 17 07:58:25 2007 +0100
+Date:  Tue Jan 8 18:39:30 2008 +0100
 
-    Fix warning differ in signedness in common/cmd_scsi.c
+    ppc4xx: Return 0 on success in 4xx ethernet driver
 
     Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 7e1d884b7cb602007329c517ec1c453e3a6a5d9c
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Nov 17 20:05:26 2007 +0900
+commit 6775c68683a53c7abc778774641aac6f833a2cbf
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Tue Jan 8 09:59:49 2008 -0600
 
-    [MIPS] cpu/mips/config.mk: Fix GNU assembler minor version picker
+    mpc83xx: fix missed pci_hose -> hose conversion for new libfdt code
 
-    Current trick to pick up GNU assembler minor version does not work with the
-    latest binutils (2007-03-01 or later) due to ${PKGVERSION} now default to
-    "(GNU Binutils) ".
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-      $ sde-as --version |grep "GNU assembler"
-      GNU assembler 2.15.94 mipssde-6.02.02-20050602
-      $ sde-as --version |grep "GNU assembler" |awk '{print $3}'
-      2.15.94
-      $ sde-as --version |grep "GNU assembler" |awk '{print $3}' |awk -F. '{print $2}'
-      15
-      $
+commit 94fab25f5f1a7d1c0cc63c17e813ea8943fe49c7
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Thu Dec 20 16:28:34 2007 -0600
 
-      $ mips-linux-as --version |grep "GNU assembler"
-      GNU assembler (GNU Binutils) 2.18
-      $ mips-linux-as --version |grep "GNU assembler" |awk '{print $3}'
-      (GNU
-      $ mips-linux-as --version |grep "GNU assembler" |awk '{print $3}' |awk -F. '{print $2}'
-      (no output)
-      $
+    mpc83xx: rm remaining FLAT_TREE code
 
-    As a result of above, you'll see many noises with such binutils:
+    ..in board pci.c files
 
-      make -C cpu/mips/
-      /bin/sh: line 0: [: : integer expression expected
-      /bin/sh: line 0: [: : integer expression expected
-      make[1]: Entering directory `/home/skuribay/devel/u-boot.git/cpu/mips'
-      mips-linux-gcc  -D__ASSEMBLY__ -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -c -o incaip_wdt.o incaip_wdt.S
-      /bin/sh: line 0: [: : integer expression expected
-      mips-linux-gcc  -D__ASSEMBLY__ -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -c -o cache.o cache.S
-      /bin/sh: line 0: [: : integer expression expected
-      mips-linux-gcc -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -Wall -Wstrict-prototypes -c -o asc_serial.o asc_serial.c
-      /bin/sh: line 0: [: : integer expression expected
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    This patch simplifies the trick and makes it work with both versions of gas.
-    I also replace an expensive `awk (or gawk)' with `cut'.
+commit b3458d2cd55d01732e30a76d898afd99e871cd67
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Thu Dec 20 15:57:28 2007 -0600
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    mpc83xx: remove FLAT_TREE code
 
-commit 16664f72850846e645616da1c0fa5afcd6d15f15
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Nov 17 20:05:26 2007 +0900
+    need to rm it from pci code, too!
 
-    [MIPS] Remove useless instructions for initializing $gp.
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+commit 5b8bc606c61456566af6912f818a153b6b06f242
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Thu Dec 20 14:09:22 2007 -0600
 
-commit 03c031d5660ea946c39af6e2e16267da857c609f
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:27:06 2007 +0900
+    mpc83xx: convert to using do_fixup_*()
 
-    [MIPS] MIPS 4K core: Coding style cleanups
+    convert to using simpler mpc85xx style fdt update code; streamline by
+    eliminating macros OF_SOC, OF_CPU, etc. which allows us to rm
+    the old school FLAT_TREE code from 83xx (since the sbc8349 was just
+    converted over to using libfdt).
 
-    No logical changes.
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+commit e496865ecc31a2fe2f9abfe798334bb02aaf05ab
+Author: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date:  Thu Dec 20 12:58:51 2007 -0500
 
-commit f5e429d3860bba4c6ae8bead8f78349fa24491b2
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Nov 17 20:05:20 2007 +0900
+    sbc8349: enable libfdt by default on WRS SBC8349 board.
 
-    [MIPS] gth2.c: Fix a warning on gth2 build.
+    Make libfdt the default for the WRS SBC8349 board.
+    Parallel of commit 35cc4e4823668e8745854899cfaedd4489beb0ef
+    done for the other 83xx based boards.  Also fix a typo in CONFIG_PCI.
 
-    gth2.c: In function 'misc_init_r':
-    gth2.c:434: warning: pointer targets in passing argument 2 of 'setenv' differ in signedness
+    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+commit 2408b3f20bcbdd9c6c397cd03ab0d71d54680a40
+Author: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date:  Thu Dec 20 12:58:16 2007 -0500
 
-commit 4fbd0741b2b6441da10be93e10267122581b7079
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:22:33 2007 +0900
+    sbc8349: migrate board to libfdt
 
-    [MIPS] au1x00_eth.c: Fixed a warning on pb1000 build.
+    This adds libfdt support code for the Wind River sbc8349 board.
 
-    au1x00_eth.c: In function 'au1x00_miiphy_write':
-    au1x00_eth.c:139: warning: 'return' with no value, in function returning non-void
+    Parallel of commit 3fde9e8b22cfbd7af489214758f9839a206576cb for
+    the other Freescale 83xx boards.
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
 
-commit f01320459736f156707425cf8112f98606301aa4
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:00:25 2007 +0900
+commit 27a256a90cc86392ac9bf0039a3afe638ec2c18d
+Author: Paul Gortmaker <paul.gortmaker@windriver.com>
+Date:  Thu Dec 20 12:56:19 2007 -0500
 
-    [MIPS] au1x00_eth.c: Fix au1x00_miiphy_{read,write} build error
+    sbc8349: Remove board specific ECC code
 
-    au1x00_eth.c: In function 'au1x00_enet_initialize':
-    au1x00_eth.c:246: error: 'au1x00_miiphy_read' undeclared (first use in this function)
-    au1x00_eth.c:246: error: (Each undeclared identifier is reported only once
-    au1x00_eth.c:246: error: for each function it appears in.)
-    au1x00_eth.c:246: error: 'au1x00_miiphy_write' undeclared (first use in this function)
-    au1x00_eth.c: In function 'au1x00_miiphy_write':
-    au1x00_eth.c:298: warning: 'return' with no value, in function returning non-void
-    make[1]: *** [au1x00_eth.o] Error 1
+    ECC code is now shared for all 83xx boards, so remove board specific one.
+    See commit daab8c67d2defef73dc26ab07f0c3afd1b05d019 for reference.
 
-    Fixed by moving these two functions forward.
+    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+commit a1e1ac849249310e5e2e5c7148e9fb353a8317a7
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Thu Dec 20 01:30:48 2007 -0600
+
+    mpc83xx: Remove CONFIG options related to OF that we dont use (on 837x)
+
+    continuation of commit 37395fa2b0d9d617f28d44ca11592260ef16105a to 837x
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit ccf21c311e68d48399eff1e72936052885f6e3f7
+Author: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
+Date:  Thu Dec 6 16:43:40 2007 +0100
+
+    Add support CONFIG_UEC_ETH3 in MPC83xx
+
+    Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
+
+commit e6af9932d31171e35db880e7b2f29f903b1b7660
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 11:00:54 2007 -0600
+
+    Remove CONFIG options related to OF that we dont use
+
+    The MPC8360E MDS config defined:
+       CONFIG_OF_HAS_BD_T
+       CONFIG_OF_HAS_UBOOT_ENV
+
+    Which we don't use or ever needed. This seems like copy-paste feature creep.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit f602082b4b7ed4ee16432067cc67a0a24fedc715
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Mon Dec 10 14:16:22 2007 -0600
+
+    mpc83xx: supress compiler warning
+
+    mpc8360emds.c: In function â€˜ft_board_setup’:
+    mpc8360emds.c:335: warning: assignment discards qualifiers from pointer target type
+    mpc8360emds.c:345: warning: assignment discards qualifiers from pointer target type
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit c16e44fa835fb9eec982d919863a04e2f78e5ce7
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Tue Nov 27 14:17:29 2007 -0600
+
+    mpc83xx: fix remaining fdt_find_node_by_path references
+
+    rename to fdt_path_offset
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit 921d4b19ad1be704df58725485d9292dc0414adf
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Mon Nov 19 12:30:09 2007 -0600
+
+    mpc83xx: fix CFG_ENV_ADDR and CFG_ENV_SECT_SIZE definitions for 837x
+
+    Fix the definitions of CFG_ENV_ADDR and CFG_ENV_SECT_SIZE for 837x.
+    This change guarantees that the environment will be located on the
+    first flash sector after the U-Boot image.
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit 24f868433b50ecbaa88e118aadc7bd254013c6ae
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Fri Nov 9 14:28:08 2007 -0600
+
+    mpc83xx: mpc8360 rev.2.1 erratum 2: replace rgmii-id with rgmii-rxid
+
+    u-boot itself uses GMII mode on the 8360.  Fix up UCC phy-connection-type
+    properties in the device tree so the PHY gets configured for internal delay on
+    RX only by the OS, as prescribed by mpc8360 rev. 2.1 pb mds erratum #2.
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit 22b448dbfbe2a98f01ff4adc3c3979f8c541ad7b
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:41:15 2007 +0800
+
+    mpc83xx: update the CREDITS and MAINTAINERS
+
+    update the CREDITS and MAINTAINERS.
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit b21add4b42af7b767448251b599b91066a160e0d
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:40:21 2007 +0800
+
+    mpc83xx: add MAINTAINER and MAKEALL entries for the mpc837xemds
+
+    Add the MAINTAINER and MAKEALL entries for mpc837xemds
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit f8900ce9094c462355eb792eea264ff16ac8fd16
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:38:53 2007 +0800
+
+    mpc83xx: Add the MPC837xEMDS board readme
+
+    Add the README.mpc837xemds to /doc
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit 19580e660cc8da49f16536a8bd78c047c7bc12e5
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:37:57 2007 +0800
+
+    mpc83xx: Add the support of MPC837xEMDS board
+
+    The MPC837xEMDS board support:
+    * DDR2 400MHz hardcoded and SPD init
+    * Local bus NOR Flash
+    * I2C, UART, MII and RTC
+    * eTSEC RGMII
+    * PCI host
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit 555da61702771fe0f76f3de23b4e7590f3704161
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:36:58 2007 +0800
+
+    mpc83xx: Add the support of MPC8315E SoC
+
+    The MPC8315E SoC including e300c3 core and new IP blocks,
+    such as TDM, PCI Express and SATA controller.
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit 03051c3d35c9981ceaa059005660e699f3eacf1c
+Author: Dave Liu <r63238@freescale.com>
+Date:  Tue Sep 18 12:36:11 2007 +0800
+
+    mpc83xx: Add the support of MPC837x SoC
+
+    The MPC837x SoC including e300c4 core and new IP blocks,
+    such as SDHC, PCI Express and SATA controller.
+
+    Signed-off-by: Dave Liu <daveliu@freescale.com>
+
+commit 651d96f7e4c84adcdb98ef07ec878c20326e3359
+Author: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date:  Wed Nov 14 18:54:53 2007 +0300
+
+    MPC8360E-MDS: configure and enable second UART
+
+    Despite user manual, BCSR9.7 is negated (high) on HRST, so
+    UART2 is disabled. Fix that and configure QE pins properly.
+
+    Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
+
+commit b2893e1fcb28fad8c8b317104df8cee0142c7631
+Author: Timur Tabi <timur@freescale.com>
+Date:  Mon Nov 5 09:34:06 2007 -0600
+
+    83xx: fix CFG_ENV_ADDR and CFG_ENV_SECT_SIZE definitions
+
+    Fix the definitions of CFG_ENV_ADDR and CFG_ENV_SECT_SIZE for all of the
+    currently-defined 83xx boards.  This change guarantees that the environment
+    will be located on the first flash sector after the U-Boot image.
+
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit e05329516a13616b53240cd85b739217c2bf87f1
+Author: Larry Johnson <lrj@acm.org>
+Date:  Fri Jan 4 13:27:02 2008 -0500
+
+    ppc4xx: Remove weak binding from common Denali data-eye search code
+
+    Now that there are no board-specific versions of
+    "denali_core_search_data_eye()", the weak binding on the common version
+    can be removed.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 5ba576c01602fd328800a427964c36a0a05c5dce
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Jan 5 09:13:46 2008 +0100
+
+    ppc4xx: Remove unused CONFIG_ECC_ERROR_RESET from 44x_spd_ddr2.c
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 845c6c95dbfe6c915ce68a0a115852fa17932fb4
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Jan 5 09:12:41 2008 +0100
+
+    ppc4xx: Update Katmai/44x_spd_ddr2.c code for optimal DDR2 setup
+
+    On Katmai the complete auto-calibration somehow doesn't seem to
+    produce the best results, meaning optimal values for RQFD/RFFD.
+    This was discovered by GDA using a high bandwidth scope,
+    analyzing the DDR2 signals. GDA provided a fixed value for RQFD,
+    so now on Katmai "only" RFFD is auto-calibrated.
+
+    This patch also adds RDCC calibration as mentioned on page 7 of
+    the AMCC PowerPC440SP/SPe DDR2 application note:
+    "DDR1/DDR2 Initialization Sequence and Dynamic Tuning"
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 49db47b8ae6afff2b898be312948ff501357dc80
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Wed Jan 2 16:48:42 2008 +0100
+
+    ppc4xx: Remove sdram.h from PMC440 board
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 34065a2ce0d8972f2ec6652076014ab243d2ce8a
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Wed Jan 2 16:48:34 2008 +0100
+
+    ppc4xx: use common denali core defines and data eye search code for PMC440
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 9ac6b6f3d3f1b072d89268b2efe47e95e6659489
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Wed Jan 2 12:05:14 2008 +0100
+
+    ppc4xx: More cleanup for esd's LCD code
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit fe9c26b330a21ce73e52b5bd347d725cb81e3cfb
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Jan 4 12:00:01 2008 +0100
+
+    ppc4xx: Fix Sequoia NAND booting target
+
+    The Sequoia NAND booting target now uses the recently extracted
+    cpu/ppc4xx/denali_data_eye.c file too.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 0ddd969aec532bd7eae30fc09590488a3aaa629a
+Author: Lawrence R. Johnson <lrj@acm.org>
+Date:  Thu Jan 3 15:02:02 2008 -0500
+
+    ppc4xx: Use CFG_4xx_GPIO_TABLE to configure Korat board
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit b05e8bf58be9d8956fdfde3d8c8e87c140414663
+Author: Lawrence R. Johnson <lrj@acm.org>
+Date:  Fri Jan 4 02:11:56 2008 -0500
+
+    ppc4xx: Use CFG_4xx_GPIO_TABLE to configure Sequoia board
+
+    Note: this patch changes the configuration of some GPIO registers:
+
+       Register      Old Value  New Value
+    ---------------  ----------  ----------
+    DCR GPIO0_TCR    0x0000000F  0x0000F0CF
+    DCR GPIO0_TSRH   0x55005000  0x00000000
+    DCR GPIO1_TCR    0xC2000000  0xE2000000
+    DCR GPIO1_TSRL   0x0C000000  0x00200000
+    DCR GPIO1_ISR2L  0x00050000  0x00110000
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 5ab884b254ca2e707ab50545cd705f30108cf491
+Author: Lawrence R. Johnson <lrj@acm.org>
+Date:  Thu Jan 3 18:54:00 2008 -0500
+
+    ppc4xx: Add functionality to GPIO support
+
+    This patch makes two additions to GPIO support:
+
+    First, it adds function gpio_read_in_bit() to read the a bit from the
+    GPIO Input Register (GPIOx_IR) in the same way that function
+    gpio_read_out_bit() reads a bit from the GPIO Output Register
+    (GPIOx_OR).
+
+    Second, it modifies function gpio_set_chip_configuration() to provide
+    an additional option for configuring the GPIO from the
+    "CFG_4xx_GPIO_TABLE".
+
+    According to the 440EPx User's Manual, when an alternate output is used,
+    the three-state control is configured in one of two ways, depending on
+    the particular output.  The first option is to select the corresponding
+    alternate three-state control in the GPIOx_TRSH/L registers.  The second
+    option is to select the GPIO Three-State Control Register (GPIOx_TCR) in
+    the GPIOx_TRSH/L registers, and set the corresponding bit in the
+    GPIOx_TCR register to enable the output.  For example, the Manual
+    specifies configuring the GPIO00 Alternate 1 Signal (PreAddr07) to use
+    the alternate three-state control (first option), and specifies
+    configuring the GPIO32 Alternate 1 Signal (USB2OM0) with the output
+    enabled in the GPIOx_TCR register (second option).
+
+    Currently, gpio_set_chip_configuration() configures all alternate signal
+    outputs to use the first option.  This patch allow the second option to
+    be selected by setting the "out_val" element in the table entry to
+    "GPIO_OUT_1".  The first option is used when the "out_val" element is
+    set to "GPIO_OUT_0".  Because "out_val" is not currently used when an
+    alternate signal is selected, and because all current GPIO tables set
+    "out_val" to "GPIO_OUT_0" for all alternate signals, this patch should
+    not change any existing configurations.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 196404cdc1de495d6182e84731c200fc5748df15
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sun Dec 30 01:01:54 2007 -0500
+
+    PPC4xx: Remove sdram.h from board/lwmon5
+
+    These definitions are now in "include/ppc440.h".
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit ef16fccf96e55eab93fe25d03ebe2e9b56e5332b
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sun Dec 30 01:01:32 2007 -0500
+
+    PPC4xx: Use common code for LWMON5 board SDRAM support
+
+    This patch also modifies the functionality of the code so that the data-eye
+    search is now done with with the cache disabled.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 62cc3951ab72135d9c101f1845b794e63a0fa189
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sun Dec 30 01:01:14 2007 -0500
+
+    PPC4xx: Remove sdram.h from board/amcc/sequoia
+
+    These definitions are now in "include/ppc440.h".
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit ce3902e1765bbfb07cf5bbe98be9a68e3009996a
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sun Dec 30 01:00:50 2007 -0500
+
+    PPC4xx: Use common code for Sequoia board SDRAM support
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 8b0c5c127690335758100c25eaec2b84db97c101
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 16:58:41 2007 +0100
+
+    net: Add CONFIG_NET_DO_NOT_TRY_ANOTHER option
+
+    When CONFIG_NET_DO_NOT_TRY_ANOTHER is defined U-Boot's
+    networking stack does not automatically switch to
+    another interface. This patch does not touch the default
+    behavior.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
+
+commit 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32
+Author: Upakul Barkakaty <upakul@gmail.com>
+Date:  Thu Nov 29 12:16:13 2007 +0530
+
+    NET: Proper return code handling in eth_init() function in file eth.c
+
+    This patch modifies the return code handling in the eth_init()
+    function, to be compatible with the handling of the return codes in
+    the other network stack files. It now returns a 0 on Success and -1 on
+    error.
+
+    Signed-off-by: Upakul Barkakaty <upakul.barkakaty@conexant.com>
+    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
+
+commit 5ca2d0953e4579a80810966cca2077e20d912c97
+Author: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+Date:  Mon Nov 19 20:27:04 2007 +0900
+
+    net/eth.c: Fix env_enetaddr signed overflow
+
+    Assigning the output of simple_strtoul(CB:A9:87:65:43:21) to `char', we are
+    warned as below:
+
+      U-Boot 1.2.0 (Aug 30 2007 - 08:27:37)
+
+      DRAM:  256 MB
+      Flash: 32 MB
+      In:    serial
+      Out:   serial
+      Err:   serial
+      Net:   NEC-Candy
+      Warning: NEC-Candy MAC addresses don't match:
+      Address in SROM is        00:00:4C:80:92:A2
+      Address in environment is  FFFFFFCB:FFFFFFA9:FFFFFF87:65:43:21
+
+    This patch changes env_enetaddr type from `char' to `unsigned char'.
+
+    Cc: Masaki Ishikawa <ishikawa-masaki@cnt.mxe.nes.nec.co.jp>
+    Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
+
+commit f85b60710571b37293d2233933b76e2aa3db5635
+Author: Rafal Jaworowski <raj@semihalf.com>
+Date:  Thu Dec 27 18:19:02 2007 +0100
+
+    Introduce new eth_receive routine
+
+    The purpose of this routine is receiving a single network frame, outside of
+    U-Boot's NetLoop(). Exporting it to standalone programs that run on top of
+    U-Boot will let them utilise networking facilities. For sending a raw frame
+    the already existing eth_send() can be used.
+
+    The direct consumer of this routine is the newly introduced API layer for
+    external applications (enabled with CONFIG_API).
+
+    Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
+    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com>
+    Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
+
+commit 5c740711f0ea5b51414b341b71597c4a0751be74
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Thu Jan 3 10:41:04 2008 -0600
+
+    8610: Move include of config.h earlier.
+
+    Include config.h earlier in the set of #includes
+    so as to avoid a incidental and duplicate definition
+    of CFG_CACHELINE_SIZE.
+
+    Signed-off-by: Jon Loeliger
+
+commit 61d3421bdea090bd0399b14c3e10a3bebcc8d5ff
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Dec 4 10:53:34 2007 -0600
+
+    Don't slam #undef DEBUG in the 8641HPCN config file.
+
+    Doing so prevents it from being individually set
+    and useful in other files.
+
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit ea9f7395ec362584e5e4f266bd0b0c4422cf6a4c
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Wed Nov 28 14:47:18 2007 -0600
+
+    Convert MPC8641HPCN to use libfdt.
+
+    Assumes the presence of the aliases node in the DTS to
+    locate the ethernet, pci and serial nodes for fixups.
+
+    Use consistent fdtaddr and fdtfile in environment variables.
+
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit ce37422d0002e10490e268392e0c4e3028e52cec
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Jan 2 14:06:26 2008 +0100
+
+    cfi_flash: Fix bug in flash_isset() to use correct 32bit function
+
+    This bug was detected on the LWMON5 target which has 2 Intel 16bit wide
+    flash chips connected to a 32bit wide port.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 1182e9f8e3b92fc372d64943293de53daa2e26cf
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 2 15:58:44 2008 +0100
+
+    Fix compile problem introduced by "cleanup" commit 3dfd708c
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 1aaab9bfae0b3b2ee2b418c22c651280ee7b65c7
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 2 15:54:45 2008 +0100
+
+    Make scripts and Makefiles POSIX compliant
+
+    The bash builtin versions of the "test" (resp. "[") command allow
+    using "==" for string comparisons, but POSIX compatible implemen-
+    tations (like /usr/bin/test) insist on using "=" only. On such systems
+    you will see:
+
+       $ /usr/bin/test a == a && echo OK
+       /usr/bin/test: ==: binary operator expected
+
+    This patch fixes Makefiles and scripts to use POSIX style.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 3dfd708cc1b2a966ad454ca9ed125dd17dbadbcc
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Jan 2 12:38:43 2008 +0100
+
+    Minor coding style cleanup.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit e174ac34adf5d5653df12bc3cf19c52063a71269
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 28 17:29:56 2007 +0100
+
+    ppc4xx: Coding style cleanup
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8ba132cab18ae438b6dd5b0214c28a8fc0d976e5
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:07:24 2007 +0100
+
+    ppc4xx: Complete PMC440 board support
+
+    This patch brings the PMC440 board configuration file.
+    Finally it enables the PMC440 board support.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 407843a582560fc5231299561ab3c2b6b6cd3397
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:07:18 2007 +0100
+
+    ppc4xx: Add FPGA support and BSP commands for PMC440 boards
+
+    This patch adds some BSP commands and FPGA booting support
+    for esd's PMC440 boards.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 72c5d52aedcce35e4b4fa5895605554825b6a76f
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:07:14 2007 +0100
+
+    ppc4xx: Add initial esd PMC440 board files
+
+    This patch adds the first files for the new esd PMC440 boards.
+    The next two patches will complete the PMC440 board support.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit f6e0f1f61896ce7729ba1bcea2ffbd138d3947f5
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:10:36 2007 +0100
+
+    ppc4xx: Add EEPROM write protection for PLU405 boards + misc. updates
+
+    - add EEPROM write protection for esd PLU405 boards.
+    - initialize NAND GPIOs
+    - use correct io accessors
+    - cleanup
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 77660c4b59055d621d2a8595bd4c18bb277268fc
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:10:44 2007 +0100
+
+    ppc4xx: use correct io accessors for esd's LCD code
+
+    This patch fixes esd's LCD dectection code to work correctly with
+    newer gcc versions.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit b56bd0fcfc1c73db722e3462c8a9bf607ba7775e
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 28 17:10:42 2007 +0100
+
+    ppc4xx: Maintenance patch for VOH405 boards
+
+    - add EEPROM write protection
+    - initialize NAND GPIOs
+    - use correct io accessors
+    - slow down I2C clock to 100kHz
+    - enable ext. I2C bus
+    - cleanup
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit c05569066dbcba3fdf36d4d1943df265dc316a86
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 28 16:08:08 2007 +0100
+
+    ppc4xx: Enable 405EP PCI arbiter per default on all boards
+
+    In an attmemt to clean up the 4xx start.S file, I removed the enabling
+    of the internal 405EP PCI arbiter. This is needed for multiple other
+    405EP platforms, like most of the esd 405EP. Now the internal PCI
+    arbiter is enabled again per default as it has been before.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+    Acked-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit bec9264616fb78273a1d93e87ff4b0b67c7bec1b
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 28 15:53:46 2007 +0100
+
+    ppc4xx: Fix bug in cpu_init.c (405EP instead of 450EP)
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+    Acked-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit fb83a65c60ab5ca12358b75f1257e5eee6cdbf79
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 28 06:06:04 2007 +0100
+
+    ppc4xx: Fix compilation problem of kilauea/haleakala nand booting target
+
+    Use correct link to nand_ecc now located in drivers/mtd/nand/ for the
+    platforms mentioned above.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit b568fd25574181a3b12ae3d66b2913903442cb83
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Thu Dec 27 17:03:46 2007 +0100
+
+    Remove CPCI440 board
+
+    This board never left prototyping state and it
+    became a millstone round my neck. So remove it.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit c591dffe0cbacd896ccbad06011fe6d6afa080da
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Thu Dec 27 11:28:51 2007 -0500
+
+    Add support for Korat PPC440EPx board
+
+    These patches add support for the PPC440EPx-based "Korat" board to
+    U-Boot.  They are based primarily on support for the Sequoia board.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 87dc096829e6a6363f4fdd73653b0093a85adbe0
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:16:25 2007 -0500
+
+    Add configuration file for Korat board
+
+    This patch supplies the configuration file for the Korat PPC440EPx-
+    processor board.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 8eb52d5d982b764b39c88d9d1064d56c5397bfa5
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:16:11 2007 -0500
+
+    Add denali_data_eye.o and denali_spd_ddr2.o to PPC4xx Makefile
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit aba19604d848b2838cfb9ebe818909e6a216058e
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Thu Dec 27 10:54:48 2007 -0500
+
+    Add 440EPx DDR2 SPD DIMM support
+
+    This patch adds SPD DDR2 support for the 440EPx ("Denali") SDRAM
+    controller.  It should also work on the 440GRx.  It is based on the DDR2
+    SPD code for the 440EP/440EPx, but makes no provision for DDR1 support.
+
+    This code has been tested on prototype Korat boards with three Kingston
+    DIMMS: 512 MiB ECC (one rank), 512 MiB non-ECC (one rank) and 1 GiB ECC
+    (two ranks).  The Korat board has a single DIMM socket, but support has
+    been provided (though not tested) for boards with two DIMM sockets.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 8a24a6963002cb867d5a6b70e3560f0b1467f55f
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:15:30 2007 -0500
+
+    Copy 440EPx/GRx SDRAM data-eye search to common directory
+
+    This patch creates a non-board-specific file for performing the SDRAM
+    data-eye search.  It also adds ECC error checking to the test of valid
+    data on readback when ECC is enabled.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit c46f53333b22b1f9098676bea8884fc7db820cf3
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:15:13 2007 -0500
+
+    Add definitions for 440EPx/GRx SDRAM controller to ppc440.h
+
+    This patch adds the Denali SDRAM controller definitions to "ppc440.h".
+    It also fixes two typos in the definitions, so the board-specific
+    "sdram.h" files containing these definitions are also fixed to avoid
+    compiler warnings.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit c348578bf612d0c56d8d376d23cae16defbd86af
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Thu Dec 27 10:50:55 2007 -0500
+
+    Add Ethernet 1000BASE-X support for PPC4xx
+
+    This patch adds a new switch: "CONFIG_PHY_DYNAMIC_ANEG".  When this symbol
+    is defined, the PHY will advertise it's capabilities for autonegotiation
+    based on the capabilities shown in the PHY's status registers, including
+    1000BASE-X.  When "CONFIG_PHY_DYNAMIC_ANEG" is not defined, the PHY will
+    advertise hard-coded capabilities, as before.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 9e2c347151db5ae8acf5f18b99493cd53e6637e3
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Thu Dec 27 09:52:17 2007 -0500
+
+    Add driver for National Semiconductor LM73 temperature sensor
+
+    This driver is based on the driver for the LM75.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 12618278688ea9b3d76536960a5ad2e3790fac40
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:14:00 2007 -0500
+
+    Add driver for STMicroelectronics M41T60 RTC
+
+    This driver is based on the driver for the M41T11. In the intended
+    application, the RTC will be powered by a large capacitor, rather than a
+    battery.  The driver therefore checks to see whether the RTC has lost
+    power.  The chip's OUT bit is normally reset from its power-up state.  If
+    the OUT bit is read as set, or if the date and time are not valid, then the
+    RTC is assumed to have lost power, and its date and time are reset to
+    1900-01-01 00:00:00.
+
+    Support for adjusting the speed of the clock to improve accuracy is
+    provided through an environment variable.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit d3471173e14b7544bb60339eda8d3d3906694b0a
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:34:39 2007 -0500
+
+    Use out_be32() and friends to access memory-mapped registers in sequoia.c
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit c68f59fe3ec16769f82b5fca7421983c336d3aac
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:34:20 2007 -0500
+
+    Use definitions from "asm-ppc/mmu.h" in init.S for Sequoia
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 0d9cdeac1d3fa8d62ed7d883acc950c364f5bda8
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Dec 22 15:23:50 2007 -0500
+
+    Cosmetic changes to ECC POST for AMCC Denali core
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 2e583d6c81034f80a267b89fa55498ae063ccef1
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Dec 26 20:20:19 2007 +0100
+
+    ppc4xx: Fix compilation problem in 405 cache POST test
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 42d55ea0bde06e47d5a3b49b0d91002acd8e5708
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Dec 22 12:20:09 2007 +0100
+
+    ppc4xx: Move virtual address of POST cache test to bigger address
+
+    On Sequoia & LWMON5 the virtual address of the POST cache test is now
+    moved to a bigger address. This enables usage of more memory on those
+    boards.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit d91722102cf63f77a0148ed3f3d54a26d87575e9
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Dec 22 12:18:26 2007 +0100
+
+    ppc4xx: Fix problem in 44x cache POST routine
+
+    As repoted by Larry Johnson, running "diag run cache" caused a crash
+    in U-Boot. This problem was introduced by a patch that removed the
+    TLB entry for the cache test after the test has completed. Since this
+    TLB was only setup once, a 2nd attempt to run this cache test
+    failed with a crash. Now this TLB entry is created every time the
+    routine is called.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit b0265b576bb8fa9465f99e99c323768b562fadc2
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 21 07:51:29 2007 +0100
+
+    ppc4xx: Update Makalu fdt support
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit bf8324e4a50758daff8cddd04c6a2ff8ed775bea
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Dec 19 09:05:40 2007 +0100
+
+    ppc4xx: Add fdt support to AMCC Katmai eval board
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 328a340392a5df9aaf00792be989df73e750859e
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Dec 18 08:44:51 2007 +0100
+
+    ppc4xx: fdt: Cleanup setup of cpu node setup
+
+    Now the cpu node setup ("timebase-frequency" and "clock-frequency") is
+    without using the absolute path to the cpu node. This makes it possible
+    to use this U-Boot version with both versions of cpu-node naming
+    "cpu@0" and the former "PowerPC,440EPx@0".
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 7812bc4a2e2436ebbc0ce5b4e99c1dfc2e77eb5b
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Dec 17 17:26:21 2007 +0100
+
+    ppc4xx: Fix lwmon5 compilation problem
+
+    Now that the 440EPx ECC test is not board specific anymore
+    remove this Makefile.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 42ed33ffe135f618680f9d6e9712eb35a85bcb62
+Author: Anatolij Gustschin <agustschin@t-online.de>
+Date:  Wed Dec 5 17:43:20 2007 +0100
+
+    Fix ppc4xx clear_bss() code
+
+    ppc4xx clear_bss() fails if BSS segment size is not
+    divisible by 4 without remainder. This patch provides
+    fix for this problem.
+
+    Signed-off-by: Anatolij Gustschin <agust@denx.de>
+
+commit 85dc2a7f82d11e17f0ca2a448118aed7f7a4b85d
+Author: Niklaus Giger <niklausgiger@gmx.ch>
+Date:  Fri Nov 30 18:35:11 2007 +0100
+
+    PPC4xx: Minimal changes to add vxWorks support
+
+    Signed-off-by: Niklaus Giger <niklaus.giger@netstal.com>
+
+commit 052440b022ca8981d39b6f8c10d1aa6326f47480
+Author: Markus Klotzbücher <mk@denx.de>
+Date:  Fri Nov 23 13:09:18 2007 +0100
+
+    ppc4xx: Add CONFIG_BOOTP_SUBNETMASK to Sequoia board config
+
+    When using dhcp/bootp the "netmask" environment variable is not
+    set because CONFIG_BOOTP_SUBNETMASK is not defined. But usually this is
+    desireable, so the following patch adds this this option to the board
+    config.
+
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit a724a9b40c7fbeb6ade193ca52321b441eaecb4e
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Oct 27 12:48:15 2007 -0400
+
+    Fix/enhance ECC POST for 440EPx/GRx
+
+    This patch allows the ECC POST to be used for different boards with the
+    PPC440 Denali SDRAM controller.  Modifications include skipping the test
+    if ECC is not enabled (as for non-ECC DIMMs) and adding synchronization
+    to prevent timing errors.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit 454a6cf8d498f70d2b3e18f07837603eb24b12d4
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Sat Oct 27 12:48:05 2007 -0400
+
+    PPC4xx: Move/rename ECC POST for 440EPx/GRx
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+
+commit c29d2d3680046d430022c55e50fcb27f5866517e
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 14 11:20:33 2007 +0100
+
+    ppc4xx: use correct io accessors for 4xx ethernet POST
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit ba79fde58a48c0a6ff8e2a96caba951594142203
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Dec 14 11:19:56 2007 +0100
+
+    ppc4xx: fix flush + invalidate_dcache_range arguments
+
+    flush + invalidate_dcache_range() expect the start and stop+1 address.
+    So the stop address is the first address behind (!) the range.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 871e6ce188a7c6bc7321bcf8372857035d20f1cd
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Dec 14 08:41:29 2007 +0100
+
+    ppc4xx: fdt: use fdt_fixup_ethernet()
+
+    By using aliases in the dts file, the ethernet node fixup is
+    much easier with the recently added functions.
+
+    Please note that the dts file needs the aliases for this to work.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 136288847e3b04f2ff357a067ad45e10afa0a24c
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Dec 13 14:52:53 2007 +0100
+
+    ppc4xx: Bring 4xx fdt support up-to-date
+
+    This patch update the 4xx fdt support. It enabled fdt booting
+    on the AMCC Kilauea and Sequoia for now. More can follow later
+    quite easily.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 0dc80e2759fba859ccc4cdadc633577ca2971f3e
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Dec 27 07:50:54 2007 +0100
+
+    cfi_flash: Add missing check for erased dest to flash_write_cfibuffer()
+
+    The check for an sufficiently erased destination was missing in the
+    buffered write function of the cfi flash driver (when
+    CFG_FLASH_USE_BUFFER_WRITE is defined). This patch adds this check to that
+    writing to such a region will fail with the currect error message.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 33ed73bc0e38d0f2b5c183d4629d8f207e5b9994
+Author: Martin Krause <martin.krause@tqs.de>
+Date:  Mon Nov 12 10:56:17 2007 +0100
+
+    Some configuration updates for the TQM5200 based TB5200 board:
+
+    - enable command line history
+    - increase malloc space (because of bigger flash sectors)
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit e318d9e9021a0af7508171f84ed09d0e79f0284e
+Author: Martin Krause <martin.krause@tqs.de>
+Date:  Thu Sep 27 11:10:08 2007 +0200
+
+    TQM8xx: use the CFI flash driver on all TQM8xx boards
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit 11d9eec479b470eab9242ab937fca70a876d9376
+Author: Martin Krause <martin.krause@tqs.de>
+Date:  Wed Sep 26 17:55:56 2007 +0200
+
+    TQM885D: adjust for doubled flash sector size + some minor fixes
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit 22d1a56cbfb0bff34f477b4db6a55d076d829b83
+Author: Jens Gehrlein <jens.gehrlein@tqs.de>
+Date:  Wed Sep 26 17:55:54 2007 +0200
+
+    TQM885D: Exchanged SDRAM timing by a more relaxed timing.
+
+    CAS-Latency=2, Write Recovery Time tWR=2
+    The max. supported bus frequency is 66 MHz. Therefore, changed
+    threshold to switch from 1:1 mode to 2:1 from 80 MHz to 66 MHz.
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit b988b8cd443989be65161888eea0127ad03f846f
+Author: Martin Krause <martin.krause@tqs.de>
+Date:  Wed Sep 26 17:55:56 2007 +0200
+
+    TQM885D: use calculated cpuclk instead of measuring it
+
+    On the TQM885D the measurement of cpuclk with the PIT reference
+    timer ist not necessary. Since all module variants use the same
+    external 10 MHz oscillator, the cpuclk only depends on the PLL
+    configuration - which is readable by software.
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit 492c7049869348d31168de8dad89651315e468e0
+Author: Jens Gehrlein <jens.gehrlein@tqs.de>
+Date:  Thu Sep 27 14:54:46 2007 +0200
+
+    TQM885D: fix SDRAM refresh
+
+    At 133 MHz the current SDRAM refresh rate is too fast
+    (measured 4 * 1.17 us).
+    CFG_MAMR_PTA changes from 39 to 128. This result
+    in a refresh rate of 4 * 7.8 us at the default clock
+    66 MHz. At 133 MHz the value will be then 4 * 3.8 us.
+    This is a compromise until a new method is found to
+    adjust the refresh rate.
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit dabad4b9bc46908e301f73ce76b38b23626a96e9
+Author: Jens Gehrlein <jens.gehrlein@tqs.de>
+Date:  Thu Sep 27 14:54:46 2007 +0200
+
+    TQM860M: Support for 10col SDRAMs, max. 128 MiB
+
+    Signed-off-by: Martin Krause <martin.krause@tqs.de>
+
+commit 61fb15c516fef5631e305f1976d7b3a679725856
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Thu Dec 27 01:52:50 2007 +0100
+
+    Fix coding style issues; update CHANGELOG.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 467bcee11fe26ad422f2de971aa70866079870f2
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Dec 14 15:36:18 2007 +0100
+
+    cfi_flash: Add manufacturer-specific fixups
+
+    Run fixups based on the JEDEC manufacturer ID independent of the
+    command set ID.
+
+    This changes current behaviour: Previously, geometry reversal for AMD
+    chips were done based on the command set ID, while they are now done
+    based on the JEDEC manufacturer and device ID.
+
+    Also add fixup for top-boot Atmel chips. A fixup is needed for
+    AT49BV6416(T) too, but since u-boot currently only reads the low byte
+    of the device ID, there's no way to tell it apart from AT49BV642D,
+    which should not have this fixup. Since AT49BV642D support is
+    necessary to get ATNGW100 board support into mainline, I've commented
+    out the fixup for now.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 0ddf06ddf6b4bd057ad4c5f0dffea7870ba06a2a
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Dec 14 15:36:17 2007 +0100
+
+    cfi_flash: Add cmdset-specific init functions
+
+    Move things like reading JEDEC IDs and fixing up geometry reversal
+    into separate functions. The geometry reversal fixup is now performed
+    by altering the qry structure directly, which makes the sector init
+    code slightly cleaner.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit e23741f4a6d8047520ef0d4971762749b3587d32
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Dec 14 15:36:16 2007 +0100
+
+    cfi_flash: Read whole QRY structure in one go
+
+    Read out the whole CFI Standard Query structure after successful cfi
+    identification. This allows subsequent code to access this information
+    directly without having to go through flash_read_uchar() and friends.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit df9c25ea04b38a0e05d4f8c73c5cc144cdafa7db
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Dec 17 11:02:44 2007 +0100
+
+    AVR32: Fix logic inversion in disable_interrupts()
+
+    disable_interrupts() should return nonzero if interrupts were
+    _enabled_ before, not disabled.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit acac475212cbedb17b321a363a1c878e2b47b37f
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Dec 14 16:51:22 2007 +0100
+
+    AVR32: Enable interrupts at bootup
+
+    The timer code depends on the timer interrupt to keep track of the
+    upper 32 bits of the cycle counter. This obviously doesn't work when
+    interrupts are disabled the whole time.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 9570bcd87f4db255514f43b6701746c412f8fef0
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Nov 15 10:03:45 2007 +0100
+
+    AVR32: Fix wrong pin setup for USART3
+
+    As reported by Gerhard Berghofer:
+
+    in "gpio_enable_usart3" the correct pins for USART 3 are PB17 and PB18
+    instead of PB18 and PB19.
+
+    which is obviously correct. There's currently no code that uses
+    USART3, but custom boards may run into problems.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 09ea0de03dcc3ee7af045b0b572227bda2c1c918
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Nov 1 12:44:20 2007 +0100
+
+    README: Remove ATSTK1000 daughterboard list
+
+    As noted by Kim Phillips, these lists tend to become out of date.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit c81cbbad21cb0ae983e2e796211202234cdc8be2
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Tue Oct 30 14:56:36 2007 +0100
+
+    Add ATSTK100[234] to MAINTAINERS
+
+    Add all the ATSTK1000 daughterboards to MAINTAINERS along with their
+    "mother". Also update the entry for ATSTK1000 to be not only about the
+    AP7000 CPU; it's intended to handle all CPUs in the AT32AP family.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 64ff2357b1727213803591813dbc779c924bf772
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Oct 29 13:02:54 2007 +0100
+
+    AVR32: Add support for the ATSTK1004 board
+
+    ATSTK1004 is a daughterboard for ATSTK1000 with the AT32AP7002 CPU,
+    which is a derivative of AT32AP7000.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 667568db157f374b85abd7e03596ddd1f0b25681
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Oct 29 13:02:54 2007 +0100
+
+    AVR32: Add support for the ATSTK1003 board
+
+    ATSTK1003 is a daughterboard for ATSTK1000 with the AT32AP7001 CPU,
+    which is a derivative of AT32AP7000.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 5fee84a794a51ec830548cda485a770efb018b92
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Oct 29 13:23:33 2007 +0100
+
+    AVR32: Make some AT32AP700x peripherals optional
+
+    Add a chip-features file providing definitions of the form
+
+    AT32AP700x_CHIP_HAS_<peripheral>
+
+    to indicate the availability of the given peripheral on the currently
+    selected chip.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 36f28f8a9605ee5dcfa330482cfc62171261af97
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Oct 29 13:09:56 2007 +0100
+
+    AVR32: Rename at32ap7000 -> at32ap700x
+
+    The SoC-specific code for all the AT32AP700x CPUs is practically
+    identical; the only difference is that some chips have less features
+    than others. By doing this rename, we can add support for the AP7000
+    derivatives simply by making some features conditional.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 4d5fa99c73f354e7cf985efcf417ea55ca2f6a5e
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Jun 29 18:22:34 2007 +0200
+
+    atmel_mci: Show SR when block read fails
+
+    Show controller status as well as card status when an error occurs
+    during block read.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 8697e6a19b10f514511b6a9c86de88bd108c4f8d
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Dec 13 14:52:53 2007 +0100
+
+    ppc4xx: Bring 4xx fdt support up-to-date
+
+    This patch update the 4xx fdt support. It enabled fdt booting
+    on the AMCC Kilauea and Sequoia for now. More can follow later
+    quite easily.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 12d30aa79779c2aa7a998bbae4c075f822a53004
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:34 2007 +0100
+
+    cfi_flash: Use map_physmem() and unmap_physmem()
+
+    Use map_physmem() and unmap_physmem() to convert from physical to
+    virtual addresses. This gives the arch a chance to provide an uncached
+    mapping for flash accesses.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 4d7d6936eb29af7cca330937808312aa5f61454d
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:33 2007 +0100
+
+    Introduce map_physmem() and unmap_physmem()
+
+    map_physmem() returns a virtual address which can be used to access a
+    given physical address without involving the cache. unmap_physmem()
+    should be called when the virtual address returned by map_physmem() is
+    no longer needed.
+
+    This patch adds a stub implementation which simply returns the
+    physical address cast to a uchar * for all architectures except AVR32,
+    which converts the physical address to an uncached virtual mapping.
+    unmap_physmem() is a no-op on all architectures, but if any
+    architecture needs to do such mappings through the TLB, this is the
+    hook where those TLB entries can be invalidated.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit cdbaefb5f5f03e54455d0439dcf6dbd97ead1f9d
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:32 2007 +0100
+
+    cfi_flash: Introduce read and write accessors
+
+    Introduce flash_read{8,16,32,64) and flash_write{8,16,32,64} and use
+    them to access the flash memory. This makes it clearer when the flash
+    is actually being accessed; merely dereferencing a volatile pointer
+    looks just like any other kind of access.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 812711ce6b3a386125dcf0d6a59588e461abbb87
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:31 2007 +0100
+
+    Implement __raw_{read,write}[bwl] on all architectures
+
+    This adds implementations of __raw_read[bwl] and __raw_write[bwl] to
+    m68k, ppc, nios and nios2. The m68k and ppc implementations were taken
+    from Linux.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit be60a9021c82fc5aecd5b2b1fc96f70a9c81bbcd
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sat Oct 6 18:55:36 2007 +0200
+
+    cfi_flash: Reorder functions and eliminate extra prototypes
+
+    Reorder the functions in cfi_flash.c so that each function only uses
+    functions that have been defined before it. This allows the static
+    prototype declarations near the top to be eliminated and might allow
+    gcc to do a better job inlining functions.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 3055793bcbdf24b1f8117f606ffb766d32eb766f
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:29 2007 +0100
+
+    cfi_flash: Make some needlessly global functions static
+
+    Make functions not declared in any header file static.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 7e5b9b471518c5652febc68ba62b432193d6abf4
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Thu Dec 13 12:56:28 2007 +0100
+
+    cfi_flash: Break long lines
+
+    This patch tries to keep all lines in the cfi_flash driver below 80
+    columns. There are a few lines left which don't fit this requirement
+    because I couldn't find any trivial way to break them (i.e. it would
+    take some restructuring, which I intend to do in a later patch.)
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 42026c9cb3a76849b41e6e24abfb7b56807a5c1a
+Author: Bartlomiej Sieka <tur@semihalf.com>
+Date:  Tue Dec 11 13:59:57 2007 +0100
+
+    CFI: synchronize command offsets with Linux CFI driver
+
+    Fixes non-working CFI Flash on the Inka4x0 board.
+
+    Signed-off-by: Bartlomiej Sieka <tur@semihalf.com>
+
+commit 8ff3de61fc5f9b3b21647bce081a3b7f710f0d4d
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Fri Dec 7 12:17:34 2007 -0600
+
+    Handle MPC85xx PCIe reset errata (PCI-Ex 38)
+
+    On the MPC85xx boards that have PCIe enable the PCIe errata fix.
+    (MPC8544DS, MPC8548CDS, MPC8568MDS).
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 82ac8c97145a4c3bf8b3dbfad00fa96e920f9b9c
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Fri Dec 7 12:04:30 2007 -0600
+
+    Update Freescale MPC85xx ADS/CDS/MDS board config
+
+    * Enabled CONFIG_CMD_ELF
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit d435793229ce29a42797c1edc39f5b34f987f91a
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Fri Dec 7 04:59:26 2007 -0600
+
+    Handle Asynchronous DDR clock on 85xx
+
+    The MPC8572 introduces the concept of an asynchronous DDR clock with
+    regards to the platform clock.
+
+    Introduce get_ddr_freq() to report the DDR freq regardless of sync/async
+    mode.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 22abb2d2eaf7b795a6923c6273ec9cb53fda9a10
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 10:34:28 2007 -0600
+
+    Update Freescale MPC85xx ADS/CDS/MDS board config
+
+    * Removed some misc environment setup
+    * Enabled CONFIG_CMDLINE_EDITING
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 415a613babb84d5e5d5b42e8e553868c71fc3a64
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 10:47:44 2007 -0600
+
+    Move the MPC8541/MPC8555/MPC8548 CDS board under board/freescale.
+
+    Minor path corrections needed to ensure buildability.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit c2d943ffbfd3359b3b45d177b437379d2cb86fbf
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 10:16:18 2007 -0600
+
+    Move the MPC8540 ADS board under board/freescale.
+
+    Minor path corrections needed to ensure buildability.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 870ceac5b3a3486c109396e005af81ae762b5710
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 10:14:50 2007 -0600
+
+    Move the MPC8560 ADS board under board/freescale.
+
+    Minor path corrections needed to ensure buildability.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit acbca876fb3fec25cd9c55b0efc81ff618ff5262
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 10:13:47 2007 -0600
+
+    Move the MPC8568 MDS board under board/freescale.
+
+    Minor path corrections needed to ensure buildability.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit a853d56c59b33415304531443633808736acfc6e
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 02:18:59 2007 -0600
+
+    Use standard LAWAR_TRGT_IF_* defines for LAW setup on 85xx
+
+    We already had defines for LAWAR_TRGT_IF_* that we should use
+    rather than creating new ones.  Also, added some missing defines for
+    PCIE targets.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 04db400892da37b76a585e332a0c137954ad2015
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 02:10:09 2007 -0600
+
+    Stop using immap_t on 85xx
+
+    In the future the offsets to various blocks may not be in same location.
+    Move to using CFG_MPC85xx_*_ADDR as the base of the registers
+    instead of getting it via &immap.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 2714223f8e04ab3e4133ff65872eef366d90bfea
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 01:23:09 2007 -0600
+
+    Remove CONFIG_OF_FLAT_TREE related code from mpc85xx since we now use libfdt
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit c480861bf000156e6a3e932c258db59ff2212dd3
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 01:06:19 2007 -0600
+
+    Update MPC8568 MDS to use libfdt
+
+    Updated the MPC8568 MDS config to use libfdt and assume use of aliases for
+    ethernet, pci, and serial for the various fixups that are done.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 1563f56e0c68f6920f956382d6d13bee3f01c0f7
+Author: Haiying Wang <Haiying.Wang@freescale.com>
+Date:  Wed Nov 14 15:52:06 2007 -0500
+
+    Add PCI Express support on MPC8568MDS
+
+    Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit b90d25497625b90ffa3f2911a0895ca237556ff5
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 00:11:44 2007 -0600
+
+    Update MPC85xx CDS to use libfdt
+
+    Updated the MPC85xx CDS config to use libfdt and assume use of aliases for
+    ethernet, pci, and serial for the various fixups that are done.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 0fd5ec66b10521a057ad73e69ab5f0f9eafba255
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 28 22:54:27 2007 -0600
+
+    Update MPC8540 ADS to use libfdt
+
+    Updated the MPC8540 ADS config to use libfdt and assume use of aliases for
+    ethernet, pci, and serial for the various fixups that are done.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 5ce715802f6c50dc78b3405b92f184b1e3710519
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 28 22:40:31 2007 -0600
+
+    Update MPC8560 ADS to use libfdt
+
+    Updated the MPC8560 ADS config to use libfdt and assume use of aliases for
+    ethernet, pci, and serial for the various fixups that are done.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit aafeefbdb8b029f5ca2a195598d0a501a606eea9
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 28 00:36:33 2007 -0600
+
+    Stop using immap_t for cpm offset on 85xx
+
+    In the future the offsets to various blocks may not be in same location.
+    Move to using CFG_MPC85xx_CPM_ADDR as the base of the CPM registers
+    instead of getting it via &immap->im_cpm.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit f59b55a5b8fcadaa99781ba48e7a38e956afa527
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Tue Nov 27 23:25:02 2007 -0600
+
+    Stop using immap_t for guts offset on 85xx
+
+    In the future the offsets to various blocks may not be in same location.
+    Move to using CFG_MPC85xx_GUTS_ADDR as the base of the guts registers
+    instead of getting it via &immap->im_gur.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 50c03c8cf494d91cdec39670d95337c743e16ec9
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Tue Nov 27 22:42:34 2007 -0600
+
+    Update MPC8544 DS config
+
+    * Removed HAS_ETH2/HAS_ETH3 - MPC8544 only has TSEC1/2
+    * Removed some misc environment setup
+    * Moved to using fdtfile & fdtaddr as fdt env var names
+    * Enabled CONFIG_CMDLINE_EDITING
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit addce57e2e4c49e77ffb2020a84690713bb18b47
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 17:12:24 2007 -0600
+
+    Update MPC8544DS to use libfdt
+
+    Updated the MPC8544DS config to use libfdt and assume use of aliases for
+    ethernet, pci, and serial for the various fixups that are done.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit f852ce72f100cabd1f11c21c085a0ad8eca9fb65
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Nov 29 00:15:30 2007 -0600
+
+    Add libfdt based ft_cpu_setup for mpc85xx
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 3b9abdc448a1c2c6a4c2aa292724b4d1a05166a9
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Dec 11 13:38:19 2007 +0100
+
+    ppc4xx: Correct GPIO offset in gpio_config()
+
+    Thanks to Gary Jennejohn for pointing this out.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8809a2713b1ceaf3da55d9d785470294f15de06a
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Dec 11 11:46:01 2007 +0100
+
+    rtc: Fix merging problem
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 7cfc12a7dcfdb350e2ab76db4dafcc30f7e77c2b
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Dec 8 14:47:34 2007 +0100
+
+    ppc4xx: 405EX: Correctly enable USB pins
+
+    This patch selects the USB data pins in the 405EX GPIO and MFC (multi
+    function control) registers. This is done for the AMCC Kilauea and
+    Makalu eval boards.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 9692c2734a47f23b44a0f68042a3e2ca8d1bfb39
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Dec 8 08:25:09 2007 +0100
+
+    CFI: Coding style cleanup
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 81b20ccc2d795ae9a1199db5a50ad9c28d1e4d22
+Author: Michael Schwingen <michael@schwingen.org>
+Date:  Fri Dec 7 23:35:02 2007 +0100
+
+    CFI: support JEDEC flash roms in CFI-flash framework
+
+    The following patch adds support for non-CFI flash ROMS, by hooking into the
+    CFI flash code and using most of its code, as recently discussed here in the
+    thread "Mixing CFI and non-CFI flashs".
+
+    Signed-off-by: Michael Schwingen <michael@schwingen.org>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit c01b17dd856fa120b2970f50d9598546a4927ec3
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Wed Nov 28 21:24:50 2007 -0500
+
+    Conditionally compile fdt_fixup_ethernet()
+
+    Fix compiler warnings: On boards that don't have ethernets defined,
+    don't compile fdt_fixup_ethernet().
+
+commit 246d4ae6bc282bc1841224e1c5fc49dc925e0bf7
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Tue Nov 27 21:59:46 2007 -0600
+
+    Convert boards that set memory node to use fdt_fixup_memory()
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 151c8b09b35eebe8fd9139cb6c1d91c27b22f058
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 17:06:15 2007 -0600
+
+    Added fdt_fixup_stdout that uses aliases to set linux,stdout-path
+
+    We use a combination of the serialN alias and CONFIG_CONS_INDEX to
+    determine which serial alias we should set linux,stdout-path to.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 3c9272813fad84c691d0e4989bb18a3ffebdebfc
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 14:57:45 2007 -0600
+
+    Add common memory fixup function
+
+    Add the function fdt_fixup_memory() to fixup the /memory node of the fdt
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 9c9109e7fcf7ac2ca19c95b8ac54b8d1c773b157
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 11:19:12 2007 -0600
+
+    Conditionally compile fdt_support.c
+
+    Modify common/Makefile to conditionally compile fdt_support.c based
+    on CONFIG_OF_LIBFDT.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit d88e7ba0980773479e1a64badb293116071b7ef0
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Mon Nov 26 10:41:40 2007 -0600
+
+    Fix build breakage due to libfdt import
+
+    The IDS8247 got lost in the update and need an API update
+    do to rename of functions in libfdt.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 28f384b171bbf1fb2dafb1046e6d259a6b2f8714
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Fri Nov 23 19:43:20 2007 -0500
+
+    Add spaces around the = in the fdt print format.
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit 29592ecba3b932b9b152bcec6c0c0806412db4a3
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Fri Dec 7 01:25:38 2007 +0900
+
+    sh: Moved driver of the SuperH dependence
+
+    The composition of the directory in the drivers/ changed.
+    I moved SuperH serial driver and marubun PCMCIA driver.
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit 41be969f4957115ed7b1fe8b890bfaee99d7a7a2
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Thu Dec 6 10:21:19 2007 +0100
+
+    Release v1.3.1
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit cf5933ba1e97a1cd8f5f24070e820f21d976eaeb
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Thu Dec 6 10:21:03 2007 +0100
+
+    ADS5121 Board: fix compile problem.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit a27044b14a9e93678a82d7b35f202b93e7687abc
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Dec 6 05:58:43 2007 +0100
+
+    ppc4xx: Enable hardware-fix for PCI/DMA errata on AMCC 440SP/SPe boards
+
+    This patch enables the hardware-fix for the PCI/DMA errata's 19+22 by
+    setting the FIXD bit in the SDR0_MFR register. Here a description of the
+    symptoms:
+
+    Problem Description
+    ------------------------------
+    If a DMA is performed between memory and PCI with the DMA 1 Controller
+    using prefetch, and as a result uses a special purpose buffer selected by
+    the PCIXn Bridge Options 1 Register (PCIXn_BRDGOPT1[RBP7] - bits 31-29),
+    the first part of the transfer sequence is performed twice. The
+    PPC440SPe PCI Controller requests more data than was needed such that in
+    the case of enforce memory protection, a host CPU  exception can occur.
+    No data is corrupted, because data transfer is stopped in the PCI
+    Controller. Prefetch enable is specified by setting DMA Configuration
+    Register (I2O0_DMAx_CFG[DXEPD] - bit 31) to 0.
+
+    Behavior that may be observed in a running system
+    ---------------------------------------------------------------------------
+
+    1. DMA performance is decreased because of the double access on the PCI bus
+    interface.
+    2. If an illegal access to some address on the PCI bus is detected at the
+    system level, a machine check or similar system error may occur.
+
+    Workarounds Available
+    ----------------------------------
+
+    1. Do not program prefetch. Note that a prefetch command cannot be programmed
+    without selecting a special purpose buffer.
+    2. To avoid crossing a physical boundary of the PCI slave device, add 512
+    bytes of address to the PCI address range.
+
+    This patch was originally provided by Pravin M. Bathija <pbathija@amcc.com>
+    from AMCC and slighly changed.
+
+    Signed-off-by: Pravin M. Bathija <pbathija@amcc.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit a90921f71d225bf9e0f0fc7b8beadeb8001bf78a
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Dec 4 16:29:48 2007 +0100
+
+    ppc4xx: Yosemite/Yellowstone: Add DTT AD7414 support
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8d4f040a3c15036a6ea25a9c39e7d89fefa8440d
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon Dec 3 00:15:28 2007 +0100
+
+    Prepare for 1.3.1-rc1
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit e15e33433e7c05111968dc9b434a52fd42cbd221
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Nov 30 07:15:41 2007 +0100
+
+    ppc4xx: Kilauea: Add PCIe reset assertion upon power-up
+
+    This manual PCIe reset triggering solves the problem seen with the
+    Intel EPRO/1000 card, which was not detected (link not established)
+    upon power-up reset.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 260eea5676ca46903a335686cc020b29c4ca46fe
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Thu Nov 29 01:21:54 2007 +0900
+
+    sh: Add SuperH boards maintainer to MAINTAINERS file
+
+    Add MS7750SE and MS7722SE's board maintainer to MAINTAINERS file.
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit aa9c4f1d22701a92347c1c81f34d12c8ad3a3747
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Thu Nov 29 00:13:04 2007 +0900
+
+    sh: Add ms7750se support in MAKEALL
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit c7144373427a178332bf9754131c8c34c52c200a
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 27 09:44:53 2007 +0100
+
+    sh: Add sh3 and sh4 support in MAKEALL
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit 130080874a3d28450098481a262c5f7c855e908d
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Sun Nov 25 02:51:17 2007 +0900
+
+    sh: Add document for SuperH.
+
+    This document is a summary of information concerning SuperH of U-Boot.
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit 33ecdc2f9d64926e1a6067b28f3a0aefc3b6d23d
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Sun Nov 25 02:39:31 2007 +0900
+
+    sh: Add marubun's pcmcia driver
+
+    Marubun pcmcia is a chip for PCMCIA used with SuperH.
+    Of course, this can be used even by other architectures.
+    When use this driver, came to be able to use CompactFlash
+    and Ethernet.
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit febd86b969b975289ed948f1ac0eb9722da41ced
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Date:  Sun Nov 25 02:32:13 2007 +0900
+
+    sh: Update SuperH SCIF driver
+
+    - Changed volatile unsigned to vu_.
+    - Changed Makefile for kconfig.
+
+    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+commit 8be760903645af09871be50ad0a6f9ebb62b311d
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Nov 27 11:57:35 2007 +0100
+
+    ppc4xx: Kilauea & Makalu: Fix ext IRQ pin multiplexing
+
+    After an error in the AMCC 405EX users manual now correctly configure
+    IRQ2 (Kilauea)/IRQ0 (Makalu) as alternate 2 signal for external IRQ
+    usage.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit a5f601fd1b1278deae5aa9fc27a232b0d1c1c788
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon Nov 26 19:18:21 2007 +0100
+
+    Cleanup coding style; update CHANGELOG
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 3deca9d44767efd1b83f4b701f0dbf21a7595f7b
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Nov 25 22:39:25 2007 +0100
+
+    MAKEALL: add missing 512x boards in ppc
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit a340c325e668ca7386c2276387681720be9c3757
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Nov 25 18:45:47 2007 +0100
+
+    Makefile : fix tags ctags etags with new drivers organization
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 63362cfc6baa97ae0e37ba2c6ece530fcac9f79e
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Nov 26 15:06:14 2007 +0100
+
+    ppc4xx: Makalu: Change EBC setup for CS0 to enable 400MHz usage
+
+    As suggested by Senao, use a different EBC_PB0AP setup for 400MHz
+    operation.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit ca1ce226287270bb01e25b8e3674c701f12edf19
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Nov 26 15:01:45 2007 +0100
+
+    ppc4xx: Kilauea: Configure pin mux to use ext IRQ2 as interrupt
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 87ddedd6ad804427ce125ceaa076d7a4f74e9d5d
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Nov 25 18:45:47 2007 +0100
+
+    Makefile : fix tags ctags etags with new drivers organization
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 59829cc189378c142c13d2aa8d9a897d8bef3961
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 21:26:56 2007 +0100
+
+    drivers/mtd : move mtd drivers to drivers/mtd
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 318c0b90431f2648552e5ade78833f42652ce859
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 21:17:55 2007 +0100
+
+    drivers/misc : move misc drivers to drivers/misc
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 33daf5b7858807cb4ce4158c2c56524671c14c08
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 21:13:59 2007 +0100
+
+    drivers/block : move block drivers to drivers/block
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 0c698dcaa70275eb8814f665b545547cee013892
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 20:59:50 2007 +0100
+
+    drivers/rtc : move rtc drivers to drivers/rtc
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit f868cc5a50757d94f36c312395481cb0f187d9e6
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 20:14:44 2007 +0100
+
+    drivers/hwmon : move hardware monitor drviers to drivers/hwmon
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 16b195c82a18cbfd164800f17a1ef9db2e48331a
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 19:46:45 2007 +0100
+
+    drivers/input : move input drivers to drivers/input
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit e4558666293364fc3af1c1d9381ca933fa0f1275
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 19:40:11 2007 +0100
+
+    drivers/usb : move usb drivers to drivers/usb
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 1378df792a7ff3abd1bf54a63f5475784f5b083c
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 24 19:33:38 2007 +0100
+
+    drivers/serial : move serial drivers to drivers/serial
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 2439e4bfa111babf4bc07ba20efbf3e36036813e
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Wed Nov 21 21:19:24 2007 +0100
+
+    drivers/net : move net drivers to drivers/net
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 352d259130b349fe9593b8dada641bd78a9659e5
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 20 20:41:48 2007 +0100
+
+    drivers/video : move video drivers to drivers/video
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 73646217186aa17afc8e305c5f06f06dd335eaad
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 20 20:33:09 2007 +0100
+
+    drivers/pcmcia : move pcmcia drivers to drivers/pcmcia
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 93a686ee9c5ddc6fa368c32cfbfde6f6724599fc
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 20 20:28:09 2007 +0100
+
+    drivers/pci : move pci drivers to drivers/pci
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 9162352817579840d7802da6d85872b3ca003c97
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Thu Nov 22 17:23:23 2007 -0500
+
+    Fix fdt printing for updated libfdt
+
+    Also improve printing (adopt dtc v1 "c style" hex format), whitespace cleanup.
+
+    Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
+
+commit 9eb77cea1fa12d5969eb26a1d1d81da381bd6b1c
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 21 13:30:15 2007 -0600
+
+    Add additional fdt fixup helper functions
+
+    Added the following fdt fixup helpers:
+     * do_fixup_by_prop{_u32} - Find matching nodes by property name/value
+     * do_fixup_by_compat{_u32} - Find matching nodes by compat
+
+    The _u32 variants work the same only the property they are setting
+    is know to be a 32-bit integer instead of a byte buffer.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit ab544633abdd14f4dd5d92e500b73eb59ef57e67
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 21 11:11:03 2007 -0600
+
+    Add fdt_fixup_ethernet helper to set mac addresses
+
+    Added a fixup helper that uses aliases to set mac addresses
+    in the device tree based on the bd_t
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit dbaf07ce620aab249e3502b20a986234a6af1d3a
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 21 14:07:46 2007 -0600
+
+    Fix warnings from import of libfdt
+
+    cmd_fdt.c: In function fdt_print:
+    cmd_fdt.c:586: warning: assignment discards qualifiers from pointer target type
+    cmd_fdt.c:613: warning: assignment discards qualifiers from pointer target type
+    cmd_fdt.c:635: warning: assignment discards qualifiers from pointer target type
+    cmd_fdt.c:636: warning: assignment discards qualifiers from pointer target type
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 8d04f02f6224e6983f4812ea4da704950ec8539c
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Oct 24 11:04:22 2007 -0500
+
+    Update libfdt from device tree compiler (dtc)
+
+    Update libfdt to commit 8eaf5e358366017aa2e846c5038d1aa19958314e from
+    the device tree compiler (dtc) project.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit e93becf80d732b64aef81b23e8b6ece02c40533d
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Sat Nov 3 19:46:28 2007 -0500
+
+    Move do_fixup* for libfdt into common code
+
+    Moved the generic fixup handling code out of cpu/mpc5xxx and cpu/mpc8260
+    into common/fdt_support.c and renamed:
+
+    do_fixup() -> do_fixup_by_path()
+    do_fixup_u32()     -> do_fixup_by_path_u32()
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit f738b4a75998f42a7408defadc9baac7a31c92db
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Thu Oct 25 16:15:07 2007 -0500
+
+    Make no options to fdt print default to '/'
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit a3c2933e02503fe36ade2c1b65af46f2b7a168e7
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Oct 24 10:21:57 2007 -0500
+
+    Removed some nonused fdt functions and moved fdt_find_and_setprop out of libfdt
+
+    Removed:
+       fdt_node_is_compatible
+       fdt_find_node_by_type
+       fdt_find_compatible_node
+
+    To ease merge of newer libfdt as we aren't using them anywhere at this time.
+
+    Also moved fdt_find_and_setprop out of libfdt into fdt_support.c for the same
+    reason.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 98e2867cc85409b919f862e6c16026461ec955df
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Wed Nov 21 09:19:37 2007 -0700
+
+    [BUILD] Remove libraries when updating autoconf.mk
+
+    Fix library problems caused by conditional compilation.  Using
+    autoconf.mk to decide which files to compile has caused a problem when
+    changing configuration from one board to another without clearing out
+    the library (*.a) files.
+
+    It used to be that the linker was always passed the same list of .o
+    files when building the .a files.  However, that is not longer true
+    with conditional compilation.  Now, a different board config will have
+    a different file list passed to the linker.  The problem occurs when
+    a library has already been built and the board config is changed.
+
+    Since the linker will update instead of replace a preexisting library,
+    then if the file list changes to remove some object files the old
+    objects will still exist in the library.
+
+    The solution is to remove all old library files when autoconf.mk is
+    made.
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit ed1353d74b9ce8a7fcd660570b848a184d614b5f
+Author: Kumar Gala <galak@kernel.crashing.org>
+Date:  Wed Nov 21 08:49:50 2007 -0600
+
+    [BUILD] conditionally compile libfdt/*.c in libfdt/Makefile
+
+    Modify libfdt/Makefile to conditionally compile the *.c files based
+    on the board config.
+
+    Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+commit 4a43719a7738712811d822ca8125427b27a55cdc
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:31 2007 -0600
+
+    [BUILD] conditionally compile common/cmd_*.c in common/Makefile
+
+    Modify common/Makefile to conditionally compile the cmd_*.c files based
+    on the board config.
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 2f155f6c0a1f5e9a306a3f1f4fbe067db7ced3b1
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:31 2007 -0600
+
+    [BUILD] Generate include/autoconf.mk from board config files
+
+    Use cpp and sed to postprocess config.h and import the defined values
+    into include/autoconf.mk.  autoconf.mk is then included by config.mk to
+    give 'make' access to the board configuration.
+
+    Doing this enables conditional compilation at the Makefile level instead
+    of by wrapping every .c file with #ifdef/#endif wrappers.
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 68b88999da87ab88e71e1306192905be3450198e
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Nov 20 15:02:26 2007 -0600
+
+    8610HPCD: Enable the 8610 Display Interface Unit
+
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 74f89faa9d1e77ed947e628d3effaa513fe05d05
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Nov 20 15:00:53 2007 -0600
+
+    Move 8610 DIU interface structure definitions to header file.
+
+    These two structures are still needed during the
+    initialization and setup of the DIU hardware.
+    So move them to the fsl_diu_fb.h file for now.
+    Official "blah".
+
+    Noticed-by: York Sun <yorksun@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 080c646dbf474a109c3f85718fb01ce042a38c45
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 20 20:14:18 2007 +0100
+
+    drivers/i2c : move i2c drivers to drivers/i2c
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 9a337ddc154a10a26f117fd147b009abcdeba75a
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon Nov 19 22:20:24 2007 +0100
+
+    Prepare for 1.3.0 release.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit f30ad49b16bf998b03c1a5228b6c86369d61c258
+Author: Haiying Wang <Haiying.Wang@freescale.com>
+Date:  Mon Nov 19 10:02:13 2007 -0500
+
+    Move CONFIG_QE out of CONFIG_PCI wrap for MPC8568MDS
+
+    CONFIG_QE shouldn't be in the wrap of CONFIG_PCI, fix it.
+
+    Signed-off-by: Haiying Wang <Haiying.Wang@freescale.com>
+
+commit f8c320609366176b31104d9bf5e295232e1c7f1d
+Author: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+Date:  Mon Nov 19 11:14:16 2007 +0900
+
+    [MIPS] board/gth2/lowlevel_init.S: Fix a build warning
+
+    lowlevel_init.S: Assembler messages:
+    lowlevel_init.S:413: Warning: Pretending global symbol used as branch target is local.
+
+    Looking at codes, the `memtest' and `clearmem' are intentional mixed
+    use of `global symbols' and `label' for debugging purpose. To make it
+    build, just disable global-symbols-use for now. As a result `memtest'
+    still remains as unused, but leave it be...
+
+    Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
+
+commit e8da58f2bc092891e8cc92b927ed5c4bd0cb0cab
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon Nov 19 12:59:14 2007 +0100
+
+    Fix build problems with mp2usb board
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 6bf4c686afca1e86e1c384d59218f914605713bf
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Nov 18 18:36:11 2007 +0100
+
+    s3c24x0: Fix usb_ohci.c missing in Makefile
+    and usb_ohci.c warning differ in signedness
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 6073f61e078da5ddb521b56256bcc36508589883
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sun Nov 18 12:55:02 2007 +0100
+
+    pb1x00 board: Fix u16 status declaration when PCMCIA is defined
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 8412d814ce8bf5570a2b747f1e7fd321097fe987
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sun Nov 18 17:11:09 2007 +0100
+
+    Fix compiler warnings for ARM systems.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 409ecdc0bb47dd28b0af6c25ffd658d22cc36b37
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sun Nov 18 16:36:27 2007 +0100
+
+    Fix compiler warnings for PPC systems. Update CHANGELOG.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 653811a3c2b35856bf12e196dcc8c4694e28e420
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Nov 18 14:44:44 2007 +0100
+
+    ppc4xx: Correct 405EX PCIe UTL register mapping
+
+    Map 4k mem space for UTL registers for each port.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 079c2c4fa71c0d1ebef394508df9088df8a308d3
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Sat Nov 17 11:31:10 2007 +0100
+
+    Fix warning differ in signedness in net/net.c and net/nfs.c
+
+commit 7e14fc65368cbd2861b1207453da55a4fc7b3f81
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Nov 17 20:42:45 2007 +0900
+
+    gth2.c: Fix a warning on gth2 build.
+
+    gth2.c: In function 'misc_init_r':
+    gth2.c:434: warning: pointer targets in passing argument 2 of 'setenv' differ in signedness
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 2309c130aa4c84b91bd874a41269c923eb61b555
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Nov 17 07:58:25 2007 +0100
+
+    Fix warning differ in signedness in common/cmd_scsi.c
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 9ea61b57968554eaf0f474ec7e088b17d367f474
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Nov 17 14:52:29 2007 +0100
+
+    ppc4xx: Update AMCC Kilauea config file
+
+    - Use generic GPIO configuration framework (CFG_4xx_GPIO_TABLE)
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 7e1d884b7cb602007329c517ec1c453e3a6a5d9c
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Nov 17 20:05:26 2007 +0900
+
+    [MIPS] cpu/mips/config.mk: Fix GNU assembler minor version picker
+
+    Current trick to pick up GNU assembler minor version does not work with the
+    latest binutils (2007-03-01 or later) due to ${PKGVERSION} now default to
+    "(GNU Binutils) ".
+
+      $ sde-as --version |grep "GNU assembler"
+      GNU assembler 2.15.94 mipssde-6.02.02-20050602
+      $ sde-as --version |grep "GNU assembler" |awk '{print $3}'
+      2.15.94
+      $ sde-as --version |grep "GNU assembler" |awk '{print $3}' |awk -F. '{print $2}'
+      15
+      $
+
+      $ mips-linux-as --version |grep "GNU assembler"
+      GNU assembler (GNU Binutils) 2.18
+      $ mips-linux-as --version |grep "GNU assembler" |awk '{print $3}'
+      (GNU
+      $ mips-linux-as --version |grep "GNU assembler" |awk '{print $3}' |awk -F. '{print $2}'
+      (no output)
+      $
+
+    As a result of above, you'll see many noises with such binutils:
+
+      make -C cpu/mips/
+      /bin/sh: line 0: [: : integer expression expected
+      /bin/sh: line 0: [: : integer expression expected
+      make[1]: Entering directory `/home/skuribay/devel/u-boot.git/cpu/mips'
+      mips-linux-gcc  -D__ASSEMBLY__ -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -c -o incaip_wdt.o incaip_wdt.S
+      /bin/sh: line 0: [: : integer expression expected
+      mips-linux-gcc  -D__ASSEMBLY__ -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -c -o cache.o cache.S
+      /bin/sh: line 0: [: : integer expression expected
+      mips-linux-gcc -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xB0000000  -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.2.1/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -Wall -Wstrict-prototypes -c -o asc_serial.o asc_serial.c
+      /bin/sh: line 0: [: : integer expression expected
+
+    This patch simplifies the trick and makes it work with both versions of gas.
+    I also replace an expensive `awk (or gawk)' with `cut'.
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 16664f72850846e645616da1c0fa5afcd6d15f15
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Nov 17 20:05:26 2007 +0900
+
+    [MIPS] Remove useless instructions for initializing $gp.
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 03c031d5660ea946c39af6e2e16267da857c609f
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:27:06 2007 +0900
+
+    [MIPS] MIPS 4K core: Coding style cleanups
+
+    No logical changes.
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit f5e429d3860bba4c6ae8bead8f78349fa24491b2
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Nov 17 20:05:20 2007 +0900
+
+    [MIPS] gth2.c: Fix a warning on gth2 build.
+
+    gth2.c: In function 'misc_init_r':
+    gth2.c:434: warning: pointer targets in passing argument 2 of 'setenv' differ in signedness
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 4fbd0741b2b6441da10be93e10267122581b7079
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:22:33 2007 +0900
+
+    [MIPS] au1x00_eth.c: Fixed a warning on pb1000 build.
+
+    au1x00_eth.c: In function 'au1x00_miiphy_write':
+    au1x00_eth.c:139: warning: 'return' with no value, in function returning non-void
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit f01320459736f156707425cf8112f98606301aa4
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:00:25 2007 +0900
+
+    [MIPS] au1x00_eth.c: Fix au1x00_miiphy_{read,write} build error
+
+    au1x00_eth.c: In function 'au1x00_enet_initialize':
+    au1x00_eth.c:246: error: 'au1x00_miiphy_read' undeclared (first use in this function)
+    au1x00_eth.c:246: error: (Each undeclared identifier is reported only once
+    au1x00_eth.c:246: error: for each function it appears in.)
+    au1x00_eth.c:246: error: 'au1x00_miiphy_write' undeclared (first use in this function)
+    au1x00_eth.c: In function 'au1x00_miiphy_write':
+    au1x00_eth.c:298: warning: 'return' with no value, in function returning non-void
+    make[1]: *** [au1x00_eth.o] Error 1
+
+    Fixed by moving these two functions forward.
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit b09258c5393edd1087c5f39ae68338f16b49f8b3
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:00:25 2007 +0900
+
+    MAKEALL: Added missing pb1000 board
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 2e4a6e3667a1e39c0e6e99498686b15d2718b369
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:00:24 2007 +0900
+
+    [MIPS] pb1000: Replace obsolete memsetup.S with lowlevel_init.S
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 662e5cb397249c3ea88a4c3255e9ccfc40b98d82
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Sat Oct 27 15:00:24 2007 +0900
+
+    [MIPS] u-boot.lds: Cleanup __u_boot_cmd_{start,end}
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit 5947f6999aafa7c54c1390983d264a8463dfea8e
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Nov 17 02:34:38 2007 +0100
+
+    Update CHANGELOIG, prepare for -rc4
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit fd329e6f05bbdfe6bd71b0e09f0c76d3b0a025a5
+Author: Luotao Fu <l.fu@pengutronix.de>
+Date:  Wed Nov 14 18:58:33 2007 +0100
+
+    Fix the i2c frequency and default address in rsdproto board
+
+    rsdproto board support has wrong I2C frequency and wrong return value
+    handling.
+
+    Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
+
+commit 429c180edad038f91c989cb14b478228092e7054
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Nov 17 01:45:38 2007 +0100
+
+    powerpc: Backout relocation changes for MPC5121, too.
+
+    Apply Grant Likely's backout to MPC5121 code, too.
+
+    Pointed out by Rafal Jaworowski <raj@semihalf.com>
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 1c3dd43338a077165e7e0309cb3994e65d2bdbf8
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Tue Nov 13 22:18:33 2007 -0700
+
+    powerpc: Backout relocation changes.
+
+    Ugh.  I *hate* to back this change out, but these compiler flags don't
+    work for relocation on all versions of GCC.  I've not been able to
+    reproduce the environment in my setup (and hence, not been able to
+    find a combination that *does* work), so I've got no choice but to go
+    back to the old gcc flags and linker script.
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 5c15010efad980ad5498cc565fc1ed70df2f52b4
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Tue Nov 13 09:11:05 2007 +0100
+
+    Fixed mips_io_port_base build errors.
+
+    This patch has been sent on:
+    - 29 Sep 2007
+
+    Although mips_io_port_base is currently a part of IDE command, it is quite
+    fundamental for MIPS I/O port access such as in[bwl] and out[bwl]. So move
+    it to MIPS general part, and introduce `set_io_port_base()' from Linux.
+
+    This patch is triggered by multiple definition of `mips_io_port_base' build
+    error on gth2 (and tb0229 also needs this fix.)
+
+    board/gth2/libgth2.a(gth2.o): In function `log_serial_char':
+    /home/skuribay/devel/u-boot.git/board/gth2/gth2.c:47: multiple definition of `mips_io_port_base'
+    common/libcommon.a(cmd_ide.o):/home/skuribay/devel/u-boot.git/common/cmd_ide.c:712: first defined here
+    make: *** [u-boot] Error 1
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 6ecbb7a3fa9b0940ed33e490d195d4b6830b2422
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Nov 17 01:30:40 2007 +0100
+
+    Fix a bug in the slave serial programming mode for the Xilinx
+    Spartan2/3 FPGAs. The old code used "< 0" on a "char" type to test if
+    the most significant bit was set, which did not work on any
+    architecture where "char" defaulted to be an unsigned type.
+
+    Based on a patch by Angelos Manousaridis <amanous@inaccessnetworks.com>
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit d08b7233bc252faad8339e7ca0ddfd62fa79903c
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Thu Nov 1 12:23:29 2007 -0500
+
+    86xx: Fix broken variable reference when #def DEBUGing.
+
+    Sometimes you can't reference the DDR2 controller variables.
+
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit f9d9164d9c6b5a7f0393fd8d7e246b8a0326bc19
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Fri Oct 26 18:32:00 2007 +0800
+
+    make 8610 board use pixis reset
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+
+commit db74b3c1c9481a6bffbf8cd445e5bcbf6908e836
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Mon Oct 29 19:26:21 2007 +0800
+
+    Unify pixis_reset altbank across board families
+
+    Basically, refactor the CFG_PIXIS_VBOOT_MASK values
+    into the separate board config files.
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 64bf555465c7926be13e1046ac0d0f05ac72829c
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Wed Nov 7 08:19:21 2007 +0100
+
+    Fix warning: pointer targets in assignment differ in signedness
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 7a60ee7c6248a958c5757d3660a1702723a2786d
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Wed Nov 7 08:19:19 2007 +0100
+
+    Fix warning differ in signedness in common/cmd_ide.c
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit f31d38b9eea9b32f6a1ac848a298cc71ca4c9a03
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Nov 16 14:16:54 2007 +0100
+
+    ppc4xx: Enable 405EX PCIe UTL register configuration
+
+    Till now the UTL registers on 405EX were not initialized but left with
+    their default values. This patch new initializes some of the UTL
+    registers on 405EX.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit ecdcbd4f8c1f8cefd785752f4e7536aae2a4ecf9
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Nov 16 14:00:59 2007 +0100
+
+    ppc4xx: Update AMCC Makalu for board rev 1.1
+
+    This patch adds changes needed for Makalu rev 1.1:
+
+    - Enable 2nd DDR2 bank resulting in 256MByte of SDRAM
+    - Enable 2nd ethernet port EMAC1
+    - Use generic GPIO configuration framework (CFG_4xx_GPIO_TABLE)
+    - Reset PCIe ports via GPIO upon bootup
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 4d4faae65e115e327425cd514c1a35146a85166b
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:31 2007 -0600
+
+    Group PCI and PCMCIA drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 5798f87dc10a496d79d3177b9f5a76488987fd35
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:31 2007 -0600
+
+    Group block/flash drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit df58c81551700f058b44cacf55a7997fa63bfe0a
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:31 2007 -0600
+
+    Group USB drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 5dbb6ed622e539b0c8493ef7e578d3a533181d29
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:30 2007 -0600
+
+    Group i2c drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit ec00c76de0e5971273905998d62d6bb119324218
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:30 2007 -0600
+
+    Group console drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 754f230aa01b8c789fc31f8013c2487954073300
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:30 2007 -0600
+
+    Group network drivers in drivers/Makefile
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit f0037c56b0d12cd46215124667b9f83d60ef9391
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:30 2007 -0600
+
+    Build: split COBJS value into multiple lines
+
+    This change is in preparation for condtitionial compile support in the
+    build system.  By spliting them all into seperate lines now, subsequent
+    patches that change 'COBJS-y += ' into 'COBJS-$(CONFIG_<blah>) += ' will
+    be less invasive and easier to review
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 1b4aaffe4fb2a5e95d9111a5d94fd1f89215dce4
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Mon Sep 24 09:05:30 2007 -0600
+
+    Add .gitignore files
+
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Acked-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit 955413f35f054a82e40042f1dbcf501c6a05719b
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:27:52 2007 -0700
+
+    Revert "Correct relocation fixup for mpc5xx"
+
+    This reverts commit 3649cd99ba815b6601868735765602f00ef3692b.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit e15633888a058aacb31a62d2cf1278e1e4c236ab
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:24:32 2007 -0700
+
+    Revert "Correct fixup relocation for MPC5xxx"
+
+    This reverts commit 6f7576b20ecf0d040c3ac3b032b5cbc860e38a90.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 139365fbe566d0fc619a1ed04452ec5388f0cef8
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:21:04 2007 -0700
+
+    Revert "Correct fixup relocation for mpc8220"
+
+    This reverts commit a85dd254c0577fca13627c46e93fc2ad4c4f1f00.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 70922342369e5e39b286fe21e768a239ca07a514
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:20:57 2007 -0700
+
+    Revert "Correct fixup relocation for mpc824x"
+
+    This reverts commit f3a52fe05923935db86985daf9438e2f70ac39aa.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 96279ab4cad60cb5972aa934fbe4845ac02cc75a
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:20:50 2007 -0700
+
+    Revert "Correct fixup relocation for mpc8260"
+
+    This reverts commit 5af61b2f4b838a05f79be274f3e5a66edd2d9c96.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 928fe33b24cdf382a8dc8687fed24b1961cdb5d6
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:20:43 2007 -0700
+
+    Revert "Correct fixup relocation for mpc83xx"
+
+    This reverts commit 057004f4a4863554d56cc56268bfa7c7d9738e27.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit c93945e8f9e300860d2bf73a2549ce5794f8bd00
+Author: Grant Likely <grant.likely@secretlab.ca>
+Date:  Thu Nov 15 08:20:25 2007 -0700
+
+    Revert "[MPC512x] Correct fixup relocation"
+
+    This reverts commit 8d17979d0359492a822a0a409d26e3a3549b4cd4.
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit c9672f81f1bdb4e8ddf62aa72ca0206e8b72aa1c
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Nov 15 14:25:09 2007 +0100
+
+    ppc4xx: Small AMCC Kilauea cleanup
+
+    Remove not needed pci_target_init() function.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit aee747f19b460a0e9da20ff21e90fdaac1cec359
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Nov 15 14:23:55 2007 +0100
+
+    ppc4xx: Enable 440 GPIO init table CFG_440_GPIO_TABLE for 405 platforms
+
+    - Rename CFG_440_GPIO_TABLE to CFG_4xx_GPIO_TABLE
+    - Cleanup of the 4xx GPIO functions
+    - Move some GPIO defines from the cpu headers ppc405.h/ppc440.h into gpio.h
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8ada0ebf38e4073beea0309188b25d82a112a2ae
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Nov 15 14:20:08 2007 +0100
+
+    ppc4xx: AMCC Taihu board config file cleanup
+
+    This patch makes the AMCC Taihu a little more compatible to the other
+    AMCC eval boards.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 5e71c51d74c963d3174060c078dcacf13bdd02ef
+Author: Marian Balakowicz <m8@semihalf.com>
+Date:  Thu Nov 15 13:37:28 2007 +0100
+
+    [INKA4x0] NG hardware: flash support
+
+    Disabled and remove inka4x0 custom flash driver, use CFI flash
+    driver instead.
+
+    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+
+commit 5fb6d7191e206cdde0e23140fd8111caed93a595
+Author: Marian Balakowicz <m8@semihalf.com>
+Date:  Thu Nov 15 13:29:55 2007 +0100
+
+    [INKA4x0] NG hardware: SDRAM support
+
+    Add support for three new DDR chips that may  be present on a NG
+    INKA4x0 hardware: HYB25D512160BF-5, K4H511638C-7CB3, T46V32M16BN-6IT.
+
+    Cleanup board/inka4x0/mt48lc16m16a2-75.h file.
+
+    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+
+commit f23cb34c367bb27585a4fdb8a75277370e7d0596
+Author: Marian Balakowicz <m8@semihalf.com>
+Date:  Thu Nov 15 13:24:43 2007 +0100
+
+    [INKA4x0] NG hardware: platform code update
+
+    - Cleanup compile warnings.
+    - Add missing '\0' in default environment.
+    - Increase CFG_MONITOR_LEN to 256 KiB.
+    - Add required CFG_USE_PPCENV.
+
+    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+
+commit 2ae64f5135e51bb18753884d1265b99e89b5aedd
+Author: Peter Pearse <peter.pearse@arm.com>
+Date:  Thu Nov 15 08:58:00 2007 +0000
+
+    Remove warnings re CONFIG_EXTRA_ENV_SETTINGS
+    Remove warnings re onenand_read() & write()
+
+commit 2db916e14410e3ec1738508c7bf4dfeb2b299ae7
+Author: Peter Pearse <peter.pearse@arm.com>
+Date:  Thu Nov 15 08:45:13 2007 +0000
+
+    Correction patch
+
+commit 1d8a49eca1c7bdc8db1c47a92f9014a29ead03ae
+Author: Roy Zang <tie-fei.zang@freescale.com>
+Date:  Thu Sep 13 18:52:28 2007 +0800
+
+    Enable ULi1575 Ethernet support in 8610HPCD config
+
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+    Acked-by: Jon Loeliger <jdl@freescale.com>
+
+commit 54fd6c93c28a0a45352fff5dd92673401ff563f2
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Nov 13 08:18:20 2007 +0100
+
+    ppc4xx: lwmon5: Change PHY reset sequence for PHY MDIO address latching
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 7d0a4066b5a6b698e5fc1b66cfe9705774bbce93
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Nov 13 08:06:11 2007 +0100
+
+    ppc4xx: Fix 405EX PCIe UTLSET register setup
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 1ce55151c85d068f70317a8d65c61058b891afb4
+Author: Heiko Schocher <hs@denx.de>
+Date:  Tue Nov 13 07:50:29 2007 +0100
+
+    [UC101] SRAM now with 2 MB working.
+
+    Signed-off-by: Heiko Schocher <hs@denx.de>
+
+commit 2d14684341109a69616e4d6016cd61402d55086f
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Nov 9 15:37:53 2007 +0100
+
+    ppc4xx: Use generic usb-ohci driver for sequoia board
+
+    This patch makes the sequoia board use the generic usb-ohci driver
+    instead of cpu/ppc4xx/usb_ohci.c.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 9be659ac0868dc367caa957c5c725e46b07f6a5f
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Nov 9 15:37:23 2007 +0100
+
+    ppc4xx: Make USB working with CONFIG_4xx_DCACHE defined
+
+    This patch disables the 44x d-cache on 'usb start' and
+    reenables it on 'usb stop'. This should be seen as a
+    temporary fix until the generic usb-ohci driver can
+    life with d-cache enabled.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit fbde2169d2c48fcc9ff03489534a78ffb0a8a0d4
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Fri Nov 9 15:36:44 2007 +0100
+
+    ppc4xx: Remove redundant code from 4xx network driver
+
+    This patch removes some redundant code and decrements the end
+    address of cache flush and invalidate by 1.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 5ca9881aad8c413ac2a82868a5e3719178254502
+Author: Peter Pearse <peter.pearse@arm.com>
+Date:  Fri Nov 9 15:24:26 2007 +0000
+
+    Add apollon board support
+    Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
+
+commit b53313dbfc74525d85f1e7e0102f902d5c863beb
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Nov 9 12:19:58 2007 +0100
+
+    ppc4xx: Remove In:/Out:/Err: boot output for AMCC Kilauea
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit c7f69c340277935a6c19a956421852da944a365f
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Nov 9 12:18:54 2007 +0100
+
+    ppc4xx: Make output a little shorter on I2C bootrom detection
+
+    Most 4xx PPC capable of using an I2C bootrom for bootstrap setting
+    already print a line with the information which I2C bootrom is
+    used for bootstrap configuration. So we don't need this extra line
+    with "I2C boot EEPROM en-/dis-abled".
+
+    This patch also has a little code cleanup integrated.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8d737a28152ec12873f8544cca1fb39a49e5e693
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Thu Nov 8 12:50:18 2007 -0600
+
+    ColdFire: MCF5329 - Remove reset registers from CCM
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit 7d7cdea769a60b0a6e4c18bef7f9d648fd14b8d7
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Thu Nov 8 12:31:11 2007 -0600
+
+    ColdFire: MCF5329 - Add Reset structure to immap_5329.h
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit 09b26cf00d76d75fdf7fdc4b13e4dd929743bc21
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Thu Nov 8 12:19:01 2007 -0600
+
+    ColdFire: MCF5329 - revert include/asm-m68k/m5329.h file mode
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit 225a24b5e062ad94627424508ae814f51dbe1a34
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Wed Nov 7 18:00:54 2007 -0600
+
+    ColdFire: MCF5445x - Update correct RAMBAR and missing linker files
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit 248c7c14835f34d5d910b45e5600050e58ca6cab
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Wed Nov 7 17:56:15 2007 -0600
+
+    ColdFire: MCF532x - Update do_reset() using core reset
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit d9240a5f827eb3b476a6ba2938d01f1a9e7688f4
+Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+Date:  Wed Nov 7 17:51:00 2007 -0600
+
+    ColdFire: Update cpu flag for 4.2-xx compiler
+
+    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+
+commit 070ba56115b4da63b46e974287fa4550d4023386
+Author: York Sun <yorksun@freescale.com>
+Date:  Wed Oct 31 14:59:04 2007 -0500
+
+    8610: Add console frame buffer support to FSL 8610 DIU driver.
+
+    Add cfb console support to FSL 8610 DIU driver.
+    Inspect board version from PIXIS to obtain correct pixel format.
+
+    Use #define CONFIG_VIDEO in config file to enable fb console.
+
+    To switch monitor, set monitor variable to
+    0 - DVI, 1 - Single link LVDS, 2 - Double link LVDS
+    followed by "diufb init".
+
+    Preserve logo bitmap at the top of the fb console.
+
+    Signed-off-by: York Sun <yorksun@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit a877880c6949e948bd63cd6ea4e216573d2f53dd
+Author: York Sun <yorksun@freescale.com>
+Date:  Mon Oct 29 13:58:39 2007 -0500
+
+    8610: Add 8610 DIU display driver
+
+    1280x1024 and 1024x768 @ 32 bpp are supported now.
+    DVI, Single-link LVDS, Double-link LVDS are all supported.
+
+    Environmental variable "monitor" is used to specify monitor port.
+
+    A new command "diufb" is introduced to reinitialize monitor
+    and display a BMP file in the memory. So far, 1-bit, 4-bit,
+    8-bit and 24-bit BMP formats are supported.
+
+       diufb init
+           - initialize the diu driver
+       Enable the port specified in the environmental variable "monitor"
+
+       diufb addr
+           - display bmp file in memory.
+       The bmp image should be no bigger than the resolution, 1280x1024
+       for DVI and double-link LVDS, 1024x768 for single-link LVDS.
+
+    Note, this driver allocate memory but doesn't free it after use
+    It is written on purpose -- to avoid a failure of reallocation
+    due to memory fragement.
+
+    ECC of DDR is disabled for DIU performance. L2 data cache is also disabled.
+
+    Signed-off-by: York Sun <yorksun@freescale.com>
+    Signed-off-by: Jon loeliger <jdl@freescale.com>
+
+commit 52e5ddfecdda308f75782fae206b677b1810f5f9
+Author: York Sun <yorksun@freescale.com>
+Date:  Wed Oct 31 10:43:59 2007 -0500
+
+    FSL: Add a freescale bitmap logo.
+
+    This Freescale logo is a 340 x 128 x 4bpp BMP file
+    that can be displayed by the DIU Framebuffer driver.
+
+    Signed-off-by: York Sun <yorksun@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 1815338fbd1c0f94f8276d2891b99caa5a05f622
+Author: York Sun <yorksun@freescale.com>
+Date:  Mon Oct 29 13:57:53 2007 -0500
+
+    8610: Make some extra debug environment variables conditional.
+
+    One may #define ENV_DEBUG to get them back again.
+
+    Signed-off-by: York Sun <yorksun@freescale.com>
+
+commit 761421ccca80a9fb37b19c37aa61d46ef75e0647
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Mon Oct 29 19:26:21 2007 +0800
+
+    8610: Actually enable pixis_reset CONFIGs
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+
+commit f3bceaab230b4748d0afc4109b6837308f018b40
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Fri Oct 26 18:31:59 2007 +0800
+
+    Fix the BAT definition of PCI IO on 8610 board
+
+    The address in the BAT register is aligned with the BAT size.
+    The original definition actually did not define BAT for PCIE2 IO.
+    This patch fix this.
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+
+commit 9f23ca334a6f5f021ef9e9d0fad9da80d63b2d56
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Mon Oct 29 19:26:21 2007 +0800
+
+    Unify pixis_reset altbank across board families
+
+    Basically, refactor the CFG_PIXIS_VBOOT_MASK values
+    into the separate board config files.
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit a8318ec205c8e8794b5f9f1b8584abadb440e8ba
+Author: Jason Jin <Jason.jin@freescale.com>
+Date:  Fri Oct 26 18:32:00 2007 +0800
+
+    make 8610 board use pixis reset
+
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+
+commit 9c84709eedce9c680dd695984ab7d2328f4f04f5
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Thu Nov 1 12:23:29 2007 -0500
+
+    86xx: Fix broken variable reference when #def DEBUGing.
+
+    Sometimes you can't reference the DDR2 controller variables.
+
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 1f103105a3746ab12279b63b8c1d372c0ce2cc58
+Author: Roy Zang <tie-fei.zang@freescale.com>
+Date:  Mon Nov 5 17:39:24 2007 +0800
+
+    Implement general ULi 526x Ethernet driver support in U-boot
+
+    This patch implements general ULi 526x Ethernet driver.
+    Until now, it is the only native Ethernet port on
+    MPC8610HPCD board, but it could be used on other boards
+    with ULi 526x Ethernet port as well.
+
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+    Acked-by: Jon Loeliger <jdl@freescale.com>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
+commit 71bc6e6474fea8ef481b9b45d1edd7ad1f6dfbbd
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Thu Nov 1 08:46:50 2007 -0500
+
+    NET: Add Ethernet 1000BASE-X support for PPC4xx
+
+    This patch adds support for 1000BASE-X to functions "miiphy_speed ()" and
+    "miiphy_duplex()". It also adds function "miiphy_is_1000base_x ()", which
+    returns non-zero iff the PHY registers are configured for 1000BASE-X.  The
+    "mii info" command is modified to distinguish between 1000BASE-T and -X.
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
+commit 298035df4948b113d29ac0e694717d34b95bc5dc
+Author: Larry Johnson <lrj@arlinx.com>
+Date:  Wed Oct 31 11:21:29 2007 -0500
+
+    NET: Cosmetic changes
+
+    Signed-off-by: Larry Johnson <lrj@acm.org>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
+commit 654f38b3a387886996a5a75771fbfc29cb4f225e
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Nov 5 07:43:05 2007 +0100
+
+    ppc4xx: Make output a little shorter on PCIe detection
+
+    Now not max 3 lines but 2 lines are printed per PCIe port.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 992742a5b09d9040adbd156fb90756af66ade310
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Nov 3 23:09:27 2007 +0100
+
+    Cleanup coding style; update CHANGELOG
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit e881cb563e32f45832b7b6db77bdcd017adcbb41
+Author: Bruce Adler <bruce.adler@ccpu.com>
+Date:  Fri Nov 2 13:15:42 2007 -0700
+
+    fix wording in README
+
+    Changed the wording to properly describe the shadowing
+    of the environment from ROM to RAM
+
+    Signed-off-by: Bruce Adler <bruce.adler@acm.org>
+
+commit ad845beef06245426c57b53dcdc01b7dc70e0d45
+Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+Date:  Wed Oct 31 02:18:15 2007 +0900
+
+    blackfin: Move `-D__BLACKFIN__' to $(ARCH)_config.mk
+
+    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+
+commit ec22755799466c8a103664bb3a5e647bf9c238f4
+Author: Vlad Lungu <vlad@comsys.ro>
+Date:  Thu Oct 25 16:08:14 2007 +0300
+
+    Trimmed some variables in ne2000.c
+
+    Signed-off-by: Vlad Lungu <vlad@comsys.ro>
+
+commit eb6f214d3644b2a77968c176ed36dcf858cfe7e0
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Thu Oct 25 17:51:27 2007 +0800
+
+    Fix the issue of usb_kbd driver missing the scan code of key 'z'.
+
+    The scan code of the key 'z' is 0x1d, which should be handled.
+
+    The change has be tested on NOVATEK USB keyboard and ULI PCI OHCI
+    controller.
+
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+
+commit bbf4796f6498fbade56d56eff3a0a49b299d93e5
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Thu Oct 25 17:30:04 2007 +0800
+
+    Fix USB support issue for MPC8641HPCN board.
+
+    The configuration file has already enabled USB, but it
+    missed definition of CFG_OHCI_SWAP_REG_ACCESS, the USB
+    on MPC8641HPCN can not work because of the wrong USB
+    register endian.
+
+    And add the USB command to U-Boot commands list.
+
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+
+commit 4e62041023dc3de9d98d977bb080235bc6d035e0
+Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date:  Wed Oct 24 18:16:01 2007 +0200
+
+    Use config_cmd_default.h instead of config_cmd_all.h
+
+    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 56622f87857439b1c221e9deef11a9d5bb5d4308
+Author: Marian Balakowicz <m8@semihalf.com>
+Date:  Wed Oct 24 01:37:36 2007 +0200
+
+    TQM5200: Call usb_cpu_init() during board init
+
+    usb_cpu_init() configures GPS USB pins, clocks, etc. and
+    is required for proper operation of kernel USB subsystem.
+    This setup was previously done in the kernel by the fixup
+    code which is being removed, thus low level init must be
+    done by U-boot now.
+
+    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+
+commit 29c29c0267fe857e72014ce90c5d35b2ef6302bd
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Tue Oct 23 16:25:50 2007 +0200
+
+    Fix typo in nfs.c
+
+    An obvious typo. Originally fixed in linkstation u-boot port.
+
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
+
+commit 59543fe00a4ce720ef9f5aa7fb387c6daf1c7d78
+Author: Guennadi Liakhovetski <lg@denx.de>
+Date:  Tue Oct 23 14:35:05 2007 +0200
+
+    Fix a typo in cpu/mpc824x/interrupts.c
+
+    Since December 2003 the timer_interrupt_cpu() function in
+    cpu/mpc824x/interrupts.c contains what seems to be a superfluous
+    parameter. Remove it.
+
+    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
+
+commit c9e7b9b9a1700fe009678d1f9b41e6364ac5df2d
+Author: Sergej Stepanov <Sergej.Stepanov@ids.de>
+Date:  Wed Oct 17 11:13:51 2007 +0200
+
+    add ft_cpu_setup(..) on mpc8260
+
+    Add ft_cpu_setup(..)-function to adapt it for use with libfdt
+    based on code from mpc5xxx
+
+    Sigend-off-by: Sergej Stepanov <Sergej.Stepanov@ids.de>
+    --
+
+commit 6abd82e19ae93c0b4d104e50165e235915ec0875
+Author: Sergej Stepanov <Sergej.Stepanov@ids.de>
+Date:  Wed Oct 17 11:18:42 2007 +0200
+
+    changes for IDS8247 board support
+
+    To get the IDS8247 board working following are done:
+     - FCC2 is deactivated
+     - FCC1 is activated
+     - I2C is activated
+     - CFI driver is activated
+     - Adapted for use with LIBFDT
+
+    Signed-off-by: Sergej Stepanov <Sergej.Stepanov@ids.de>
+    --
+
+commit 3d6cb3b24add6415f86a0f013ea40f5639b90047
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Nov 3 12:08:28 2007 +0100
+
+    ppc4xx: Add AMCC Kilauea/Haleakala NAND booting support
+
+    This patch adds NAND booting support for the AMCC 405EX(r) eval boards.
+    Again, only one image supports both targets.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 8b6684a698500be9c142ec2c9f46cfc348e17f0c
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Wed Oct 24 15:48:37 2007 +0200
+
+    ATSTK1002: Remove default ethernet addresses
+
+    Wolfgang is right: It's not a good idea to set up default initial
+    ethernet addresses for a board, even though they belong to the local
+    range.
+
+    This will change the failure mode from "IT manager screams at you for
+    using duplicate ethernet addresses" to a nice error message explaining
+    that the ethernet address hasn't been set properly.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit e5c794e491a57d829b6d8733e2ed8368a2269abf
+Author: Justin Flammia <jflammia@savantav.com>
+Date:  Mon Oct 29 17:40:35 2007 -0400
+
+    DHCP Client Fix
+
+    This is a multi-part message in MIME format.
+
+    commit e6e505eae94ed721e123e177489291fc4544b7b8
+    Author: Justin Flammia <jflammia@savantav.com>
+    Date:   Mon Oct 29 17:19:03 2007 -0400
+
+       Found a bug in the way the DHCP Request packet is built, where the IP address
+       that is offered by the server is bound to prematurely. This patch is a fix of
+       that bug where the IP address offered by the DHCP server is not used until
+       after the DHCP ACK from the server is received.
+
+    Signed-off-by: Justin Flammia <jflammia@savantav.com>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
+commit 5d96d40d3f36da33348e68f9ea993f383e11f997
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 20:58:34 2007 +0100
+
+    ppc4xx: Fix acadia_nand build problem
+
+    Since the cache handling functions were moved from start.S into cache.S
+    the acadia NAND booting Makfile needs to be adapted accordingly.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit ea2e142843533ca593fcb5cb3e1daf1b7f5e5949
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 20:57:11 2007 +0100
+
+    ppc4xx: Add CONFIG_4xx_DCACHE compile options to enable cached SDRAM
+
+    This patch adds the CONFIG_4xx_DCACHE options to some SDRAM init files
+    and to the Sequoia TLB init code. Now the cache can be enabled on 44x
+    boards by defining CONFIG_4xx_DCACHE in the board config file. This
+    option will disappear, when more boards use is successfully and no
+    more known problems exist.
+
+    This is tested successfully on Sequoia and Katmai. The only problem that
+    needs to be fixed is, that USB is not working on Sequoia right now, since
+    it will need some cache handling code too, similar to the 4xx EMAC driver.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 3db93b8bedd32e914b38976141b3fdf4ea3ff738
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 20:51:10 2007 +0100
+
+    ppc4xx: Enable CPU POST test for 4xx with dcache enabled
+
+    Now with caches enabled (i- and d-cache) on 44x, we need a chance to
+    disable the cache for the CPU POST tests, since these tests consist
+    of self modifying code. This is done via the new change_tlb() function.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit f71b2888b4b3c870909a0341427b2a914246f81f
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 20:47:26 2007 +0100
+
+    ppc4xx: Change 4xx POST ethernet test to handle cached memory too
+
+    This patch enables the 4xx EMAC POST driver to work too, when dcache is
+    enabled.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit a2685904061b35a17583d65fe47cdc2686a69eaa
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 20:45:53 2007 +0100
+
+    ppc4xx: Remove temporary TLB entry in POST cache test only for 440
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit ff768cb168d8157c24a25016dbfbeb465e47f420
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 18:01:24 2007 +0100
+
+    ppc4xx: Change 4xx ethernet driver to handle cached memory too
+
+    This patch enables the 4xx EMAC driver to work too, when dcache is
+    enabled.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 483e09a223c666269ef81d3573a6591b1046b0ef
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 17:59:22 2007 +0100
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    ppc4xx: Add change_tlb function to modify I attribute of TLB(s)
 
-commit b09258c5393edd1087c5f39ae68338f16b49f8b3
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:00:25 2007 +0900
+    This function is used to either turn cache on or off in a specific
+    memory area.
 
-    MAKEALL: Added missing pb1000 board
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+commit d25dfe08fbd1220cb994e7e6b105049aa9aa8e79
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 17:57:52 2007 +0100
 
-commit 2e4a6e3667a1e39c0e6e99498686b15d2718b369
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:00:24 2007 +0900
+    ppc4xx: Remove cache definition from 4xx board config files
 
-    [MIPS] pb1000: Replace obsolete memsetup.S with lowlevel_init.S
+    All 4xx board config files don't need the cache definitions anymore.
+    These are now defined in common headers.
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 662e5cb397249c3ea88a4c3255e9ccfc40b98d82
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Sat Oct 27 15:00:24 2007 +0900
+commit 9b94ac61d2176185c30adf0793e079ec30e68687
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 31 17:55:58 2007 +0100
 
-    [MIPS] u-boot.lds: Cleanup __u_boot_cmd_{start,end}
+    ppc4xx: Rework 4xx cache support
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    New cache handling functions added and all existing functions
+    moved from start.S into seperate cache.S.
 
-commit 5947f6999aafa7c54c1390983d264a8463dfea8e
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Sat Nov 17 02:34:38 2007 +0100
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Update CHANGELOIG, prepare for -rc4
+commit 06713773da4ac3d390c63d82641eb553224b27c2
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 18:03:12 2007 +0200
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    ppc4xx: Remove compiler warning from previous commit
 
-commit fd329e6f05bbdfe6bd71b0e09f0c76d3b0a025a5
-Author: Luotao Fu <l.fu@pengutronix.de>
-Date:  Wed Nov 14 18:58:33 2007 +0100
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Fix the i2c frequency and default address in rsdproto board
+commit 6fa397df67c0f269e4528bf181a6e8c88f9723f9
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 14:40:30 2007 +0200
 
-    rsdproto board support has wrong I2C frequency and wrong return value
-    handling.
+    ppc4xx: Remove temporary TLB entry in POST cache test
 
-    Signed-off-by: Luotao Fu <l.fu@pengutronix.de>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 429c180edad038f91c989cb14b478228092e7054
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Sat Nov 17 01:45:38 2007 +0100
+commit 1338e6a81834099ba19733b69aafd8ef5f098094
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 14:05:08 2007 +0200
 
-    powerpc: Backout relocation changes for MPC5121, too.
+    ppc4xx: Change autonegotiation timeout from 4 to 5 seconds
 
-    Apply Grant Likely's backout to MPC5121 code, too.
+    I lately noticed, that newer 4xx board with GBit support sometimes don't
+    finish link autonegotiation in 4 seconds. Changing this timeout to 5
+    seconds seems fine here.
 
-    Pointed out by Rafal Jaworowski <raj@semihalf.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+commit 2d83476a4c1c9911d158a3f8a4312d354bc1bdb7
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 14:03:17 2007 +0200
 
-commit 1c3dd43338a077165e7e0309cb3994e65d2bdbf8
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Tue Nov 13 22:18:33 2007 -0700
+    ppc4xx: Change 4xx_enet & miiphy to use out_be32() and friends
 
-    powerpc: Backout relocation changes.
+    This patch changes all in32/out32 calls to use the recommended in_be32/
+    out_be32 macros instead.
 
-    Ugh.  I *hate* to back this change out, but these compiler flags don't
-    work for relocation on all versions of GCC.  I've not been able to
-    reproduce the environment in my setup (and hence, not been able to
-    find a combination that *does* work), so I've got no choice but to go
-    back to the old gcc flags and linker script.
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+commit 7d47cee2cc57f907380f2c06f5b6c683d03e423a
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Oct 25 12:24:59 2007 +0200
 
-commit 5c15010efad980ad5498cc565fc1ed70df2f52b4
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Tue Nov 13 09:11:05 2007 +0100
+    ppc4xx: Fix POST ethernet test for Haleakala
 
-    Fixed mips_io_port_base build errors.
+    The POST ethernet test needed to be changed to dynamically determine
+    the count of ethernet devices. This code is cloned from the 4xx
+    ethernet driver.
 
-    This patch has been sent on:
-    - 29 Sep 2007
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Although mips_io_port_base is currently a part of IDE command, it is quite
-    fundamental for MIPS I/O port access such as in[bwl] and out[bwl]. So move
-    it to MIPS general part, and introduce `set_io_port_base()' from Linux.
+commit f10493c6d77a1e07a6c2ff4d772937a5e7359d6a
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 11:31:05 2007 +0200
 
-    This patch is triggered by multiple definition of `mips_io_port_base' build
-    error on gth2 (and tb0229 also needs this fix.)
+    ppc4xx: Correct UART input clock calculation and passing to fdt
 
-    board/gth2/libgth2.a(gth2.o): In function `log_serial_char':
-    /home/skuribay/devel/u-boot.git/board/gth2/gth2.c:47: multiple definition of `mips_io_port_base'
-    common/libcommon.a(cmd_ide.o):/home/skuribay/devel/u-boot.git/common/cmd_ide.c:712: first defined here
-    make: *** [u-boot] Error 1
+    We now use a value in the gd (global data) structure for the UART input
+    frequency, since the PPC4xx_SYS_INFO struct is always rewritten completely
+    in get_sys_info().
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 6ecbb7a3fa9b0940ed33e490d195d4b6830b2422
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Sat Nov 17 01:30:40 2007 +0100
+commit 353f2688b4e0fc7b969bc70a02be4b40bf0dd124
+Author: Stefan Roese <sr@denx.de>
+Date:  Tue Oct 23 10:10:08 2007 +0200
 
-    Fix a bug in the slave serial programming mode for the Xilinx
-    Spartan2/3 FPGAs. The old code used "< 0" on a "char" type to test if
-    the most significant bit was set, which did not work on any
-    architecture where "char" defaulted to be an unsigned type.
+    ppc4xx: Add initial AMCC Haleakala PPC405EXr eval board support
 
-    Based on a patch by Angelos Manousaridis <amanous@inaccessnetworks.com>
+    The Haleakala is nearly identical with the Kilauea eval board. The only
+    difference is that the 405EXr only supports one EMAC and one PCIe
+    interface. This patch adds support for the Haleakala board by using
+    the identical image for Kilauea and Haleakala. The distinction is done
+    by comparing the PVR.
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit d08b7233bc252faad8339e7ca0ddfd62fa79903c
-Author: Jon Loeliger <jdl@freescale.com>
-Date:  Thu Nov 1 12:23:29 2007 -0500
+commit 9f798766aa85e62eb8fa8c721e148df609b78137
+Author: Eugene O'Brien <eugene.obrien@advantechamt.com>
+Date:  Tue Oct 23 08:29:10 2007 +0200
 
-    86xx: Fix broken variable reference when #def DEBUGing.
+    ppc4xx: Fixed offset of refresh rate type for Bamboo on-board DDR SDRAM
 
-    Sometimes you can't reference the DDR2 controller variables.
+    This patch also adds a note to the fixed DDR setup for Bamboo NAND booting:
 
-    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+    Note:
+    As found out by Eugene O'Brien <eugene.obrien@advantechamt.com>, the fixed
+    DDR setup has problems (U-Boot crashes randomly upon TFTP), when the DIMM
+    modules are still plugged in. So it is recommended to remove the DIMM
+    modules while using the NAND booting code with the fixed SDRAM setup!
 
-commit f9d9164d9c6b5a7f0393fd8d7e246b8a0326bc19
-Author: Jason Jin <Jason.jin@freescale.com>
-Date:  Fri Oct 26 18:32:00 2007 +0800
+    Signed-off-by: Eugene O'Brien <eugene.obrien@advantechamt.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    make 8610 board use pixis reset
+commit afe9fa59cb63b4f9d16bf01c93eb212f25a38c2a
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 16:24:44 2007 +0200
 
-    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    ppc4xx: Add SNTP support to AMCC Katmai, Kilauea & Makalu boards
 
-commit db74b3c1c9481a6bffbf8cd445e5bcbf6908e836
-Author: Jason Jin <Jason.jin@freescale.com>
-Date:  Mon Oct 29 19:26:21 2007 +0800
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Unify pixis_reset altbank across board families
+commit 3248f63ad89cb031491edb7016587fe6e9a238b9
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 16:22:40 2007 +0200
 
-    Basically, refactor the CFG_PIXIS_VBOOT_MASK values
-    into the separate board config files.
+    ppc4xx: Rework of 4xx serial driver (4)
 
-    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
-    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+    Change 4xx_uart.c:
 
-commit 64bf555465c7926be13e1046ac0d0f05ac72829c
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Wed Nov 7 08:19:21 2007 +0100
+    - Use in_8/out_8 macros instead of in8/out8
+    - No need for UART_BASE marco anymore, now really handled via function
+      parameter
+    - serial_init_common() introduced
+    - Further coding style cleanup
 
-    Fix warning: pointer targets in assignment differ in signedness
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+commit e61cb8163a66b8a135696ae232e2bead1ce0a049
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 15:45:49 2007 +0200
 
-commit 7a60ee7c6248a958c5757d3660a1702723a2786d
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Wed Nov 7 08:19:19 2007 +0100
+    ppc4xx: Rework of 4xx serial driver (3)
 
-    Fix warning differ in signedness in common/cmd_ide.c
+    Change all linker scripts to reference the changed driver name iop480_uart.o.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 4d4faae65e115e327425cd514c1a35146a85166b
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:31 2007 -0600
+commit 882ae41274921f9016131806bdeb27e19606f47a
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 15:44:39 2007 +0200
 
-    Group PCI and PCMCIA drivers in drivers/Makefile
+    ppc4xx: Rework of 4xx serial driver (2)
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Change all linker scripts to reference the changed driver name 4xx_uart.o.
 
-commit 5798f87dc10a496d79d3177b9f5a76488987fd35
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:31 2007 -0600
+    Note: In most cased all these explicit referencing of these object files
+    in the linker scripts is not neccessary. Only for manually embedded
+    environment into the U-Boot image, which is not done is most cases.
 
-    Group block/flash drivers in drivers/Makefile
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+commit ad31e40bed042cb670d0036fea96435007afb838
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 15:09:59 2007 +0200
 
-commit df58c81551700f058b44cacf55a7997fa63bfe0a
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:31 2007 -0600
+    ppc4xx: Rework of 4xx serial driver (1)
 
-    Group USB drivers in drivers/Makefile
+    This patch starts the rework of the PPC4xx serial driver. First we split
+    the file into two seperate files, one 4xx_uart.c with the 405/440 UART
+    handling code and the other one iop480_uart.c with the UART code for the
+    PLX-Tech IOP480 PPC (PPC403 based).
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 5dbb6ed622e539b0c8493ef7e578d3a533181d29
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:30 2007 -0600
+commit 764e7417ee5f6e25b1715720e7d7dd3487109385
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 10:30:38 2007 +0200
 
-    Group i2c drivers in drivers/Makefile
+    ppc4xx: Correct UART input clock calculation and passing to fdt
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit ec00c76de0e5971273905998d62d6bb119324218
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:30 2007 -0600
+commit 211ea91ac6c225bec7e668a03d0ba7d7310679fa
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 07:34:34 2007 +0200
 
-    Group console drivers in drivers/Makefile
+    ppc4xx: Add initial AMCC Makalu 405EX support
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 754f230aa01b8c789fc31f8013c2487954073300
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:30 2007 -0600
+commit fa8aea20456e6f1dba43f46bcc72024dd9499998
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Oct 22 07:33:52 2007 +0200
 
-    Group network drivers in drivers/Makefile
+    ppc4xx: Add freqUART to CPU speed detection
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    This value is needed later for the device tree configuration of
+    the uart clock.
 
-commit f0037c56b0d12cd46215124667b9f83d60ef9391
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:30 2007 -0600
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Build: split COBJS value into multiple lines
+commit 837c730b4d7c6b1ddf3d1e247cb4445005d9bf0d
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Oct 21 14:26:29 2007 +0200
 
-    This change is in preparation for condtitionial compile support in the
-    build system.  By spliting them all into seperate lines now, subsequent
-    patches that change 'COBJS-y += ' into 'COBJS-$(CONFIG_<blah>) += ' will
-    be less invasive and easier to review
+    ppc: Small Kilauea cleanup of config file
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 1b4aaffe4fb2a5e95d9111a5d94fd1f89215dce4
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Mon Sep 24 09:05:30 2007 -0600
+commit 758c037aeead34b49631b8da3a90b1bba14c0410
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Oct 21 08:16:12 2007 +0200
 
-    Add .gitignore files
+    rtc: Add Xicor/Intersil X1205 RTC support
 
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
-    Acked-by: Kim Phillips <kim.phillips@freescale.com>
+    This patch adds support for the Xicor/Intersil X1205 RTC used on the
+    AMCC Makalu eval board. This driver is basically cloned from the Linux
+    driver version (2.6.23).
 
-commit 955413f35f054a82e40042f1dbcf501c6a05719b
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:27:52 2007 -0700
+    This patch also introduces the Linux bcd.h header for the BCD2BIN/
+    BIN2BCD conversions. In the future some of the other U-Boot RTC driver
+    should be converted to also use this header instead of implementing
+    their own local copy of these functions/macros.
 
-    Revert "Correct relocation fixup for mpc5xx"
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    This reverts commit 3649cd99ba815b6601868735765602f00ef3692b.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+commit 087dfdb79b5fd1ab99a26990c62a732c01a8c7f6
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Oct 21 08:12:41 2007 +0200
 
-commit e15633888a058aacb31a62d2cf1278e1e4c236ab
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:24:32 2007 -0700
+    ppc4xx: Consolidate some of the 405 and 440 macros/structs into 4xx
 
-    Revert "Correct fixup relocation for MPC5xxx"
+    This patch moves some common 4xx macros and the PPC405_SYS_INFO/
+    PPC440_SYS_INFO structure into the common ppc4xx.h header.
 
-    This reverts commit 6f7576b20ecf0d040c3ac3b032b5cbc860e38a90.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Lot's of other macros are good candidates to be consolidated this way
+    in the future.
 
-commit 139365fbe566d0fc619a1ed04452ec5388f0cef8
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:21:04 2007 -0700
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Revert "Correct fixup relocation for mpc8220"
+commit 770c7af5800f598d22730d1f4b70f16c9b33512e
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Oct 21 08:05:18 2007 +0200
 
-    This reverts commit a85dd254c0577fca13627c46e93fc2ad4c4f1f00.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    ppc4xx: Fix size setup in Kilauea DDR2 init routine
 
-commit 70922342369e5e39b286fe21e768a239ca07a514
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:20:57 2007 -0700
+    The size was initilized wrong. Instead of 256MB, the DDR2 controller
+    was setup to 512MB. Now the correct values is used.
 
-    Revert "Correct fixup relocation for mpc824x"
+    This patch also does a little cleanup and adds a comment here.
 
-    This reverts commit f3a52fe05923935db86985daf9438e2f70ac39aa.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 96279ab4cad60cb5972aa934fbe4845ac02cc75a
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:20:50 2007 -0700
+commit f6ba9b56607d4b27550301c7c7f6b55b654fd62a
+Author: Eugene O'Brien <eugene.obrien@advantechamt.com>
+Date:  Thu Oct 18 17:29:04 2007 +0200
 
-    Revert "Correct fixup relocation for mpc8260"
+    ppc4xx: Define CONFIG_BOOKE for all PPC440 based processors
 
-    This reverts commit 5af61b2f4b838a05f79be274f3e5a66edd2d9c96.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    CONFIG_BOOKE must be defined for PPC440 processors so that the proper SPR
+    number is used to access system registers.
 
-commit 928fe33b24cdf382a8dc8687fed24b1961cdb5d6
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:20:43 2007 -0700
+    Signed-off-by: Eugene O'Brien <eugene.obrien@advantechamt.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Revert "Correct fixup relocation for mpc83xx"
+commit c36c68160333ac5fe41ec3db12a728b7075b3912
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Oct 18 07:42:27 2007 +0200
 
-    This reverts commit 057004f4a4863554d56cc56268bfa7c7d9738e27.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    ppc4xx: Change inbound PCIe location for endpoint tests on Katmai
 
-commit c93945e8f9e300860d2bf73a2549ce5794f8bd00
-Author: Grant Likely <grant.likely@secretlab.ca>
-Date:  Thu Nov 15 08:20:25 2007 -0700
+    On Yucca & Katmai, the inbound memory map pointed to 0x4.0000.0000, which
+    is the internal SRAM. Since I now ported and tested this endpoint mode
+    on Kilauea successfully to map to 0 (SDRAM), I also changed this for
+    Katmai.
 
-    Revert "[MPC512x] Correct fixup relocation"
+    Yucca will stay at internal SRAM for now. Not sure if somebody relies on
+    this setup.
 
-    This reverts commit 8d17979d0359492a822a0a409d26e3a3549b4cd4.
-    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 54fd6c93c28a0a45352fff5dd92673401ff563f2
+commit 5cb4af4791f61843432155142b6cfac901f66c10
 Author: Stefan Roese <sr@denx.de>
-Date:  Tue Nov 13 08:18:20 2007 +0100
+Date:  Thu Oct 18 07:39:38 2007 +0200
 
-    ppc4xx: lwmon5: Change PHY reset sequence for PHY MDIO address latching
+    ppc4xx: Add PCIe endpoint support on Kilauea (405EX)
+
+    This patch adds endpoint support for the AMCC Kilauea eval board. It can
+    be tested by connecting a reworked PCIe cable (only 1x lane singles
+    connected) to another root-complex.
+
+    In this test setup, a 64MB inbound window is configured at BAR0 which maps
+    to 0 on the PLB side. So accessing this BAR0 from the root-complex will
+    access the first 64MB of the SDRAM on the PPC side.
 
     Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 1ce55151c85d068f70317a8d65c61058b891afb4
-Author: Heiko Schocher <hs@denx.de>
-Date:  Tue Nov 13 07:50:29 2007 +0100
+commit d4cb2d17946466740afeb195a57d6cb290bf4cc0
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat Oct 13 16:43:23 2007 +0200
 
-    [UC101] SRAM now with 2 MB working.
+    ppc4xx: Dynamic configuration of 4xx PCIe mode as root or endpoint mode
 
-    Signed-off-by: Heiko Schocher <hs@denx.de>
+    This patch adds support for dynamic configuration of PCIe ports for the
+    AMCC PPC4xx boards equipped with PCIe interfaces. These are the PPC440SPe
+    boards Yucca & Katmai and the 405EX board Kilauea.
 
-commit 8d737a28152ec12873f8544cca1fb39a49e5e693
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Thu Nov 8 12:50:18 2007 -0600
+    This dynamic configuration is done via the "pcie_mode" environement
+    variable. This variable can be set to "EP" or "RP" for endpoint or
+    rootpoint mode. Multiple values can be joined via the ":" delimiter.
+    Here an example:
+
+    pcie_mode=RP:EP:EP
+
+    This way, PCIe port 0 will be configured as rootpoint, PCIe port 1 and 2
+    as endpoint.
+
+    Per default Yucca will be configured as:
+    pcie_mode=RP:EP:EP
+
+    Per default Katmai will be configured as:
+    pcie_mode=RP:RP:REP
+
+    Per default Kilauea will be configured as:
+    pcie_mode=RP:RP
+
+    Signed-off-by: Tirumala R Marri <tmarri@amcc.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    ColdFire: MCF5329 - Remove reset registers from CCM
+commit fd671802b67a0ef37a06124fa2ce85f00aa22c6f
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Oct 11 11:15:59 2007 +0200
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    ppc4xx: Enable device tree support (fdt) on Kilauea per default
 
-commit 7d7cdea769a60b0a6e4c18bef7f9d648fd14b8d7
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Thu Nov 8 12:31:11 2007 -0600
+    This patch enables the fdt support on the AMCC Kilauea eval board.
+    Additionally now EBC ranges fdt fixup is included to support NOR
+    FLASH mapping via the Linux physmap_of driver.
 
-    ColdFire: MCF5329 - Add Reset structure to immap_5329.h
+    This Kilauea port now support booting arch/ppc and arch/powerpc
+    Linux kernels. The default environment "net_nfs" is for arch/ppc
+    and "net_nfs_fdt" is for arch/powerpc. In the long run, arch/ppc
+    support will be removed.
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 09b26cf00d76d75fdf7fdc4b13e4dd929743bc21
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Thu Nov 8 12:19:01 2007 -0600
+commit 4994ffd890b9d95d807387a9b7bd8a4803ee406e
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Oct 11 11:11:45 2007 +0200
 
-    ColdFire: MCF5329 - revert include/asm-m68k/m5329.h file mode
+    ppc4xx: Add additional debug info to 4xx fdt support
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 225a24b5e062ad94627424508ae814f51dbe1a34
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Wed Nov 7 18:00:54 2007 -0600
+commit db3232ddb058d0ed0bc31f7c5c296748a1afac67
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 21:28:58 2007 +0200
 
-    ColdFire: MCF5445x - Update correct RAMBAR and missing linker files
+    ppc4xx: Fix small merge problems with CPCI440 and Acadia boards
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 248c7c14835f34d5d910b45e5600050e58ca6cab
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Wed Nov 7 17:56:15 2007 -0600
+commit 1941cce71b1ae975602854045061e82f94ecd012
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:35:10 2007 +0200
 
-    ColdFire: MCF532x - Update do_reset() using core reset
+    ppc4xx: Fix small merge problem in 4xx_enet.c
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit d9240a5f827eb3b476a6ba2938d01f1a9e7688f4
-Author: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
-Date:  Wed Nov 7 17:51:00 2007 -0600
+commit 566806ca1a1bf4d895daaf0b2ba5494abbffebaf
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:11:30 2007 +0200
 
-    ColdFire: Update cpu flag for 4.2-xx compiler
+    ppc4xx: Add initial AMCC Kilauea 405EX support
 
-    Signed-off-by: TsiChungLiew <Tsi-Chung.Liew@freescale.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 1f103105a3746ab12279b63b8c1d372c0ce2cc58
-Author: Roy Zang <tie-fei.zang@freescale.com>
-Date:  Mon Nov 5 17:39:24 2007 +0800
+commit dbbd125721aea6645fdb962f36bd41f59e272f9d
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:10:59 2007 +0200
 
-    Implement general ULi 526x Ethernet driver support in U-boot
+    ppc4xx: Add PPC405EX support
 
-    This patch implements general ULi 526x Ethernet driver.
-    Until now, it is the only native Ethernet port on
-    MPC8610HPCD board, but it could be used on other boards
-    with ULi 526x Ethernet port as well.
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
-    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
-    Acked-by: Jon Loeliger <jdl@freescale.com>
-    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+commit 1d7b874e9c9a7c66f5d8da9ec78a3733765d3e31
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:09:36 2007 +0200
 
-commit 71bc6e6474fea8ef481b9b45d1edd7ad1f6dfbbd
-Author: Larry Johnson <lrj@arlinx.com>
-Date:  Thu Nov 1 08:46:50 2007 -0500
+    ppc4xx: Cleanup of 4xx PCI and PCIe support (renaming)
 
-    NET: Add Ethernet 1000BASE-X support for PPC4xx
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    This patch adds support for 1000BASE-X to functions "miiphy_speed ()" and
-    "miiphy_duplex()". It also adds function "miiphy_is_1000base_x ()", which
-    returns non-zero iff the PHY registers are configured for 1000BASE-X.  The
-    "mii info" command is modified to distinguish between 1000BASE-T and -X.
+commit 4f14ed6230b9c109aac9a6fb878497dabd44c2db
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:07:50 2007 +0200
 
-    Signed-off-by: Larry Johnson <lrj@acm.org>
-    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+    ppc4xx: Add initial fdt support to 4xx (first needed on 405EX)
 
-commit 298035df4948b113d29ac0e694717d34b95bc5dc
-Author: Larry Johnson <lrj@arlinx.com>
-Date:  Wed Oct 31 11:21:29 2007 -0500
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    NET: Cosmetic changes
+commit a424a8bb2924b90724b944165d3141f1fa8dfe5b
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 17:04:57 2007 +0200
 
-    Signed-off-by: Larry Johnson <lrj@acm.org>
-    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+    POST: Add 405EX support to 4xx UART POST test
 
-commit 992742a5b09d9040adbd156fb90756af66ade310
-Author: Wolfgang Denk <wd@denx.de>
-Date:  Sat Nov 3 23:09:27 2007 +0100
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Cleanup coding style; update CHANGELOG
+commit 4f2e92c11f6e2392fc8187829211a5ca7f0c1e12
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 15:10:02 2007 +0200
 
-    Signed-off-by: Wolfgang Denk <wd@denx.de>
+    DTT: Prepare DS1775 driver for use of different I2C addresses
 
-commit e881cb563e32f45832b7b6db77bdcd017adcbb41
-Author: Bruce Adler <bruce.adler@ccpu.com>
-Date:  Fri Nov 2 13:15:42 2007 -0700
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    fix wording in README
+commit 19e93b1e16d267220440d827b920fbad8abfa70f
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 14:23:43 2007 +0200
 
-    Changed the wording to properly describe the shadowing
-    of the environment from ROM to RAM
+    ppc4xx: 4xx_pcie: Change PCIe status output to match common style
 
-    Signed-off-by: Bruce Adler <bruce.adler@acm.org>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit ad845beef06245426c57b53dcdc01b7dc70e0d45
-Author: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
-Date:  Wed Oct 31 02:18:15 2007 +0900
+commit ff68f66bcb0da847845aa2fac11eba6c25938c99
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 09:22:33 2007 +0200
 
-    blackfin: Move `-D__BLACKFIN__' to $(ARCH)_config.mk
+    ppc4xx: 4xx_pcie: Disable debug output as default
 
-    Signed-off-by: Shinya Kuribayashi <skuribay@ruby.dti.ne.jp>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit ec22755799466c8a103664bb3a5e647bf9c238f4
-Author: Vlad Lungu <vlad@comsys.ro>
-Date:  Thu Oct 25 16:08:14 2007 +0300
+commit 97923770cb52b64d69eec958a11b2eda8d46e0f7
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 09:18:23 2007 +0200
 
-    Trimmed some variables in ne2000.c
+    ppc4xx: 4xx_pcie: More general cleanup and 405EX PCIe support added
 
-    Signed-off-by: Vlad Lungu <vlad@comsys.ro>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit eb6f214d3644b2a77968c176ed36dcf858cfe7e0
-Author: Zhang Wei <wei.zhang@freescale.com>
-Date:  Thu Oct 25 17:51:27 2007 +0800
+commit 4dbee8a90df613eb517aadbecebd70f168913d30
+Author: Stefan Roese <sr@denx.de>
+Date:  Fri Oct 5 07:57:20 2007 +0200
 
-    Fix the issue of usb_kbd driver missing the scan code of key 'z'.
+    ppc4xx: 4xx_pcie: Change CFG_PCIE_MEMSIZE to 128MB on Yucca & Katmai
 
-    The scan code of the key 'z' is 0x1d, which should be handled.
+    128MB seems to be the smallest possible value for the memory size
+    for on PCIe port. With this change now the BAR's of the PCIe cards
+    are accessible under U-Boot.
 
-    The change has be tested on NOVATEK USB keyboard and ULI PCI OHCI
-    controller.
+    One big note: This only works for PCIe port 0 & 1. For port 2 this
+    currently doesn't work, since the base address is now 0xc0000000
+    (0xb0000000 + 2 * 0x08000000), and this is already occupied by
+    CFG_PCIE0_CFGBASE. But solving this issue for port 2 would mean
+    to change the base addresses completely and this change would have
+    too much impact right now.
 
-    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+    This patch adds debug output to the 4xx pcie driver too.
 
-commit bbf4796f6498fbade56d56eff3a0a49b299d93e5
-Author: Zhang Wei <wei.zhang@freescale.com>
-Date:  Thu Oct 25 17:30:04 2007 +0800
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Fix USB support issue for MPC8641HPCN board.
+commit 6d95289281ed2958ebf76d2b55f86bbd88591fd2
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 21:16:32 2007 +0200
 
-    The configuration file has already enabled USB, but it
-    missed definition of CFG_OHCI_SWAP_REG_ACCESS, the USB
-    on MPC8641HPCN can not work because of the wrong USB
-    register endian.
+    ppc4xx: 4xx_pcie: Fix problem with SDRN access using port number as idx
 
-    And add the USB command to U-Boot commands list.
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+commit 3048bcbf0bad262378c5af68f2bf6778fb7d829a
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 15:01:02 2007 +0200
 
-commit 4e62041023dc3de9d98d977bb080235bc6d035e0
-Author: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
-Date:  Wed Oct 24 18:16:01 2007 +0200
+    ppc4xx: Rename 405gp_pci to 4xx_pci since its used on all 4xx platforms
 
-    Use config_cmd_default.h instead of config_cmd_all.h
+    These files were introduced with the IBM 405GP but are currently used on all
+    4xx PPC platforms. So the name doesn't match the content anymore. This patch
+    renames the files to 4xx_pci.c/h.
 
-    Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 56622f87857439b1c221e9deef11a9d5bb5d4308
-Author: Marian Balakowicz <m8@semihalf.com>
-Date:  Wed Oct 24 01:37:36 2007 +0200
+commit 94276eb0a7a35b9e8c053d589ae225b0f017a237
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 14:14:58 2007 +0200
 
-    TQM5200: Call usb_cpu_init() during board init
+    ppc4xx: Add a comment for 405EX PCIe endpoint configuration
 
-    usb_cpu_init() configures GPS USB pins, clocks, etc. and
-    is required for proper operation of kernel USB subsystem.
-    This setup was previously done in the kernel by the fixup
-    code which is being removed, thus low level init must be
-    done by U-boot now.
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+commit 03d344bb6a5f082ea10ec9d753558ea7dfd1c626
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 10:38:09 2007 +0200
 
-commit 29c29c0267fe857e72014ce90c5d35b2ef6302bd
-Author: Guennadi Liakhovetski <lg@denx.de>
-Date:  Tue Oct 23 16:25:50 2007 +0200
+    ppc4xx: Make 440SPe PCIe code more generic to use on different 4xx PPCs (3)
 
-    Fix typo in nfs.c
+    (3) This patch introduces macros like SDRN_PESDR_DLPSET(port) to access
+       the SDR registers of the PCIe ports. This makes the overall design
+       clearer, since it removed a lot of switch statements which are not
+       needed anymore.
 
-    An obvious typo. Originally fixed in linkstation u-boot port.
+       Also, the functions ppc4xx_init_pcie_rootport() and
+       ppc4xx_init_pcie_entport() are merged into a single function
+       ppc4xx_init_pcie_port(), since most of the code was duplicated.
+       This makes maintainance and porting to other 4xx platforms
+       easier.
 
-    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-commit 59543fe00a4ce720ef9f5aa7fb387c6daf1c7d78
-Author: Guennadi Liakhovetski <lg@denx.de>
-Date:  Tue Oct 23 14:35:05 2007 +0200
+commit 026f71106871f31d17d0ea0db9a7547ff92934bc
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 07:48:09 2007 +0200
 
-    Fix a typo in cpu/mpc824x/interrupts.c
+    ppc4xx: Make 440SPe PCIe code more generic to use on different 4xx PPCs (2)
 
-    Since December 2003 the timer_interrupt_cpu() function in
-    cpu/mpc824x/interrupts.c contains what seems to be a superfluous
-    parameter. Remove it.
+    This patch is the first patch of a series to make the 440SPe PCIe code
+    usable on different 4xx PPC platforms. In preperation for the new 405EX
+    which is also equipped with PCIe interfaces.
 
-    Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
+    (2) This patch renames the functions from 440spe_ to 4xx_ with a
+       little additional cleanup
 
-commit c9e7b9b9a1700fe009678d1f9b41e6364ac5df2d
-Author: Sergej Stepanov <Sergej.Stepanov@ids.de>
-Date:  Wed Oct 17 11:13:51 2007 +0200
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    add ft_cpu_setup(..) on mpc8260
+commit c7c6da23028f146d912514b95aefa3da7cf37699
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Oct 3 07:34:10 2007 +0200
 
-    Add ft_cpu_setup(..)-function to adapt it for use with libfdt
-    based on code from mpc5xxx
+    ppc4xx: Make 440SPe PCIe code more generic to use on different 4xx PPCs (1)
 
-    Sigend-off-by: Sergej Stepanov <Sergej.Stepanov@ids.de>
-    --
+    This patch is the first patch of a series to make the 440SPe PCIe code
+    usable on different 4xx PPC platforms. In preperation for the new 405EX
+    which is also equipped with PCIe interfaces.
 
-commit 6abd82e19ae93c0b4d104e50165e235915ec0875
-Author: Sergej Stepanov <Sergej.Stepanov@ids.de>
-Date:  Wed Oct 17 11:18:42 2007 +0200
+    (1) This patch renames the files from 440spe_pcie to 4xx_pcie
 
-    changes for IDS8247 board support
+    Signed-off-by: Stefan Roese <sr@denx.de>
 
-    To get the IDS8247 board working following are done:
-     - FCC2 is deactivated
-     - FCC1 is activated
-     - I2C is activated
-     - CFI driver is activated
-     - Adapted for use with LIBFDT
+commit 245a362ad3c0c1b84fccc9fec7b623eb14f6e502
+Author: Marian Balakowicz <m8@semihalf.com>
+Date:  Wed Oct 24 01:37:36 2007 +0200
 
-    Signed-off-by: Sergej Stepanov <Sergej.Stepanov@ids.de>
-    --
+    TQM5200: Call usb_cpu_init() during board init
 
-commit 8b6684a698500be9c142ec2c9f46cfc348e17f0c
-Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
-Date:  Wed Oct 24 15:48:37 2007 +0200
+    usb_cpu_init() configures GPS USB pins, clocks, etc. and
+    is required for proper operation of kernel USB subsystem.
+    This setup was previously done in the kernel by the fixup
+    code which is being removed, thus low level init must be
+    done by U-boot now.
 
-    ATSTK1002: Remove default ethernet addresses
+    Signed-off-by: Marian Balakowicz <m8@semihalf.com>
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-    Wolfgang is right: It's not a good idea to set up default initial
-    ethernet addresses for a board, even though they belong to the local
-    range.
+commit b5af773f8d92677e06f3295b45557c9d0a487c24
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Thu Oct 25 17:51:27 2007 +0800
 
-    This will change the failure mode from "IT manager screams at you for
-    using duplicate ethernet addresses" to a nice error message explaining
-    that the ethernet address hasn't been set properly.
+    Fix the issue of usb_kbd driver missing the scan code of key 'z'.
 
-    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+    The scan code of the key 'z' is 0x1d, which should be handled.
 
-commit e5c794e491a57d829b6d8733e2ed8368a2269abf
-Author: Justin Flammia <jflammia@savantav.com>
-Date:  Mon Oct 29 17:40:35 2007 -0400
+    The change has be tested on NOVATEK USB keyboard and ULI PCI OHCI
+    controller.
 
-    DHCP Client Fix
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
-    This is a multi-part message in MIME format.
+commit 85ac988e86f9414fa645b0148dc66c3520a1eb84
+Author: Rodolfo Giometti <giometti@enneenne.com>
+Date:  Mon Oct 15 11:59:17 2007 +0200
 
-    commit e6e505eae94ed721e123e177489291fc4544b7b8
-    Author: Justin Flammia <jflammia@savantav.com>
-    Date:   Mon Oct 29 17:19:03 2007 -0400
+    PXA USB OHCI: "usb stop" implementation.
 
-       Found a bug in the way the DHCP Request packet is built, where the IP address
-       that is offered by the server is bound to prematurely. This patch is a fix of
-       that bug where the IP address offered by the DHCP server is not used until
-       after the DHCP ACK from the server is received.
+    Some USB keys need to be switched off before loading the kernel
+    otherwise they can remain in an undefined status which prevents them
+    to be correctly recognized by the kernel.
 
-    Signed-off-by: Justin Flammia <jflammia@savantav.com>
-    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+    Signed-off-by: Rodolfo Giometti <giometti@linux.it>
+    Signed-off-by: Markus Klotzbuecher <mk@denx.de>
 
 commit 31548249decf18a6b877a18436b6139dd483fe4a
 Author: Justin Flammia <jflammia@savantav.com>
@@ -2232,6 +5820,39 @@ Date:    Wed Oct 17 15:40:19 2007 +0200
 
     Signed-off-by: Stefan Roese <sr@denx.de>
 
+commit 3c89d75409eb26639d36dfa11d4ee3d8b962dc3c
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Oct 16 15:27:43 2007 -0500
+
+    Initial mpc8610hpcd Makefile files.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Mahesh Jade <mahesh.jade@freescale.com>
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 9553df86d3a319c3a1a7cde7e4edd6eeb5aa64c7
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Oct 16 15:26:51 2007 -0500
+
+    Initial mpc8610hpcd cpu/, README and include/ files.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Mahesh Jade <mahesh.jade@freescale.com>
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 3dd2db53ceb0dff80f25c2a07f83f29b907b403e
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Tue Oct 16 13:54:01 2007 -0500
+
+    Initial mpc8610hpcd board files.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Mahesh Jade <mahesh.jade@freescale.com>
+    Signed-off-by: Jason Jin <Jason.jin@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
 commit 7ee6ba1a056e4061ab4cfde30127e332e7957afd
 Author: runet@innovsys.com <runet@innovsys.com>
 Date:  Tue Oct 16 14:50:40 2007 -0500
diff --git a/CREDITS b/CREDITS
index 13150aec65b20b2cba2532a95da6669d8c189347..1130c9ec162d34667f453ca886efc7553df5e8bd 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -303,6 +303,11 @@ D: Support for Nios Stratix Development Kit (DK-1S10)
 D: Support for SSV ADNP/ESC1 (Nios Cyclone)
 W: http://www.li-pro.net
 
+N: Dave Liu
+E: daveliu@freescale.com
+D: Support for MPC832x, MPC8360, MPC837x
+W: www.freescale.com
+
 N: Raymond Lo
 E: lo@routefree.com
 D: Support for DOS partitions
index 9052a196c43e97c3aa98e46a75885d15641cbb44..40b2b51ad4bc72c83060eb6b8d0a125e64cd77f5 100644 (file)
@@ -146,7 +146,6 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        CPCI4052                PPC405GP
        CPCI405AB               PPC405GP
        CPCI405DT               PPC405GP
-       CPCI440                 PPC440GP
        CPCIISER4               PPC405GP
        DASA_SIM                IOP480 (PPC401)
        DP405                   PPC405EP
@@ -159,6 +158,7 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        PCI405                  PPC405GP
        PLU405                  PPC405EP
        PMC405                  PPC405GP
+       PMC440                  PPC440EPx
        VOH405                  PPC405EP
        VOM405                  PPC405EP
        WUH405                  PPC405EP
@@ -190,6 +190,7 @@ Howard Gray <mvsensor@matrix-vision.de>
 
 Joe Hamman <joe.hamman@embeddedspecialties.com>
 
+       sbc8548                 MPC8548
        sbc8641d                MPC8641D
 
 Klaus Heydeck <heydeck@kieback-peter.de>
@@ -204,6 +205,10 @@ Murray Jensen <Murray.Jensen@csiro.au>
        cogent_mpc8260          MPC8260
        hymod                   MPC8260
 
+Larry Johnson <lrj@acm.org>
+
+       korat                   PPC440EPx
+
 Brad Kemp <Brad.Kemp@seranoa.com>
 
        ppmc8260                MPC8260
@@ -217,13 +222,19 @@ Thomas Lange <thomas@corelatus.se>
 
        GTH                     MPC860
 
+Robert Lazarski <robertlazarski@gmail.com>
+
+       ATUM8548                MPC8548
+
 The LEOX team <team@leox.org>
 
        ELPT860                 MPC860T
 
 Dave Liu <daveliu@freescale.com>
 
+       MPC832XEMDS             MPC832x
        MPC8360EMDS             MPC8360
+       MPC837XEMDS             MPC837x
 
 Nye Liu <nyet@zumanetworks.com>
 
@@ -303,8 +314,11 @@ Stefan Roese <sr@denx.de>
        bamboo                  PPC440EP
        bunbinga                PPC405EP
        ebony                   PPC440GP
+       haleakala               PPC405EXr
        katmai                  PPC440SPe
+       kilauea                 PPC405EX
        lwmon5                  PPC440EPx
+       makalu                  PPC405EX
        ocotea                  PPC440GX
        p3p440                  PPC440GP
        pcs440ep                PPC440EP
@@ -329,6 +343,17 @@ Travis Sawyer (travis.sawyer@sandburst.com>
        METROBOX                PPC440GX
        XPEDITE1K               PPC440GX
 
+Heiko Schocher <hs@denx.de>
+
+       ids8247                 MPC8272
+       jupiter                 MPC5200
+       mgcoge                  MPC8247
+       mgsuvd                  MPC852
+       municse                 MPC5200
+       sc3                     PPC405GP
+       uc101                   MPC5200
+
+
 Peter De Schrijver <p2@mind.be>
 
        ML2                     PPC4xx
@@ -357,6 +382,10 @@ David Updegraff <dave@cray.com>
 
        CRAYL1                  PPC4xx
 
+Anton Vorontsov <avorontsov@ru.mvista.com>
+
+       MPC8360ERDK             MPC8360
+
 Josef Wagner <Wagner@Microsys.de>
 
        CPC45                   MPC8245
diff --git a/MAKEALL b/MAKEALL
index 228a4b772018ec7654889c3509ac16b9defb197a..bec35419231242138389d427e7a92e12c45933ee 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -46,6 +46,7 @@ LIST_5xxx="           \
        mcc200          \
        mecp5200        \
        motionpro       \
+       munices         \
        o2dnt           \
        pf5200          \
        PM520           \
@@ -107,6 +108,7 @@ LIST_8xx="          \
        lwmon           \
        MBX             \
        MBX860T         \
+       mgsuvd          \
        MHPC            \
        MPC86xADS       \
        MPC885ADS       \
@@ -135,6 +137,7 @@ LIST_8xx="          \
        SPD823TS        \
        svm_sc8xx       \
        SXNI855T        \
+       TK885D          \
        TOP860          \
        TQM823L         \
        TQM823L_LCD     \
@@ -168,7 +171,6 @@ LIST_4xx="          \
        CPCI4052        \
        CPCI405AB       \
        CPCI405DT       \
-       CPCI440         \
        CPCIISER4       \
        CRAYL1          \
        csb272          \
@@ -180,6 +182,8 @@ LIST_4xx="          \
        ERIC            \
        EXBITGEN        \
        G2000           \
+       haleakala       \
+       haleakala_nand  \
        hcu4            \
        hcu5            \
        HH405           \
@@ -187,8 +191,12 @@ LIST_4xx="         \
        JSE             \
        KAREF           \
        katmai          \
+       kilauea         \
+       kilauea_nand    \
+       korat           \
        luan            \
        lwmon5          \
+       makalu          \
        METROBOX        \
        MIP405          \
        MIP405T         \
@@ -203,6 +211,7 @@ LIST_4xx="          \
        PIP405          \
        PLU405          \
        PMC405          \
+       PMC440          \
        PPChameleonEVB  \
        rainier         \
        sbc405          \
@@ -274,6 +283,7 @@ LIST_8260="         \
        hymod           \
        IPHASE4539      \
        ISPAN           \
+       mgcoge          \
        MPC8260ADS      \
        MPC8266ADS      \
        MPC8272ADS      \
@@ -307,6 +317,9 @@ LIST_83xx="         \
        MPC8349ITXGP    \
        MPC8360EMDS     \
        MPC8360EMDS_ATM \
+       MPC8360ERDK_33  \
+       MPC8360ERDK_66  \
+       MPC837XEMDS     \
        sbc8349         \
        TQM834x         \
 "
@@ -317,6 +330,7 @@ LIST_83xx="         \
 #########################################################################
 
 LIST_85xx="            \
+       ATUM8548        \
        MPC8540ADS      \
        MPC8540EVAL     \
        MPC8541CDS      \
@@ -328,6 +342,7 @@ LIST_85xx="         \
        PM854           \
        PM856           \
        sbc8540         \
+       sbc8548         \
        sbc8560         \
        stxgp3          \
        stxssa          \
@@ -342,6 +357,7 @@ LIST_85xx="         \
 #########################################################################
 
 LIST_86xx="            \
+       MPC8610HPCD     \
        MPC8641HPCN     \
        sbc8641d        \
 "
@@ -477,6 +493,7 @@ LIST_ARM10="                \
 LIST_ARM11="           \
        cp1136          \
        omap2420h4      \
+       apollon         \
 "
 
 #########################################################################
index 61d9d9aab57bf3816f69b79ad15bd33812e631bf..eba9333cb49d1fd5a3d95d843486ca2018eabea5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2000-2007
+# (C) Copyright 2000-2008
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
@@ -45,6 +45,14 @@ export       HOSTARCH HOSTOS
 # Deal with colliding definitions from tcsh etc.
 VENDOR=
 
+#########################################################################
+# Allow for silent builds
+ifeq (,$(findstring s,$(MAKEFLAGS)))
+XECHO = echo
+else
+XECHO = :
+endif
+
 #########################################################################
 #
 # U-boot build supports producing a object files to the separate external
@@ -112,10 +120,10 @@ export obj src
 
 #########################################################################
 
-ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))
+ifeq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk))
 
 # load ARCH, BOARD, and CPU configuration
-include $(OBJTREE)/include/config.mk
+include $(obj)include/config.mk
 export ARCH CPU BOARD VENDOR SOC
 
 ifndef CROSS_COMPILE
@@ -154,9 +162,9 @@ CROSS_COMPILE = avr32-linux-
 endif
 ifeq ($(ARCH),sh)
 CROSS_COMPILE = sh4-linux-
-endif
-endif
-endif
+endif  # sh
+endif  # HOSTARCH,ARCH
+endif  # CROSS_COMPILE
 
 export CROSS_COMPILE
 
@@ -243,6 +251,9 @@ LIBS += $(shell if [ -d post/board/$(BOARDDIR) ]; then echo \
        "post/board/$(BOARDDIR)/libpost$(BOARD).a"; fi)
 LIBS += common/libcommon.a
 LIBS += libfdt/libfdt.a
+ifeq ($(CONFIG_API),y)
+LIBS += api/libapi.a
+endif
 
 LIBS := $(addprefix $(obj),$(LIBS))
 .PHONY : $(LIBS)
@@ -255,6 +266,10 @@ PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -
 SUBDIRS        = tools \
          examples
 
+ifeq ($(CONFIG_API),y)
+SUBDIRS += api_examples
+endif
+
 .PHONY : $(SUBDIRS)
 
 ifeq ($(CONFIG_NAND_U_BOOT),y)
@@ -294,7 +309,8 @@ $(obj)u-boot.sha1:  $(obj)u-boot.bin
 $(obj)u-boot.dis:      $(obj)u-boot
                $(OBJDUMP) -d $< > $@
 
-$(obj)u-boot:          depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
+$(obj)u-boot:          depend $(obj)include/autoconf.mk \
+                       $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
                UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed  -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
                cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
                        --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
@@ -309,18 +325,18 @@ $(LIBS):
 $(SUBDIRS):
                $(MAKE) -C $@ all
 
-$(NAND_SPL):   version
+$(NAND_SPL):   $(VERSION_FILE)
                $(MAKE) -C nand_spl/board/$(BOARDDIR) all
 
 $(U_BOOT_NAND):        $(NAND_SPL) $(obj)u-boot.bin
                cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
 
-version:
-               @echo -n "#define U_BOOT_VERSION \"U-Boot " > $(VERSION_FILE); \
-               echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); \
+$(VERSION_FILE):
+               @( echo -n "#define U_BOOT_VERSION \"U-Boot " ; \
+               echo -n "$(U_BOOT_VERSION)" ; \
                echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion \
-                        $(TOPDIR)) >> $(VERSION_FILE); \
-               echo "\"" >> $(VERSION_FILE)
+                        $(TOPDIR)) ; \
+               echo "\"" > $(VERSION_FILE)
 
 gdbtools:
                $(MAKE) -C tools/gdb all || exit 1
@@ -329,9 +345,9 @@ updater:
                $(MAKE) -C tools/updater all || exit 1
 
 env:
-               $(MAKE) -C tools/env all || exit 1
+               $(MAKE) -C tools/env all MTD_VERSION=${MTD_VERSION} || exit 1
 
-depend dep:    version
+depend dep:    $(VERSION_FILE)
                for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done
 
 TAG_SUBDIRS += include
@@ -366,11 +382,11 @@ TAG_SUBDIRS += drivers/usb
 TAG_SUBDIRS += drivers/video
 
 tags ctags:
-               ctags -w -o $(OBJTREE)/ctags `find $(SUBDIRS) $(TAG_SUBDIRS) \
+               ctags -w -o $(obj)ctags `find $(SUBDIRS) $(TAG_SUBDIRS) \
                                                -name '*.[ch]' -print`
 
 etags:
-               etags -a -o $(OBJTREE)/etags `find $(SUBDIRS) $(TAG_SUBDIRS) \
+               etags -a -o $(obj)etags `find $(SUBDIRS) $(TAG_SUBDIRS) \
                                                -name '*.[ch]' -print`
 
 $(obj)System.map:      $(obj)u-boot
@@ -384,24 +400,24 @@ $(obj)System.map: $(obj)u-boot
 # This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
 # the dep file is only include in this top level makefile to determine when
 # to regenerate the autoconf.mk file.
-$(OBJTREE)/include/autoconf.mk: $(obj)include/config.h
-       @echo Generating include/autoconf.mk
-       @# Generate the dependancies
-       @$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $@ include/common.h > $@.dep
-       @# Extract the config macros
-       @$(CPP) $(CFLAGS) -dM include/common.h | sed -n -f tools/scripts/define2mk.sed >> $@
+$(obj)include/autoconf.mk: $(obj)include/config.h $(VERSION_FILE)
+       @$(XECHO) Generating include/autoconf.mk ; \
+       : Generate the dependancies ; \
+       $(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $@ include/common.h > $@.dep ; \
+       : Extract the config macros ; \
+       $(CPP) $(CFLAGS) -dM include/common.h | sed -n -f tools/scripts/define2mk.sed > $@
 
-sinclude $(OBJTREE)/include/autoconf.mk.dep
+sinclude $(obj)include/autoconf.mk.dep
 
 #########################################################################
-else
+else   # !config.mk
 all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
 $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
-$(SUBDIRS) version gdbtools updater env depend \
+$(SUBDIRS) $(VERSION_FILE) gdbtools updater env depend \
 dep tags ctags etags $(obj)System.map:
        @echo "System not configured - see README" >&2
        @ exit 1
-endif
+endif  # config.mk
 
 .PHONY : CHANGELOG
 CHANGELOG:
@@ -466,24 +482,24 @@ icecube_5100_config:                      unconfig
                        then echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; \
                        else echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \
                  fi ; \
-                 echo "... with LOWBOOT configuration" ; \
+                 $(XECHO) "... with LOWBOOT configuration" ; \
                }
        @[ -z "$(findstring LOWBOOT08,$@)" ] || \
                { echo "TEXT_BASE = 0xFF800000" >$(obj)board/icecube/config.tmp ; \
                  echo "... with 8 MB flash only" ; \
-                 echo "... with LOWBOOT configuration" ; \
+                 $(XECHO) "... with LOWBOOT configuration" ; \
                }
        @[ -z "$(findstring DDR,$@)" ] || \
                { echo "#define CONFIG_MPC5200_DDR"     >>$(obj)include/config.h ; \
-                 echo "... DDR memory revision" ; \
+                 $(XECHO) "... DDR memory revision" ; \
                }
        @[ -z "$(findstring 5200,$@)" ] || \
                { echo "#define CONFIG_MPC5200"         >>$(obj)include/config.h ; \
-                 echo "... with MPC5200 processor" ; \
+                 $(XECHO) "... with MPC5200 processor" ; \
                }
        @[ -z "$(findstring 5100,$@)" ] || \
                { echo "#define CONFIG_MGT5100"         >>$(obj)include/config.h ; \
-                 echo "... with MGT5100 processor" ; \
+                 $(XECHO) "... with MGT5100 processor" ; \
                }
        @$(MKCONFIG) -a IceCube ppc mpc5xxx icecube
 
@@ -503,18 +519,18 @@ lite5200b_LOWBOOT_config: unconfig
        @mkdir -p $(obj)board/icecube
        @ >$(obj)include/config.h
        @ echo "#define CONFIG_MPC5200_DDR"     >>$(obj)include/config.h
-       @ echo "... DDR memory revision"
+       @ $(XECHO) "... DDR memory revision"
        @ echo "#define CONFIG_MPC5200"         >>$(obj)include/config.h
        @ echo "#define CONFIG_LITE5200B"       >>$(obj)include/config.h
        @[ -z "$(findstring _PM_,$@)" ] || \
                { echo "#define CONFIG_LITE5200B_PM"    >>$(obj)include/config.h ; \
-                 echo "... with power management (low-power mode) support" ; \
+                 $(XECHO) "... with power management (low-power mode) support" ; \
                }
        @[ -z "$(findstring LOWBOOT_,$@)" ] || \
                { echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \
-                 echo "... with LOWBOOT configuration" ; \
+                 $(XECHO) "... with LOWBOOT configuration" ; \
                }
-       @ echo "... with MPC5200B processor"
+       @ $(XECHO) "... with MPC5200B processor"
        @$(MKCONFIG) -a IceCube  ppc mpc5xxx icecube
 
 mcc200_config  \
@@ -533,33 +549,33 @@ prs200_highboot_DDR_config:       unconfig
        @mkdir -p $(obj)board/mcc200
        @ >$(obj)include/config.h
        @[ -n "$(findstring highboot,$@)" ] || \
-               { echo "... with lowboot configuration" ; \
+               { $(XECHO) "... with lowboot configuration" ; \
                }
        @[ -z "$(findstring highboot,$@)" ] || \
                { echo "TEXT_BASE = 0xFFF00000" >$(obj)board/mcc200/config.tmp ; \
-                 echo "... with highboot configuration" ; \
+                 $(XECHO) "... with highboot configuration" ; \
                }
        @[ -n "$(findstring _SDRAM,$@)" ] || \
                { if [ -n "$(findstring mcc200,$@)" ]; \
                  then \
-                       echo "... with DDR" ; \
+                       $(XECHO) "... with DDR" ; \
                  else \
                        if [ -n "$(findstring _DDR,$@)" ];\
                        then \
-                               echo "... with DDR" ; \
+                               $(XECHO) "... with DDR" ; \
                        else \
                                echo "#define CONFIG_MCC200_SDRAM" >>$(obj)include/config.h ;\
-                               echo "... with SDRAM" ; \
+                               $(XECHO) "... with SDRAM" ; \
                        fi; \
                  fi; \
                }
        @[ -z "$(findstring _SDRAM,$@)" ] || \
                { echo "#define CONFIG_MCC200_SDRAM"    >>$(obj)include/config.h ; \
-                 echo "... with SDRAM" ; \
+                 $(XECHO) "... with SDRAM" ; \
                }
        @[ -z "$(findstring COM12,$@)" ] || \
                { echo "#define CONFIG_CONSOLE_COM12"   >>$(obj)include/config.h ; \
-                 echo "... with console on COM12" ; \
+                 $(XECHO) "... with console on COM12" ; \
                }
        @[ -z "$(findstring prs200,$@)" ] || \
                { echo "#define CONFIG_PRS200"  >>$(obj)include/config.h ;\
@@ -567,7 +583,10 @@ prs200_highboot_DDR_config:        unconfig
        @$(MKCONFIG) -n $@ -a mcc200 ppc mpc5xxx mcc200
 
 mecp5200_config:  unconfig
-       @$(MKCONFIG) -a mecp5200  ppc mpc5xxx mecp5200 esd
+       @$(MKCONFIG) mecp5200  ppc mpc5xxx mecp5200 esd
+
+munices_config:        unconfig
+       @$(MKCONFIG) munices ppc mpc5xxx munices
 
 o2dnt_config:
        @$(MKCONFIG) o2dnt ppc mpc5xxx o2dnt
@@ -583,11 +602,11 @@ PM520_ROMBOOT_DDR_config: unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring DDR,$@)" ] || \
                { echo "#define CONFIG_MPC5200_DDR"     >>$(obj)include/config.h ; \
-                 echo "... DDR memory revision" ; \
+                 $(XECHO) "... DDR memory revision" ; \
                }
        @[ -z "$(findstring ROMBOOT,$@)" ] || \
                { echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
-                 echo "... booting from 8-bit flash" ; \
+                 $(XECHO) "... booting from 8-bit flash" ; \
                }
        @$(MKCONFIG) -a PM520 ppc mpc5xxx pm520
 
@@ -605,7 +624,7 @@ TB5200_config:      unconfig
        @mkdir -p $(obj)include
        @[ -z "$(findstring _B,$@)" ] || \
                { echo "#define CONFIG_TQM5200_B"       >>$(obj)include/config.h ; \
-                 echo "... with MPC5200B processor" ; \
+                 $(XECHO) "... with MPC5200B processor" ; \
                }
        @$(MKCONFIG) -n $@ -a TB5200 ppc mpc5xxx tqm5200
 
@@ -626,23 +645,23 @@ Total5200_Rev2_lowboot_config:    unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring 5100,$@)" ] || \
                { echo "#define CONFIG_MGT5100"         >>$(obj)include/config.h ; \
-                 echo "... with MGT5100 processor" ; \
+                 $(XECHO) "... with MGT5100 processor" ; \
                }
        @[ -z "$(findstring 5200,$@)" ] || \
                { echo "#define CONFIG_MPC5200"         >>$(obj)include/config.h ; \
-                 echo "... with MPC5200 processor" ; \
+                 $(XECHO) "... with MPC5200 processor" ; \
                }
        @[ -n "$(findstring Rev,$@)" ] || \
                { echo "#define CONFIG_TOTAL5200_REV 1" >>$(obj)include/config.h ; \
-                 echo "... revision 1 board" ; \
+                 $(XECHO) "... revision 1 board" ; \
                }
        @[ -z "$(findstring Rev2_,$@)" ] || \
                { echo "#define CONFIG_TOTAL5200_REV 2" >>$(obj)include/config.h ; \
-                 echo "... revision 2 board" ; \
+                 $(XECHO) "... revision 2 board" ; \
                }
        @[ -z "$(findstring lowboot_,$@)" ] || \
                { echo "TEXT_BASE = 0xFE000000" >$(obj)board/total5200/config.tmp ; \
-                 echo "... with lowboot configuration" ; \
+                 $(XECHO) "... with lowboot configuration" ; \
                }
        @$(MKCONFIG) -a Total5200 ppc mpc5xxx total5200
 
@@ -663,23 +682,23 @@ TQM5200_STK100_config:    unconfig
                { echo "#define CONFIG_CAM5200" >>$(obj)include/config.h ; \
                  echo "#define CONFIG_TQM5200S"        >>$(obj)include/config.h ; \
                  echo "#define CONFIG_TQM5200_B"       >>$(obj)include/config.h ; \
-                 echo "... TQM5200S on Cam5200" ; \
+                 $(XECHO) "... TQM5200S on Cam5200" ; \
                }
        @[ -z "$(findstring niosflash,$@)" ] || \
                { echo "#define CONFIG_CAM5200_NIOSFLASH"       >>$(obj)include/config.h ; \
-                 echo "... with NIOS flash driver" ; \
+                 $(XECHO) "... with NIOS flash driver" ; \
                }
        @[ -z "$(findstring fo300,$@)" ] || \
                { echo "#define CONFIG_FO300"   >>$(obj)include/config.h ; \
-                 echo "... TQM5200 on FO300" ; \
+                 $(XECHO) "... TQM5200 on FO300" ; \
                }
        @[ -z "$(findstring MiniFAP,$@)" ] || \
                { echo "#define CONFIG_MINIFAP" >>$(obj)include/config.h ; \
-                 echo "... TQM5200_AC on MiniFAP" ; \
+                 $(XECHO) "... TQM5200_AC on MiniFAP" ; \
                }
        @[ -z "$(findstring STK100,$@)" ] || \
                { echo "#define CONFIG_STK52XX_REV100"  >>$(obj)include/config.h ; \
-                 echo "... on a STK52XX.100 base board" ; \
+                 $(XECHO) "... on a STK52XX.100 base board" ; \
                }
        @[ -z "$(findstring TQM5200_B,$@)" ] || \
                { echo "#define CONFIG_TQM5200_B"       >>$(obj)include/config.h ; \
@@ -764,7 +783,7 @@ GEN860T_config: unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _SC,$@)" ] || \
                { echo "#define CONFIG_SC" >>$(obj)include/config.h ; \
-                 echo "With reduced H/W feature set (SC)..." ; \
+                 $(XECHO) "With reduced H/W feature set (SC)..." ; \
                }
        @$(MKCONFIG) -a $(call xtract_GEN860T,$@) ppc mpc8xx gen860t
 
@@ -791,7 +810,7 @@ ICU862_config: unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _100MHz,$@)" ] || \
                { echo "#define CONFIG_100MHz"  >>$(obj)include/config.h ; \
-                 echo "... with 100MHz system clock" ; \
+                 $(XECHO) "... with 100MHz system clock" ; \
                }
        @$(MKCONFIG) -a $(call xtract_ICU862,$@) ppc mpc8xx icu862
 
@@ -846,6 +865,9 @@ MBX_config  \
 MBX860T_config:        unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc8xx mbx8xx
 
+mgsuvd_config:         unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc8xx mgsuvd
+
 MHPC_config:           unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc8xx mhpc eltec
 
@@ -860,11 +882,11 @@ NETVIA_config:            unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring NETVIA_config,$@)" ] || \
                 { echo "#define CONFIG_NETVIA_VERSION 1" >>$(obj)include/config.h ; \
-                 echo "... Version 1" ; \
+                 $(XECHO) "... Version 1" ; \
                 }
        @[ -z "$(findstring NETVIA_V2_config,$@)" ] || \
                 { echo "#define CONFIG_NETVIA_VERSION 2" >>$(obj)include/config.h ; \
-                 echo "... Version 2" ; \
+                 $(XECHO) "... Version 2" ; \
                 }
        @$(MKCONFIG) -a $(call xtract_NETVIA,$@) ppc mpc8xx netvia
 
@@ -987,16 +1009,16 @@ RPXlite_DW_config:       unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _64,$@)" ] || \
                { echo "#define RPXlite_64MHz"          >>$(obj)include/config.h ; \
-                 echo "... with 64MHz system clock ..."; \
+                 $(XECHO) "... with 64MHz system clock ..."; \
                }
        @[ -z "$(findstring _LCD,$@)" ] || \
                { echo "#define CONFIG_LCD"             >>$(obj)include/config.h ; \
                  echo "#define CONFIG_NEC_NL6448BC20"  >>$(obj)include/config.h ; \
-                 echo "... with LCD display ..."; \
+                 $(XECHO) "... with LCD display ..."; \
                }
        @[ -z "$(findstring _NVRAM,$@)" ] || \
                { echo "#define  CFG_ENV_IS_IN_NVRAM"   >>$(obj)include/config.h ; \
-                 echo "... with ENV in NVRAM ..."; \
+                 $(XECHO) "... with ENV in NVRAM ..."; \
                }
        @$(MKCONFIG) -a RPXlite_DW ppc mpc8xx RPXlite_dw
 
@@ -1055,13 +1077,14 @@ TQM860M_config          \
 TQM862M_config         \
 TQM866M_config         \
 TQM885D_config         \
+TK885D_config          \
 virtlab2_config:       unconfig
        @mkdir -p $(obj)include
        @ >$(obj)include/config.h
        @[ -z "$(findstring _LCD,$@)" ] || \
                { echo "#define CONFIG_LCD"             >>$(obj)include/config.h ; \
                  echo "#define CONFIG_NEC_NL6448BC20"  >>$(obj)include/config.h ; \
-                 echo "... with LCD display" ; \
+                 $(XECHO) "... with LCD display" ; \
                }
        @$(MKCONFIG) -a $(call xtract_8xx,$@) ppc mpc8xx tqm8xx
 
@@ -1145,11 +1168,11 @@ CATcenter_33_config:    unconfig
        @ echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >> $(obj)include/config.h
        @[ -z "$(findstring _25,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_CLK_25" >> $(obj)include/config.h ; \
-                 echo "SysClk = 25MHz" ; \
+                 $(XECHO) "SysClk = 25MHz" ; \
                }
        @[ -z "$(findstring _33,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_CLK_33" >> $(obj)include/config.h ; \
-                 echo "SysClk = 33MHz" ; \
+                 $(XECHO) "SysClk = 33MHz" ; \
                }
        @$(MKCONFIG) -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
 
@@ -1163,9 +1186,6 @@ CPCI405AB_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx cpci405 esd
        @echo "BOARD_REVISION = $(@:_config=)"  >> $(obj)include/config.mk
 
-CPCI440_config:        unconfig
-       @$(MKCONFIG) $(@:_config=) ppc ppc4xx cpci440 esd
-
 CPCIISER4_config:      unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx cpciiser4 esd
 
@@ -1220,12 +1240,32 @@ KAREF_config: unconfig
 katmai_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx katmai amcc
 
+# Kilauea & Haleakala images are identical (recognized via PVR)
+kilauea_config \
+haleakala_config: unconfig
+       @$(MKCONFIG) -n $@ -a kilauea ppc ppc4xx kilauea amcc
+
+kilauea_nand_config \
+haleakala_nand_config: unconfig
+       @mkdir -p $(obj)include $(obj)board/amcc/kilauea
+       @mkdir -p $(obj)nand_spl/board/amcc/kilauea
+       @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
+       @$(MKCONFIG) -n $@ -a kilauea ppc ppc4xx kilauea amcc
+       @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/kilauea/config.tmp
+       @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
+
+korat_config:  unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx korat
+
 luan_config:   unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx luan amcc
 
 lwmon5_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx lwmon5
 
+makalu_config: unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx makalu amcc
+
 METROBOX_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx metrobox sandburst
 
@@ -1235,7 +1275,7 @@ MIP405_config:    unconfig
 MIP405T_config:        unconfig
        @mkdir -p $(obj)include
        @echo "#define CONFIG_MIP405T" >$(obj)include/config.h
-       @echo "Enable subset config for MIP405T"
+       @$(XECHO) "Enable subset config for MIP405T"
        @$(MKCONFIG) -a MIP405 ppc ppc4xx mip405 mpl
 
 ML2_config:    unconfig
@@ -1269,6 +1309,9 @@ PLU405_config:    unconfig
 PMC405_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx pmc405 esd
 
+PMC440_config: unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx pmc440 esd
+
 PPChameleonEVB_config          \
 PPChameleonEVB_BA_25_config    \
 PPChameleonEVB_ME_25_config    \
@@ -1280,23 +1323,23 @@ PPChameleonEVB_HI_33_config:    unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring EVB_BA,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 0" >>$(obj)include/config.h ; \
-                 echo "... BASIC model" ; \
+                 $(XECHO) "... BASIC model" ; \
                }
        @[ -z "$(findstring EVB_ME,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 1" >>$(obj)include/config.h ; \
-                 echo "... MEDIUM model" ; \
+                 $(XECHO) "... MEDIUM model" ; \
                }
        @[ -z "$(findstring EVB_HI,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_MODULE_MODEL 2" >>$(obj)include/config.h ; \
-                 echo "... HIGH-END model" ; \
+                 $(XECHO) "... HIGH-END model" ; \
                }
        @[ -z "$(findstring _25,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_CLK_25" >>$(obj)include/config.h ; \
-                 echo "SysClk = 25MHz" ; \
+                 $(XECHO) "SysClk = 25MHz" ; \
                }
        @[ -z "$(findstring _33,$@)" ] || \
                { echo "#define CONFIG_PPCHAMELEON_CLK_33" >>$(obj)include/config.h ; \
-                 echo "SysClk = 33MHz" ; \
+                 $(XECHO) "SysClk = 33MHz" ; \
                }
        @$(MKCONFIG) -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
 
@@ -1398,10 +1441,10 @@ CPC45_ROMBOOT_config:   unconfig
        @cd $(obj)include ;                             \
        if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
                echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
-               echo "... booting from 8-bit flash" ; \
+               $(XECHO) "... booting from 8-bit flash" ; \
        else \
                echo "CONFIG_BOOT_ROM = n" >> config.mk ; \
-               echo "... booting from 64-bit flash" ; \
+               $(XECHO) "... booting from 64-bit flash" ; \
        fi; \
        echo "export CONFIG_BOOT_ROM" >> config.mk;
 
@@ -1466,10 +1509,10 @@ CPU86_ROMBOOT_config: unconfig
        @cd $(obj)include ;                             \
        if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
                echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
-               echo "... booting from 8-bit flash" ; \
+               $(XECHO) "... booting from 8-bit flash" ; \
        else \
                echo "CONFIG_BOOT_ROM = n" >> config.mk ; \
-               echo "... booting from 64-bit flash" ; \
+               $(XECHO) "... booting from 64-bit flash" ; \
        fi; \
        echo "export CONFIG_BOOT_ROM" >> config.mk;
 
@@ -1479,10 +1522,10 @@ CPU87_ROMBOOT_config: unconfig
        @cd $(obj)include ;                             \
        if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
                echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
-               echo "... booting from 8-bit flash" ; \
+               $(XECHO) "... booting from 8-bit flash" ; \
        else \
                echo "CONFIG_BOOT_ROM = n" >> config.mk ; \
-               echo "... booting from 64-bit flash" ; \
+               $(XECHO) "... booting from 64-bit flash" ; \
        fi; \
        echo "export CONFIG_BOOT_ROM" >> config.mk;
 
@@ -1516,6 +1559,9 @@ ISPAN_REVB_config:        unconfig
        fi
        @$(MKCONFIG) -a ISPAN ppc mpc8260 ispan
 
+mgcoge_config  :       unconfig
+       @$(MKCONFIG) mgcoge ppc mpc8260 mgcoge
+
 MPC8260ADS_config      \
 MPC8260ADS_lowboot_config      \
 MPC8260ADS_33MHz_config        \
@@ -1544,7 +1590,7 @@ PQ2FADS-ZU_66MHz_lowboot_config   \
        @echo "#define CONFIG_8260_CLKIN 66000000" >> $(obj)include/config.h))
        @[ -z "$(findstring lowboot_,$@)" ] || \
                { echo "TEXT_BASE = 0xFF800000" >$(obj)board/mpc8260ads/config.tmp ; \
-                 echo "... with lowboot configuration" ; \
+                 $(XECHO) "... with lowboot configuration" ; \
                }
        @$(MKCONFIG) -a MPC8260ADS ppc mpc8260 mpc8260ads
 
@@ -1568,17 +1614,17 @@ PM826_ROMBOOT_BIGFLASH_config:  unconfig
                >$(obj)include/config.h ; \
        fi
        @if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
-               echo "... booting from 8-bit flash" ; \
+               $(XECHO) "... booting from 8-bit flash" ; \
                echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
                echo "TEXT_BASE = 0xFF800000" >$(obj)board/pm826/config.tmp ; \
                if [ "$(findstring _BIGFLASH_,$@)" ] ; then \
-                       echo "... with 32 MB Flash" ; \
+                       $(XECHO) "... with 32 MB Flash" ; \
                        echo "#define CONFIG_FLASH_32MB" >>$(obj)include/config.h ; \
                fi; \
        else \
-               echo "... booting from 64-bit flash" ; \
+               $(XECHO) "... booting from 64-bit flash" ; \
                if [ "$(findstring _BIGFLASH_,$@)" ] ; then \
-                       echo "... with 32 MB Flash" ; \
+                       $(XECHO) "... with 32 MB Flash" ; \
                        echo "#define CONFIG_FLASH_32MB" >>$(obj)include/config.h ; \
                        echo "TEXT_BASE = 0x40000000" >$(obj)board/pm826/config.tmp ; \
                else \
@@ -1595,12 +1641,12 @@ PM828_ROMBOOT_PCI_config:       unconfig
        @mkdir -p $(obj)board/pm826
        @if [ "$(findstring _PCI_,$@)" ] ; then \
                echo "#define CONFIG_PCI"  >>$(obj)include/config.h ; \
-               echo "... with PCI enabled" ; \
+               $(XECHO) "... with PCI enabled" ; \
        else \
                >$(obj)include/config.h ; \
        fi
        @if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
-               echo "... booting from 8-bit flash" ; \
+               $(XECHO) "... booting from 8-bit flash" ; \
                echo "#define CONFIG_BOOT_ROM" >>$(obj)include/config.h ; \
                echo "TEXT_BASE = 0xFF800000" >$(obj)board/pm826/config.tmp ; \
        fi
@@ -1662,19 +1708,19 @@ TQM8265_AA_config:  unconfig
        fi; \
        echo "#define CONFIG_$${CFREQ}MHz"      >>$(obj)include/config.h ; \
        echo "... with $${CFREQ}MHz system clock" ; \
-       if [ "$${CACHE}" == "yes" ] ; then \
+       if [ "$${CACHE}" = "yes" ] ; then \
                echo "#define CONFIG_L2_CACHE"  >>$(obj)include/config.h ; \
-               echo "... with L2 Cache support" ; \
+               $(XECHO) "... with L2 Cache support" ; \
        else \
                echo "#undef CONFIG_L2_CACHE"   >>$(obj)include/config.h ; \
-               echo "... without L2 Cache support" ; \
+               $(XECHO) "... without L2 Cache support" ; \
        fi; \
-       if [ "$${BMODE}" == "60x" ] ; then \
+       if [ "$${BMODE}" = "60x" ] ; then \
                echo "#define CONFIG_BUSMODE_60x" >>$(obj)include/config.h ; \
-               echo "... with 60x Bus Mode" ; \
+               $(XECHO) "... with 60x Bus Mode" ; \
        else \
                echo "#undef CONFIG_BUSMODE_60x"  >>$(obj)include/config.h ; \
-               echo "... without 60x Bus Mode" ; \
+               $(XECHO) "... without 60x Bus Mode" ; \
        fi
        @$(MKCONFIG) -a TQM8260 ppc mpc8260 tqm8260
 
@@ -1702,9 +1748,9 @@ M5235EVB_Flash32_config:  unconfig
        M5235EVB_Flash16_config)        FLASH=16;; \
        M5235EVB_Flash32_config)        FLASH=32;; \
        esac; \
-       >include/config.h ; \
+       >$(obj)include/config.h ; \
        if [ "$${FLASH}" != "16" ] ; then \
-               echo "#define NORFLASH_PS32BIT  1" >> include/config.h ; \
+               echo "#define NORFLASH_PS32BIT  1" >> $(obj)include/config.h ; \
                echo "TEXT_BASE = 0xFFC00000" > $(obj)board/freescale/m5235evb/config.tmp ; \
                cp $(obj)board/freescale/m5235evb/u-boot.32 $(obj)board/freescale/m5235evb/u-boot.lds ; \
        else \
@@ -1760,7 +1806,7 @@ M5329BFEE_config :        unconfig
        M5329AFEE_config)       NAND=0;; \
        M5329BFEE_config)       NAND=16;; \
        esac; \
-       >include/config.h ; \
+       >$(obj)include/config.h ; \
        if [ "$${NAND}" != "0" ] ; then \
                echo "#define NANDFLASH_SIZE    $${NAND}" > $(obj)include/config.h ; \
        fi
@@ -1782,20 +1828,20 @@ M54455EVB_i66_config :  unconfig
        M54455EVB_i33_config)           FLASH=INTEL; FREQ=33333333;; \
        M54455EVB_i66_config)           FLASH=INTEL; FREQ=66666666;; \
        esac; \
-       >include/config.h ; \
-       if [ "$${FLASH}" == "INTEL" ] ; then \
+       >$(obj)include/config.h ; \
+       if [ "$${FLASH}" = "INTEL" ] ; then \
                echo "#undef CFG_ATMEL_BOOT" >> $(obj)include/config.h ; \
                echo "TEXT_BASE = 0x00000000" > $(obj)board/freescale/m54455evb/config.tmp ; \
                cp $(obj)board/freescale/m54455evb/u-boot.int $(obj)board/freescale/m54455evb/u-boot.lds ; \
-               echo "... with INTEL boot..." ; \
+               $(XECHO) "... with INTEL boot..." ; \
        else \
                echo "#define CFG_ATMEL_BOOT"   >> $(obj)include/config.h ; \
                echo "TEXT_BASE = 0x04000000" > $(obj)board/freescale/m54455evb/config.tmp ; \
                cp $(obj)board/freescale/m54455evb/u-boot.atm $(obj)board/freescale/m54455evb/u-boot.lds ; \
-               echo "... with ATMEL boot..." ; \
+               $(XECHO) "... with ATMEL boot..." ; \
        fi; \
        echo "#define CFG_INPUT_CLKSRC $${FREQ}" >> $(obj)include/config.h ; \
-       echo "... with $${FREQ}Hz input clock"
+       $(XECHO) "... with $${FREQ}Hz input clock"
        @$(MKCONFIG) -a M54455EVB m68k mcf5445x m54455evb freescale
 
 #########################################################################
@@ -1807,11 +1853,11 @@ MPC8313ERDB_66_config: unconfig
        @mkdir -p $(obj)include
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _33_,$@)" ] ; then \
-               echo -n "...33M ..." ; \
+               $(XECHO) -n "...33M ..." ; \
                echo "#define CFG_33MHZ" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _66_,$@)" ] ; then \
-               echo -n "...66M..." ; \
+               $(XECHO) -n "...66M..." ; \
                echo "#define CFG_66MHZ" >>$(obj)include/config.h ; \
        fi ;
        @$(MKCONFIG) -a MPC8313ERDB ppc mpc83xx mpc8313erdb freescale
@@ -1827,26 +1873,26 @@ MPC832XEMDS_ATM_config: unconfig
        @mkdir -p $(obj)include
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _HOST_,$@)" ] ; then \
-               echo -n "... PCI HOST " ; \
+               $(XECHO) -n "... PCI HOST " ; \
                echo "#define CONFIG_PCI" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _SLAVE_,$@)" ] ; then \
-               echo "...PCI SLAVE 66M"  ; \
+               $(XECHO) "...PCI SLAVE 66M"  ; \
                echo "#define CONFIG_PCI" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PCISLAVE" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _33_,$@)" ] ; then \
-               echo -n "...33M ..." ; \
+               $(XECHO) -n "...33M ..." ; \
                echo "#define PCI_33M" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _66_,$@)" ] ; then \
-               echo -n "...66M..." ; \
+               $(XECHO) -n "...66M..." ; \
                echo "#define PCI_66M" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _ATM_,$@)" ] ; then \
-               echo -n "...ATM..." ; \
+               $(XECHO) -n "...ATM..." ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB_ATM     1" >>$(obj)include/config.h ; \
        fi ;
@@ -1877,31 +1923,52 @@ MPC8360EMDS_ATM_config: unconfig
        @mkdir -p $(obj)include
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _HOST_,$@)" ] ; then \
-               echo -n "... PCI HOST " ; \
+               $(XECHO) -n "... PCI HOST " ; \
                echo "#define CONFIG_PCI" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _SLAVE_,$@)" ] ; then \
-               echo "...PCI SLAVE 66M"  ; \
+               $(XECHO) "...PCI SLAVE 66M"  ; \
                echo "#define CONFIG_PCI" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PCISLAVE" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _33_,$@)" ] ; then \
-               echo -n "...33M ..." ; \
+               $(XECHO) -n "...33M ..." ; \
                echo "#define PCI_33M" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _66_,$@)" ] ; then \
-               echo -n "...66M..." ; \
+               $(XECHO) -n "...66M..." ; \
                echo "#define PCI_66M" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
        fi ; \
        if [ "$(findstring _ATM_,$@)" ] ; then \
-               echo -n "...ATM..." ; \
+               $(XECHO) -n "...ATM..." ; \
                echo "#define CONFIG_PQ_MDS_PIB 1" >>$(obj)include/config.h ; \
                echo "#define CONFIG_PQ_MDS_PIB_ATM     1" >>$(obj)include/config.h ; \
        fi ;
        @$(MKCONFIG) -a MPC8360EMDS ppc mpc83xx mpc8360emds freescale
 
+MPC8360ERDK_33_config \
+MPC8360ERDK_66_config \
+MPC8360ERDK_config:
+       @mkdir -p $(obj)include
+       @echo "" >$(obj)include/config.h ; \
+       if [ "$(findstring _33_,$@)" ] ; then \
+               $(XECHO) -n "... CLKIN 33MHz " ; \
+               echo "#define CONFIG_CLKIN_33MHZ" >>$(obj)include/config.h ;\
+       fi ;
+       @$(MKCONFIG) -a MPC8360ERDK ppc mpc83xx mpc8360erdk freescale
+
+MPC837XEMDS_config \
+MPC837XEMDS_HOST_config:       unconfig
+       @mkdir -p $(obj)include
+       @echo "" >$(obj)include/config.h ; \
+       if [ "$(findstring _HOST_,$@)" ] ; then \
+               $(XECHO) -n "... PCI HOST " ; \
+               echo "#define CONFIG_PCI" >>$(obj)include/config.h ; \
+       fi ;
+       @$(MKCONFIG) -a MPC837XEMDS ppc mpc83xx mpc837xemds freescale
+
 sbc8349_config:                unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc83xx sbc8349
 
@@ -1913,6 +1980,9 @@ TQM834x_config:   unconfig
 ## MPC85xx Systems
 #########################################################################
 
+ATUM8548_config:       unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx atum8548
+
 MPC8540ADS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8540ads freescale
 
@@ -1924,16 +1994,16 @@ MPC8540EVAL_66_slave_config:      unconfig
        @mkdir -p $(obj)include
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _33_,$@)" ] ; then \
-               echo "... 33 MHz PCI" ; \
+               $(XECHO) "... 33 MHz PCI" ; \
        else \
                echo "#define CONFIG_SYSCLK_66M" >>$(obj)include/config.h ; \
-               echo "... 66 MHz PCI" ; \
+               $(XECHO) "... 66 MHz PCI" ; \
        fi ; \
        if [ "$(findstring _slave_,$@)" ] ; then \
                echo "#define CONFIG_PCI_SLAVE" >>$(obj)include/config.h ; \
-               echo " slave" ; \
+               $(XECHO) " slave" ; \
        else \
-               echo " host" ; \
+               $(XECHO) " host" ; \
        fi
        @$(MKCONFIG) -a MPC8540EVAL ppc mpc85xx mpc8540eval
 
@@ -1946,7 +2016,7 @@ MPC8541CDS_config:        unconfig
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _legacy_,$@)" ] ; then \
                echo "#define CONFIG_LEGACY" >>$(obj)include/config.h ; \
-               echo "... legacy" ; \
+               $(XECHO) "... legacy" ; \
        fi
        @$(MKCONFIG) -a MPC8541CDS ppc mpc85xx mpc8541cds freescale
 
@@ -1959,7 +2029,7 @@ MPC8548CDS_config:        unconfig
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _legacy_,$@)" ] ; then \
                echo "#define CONFIG_LEGACY" >>$(obj)include/config.h ; \
-               echo "... legacy" ; \
+               $(XECHO) "... legacy" ; \
        fi
        @$(MKCONFIG) -a MPC8548CDS ppc mpc85xx mpc8548cds freescale
 
@@ -1969,7 +2039,7 @@ MPC8555CDS_config:        unconfig
        @echo "" >$(obj)include/config.h ; \
        if [ "$(findstring _legacy_,$@)" ] ; then \
                echo "#define CONFIG_LEGACY" >>$(obj)include/config.h ; \
-               echo "... legacy" ; \
+               $(XECHO) "... legacy" ; \
        fi
        @$(MKCONFIG) -a MPC8555CDS ppc mpc85xx mpc8555cds freescale
 
@@ -1988,23 +2058,26 @@ sbc8540_66_config:      unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _66_,$@)" ] ; then \
                echo "#define CONFIG_PCI_66"    >>$(obj)include/config.h ; \
-               echo "... 66 MHz PCI" ; \
+               $(XECHO) "... 66 MHz PCI" ; \
        else \
                >$(obj)include/config.h ; \
-               echo "... 33 MHz PCI" ; \
+               $(XECHO) "... 33 MHz PCI" ; \
        fi
        @$(MKCONFIG) -a SBC8540 ppc mpc85xx sbc8560
 
+sbc8548_config:                unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx sbc8548
+
 sbc8560_config \
 sbc8560_33_config \
 sbc8560_66_config:      unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _66_,$@)" ] ; then \
                echo "#define CONFIG_PCI_66"    >>$(obj)include/config.h ; \
-               echo "... 66 MHz PCI" ; \
+               $(XECHO) "... 66 MHz PCI" ; \
        else \
                >$(obj)include/config.h ; \
-               echo "... 33 MHz PCI" ; \
+               $(XECHO) "... 33 MHz PCI" ; \
        fi
        @$(MKCONFIG) -a sbc8560 ppc mpc85xx sbc8560
 
@@ -2016,7 +2089,7 @@ stxssa_4M_config: unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _4M_,$@)" ] ; then \
                echo "#define CONFIG_STXSSA_4M" >>$(obj)include/config.h ; \
-               echo "... with 4 MiB flash memory" ; \
+               $(XECHO) "... with 4 MiB flash memory" ; \
        else \
                >$(obj)include/config.h ; \
        fi
@@ -2029,7 +2102,7 @@ TQM8560_config:           unconfig
        @mkdir -p $(obj)include
        @CTYPE=$(subst TQM,,$(@:_config=)); \
        >$(obj)include/config.h ; \
-       echo "... TQM"$${CTYPE}; \
+       $(XECHO) "... TQM"$${CTYPE}; \
        echo "#define CONFIG_MPC$${CTYPE}">>$(obj)include/config.h; \
        echo "#define CONFIG_TQM$${CTYPE}">>$(obj)include/config.h; \
        echo "#define CONFIG_HOSTNAME tqm$${CTYPE}">>$(obj)include/config.h; \
@@ -2041,6 +2114,9 @@ TQM8560_config:           unconfig
 ## MPC86xx Systems
 #########################################################################
 
+MPC8610HPCD_config:    unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc86xx mpc8610hpcd freescale
+
 MPC8641HPCN_config:    unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc86xx mpc8641hpcn freescale
 
@@ -2187,10 +2263,10 @@ netstar_32_config       \
 netstar_config:                unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _32_,$@)" ] ; then \
-               echo "... 32MB SDRAM" ; \
+               $(XECHO) "... 32MB SDRAM" ; \
                echo "#define PHYS_SDRAM_1_SIZE SZ_32M" >>$(obj)include/config.h ; \
        else \
-               echo "... 64MB SDRAM" ; \
+               $(XECHO) "... 64MB SDRAM" ; \
                echo "#define PHYS_SDRAM_1_SIZE SZ_64M" >>$(obj)include/config.h ; \
        fi
        @$(MKCONFIG) -a netstar arm arm925t netstar
@@ -2221,13 +2297,13 @@ omap1610h2_cs_autoboot_config:  unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _cs0boot_, $@)" ] ; then \
                echo "#define CONFIG_CS0_BOOT" >> .$(obj)include/config.h ; \
-               echo "... configured for CS0 boot"; \
+               $(XECHO) "... configured for CS0 boot"; \
        elif [ "$(findstring _cs_autoboot_, $@)" ] ; then \
                echo "#define CONFIG_CS_AUTOBOOT" >> $(obj)include/config.h ; \
-               echo "... configured for CS_AUTO boot"; \
+               $(XECHO) "... configured for CS_AUTO boot"; \
        else \
                echo "#define CONFIG_CS3_BOOT" >> $(obj)include/config.h ; \
-               echo "... configured for CS3 boot"; \
+               $(XECHO) "... configured for CS3 boot"; \
        fi;
        @$(MKCONFIG) -a $(call xtract_omap1610xxx,$@) arm arm926ejs omap1610inn NULL omap
 
@@ -2237,10 +2313,10 @@ omap730p2_cs3boot_config :      unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring _cs0boot_, $@)" ] ; then \
                echo "#define CONFIG_CS0_BOOT" >> $(obj)include/config.h ; \
-               echo "... configured for CS0 boot"; \
+               $(XECHO) "... configured for CS0 boot"; \
        else \
                echo "#define CONFIG_CS3_BOOT" >> $(obj)include/config.h ; \
-               echo "... configured for CS3 boot"; \
+               $(XECHO) "... configured for CS3 boot"; \
        fi;
        @$(MKCONFIG) -a $(call xtract_omap730p2,$@) arm arm926ejs omap730p2 NULL omap
 
@@ -2270,18 +2346,18 @@ trab_old_config:        unconfig
        @[ -z "$(findstring _bigram,$@)" ] || \
                { echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
                  echo "#define CONFIG_RAM_32MB"   >>$(obj)include/config.h ; \
-                 echo "... with 8 MB Flash, 32 MB RAM" ; \
+                 $(XECHO) "... with 8 MB Flash, 32 MB RAM" ; \
                }
        @[ -z "$(findstring _bigflash,$@)" ] || \
                { echo "#define CONFIG_FLASH_16MB" >>$(obj)include/config.h ; \
                  echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
-                 echo "... with 16 MB Flash, 16 MB RAM" ; \
+                 $(XECHO) "... with 16 MB Flash, 16 MB RAM" ; \
                  echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
                }
        @[ -z "$(findstring _old,$@)" ] || \
                { echo "#define CONFIG_FLASH_8MB"  >>$(obj)include/config.h ; \
                  echo "#define CONFIG_RAM_16MB"   >>$(obj)include/config.h ; \
-                 echo "... with 8 MB Flash, 16 MB RAM" ; \
+                 $(XECHO) "... with 8 MB Flash, 16 MB RAM" ; \
                  echo "TEXT_BASE = 0x0CF40000" >$(obj)board/trab/config.tmp ; \
                }
        @$(MKCONFIG) -a $(call xtract_trab,$@) arm arm920t trab NULL s3c24x0
@@ -2302,11 +2378,11 @@ voiceblue_config:       unconfig
        @mkdir -p $(obj)include
        @mkdir -p $(obj)board/voiceblue
        @if [ "$(findstring _smallflash_,$@)" ] ; then \
-               echo "... boot from lower flash bank" ; \
+               $(XECHO) "... boot from lower flash bank" ; \
                echo "#define VOICEBLUE_SMALL_FLASH" >>$(obj)include/config.h ; \
                echo "VOICEBLUE_SMALL_FLASH=y" >$(obj)board/voiceblue/config.tmp ; \
        else \
-               echo "... boot from upper flash bank" ; \
+               $(XECHO) "... boot from upper flash bank" ; \
                >$(obj)include/config.h ; \
                echo "VOICEBLUE_SMALL_FLASH=n" >$(obj)board/voiceblue/config.tmp ; \
        fi
@@ -2398,7 +2474,7 @@ scpu_config:    unconfig
        @mkdir -p $(obj)include
        @if [ "$(findstring scpu_,$@)" ] ; then \
                echo "#define CONFIG_SCPU"      >>$(obj)include/config.h ; \
-               echo "... on SCPU board variant" ; \
+               $(XECHO) "... on SCPU board variant" ; \
        else \
                >$(obj)include/config.h ; \
        fi
@@ -2428,9 +2504,12 @@ zylonite_config :
 #########################################################################
 ## ARM1136 Systems
 #########################################################################
-omap2420h4_config :    unconfig
+omap2420h4_config      : unconfig
        @$(MKCONFIG) $(@:_config=) arm arm1136 omap2420h4
 
+apollon_config         : unconfig
+       @$(MKCONFIG) $(@:_config=) arm arm1136 apollon
+
 #========================================================================
 # i386
 #========================================================================
@@ -2463,15 +2542,15 @@ incaip_config: unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _100MHz,$@)" ] || \
                { echo "#define CPU_CLOCK_RATE 100000000" >>$(obj)include/config.h ; \
-                 echo "... with 100MHz system clock" ; \
+                 $(XECHO) "... with 100MHz system clock" ; \
                }
        @[ -z "$(findstring _133MHz,$@)" ] || \
                { echo "#define CPU_CLOCK_RATE 133000000" >>$(obj)include/config.h ; \
-                 echo "... with 133MHz system clock" ; \
+                 $(XECHO) "... with 133MHz system clock" ; \
                }
        @[ -z "$(findstring _150MHz,$@)" ] || \
                { echo "#define CPU_CLOCK_RATE 150000000" >>$(obj)include/config.h ; \
-                 echo "... with 150MHz system clock" ; \
+                 $(XECHO) "... with 150MHz system clock" ; \
                }
        @$(MKCONFIG) -a $(call xtract_incaip,$@) mips mips incaip
 
@@ -2538,15 +2617,15 @@ DK1C20_config:  unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _safe_32,$@)" ] || \
                { echo "#define CONFIG_NIOS_SAFE_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'safe_32' configuration" ; \
+                 $(XECHO) "... NIOS 'safe_32' configuration" ; \
                }
        @[ -z "$(findstring _standard_32,$@)" ] || \
                { echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'standard_32' configuration" ; \
+                 $(XECHO) "... NIOS 'standard_32' configuration" ; \
                }
        @[ -z "$(findstring DK1C20_config,$@)" ] || \
                { echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'standard_32' configuration (DEFAULT)" ; \
+                 $(XECHO) "... NIOS 'standard_32' configuration (DEFAULT)" ; \
                }
        @$(MKCONFIG) -a DK1C20 nios nios dk1c20 altera
 
@@ -2558,19 +2637,19 @@ DK1S10_config:  unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _safe_32,$@)" ] || \
                { echo "#define CONFIG_NIOS_SAFE_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'safe_32' configuration" ; \
+                 $(XECHO) "... NIOS 'safe_32' configuration" ; \
                }
        @[ -z "$(findstring _standard_32,$@)" ] || \
                { echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'standard_32' configuration" ; \
+                 $(XECHO) "... NIOS 'standard_32' configuration" ; \
                }
        @[ -z "$(findstring _mtx_ldk_20,$@)" ] || \
                { echo "#define CONFIG_NIOS_MTX_LDK_20 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'mtx_ldk_20' configuration" ; \
+                 $(XECHO) "... NIOS 'mtx_ldk_20' configuration" ; \
                }
        @[ -z "$(findstring DK1S10_config,$@)" ] || \
                { echo "#define CONFIG_NIOS_STANDARD_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'standard_32' configuration (DEFAULT)" ; \
+                 $(XECHO) "... NIOS 'standard_32' configuration (DEFAULT)" ; \
                }
        @$(MKCONFIG) -a DK1S10 nios nios dk1s10 altera
 
@@ -2581,15 +2660,15 @@ ADNPESC1_config: unconfig
        @ >$(obj)include/config.h
        @[ -z "$(findstring _DNPEVA2,$@)" ] || \
                { echo "#define CONFIG_DNPEVA2 1" >>$(obj)include/config.h ; \
-                 echo "... DNP/EVA2 configuration" ; \
+                 $(XECHO) "... DNP/EVA2 configuration" ; \
                }
        @[ -z "$(findstring _base_32,$@)" ] || \
                { echo "#define CONFIG_NIOS_BASE_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'base_32' configuration" ; \
+                 $(XECHO) "... NIOS 'base_32' configuration" ; \
                }
        @[ -z "$(findstring ADNPESC1_config,$@)" ] || \
                { echo "#define CONFIG_NIOS_BASE_32 1" >>$(obj)include/config.h ; \
-                 echo "... NIOS 'base_32' configuration (DEFAULT)" ; \
+                 $(XECHO) "... NIOS 'base_32' configuration (DEFAULT)" ; \
                }
        @$(MKCONFIG) -a ADNPESC1 nios nios adnpesc1 ssv
 
@@ -2675,13 +2754,13 @@ atstk1004_config        :       unconfig
 ## sh4 (Renesas SuperH)
 #########################################################################
 ms7750se_config: unconfig
-       @ >include/config.h
-       @echo "#define CONFIG_MS7750SE 1" >> include/config.h
+       @ >$(obj)include/config.h
+       @echo "#define CONFIG_MS7750SE 1" >> $(obj)include/config.h
        @./mkconfig -a $(@:_config=) sh sh4 ms7750se
 
 ms7722se_config :       unconfig
-       @ >include/config.h
-       @echo "#define CONFIG_MS7722SE 1" >> include/config.h
+       @ >$(obj)include/config.h
+       @echo "#define CONFIG_MS7722SE 1" >> $(obj)include/config.h
        @./mkconfig -a $(@:_config=) sh sh4 ms7722se
 
 #########################################################################
@@ -2689,43 +2768,45 @@ ms7722se_config :       unconfig
 #########################################################################
 
 clean:
-       find $(OBJTREE) -type f \
+       @find $(OBJTREE) -type f \
                \( -name 'core' -o -name '*.bak' -o -name '*~' \
                -o -name '*.o'  -o -name '*.a'  \) -print \
                | xargs rm -f
-       rm -f $(obj)examples/hello_world $(obj)examples/timer \
+       @rm -f $(obj)examples/hello_world $(obj)examples/timer \
              $(obj)examples/eepro100_eeprom $(obj)examples/sched \
              $(obj)examples/mem_to_mem_idma2intr $(obj)examples/82559_eeprom \
              $(obj)examples/smc91111_eeprom $(obj)examples/interrupt \
              $(obj)examples/test_burst
-       rm -f $(obj)tools/img2srec $(obj)tools/mkimage $(obj)tools/envcrc \
+       @rm -f $(obj)tools/img2srec $(obj)tools/mkimage $(obj)tools/envcrc \
                $(obj)tools/gen_eth_addr $(obj)tools/ubsha1
-       rm -f $(obj)tools/mpc86x_clk $(obj)tools/ncb
-       rm -f $(obj)tools/easylogo/easylogo $(obj)tools/bmp_logo
-       rm -f $(obj)tools/gdb/astest $(obj)tools/gdb/gdbcont $(obj)tools/gdb/gdbsend
-       rm -f $(obj)tools/env/fw_printenv $(obj)tools/env/fw_setenv
-       rm -f $(obj)board/cray/L1/bootscript.c $(obj)board/cray/L1/bootscript.image
-       rm -f $(obj)board/netstar/eeprom $(obj)board/netstar/crcek $(obj)board/netstar/crcit
-       rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin
-       rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom
-       rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds
-       rm -f $(obj)board/bf533-ezkit/u-boot.lds $(obj)board/bf533-stamp/u-boot.lds
-       rm -f $(obj)board/bf537-stamp/u-boot.lds $(obj)board/bf561-ezkit/u-boot.lds
-       rm -f $(obj)include/bmp_logo.h
-       rm -f $(obj)nand_spl/u-boot-spl $(obj)nand_spl/u-boot-spl.map
+       @rm -f $(obj)tools/mpc86x_clk $(obj)tools/ncb
+       @rm -f $(obj)tools/easylogo/easylogo $(obj)tools/bmp_logo
+       @rm -f $(obj)tools/gdb/astest $(obj)tools/gdb/gdbcont $(obj)tools/gdb/gdbsend
+       @rm -f $(obj)tools/env/fw_printenv $(obj)tools/env/fw_setenv
+       @rm -f $(obj)board/cray/L1/bootscript.c $(obj)board/cray/L1/bootscript.image
+       @rm -f $(obj)board/netstar/eeprom $(obj)board/netstar/crcek $(obj)board/netstar/crcit
+       @rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin
+       @rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom
+       @rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds
+       @rm -f $(obj)board/bf533-ezkit/u-boot.lds $(obj)board/bf533-stamp/u-boot.lds
+       @rm -f $(obj)board/bf537-stamp/u-boot.lds $(obj)board/bf561-ezkit/u-boot.lds
+       @rm -f $(obj)include/bmp_logo.h
+       @rm -f $(obj)nand_spl/u-boot-spl $(obj)nand_spl/u-boot-spl.map
+       @rm -f $(obj)api_examples/demo $(VERSION_FILE)
 
 clobber:       clean
-       find $(OBJTREE) -type f \( -name .depend \
+       @find $(OBJTREE) -type f \( -name .depend \
                -o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \
                -print0 \
                | xargs -0 rm -f
-       rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS $(obj)include/version_autogenerated.h
-       rm -fr $(obj)*.*~
-       rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
-       rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c $(obj)tools/sha1.c
-       rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
-       rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
-       [ ! -d $(OBJTREE)/nand_spl ] || find $(obj)nand_spl -lname "*" -print | xargs rm -f
+       @rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS
+       @rm -fr $(obj)*.*~
+       @rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)
+       @rm -f $(obj)tools/crc32.c $(obj)tools/environment.c $(obj)tools/env/crc32.c $(obj)tools/sha1.c
+       @rm -f $(obj)tools/inca-swap-bytes $(obj)cpu/mpc824x/bedbug_603e.c
+       @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
+       @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -lname "*" -print | xargs rm -f
+       @[ ! -d $(obj)api_examples ] || find $(obj)api_examples -lname "*" -print | xargs rm -f
 
 ifeq ($(OBJTREE),$(SRCTREE))
 mrproper \
@@ -2733,7 +2814,7 @@ distclean:        clobber unconfig
 else
 mrproper \
 distclean:     clobber unconfig
-       rm -rf $(OBJTREE)/*
+       rm -rf $(obj)*
 endif
 
 backup:
diff --git a/README b/README
index 26f93c21a769d0ccfd4dff6ba0a63a5a8b8dec2a..f2a4914923876bead95b28d8d55caf3c87221353 100644 (file)
--- a/README
+++ b/README
@@ -924,7 +924,7 @@ The following options need to be configured:
                (i.e. setenv videomode 317; saveenv; reset;)
 
                - "videomode=bootargs" all the video parameters are parsed
-               from the bootargs. (See drivers/videomodes.c)
+               from the bootargs. (See drivers/video/videomodes.c)
 
 
                CONFIG_VIDEO_SED13806
@@ -1353,7 +1353,7 @@ The following options need to be configured:
                CONFIG_FSL_I2C
 
                Define this option if you want to use Freescale's I2C driver in
-               drivers/fsl_i2c.c.
+               drivers/i2c/fsl_i2c.c.
 
 
 - SPI Support: CONFIG_SPI
@@ -1377,14 +1377,23 @@ The following options need to be configured:
                SPI configuration items (port pins to use, etc). For
                an example, see include/configs/sacsng.h.
 
-- FPGA Support: CONFIG_FPGA_COUNT
+- FPGA Support: CONFIG_FPGA
 
-               Specify the number of FPGA devices to support.
+               Enables FPGA subsystem.
+
+               CONFIG_FPGA_<vendor>
+
+               Enables support for specific chip vendors.
+               (ALTERA, XILINX)
+
+               CONFIG_FPGA_<family>
 
-               CONFIG_FPGA
+               Enables support for FPGA family.
+               (SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX)
 
-               Used to specify the types of FPGA devices.  For example,
-               #define CONFIG_FPGA  CFG_XILINX_VIRTEX2
+               CONFIG_FPGA_COUNT
+
+               Specify the number of FPGA devices to support.
 
                CFG_FPGA_PROG_FEEDBACK
 
@@ -2269,6 +2278,10 @@ Low Level (hardware related) configuration options:
                enable I2C microcode relocation patch (MPC8xx);
                define relocation offset in DPRAM [DSP2]
 
+- CFG_SMC_UCODE_PATCH, CFG_SMC_DPMEM_OFFSET [0x1FC0]:
+               enable SMC microcode relocation patch (MPC8xx);
+               define relocation offset in DPRAM [SMC1]
+
 - CFG_SPI_UCODE_PATCH, CFG_SPI_DPMEM_OFFSET [0x1FC0]:
                enable SPI microcode relocation patch (MPC8xx);
                define relocation offset in DPRAM [SCC4]
diff --git a/api/Makefile b/api/Makefile
new file mode 100644 (file)
index 0000000..94de3dc
--- /dev/null
@@ -0,0 +1,40 @@
+#
+# (C) Copyright 2007 Semihalf
+#
+# 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 Foundatio; 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)libapi.a
+
+COBJS  = api.o api_net.o api_storage.o api_platform-$(ARCH).o
+
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
diff --git a/api/README b/api/README
new file mode 100644 (file)
index 0000000..6df225f
--- /dev/null
@@ -0,0 +1,55 @@
+U-Boot machine/arch independent API for external apps
+=====================================================
+
+1.  Main assumptions
+
+  - there is a single entry point (syscall) to the API
+
+  - per current design the syscall is a C-callable function in the U-Boot
+    text, which might evolve into a real syscall using machine exception trap
+    once this initial version proves functional
+
+  - the consumer app is responsible for producing appropriate context (call
+    number and arguments)
+
+  - upon entry, the syscall dispatches the call to other (existing) U-Boot
+    functional areas like networking or storage operations
+
+  - consumer application will recognize the API is available by searching
+    a specified (assumed by convention) range of address space for the
+    signature
+
+  - the U-Boot integral part of the API is meant to be thin and non-intrusive,
+    leaving as much processing as possible on the consumer application side,
+    for example it doesn't keep states, but relies on hints from the app and
+    so on
+
+  - optional (CONFIG_API)
+
+
+2. Calls
+
+  - console related (getc, putc, tstc etc.)
+  - system (reset, platform info)
+  - time (delay, current)
+  - env vars (enumerate all, get, set)
+  - devices (enumerate all, open, close, read, write); currently two classes
+    of devices are recognized and supported: network and storage (ide, scsi,
+    usb etc.)
+
+
+3. Structure overview
+
+  - core API, integral part of U-Boot, mandatory
+    - implements the single entry point (mimics UNIX syscall)
+
+  - glue
+    - entry point at the consumer side, allows to make syscall, mandatory
+      part
+
+    - helper conveniency wrappers so that consumer app does not have to use
+      the syscall directly, but in a more friendly manner (a la libc calls),
+      optional part
+
+  - consumer application
+    - calls directly, or leverages the provided glue mid-layer
diff --git a/api/api.c b/api/api.c
new file mode 100644 (file)
index 0000000..0598d90
--- /dev/null
+++ b/api/api.c
@@ -0,0 +1,670 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_API)
+
+#include <command.h>
+#include <common.h>
+#include <malloc.h>
+#include <linux/types.h>
+#include <api_public.h>
+
+#include "api_private.h"
+
+#define DEBUG
+#undef DEBUG
+
+/* U-Boot routines needed */
+extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+extern uchar (*env_get_char)(int);
+extern uchar *env_get_addr(int);
+
+/*****************************************************************************
+ *
+ * This is the API core.
+ *
+ * API_ functions are part of U-Boot code and constitute the lowest level
+ * calls:
+ *
+ *  - they know what values they need as arguments
+ *  - their direct return value pertains to the API_ "shell" itself (0 on
+ *    success, some error code otherwise)
+ *  - if the call returns a value it is buried within arguments
+ *
+ ****************************************************************************/
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+typedef        int (*cfp_t)(va_list argp);
+
+static int calls_no;
+
+/*
+ * pseudo signature:
+ *
+ * int API_getc(int *c)
+ */
+static int API_getc(va_list ap)
+{
+       int *c;
+
+       if ((c = (int *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       *c = getc();
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_tstc(int *c)
+ */
+static int API_tstc(va_list ap)
+{
+       int *t;
+
+       if ((t = (int *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       *t = tstc();
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_putc(char *ch)
+ */
+static int API_putc(va_list ap)
+{
+       char *c;
+
+       if ((c = (char *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       putc(*c);
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_puts(char **s)
+ */
+static int API_puts(va_list ap)
+{
+       char *s;
+
+       if ((s = (char *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       puts(s);
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_reset(void)
+ */
+static int API_reset(va_list ap)
+{
+       do_reset(NULL, 0, 0, NULL);
+
+       /* NOT REACHED */
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_get_sys_info(struct sys_info *si)
+ *
+ * fill out the sys_info struct containing selected parameters about the
+ * machine
+ */
+static int API_get_sys_info(va_list ap)
+{
+       struct sys_info *si;
+
+       si = (struct sys_info *)va_arg(ap, u_int32_t);
+       if (si == NULL)
+               return API_ENOMEM;
+
+       return (platform_sys_info(si)) ? 0 : API_ENODEV;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_udelay(unsigned long *udelay)
+ */
+static int API_udelay(va_list ap)
+{
+       unsigned long *d;
+
+       if ((d = (unsigned long *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       udelay(*d);
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_get_timer(unsigned long *current, unsigned long *base)
+ */
+static int API_get_timer(va_list ap)
+{
+       unsigned long *base, *cur;
+
+       cur = (unsigned long *)va_arg(ap, u_int32_t);
+       if (cur == NULL)
+               return API_EINVAL;
+
+       base = (unsigned long *)va_arg(ap, u_int32_t);
+       if (base == NULL)
+               return API_EINVAL;
+
+       *cur = get_timer(*base);
+       return 0;
+}
+
+
+/*****************************************************************************
+ *
+ * pseudo signature:
+ *
+ * int API_dev_enum(struct device_info *)
+ *
+ *
+ * cookies uniqely identify the previously enumerated device instance and
+ * provide a hint for what to inspect in current enum iteration:
+ *
+ *   - net: &eth_device struct address from list pointed to by eth_devices
+ *
+ *   - storage: block_dev_desc_t struct address from &ide_dev_desc[n],
+ *     &scsi_dev_desc[n] and similar tables
+ *
+ ****************************************************************************/
+
+static int API_dev_enum(va_list ap)
+{
+       struct device_info *di;
+
+       /* arg is ptr to the device_info struct we are going to fill out */
+       di = (struct device_info *)va_arg(ap, u_int32_t);
+       if (di == NULL)
+               return API_EINVAL;
+
+       if (di->cookie == NULL) {
+               /* start over - clean up enumeration */
+               dev_enum_reset();       /* XXX shouldn't the name contain 'stor'? */
+               debugf("RESTART ENUM\n");
+
+               /* net device enumeration first */
+               if (dev_enum_net(di))
+                       return 0;
+       }
+
+       /*
+        * The hidden assumption is there can only be one active network
+        * device and it is identified upon enumeration (re)start, so there's
+        * no point in trying to find network devices in other cases than the
+        * (re)start and hence the 'next' device can only be storage
+        */
+       if (!dev_enum_storage(di))
+               /* make sure we mark there are no more devices */
+               di->cookie = NULL;
+
+       return 0;
+}
+
+
+static int API_dev_open(va_list ap)
+{
+       struct device_info *di;
+       int err = 0;
+
+       /* arg is ptr to the device_info struct */
+       di = (struct device_info *)va_arg(ap, u_int32_t);
+       if (di == NULL)
+               return API_EINVAL;
+
+       /* Allow only one consumer of the device at a time */
+       if (di->state == DEV_STA_OPEN)
+               return API_EBUSY;
+
+       if (di->cookie == NULL)
+               return API_ENODEV;
+
+       if (di->type & DEV_TYP_STOR)
+               err = dev_open_stor(di->cookie);
+
+       else if (di->type & DEV_TYP_NET)
+               err = dev_open_net(di->cookie);
+       else
+               err = API_ENODEV;
+
+       if (!err)
+               di->state = DEV_STA_OPEN;
+
+       return err;
+}
+
+
+static int API_dev_close(va_list ap)
+{
+       struct device_info *di;
+       int err = 0;
+
+       /* arg is ptr to the device_info struct */
+       di = (struct device_info *)va_arg(ap, u_int32_t);
+       if (di == NULL)
+               return API_EINVAL;
+
+       if (di->state == DEV_STA_CLOSED)
+               return 0;
+
+       if (di->cookie == NULL)
+               return API_ENODEV;
+
+       if (di->type & DEV_TYP_STOR)
+               err = dev_close_stor(di->cookie);
+
+       else if (di->type & DEV_TYP_NET)
+               err = dev_close_net(di->cookie);
+       else
+               /*
+                * In case of unknown device we cannot change its state, so
+                * only return error code
+                */
+               err = API_ENODEV;
+
+       if (!err)
+               di->state = DEV_STA_CLOSED;
+
+       return err;
+}
+
+
+/*
+ * Notice: this is for sending network packets only, as U-Boot does not
+ * support writing to storage at the moment (12.2007)
+ *
+ * pseudo signature:
+ *
+ * int API_dev_write(
+ *     struct device_info *di,
+ *     void *buf,
+ *     int *len
+ * )
+ *
+ * buf:        ptr to buffer from where to get the data to send
+ *
+ * len: length of packet to be sent (in bytes)
+ *
+ */
+static int API_dev_write(va_list ap)
+{
+       struct device_info *di;
+       void *buf;
+       int *len;
+       int err = 0;
+
+       /* 1. arg is ptr to the device_info struct */
+       di = (struct device_info *)va_arg(ap, u_int32_t);
+       if (di == NULL)
+               return API_EINVAL;
+
+       /* XXX should we check if device is open? i.e. the ->state ? */
+
+       if (di->cookie == NULL)
+               return API_ENODEV;
+
+       /* 2. arg is ptr to buffer from where to get data to write */
+       buf = (void *)va_arg(ap, u_int32_t);
+       if (buf == NULL)
+               return API_EINVAL;
+
+       /* 3. arg is length of buffer */
+       len = (int *)va_arg(ap, u_int32_t);
+       if (len == NULL)
+               return API_EINVAL;
+       if (*len <= 0)
+               return API_EINVAL;
+
+       if (di->type & DEV_TYP_STOR)
+               /*
+                * write to storage is currently not supported by U-Boot:
+                * no storage device implements block_write() method
+                */
+               return API_ENODEV;
+
+       else if (di->type & DEV_TYP_NET)
+               err = dev_write_net(di->cookie, buf, *len);
+       else
+               err = API_ENODEV;
+
+       return err;
+}
+
+
+/*
+ * pseudo signature:
+ *
+ * int API_dev_read(
+ *     struct device_info *di,
+ *     void *buf,
+ *     size_t *len,
+ *     unsigned long *start
+ *     size_t *act_len
+ * )
+ *
+ * buf:        ptr to buffer where to put the read data
+ *
+ * len: ptr to length to be read
+ *      - network: len of packet to read (in bytes)
+ *      - storage: # of blocks to read (can vary in size depending on define)
+ *
+ * start: ptr to start block (only used for storage devices, ignored for
+ *        network)
+ *
+ * act_len: ptr to where to put the len actually read
+ */
+static int API_dev_read(va_list ap)
+{
+       struct device_info *di;
+       void *buf;
+       lbasize_t *len_stor, *act_len_stor;
+       lbastart_t *start;
+       int *len_net, *act_len_net;
+
+       /* 1. arg is ptr to the device_info struct */
+       di = (struct device_info *)va_arg(ap, u_int32_t);
+       if (di == NULL)
+               return API_EINVAL;
+
+       /* XXX should we check if device is open? i.e. the ->state ? */
+
+       if (di->cookie == NULL)
+               return API_ENODEV;
+
+       /* 2. arg is ptr to buffer from where to put the read data */
+       buf = (void *)va_arg(ap, u_int32_t);
+       if (buf == NULL)
+               return API_EINVAL;
+
+       if (di->type & DEV_TYP_STOR) {
+               /* 3. arg - ptr to var with # of blocks to read */
+               len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
+               if (!len_stor)
+                       return API_EINVAL;
+               if (*len_stor <= 0)
+                       return API_EINVAL;
+
+               /* 4. arg - ptr to var with start block */
+               start = (lbastart_t *)va_arg(ap, u_int32_t);
+
+               /* 5. arg - ptr to var where to put the len actually read */
+               act_len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
+               if (!act_len_stor)
+                       return API_EINVAL;
+
+               *act_len_stor = dev_read_stor(di->cookie, buf, *len_stor, *start);
+
+       } else if (di->type & DEV_TYP_NET) {
+
+               /* 3. arg points to the var with length of packet to read */
+               len_net = (int *)va_arg(ap, u_int32_t);
+               if (!len_net)
+                       return API_EINVAL;
+               if (*len_net <= 0)
+                       return API_EINVAL;
+
+               /* 4. - ptr to var where to put the len actually read */
+               act_len_net = (int *)va_arg(ap, u_int32_t);
+               if (!act_len_net)
+                       return API_EINVAL;
+
+               *act_len_net = dev_read_net(di->cookie, buf, *len_net);
+
+       } else
+               return API_ENODEV;
+
+       return 0;
+}
+
+
+/*
+ * pseudo signature:
+ *
+ * int API_env_get(const char *name, char **value)
+ *
+ * name: ptr to name of env var
+ */
+static int API_env_get(va_list ap)
+{
+       char *name, **value;
+
+       if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+       if ((value = (char **)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       *value = getenv(name);
+
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_env_set(const char *name, const char *value)
+ *
+ * name: ptr to name of env var
+ *
+ * value: ptr to value to be set
+ */
+static int API_env_set(va_list ap)
+{
+       char *name, *value;
+
+       if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+       if ((value = (char *)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       setenv(name, value);
+
+       return 0;
+}
+
+/*
+ * pseudo signature:
+ *
+ * int API_env_enum(const char *last, char **next)
+ *
+ * last: ptr to name of env var found in last iteration
+ */
+static int API_env_enum(va_list ap)
+{
+       int i, n;
+       char *last, **next;
+
+       last = (char *)va_arg(ap, u_int32_t);
+
+       if ((next = (char **)va_arg(ap, u_int32_t)) == NULL)
+               return API_EINVAL;
+
+       if (last == NULL)
+               /* start over */
+               *next = ((char *)env_get_addr(0));
+       else {
+               *next = last;
+
+               for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
+                       for (n = i; env_get_char(n) != '\0'; ++n) {
+                               if (n >= CFG_ENV_SIZE) {
+                                       /* XXX shouldn't we set *next = NULL?? */
+                                       return 0;
+                               }
+                       }
+
+                       if (envmatch((uchar *)last, i) < 0)
+                               continue;
+
+                       /* try to get next name */
+                       i = n + 1;
+                       if (env_get_char(i) == '\0') {
+                               /* no more left */
+                               *next = NULL;
+                               return 0;
+                       }
+
+                       *next = ((char *)env_get_addr(i));
+                       return 0;
+               }
+       }
+
+       return 0;
+}
+
+static cfp_t calls_table[API_MAXCALL] = { NULL, };
+
+/*
+ * The main syscall entry point - this is not reentrant, only one call is
+ * serviced until finished.
+ *
+ * e.g. syscall(1, int *, u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+ *
+ * call:       syscall number
+ *
+ * retval:     points to the return value placeholder, this is the place the
+ *             syscall puts its return value, if NULL the caller does not
+ *             expect a return value
+ *
+ * ...         syscall arguments (variable number)
+ *
+ * returns:    0 if the call not found, 1 if serviced
+ */
+int syscall(int call, int *retval, ...)
+{
+       va_list ap;
+       int rv;
+
+       if (call < 0 || call >= calls_no || calls_table[call] == NULL) {
+               debugf("invalid call #%d\n", call);
+               return 0;
+       }
+
+       if (calls_table[call] == NULL) {
+               debugf("syscall #%d does not have a handler\n", call);
+               return 0;
+       }
+
+       va_start(ap, retval);
+       rv = calls_table[call](ap);
+       if (retval != NULL)
+               *retval = rv;
+
+       return 1;
+}
+
+void api_init(void)
+{
+       struct api_signature *sig = NULL;
+
+       /* TODO put this into linker set one day... */
+       calls_table[API_RSVD] = NULL;
+       calls_table[API_GETC] = &API_getc;
+       calls_table[API_PUTC] = &API_putc;
+       calls_table[API_TSTC] = &API_tstc;
+       calls_table[API_PUTS] = &API_puts;
+       calls_table[API_RESET] = &API_reset;
+       calls_table[API_GET_SYS_INFO] = &API_get_sys_info;
+       calls_table[API_UDELAY] = &API_udelay;
+       calls_table[API_GET_TIMER] = &API_get_timer;
+       calls_table[API_DEV_ENUM] = &API_dev_enum;
+       calls_table[API_DEV_OPEN] = &API_dev_open;
+       calls_table[API_DEV_CLOSE] = &API_dev_close;
+       calls_table[API_DEV_READ] = &API_dev_read;
+       calls_table[API_DEV_WRITE] = &API_dev_write;
+       calls_table[API_ENV_GET] = &API_env_get;
+       calls_table[API_ENV_SET] = &API_env_set;
+       calls_table[API_ENV_ENUM] = &API_env_enum;
+       calls_no = API_MAXCALL;
+
+       debugf("API initialized with %d calls\n", calls_no);
+
+       dev_stor_init();
+
+       /*
+        * Produce the signature so the API consumers can find it
+        */
+       sig = malloc(sizeof(struct api_signature));
+       if (sig == NULL) {
+               printf("API: could not allocate memory for the signature!\n");
+               return;
+       }
+
+       debugf("API sig @ 0x%08x\n", sig);
+       memcpy(sig->magic, API_SIG_MAGIC, 8);
+       sig->version = API_SIG_VERSION;
+       sig->syscall = &syscall;
+       sig->checksum = 0;
+       sig->checksum = crc32(0, (unsigned char *)sig,
+                             sizeof(struct api_signature));
+       debugf("syscall entry: 0x%08x\n", sig->syscall);
+}
+
+void platform_set_mr(struct sys_info *si, unsigned long start, unsigned long size,
+                       int flags)
+{
+       int i;
+
+       if (!si->mr || !size || (flags == 0))
+               return;
+
+       /* find free slot */
+       for (i = 0; i < si->mr_no; i++)
+               if (si->mr[i].flags == 0) {
+                       /* insert new mem region */
+                       si->mr[i].start = start;
+                       si->mr[i].size = size;
+                       si->mr[i].flags = flags;
+                       return;
+               }
+}
+
+#endif /* CONFIG_API */
diff --git a/api/api_net.c b/api/api_net.c
new file mode 100644 (file)
index 0000000..9611ab0
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_API)
+
+#include <common.h>
+#include <net.h>
+#include <linux/types.h>
+#include <api_public.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define DEBUG
+#undef DEBUG
+
+#if !defined(CONFIG_NET_MULTI)
+#error "API/net is currently only available for platforms with CONFIG_NET_MULTI"
+#endif
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
+
+
+static int dev_valid_net(void *cookie)
+{
+       return ((void *)eth_get_dev() == cookie) ? 1 : 0;
+}
+
+int dev_open_net(void *cookie)
+{
+       if (!dev_valid_net(cookie))
+               return API_ENODEV;
+
+       if (eth_init(gd->bd) < 0)
+               return API_EIO;
+
+       return 0;
+}
+
+int dev_close_net(void *cookie)
+{
+       if (!dev_valid_net(cookie))
+               return API_ENODEV;
+
+       eth_halt();
+       return 0;
+}
+
+/*
+ * There can only be one active eth interface at a time - use what is
+ * currently set to eth_current
+ */
+int dev_enum_net(struct device_info *di)
+{
+       struct eth_device *eth_current = eth_get_dev();
+
+       di->type = DEV_TYP_NET;
+       di->cookie = (void *)eth_current;
+       if (di->cookie == NULL)
+               return 0;
+
+       memcpy(di->di_net.hwaddr, eth_current->enetaddr, 6);
+
+       debugf("device found, returning cookie 0x%08x\n",
+               (u_int32_t)di->cookie);
+
+       return 1;
+}
+
+int dev_write_net(void *cookie, void *buf, int len)
+{
+       /* XXX verify that cookie points to a valid net device??? */
+
+       return eth_send(buf, len);
+}
+
+int dev_read_net(void *cookie, void *buf, int len)
+{
+       /* XXX verify that cookie points to a valid net device??? */
+
+       return eth_receive(buf, len);
+}
+
+#endif /* CONFIG_API */
diff --git a/api/api_platform-arm.c b/api/api_platform-arm.c
new file mode 100644 (file)
index 0000000..ca15ca5
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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
+ *
+ *
+ * This file contains routines that fetch data from ARM-dependent sources
+ * (bd_info etc.)
+ *
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_API)
+
+#include <linux/types.h>
+#include <api_public.h>
+
+#include <asm/u-boot.h>
+#include <asm/global_data.h>
+
+#include "api_private.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Important notice: handling of individual fields MUST be kept in sync with
+ * include/asm-arm/u-boot.h and include/asm-arm/global_data.h, so any changes
+ * need to reflect their current state and layout of structures involved!
+ */
+int platform_sys_info(struct sys_info *si)
+{
+       int i;
+
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
+               platform_set_mr(si, gd->bd->bi_dram[i].start,
+                               gd->bd->bi_dram[i].size, MR_ATTR_DRAM);
+
+       return 1;
+}
+
+#endif /* CONFIG_API */
diff --git a/api/api_platform-ppc.c b/api/api_platform-ppc.c
new file mode 100644 (file)
index 0000000..ca9f9a5
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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
+ *
+ *
+ * This file contains routines that fetch data from PowerPC-dependent sources
+ * (bd_info etc.)
+ *
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_API)
+
+#include <linux/types.h>
+#include <api_public.h>
+
+#include <asm/u-boot.h>
+#include <asm/global_data.h>
+
+#include "api_private.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Important notice: handling of individual fields MUST be kept in sync with
+ * include/asm-ppc/u-boot.h and include/asm-ppc/global_data.h, so any changes
+ * need to reflect their current state and layout of structures involved!
+ */
+int platform_sys_info(struct sys_info *si)
+{
+       si->clk_bus = gd->bus_clk;
+       si->clk_cpu = gd->cpu_clk;
+
+#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_8260) || \
+    defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
+#define bi_bar bi_immr_base
+#elif defined(CONFIG_MPC5xxx)
+#define bi_bar bi_mbar_base
+#elif defined(CONFIG_MPC83XX)
+#define bi_bar bi_immrbar
+#elif defined(CONFIG_MPC8220)
+#define bi_bar bi_mbar_base
+#endif
+
+#if defined(bi_bar)
+       si->bar = gd->bd->bi_bar;
+#undef bi_bar
+#else
+       si->bar = NULL;
+#endif
+
+       platform_set_mr(si, gd->bd->bi_memstart, gd->bd->bi_memsize, MR_ATTR_DRAM);
+       platform_set_mr(si, gd->bd->bi_flashstart, gd->bd->bi_flashsize, MR_ATTR_FLASH);
+       platform_set_mr(si, gd->bd->bi_sramstart, gd->bd->bi_sramsize, MR_ATTR_SRAM);
+
+       return 1;
+}
+
+#endif /* CONFIG_API */
diff --git a/api/api_private.h b/api/api_private.h
new file mode 100644 (file)
index 0000000..94a7fc5
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#ifndef _API_PRIVATE_H_
+#define _API_PRIVATE_H_
+
+void   api_init(void);
+void   platform_set_mr(struct sys_info *, unsigned long, unsigned long, int);
+int    platform_sys_info(struct sys_info *);
+
+void   dev_enum_reset(void);
+int    dev_enum_storage(struct device_info *);
+int    dev_enum_net(struct device_info *);
+
+int    dev_open_stor(void *);
+int    dev_open_net(void *);
+int    dev_close_stor(void *);
+int    dev_close_net(void *);
+
+lbasize_t      dev_read_stor(void *, void *, lbasize_t, lbastart_t);
+int            dev_read_net(void *, void *, int);
+int            dev_write_net(void *, void *, int);
+
+void dev_stor_init(void);
+
+#endif /* _API_PRIVATE_H_ */
diff --git a/api/api_storage.c b/api/api_storage.c
new file mode 100644 (file)
index 0000000..7cd4efb
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_API)
+
+#include <common.h>
+#include <api_public.h>
+
+#define DEBUG
+#undef DEBUG
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
+
+
+#define ENUM_IDE       0
+#define ENUM_USB       1
+#define ENUM_SCSI      2
+#define ENUM_MMC       3
+#define ENUM_MAX       4
+
+struct stor_spec {
+       int             max_dev;
+       int             enum_started;
+       int             enum_ended;
+       int             type;           /* "external" type: DT_STOR_{IDE,USB,etc} */
+       char            name[4];
+};
+
+static struct stor_spec specs[ENUM_MAX] = { { 0, 0, 0, 0, "" }, };
+
+
+void dev_stor_init(void)
+{
+#if (CONFIG_COMMANDS & CFG_CMD_IDE)
+       specs[ENUM_IDE].max_dev = CFG_IDE_MAXDEVICE;
+       specs[ENUM_IDE].enum_started = 0;
+       specs[ENUM_IDE].enum_ended = 0;
+       specs[ENUM_IDE].type = DEV_TYP_STOR | DT_STOR_IDE;
+       specs[ENUM_IDE].name = "ide";
+#endif
+#if (CONFIG_COMMANDS & CFG_CMD_USB)
+       specs[ENUM_USB].max_dev = USB_MAX_STOR_DEV;
+       specs[ENUM_USB].enum_started = 0;
+       specs[ENUM_USB].enum_ended = 0;
+       specs[ENUM_USB].type = DEV_TYP_STOR | DT_STOR_USB;
+       specs[ENUM_USB].name = "usb";
+#endif
+#if (CONFIG_COMMANDS & CFG_CMD_SCSI)
+       specs[ENUM_SCSI].max_dev = CFG_SCSI_MAX_DEVICE;
+       specs[ENUM_SCSI].enum_started = 0;
+       specs[ENUM_SCSI].enum_ended = 0;
+       specs[ENUM_SCSI].type = DEV_TYP_STOR | DT_STOR_SCSI;
+       specs[ENUM_SCSI].name = "scsi";
+#endif
+}
+
+/*
+ * Finds next available device in the storage group
+ *
+ * type:       storage group type - ENUM_IDE, ENUM_SCSI etc.
+ *
+ * first:      if 1 the first device in the storage group is returned (if
+ *              exists), if 0 the next available device is searched
+ *
+ * more:       returns 0/1 depending if there are more devices in this group
+ *             available (for future iterations)
+ *
+ * returns:    0/1 depending if device found in this iteration
+ */
+static int dev_stor_get(int type, int first, int *more, struct device_info *di)
+{
+       int found = 0;
+       *more = 0;
+
+       int i;
+
+       block_dev_desc_t *dd;
+
+       if (first) {
+               di->cookie = (void *)get_dev(specs[type].name, 0);
+               found = 1;
+
+       } else {
+               for (i = 0; i < specs[type].max_dev; i++)
+                       if (di->cookie == (void *)get_dev(specs[type].name, i)) {
+                               /* previous cookie found -- advance to the
+                                * next device, if possible */
+
+                               if (++i >= specs[type].max_dev) {
+                                       /* out of range, no more to enum */
+                                       di->cookie = NULL;
+                                       break;
+                               }
+
+                               di->cookie = (void *)get_dev(specs[type].name, i);
+                               found = 1;
+
+                               /* provide hint if there are more devices in
+                                * this group to enumerate */
+                               if ((i + 1) < specs[type].max_dev)
+                                       *more = 1;
+
+                               break;
+                       }
+       }
+
+       if (found) {
+               di->type = specs[type].type;
+
+               if (di->cookie != NULL) {
+                       dd = (block_dev_desc_t *)di->cookie;
+                       if (dd->type == DEV_TYPE_UNKNOWN) {
+                               debugf("device instance exists, but is not active..");
+                               found = 0;
+                       } else {
+                               di->di_stor.block_count = dd->lba;
+                               di->di_stor.block_size = dd->blksz;
+                       }
+               }
+
+       } else
+               di->cookie = NULL;
+
+       return found;
+}
+
+
+/*
+ * returns:    ENUM_IDE, ENUM_USB etc. based on block_dev_desc_t
+ */
+static int dev_stor_type(block_dev_desc_t *dd)
+{
+       int i, j;
+
+       for (i = ENUM_IDE; i < ENUM_MAX; i++)
+               for (j = 0; j < specs[i].max_dev; j++)
+                       if (dd == get_dev(specs[i].name, j))
+                               return i;
+
+       return ENUM_MAX;
+}
+
+
+/*
+ * returns:    0/1 whether cookie points to some device in this group
+ */
+static int dev_is_stor(int type, struct device_info *di)
+{
+       return (dev_stor_type(di->cookie) == type) ? 1 : 0;
+}
+
+
+static int dev_enum_stor(int type, struct device_info *di)
+{
+       int found = 0, more = 0;
+
+       debugf("called, type %d\n", type);
+
+       /*
+        * Formulae for enumerating storage devices:
+        * 1. if cookie (hint from previous enum call) is NULL we start again
+        *    with enumeration, so return the first available device, done.
+        *
+        * 2. if cookie is not NULL, check if it identifies some device in
+        *    this group:
+        *
+        * 2a. if cookie is a storage device from our group (IDE, USB etc.),
+        *     return next available (if exists) in this group
+        *
+        * 2b. if it isn't device from our group, check if such devices were
+        *     ever enumerated before:
+        *     - if not, return the first available device from this group
+        *     - else return 0
+        */
+
+       if (di->cookie == NULL) {
+
+               debugf("group%d - enum restart\n", type);
+
+               /*
+                * 1. Enumeration (re-)started: take the first available
+                * device, if exists
+                */
+               found = dev_stor_get(type, 1, &more, di);
+               specs[type].enum_started = 1;
+
+       } else if (dev_is_stor(type, di)) {
+
+               debugf("group%d - enum continued for the next device\n", type);
+
+               if (specs[type].enum_ended) {
+                       debugf("group%d - nothing more to enum!\n", type);
+                       return 0;
+               }
+
+               /* 2a. Attempt to take a next available device in the group */
+               found = dev_stor_get(type, 0, &more, di);
+
+       } else {
+
+               if (specs[type].enum_ended) {
+                       debugf("group %d - already enumerated, skipping\n", type);
+                       return 0;
+               }
+
+               debugf("group%d - first time enum\n", type);
+
+               if (specs[type].enum_started == 0) {
+                       /*
+                        * 2b.  If enumerating devices in this group did not
+                        * happen before, it means the cookie pointed to a
+                        * device frome some other group (another storage
+                        * group, or network); in this case try to take the
+                        * first available device from our group
+                        */
+                       specs[type].enum_started = 1;
+
+                       /*
+                        * Attempt to take the first device in this group:
+                        *'first element' flag is set
+                        */
+                       found = dev_stor_get(type, 1, &more, di);
+
+               } else {
+                       errf("group%d - out of order iteration\n", type);
+                       found = 0;
+                       more = 0;
+               }
+       }
+
+       /*
+        * If there are no more devices in this group, consider its
+        * enumeration finished
+        */
+       specs[type].enum_ended = (!more) ? 1 : 0;
+
+       if (found)
+               debugf("device found, returning cookie 0x%08x\n",
+                       (u_int32_t)di->cookie);
+       else
+               debugf("no device found\n");
+
+       return found;
+}
+
+void dev_enum_reset(void)
+{
+       int i;
+
+       for (i = 0; i < ENUM_MAX; i ++) {
+               specs[i].enum_started = 0;
+               specs[i].enum_ended = 0;
+       }
+}
+
+int dev_enum_storage(struct device_info *di)
+{
+       int i;
+
+       /*
+        * check: ide, usb, scsi, mmc
+        */
+       for (i = ENUM_IDE; i < ENUM_MAX; i ++) {
+               if (dev_enum_stor(i, di))
+                       return 1;
+       }
+
+       return 0;
+}
+
+static int dev_stor_is_valid(int type, block_dev_desc_t *dd)
+{
+       int i;
+
+       for (i = 0; i < specs[type].max_dev; i++)
+               if (dd == get_dev(specs[type].name, i))
+                       if (dd->type != DEV_TYPE_UNKNOWN)
+                               return 1;
+
+       return 0;
+}
+
+
+int dev_open_stor(void *cookie)
+{
+       int type = dev_stor_type(cookie);
+
+       if (type == ENUM_MAX)
+               return API_ENODEV;
+
+       if (dev_stor_is_valid(type, (block_dev_desc_t *)cookie))
+               return 0;
+
+       return API_ENODEV;
+}
+
+
+int dev_close_stor(void *cookie)
+{
+       /*
+        * Not much to do as we actually do not alter storage devices upon
+        * close
+        */
+       return 0;
+}
+
+
+static int dev_stor_index(block_dev_desc_t *dd)
+{
+       int i, type;
+
+       type = dev_stor_type(dd);
+       for (i = 0; i < specs[type].max_dev; i++)
+               if (dd == get_dev(specs[type].name, i))
+                       return i;
+
+       return (specs[type].max_dev);
+}
+
+
+lbasize_t dev_read_stor(void *cookie, void *buf, lbasize_t len, lbastart_t start)
+{
+       int type;
+       block_dev_desc_t *dd = (block_dev_desc_t *)cookie;
+
+       if ((type = dev_stor_type(dd)) == ENUM_MAX)
+               return 0;
+
+       if (!dev_stor_is_valid(type, dd))
+               return 0;
+
+       if ((dd->block_read) == NULL) {
+               debugf("no block_read() for device 0x%08x\n");
+               return 0;
+       }
+
+       return (dd->block_read(dev_stor_index(dd), start, len, buf));
+}
+
+#endif /* CONFIG_API */
diff --git a/api_examples/Makefile b/api_examples/Makefile
new file mode 100644 (file)
index 0000000..cb49a9e
--- /dev/null
@@ -0,0 +1,103 @@
+#
+# (C) Copyright 2007 Semihalf
+#
+# 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 Foundatio; 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
+#
+
+ifeq ($(ARCH),ppc)
+LOAD_ADDR = 0x40000
+endif
+
+#ifeq ($(ARCH),arm)
+#LOAD_ADDR = 0xc100000
+#endif
+
+include $(TOPDIR)/config.mk
+
+ELF    += demo
+BIN    += demo.bin
+
+#CFLAGS += -v
+
+COBJS  := $(ELF:=.o)
+SOBJS  := crt0.o
+ifeq ($(ARCH),ppc)
+SOBJS  += ppcstring.o
+endif
+
+LIB    = $(obj)libglue.a
+LIBCOBJS= glue.o crc32.o ctype.o string.o vsprintf.o libgenwrap.o
+
+LIBOBJS        = $(addprefix $(obj),$(SOBJS) $(LIBCOBJS))
+
+SRCS   := $(COBJS:.o=.c) $(LIBCOBJS:.o=.c) $(SOBJS:.o=.S)
+OBJS   := $(addprefix $(obj),$(COBJS))
+ELF    := $(addprefix $(obj),$(ELF))
+BIN    := $(addprefix $(obj),$(BIN))
+
+gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
+
+CPPFLAGS += -I..
+
+all:   $(obj).depend $(OBJS) $(LIB) $(BIN) $(ELF)
+
+#########################################################################
+$(LIB):        $(obj).depend $(LIBOBJS)
+               $(AR) $(ARFLAGS) $@ $(LIBOBJS)
+
+$(ELF):
+$(obj)%:       $(obj)%.o $(LIB)
+               $(LD) $(obj)crt0.o -Ttext $(LOAD_ADDR) \
+                       -o $@ $< $(LIB) \
+                       -L$(gcclibdir) -lgcc
+
+$(BIN):
+$(obj)%.bin:   $(obj)%
+               $(OBJCOPY) -O binary $< $@ 2>/dev/null
+
+$(obj)crc32.c:
+       @rm -f $(obj)crc32.c
+       ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c
+
+$(obj)ctype.c:
+       @rm -f $(obj)ctype.c
+       ln -s $(src)../lib_generic/ctype.c $(obj)ctype.c
+
+$(obj)string.c:
+       @rm -f $(obj)string.c
+       ln -s $(src)../lib_generic/string.c $(obj)string.c
+
+$(obj)vsprintf.c:
+       @rm -f $(obj)vsprintf.c
+       ln -s $(src)../lib_generic/vsprintf.c $(obj)vsprintf.c
+
+ifeq ($(ARCH),ppc)
+$(obj)ppcstring.S:
+       @rm -f $(obj)ppcstring.S
+       ln -s $(src)../lib_ppc/ppcstring.S $(obj)ppcstring.S
+endif
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/api_examples/crt0.S b/api_examples/crt0.S
new file mode 100644 (file)
index 0000000..8d4f706
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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
+ *
+ */
+
+#if defined(CONFIG_PPC)
+
+       .text
+
+       .globl _start
+_start:
+       b       main
+
+
+       .globl syscall
+syscall:
+       lis     %r11, syscall_ptr@ha
+       addi    %r11, %r11, syscall_ptr@l
+       lwz     %r11, 0(%r11)
+       mtctr   %r11
+       bctr
+
+
+       .globl syscall_ptr
+syscall_ptr:
+       .align  4
+       .long   0
+#else
+#error No support for this arch!
+#endif
diff --git a/api_examples/demo.c b/api_examples/demo.c
new file mode 100644 (file)
index 0000000..eae9712
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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/types.h>
+#include <api_public.h>
+
+#include "glue.h"
+
+#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
+
+void   test_dump_si(struct sys_info *);
+void   test_dump_di(int);
+void   test_dump_sig(struct api_signature *);
+
+char buf[2048];
+
+#define WAIT_SECS 5
+
+int main(int argc, char *argv[])
+{
+       int rv = 0;
+       int h, i, j;
+       int devs_no;
+       struct api_signature *sig = NULL;
+       ulong start, now;
+       struct device_info *di;
+
+       if (!api_search_sig(&sig))
+               return -1;
+
+       syscall_ptr = sig->syscall;
+       if (syscall_ptr == NULL)
+               return -2;
+
+       if (sig->version > API_SIG_VERSION)
+               return -3;
+
+       printf("API signature found @%x\n", sig);
+       test_dump_sig(sig);
+
+       printf("\n*** Consumer API test ***\n");
+       printf("syscall ptr 0x%08x@%08x\n", syscall_ptr, &syscall_ptr);
+
+       /* console activities */
+       ub_putc('B');
+
+       printf("*** Press any key to continue ***\n");
+       printf("got char 0x%x\n", ub_getc());
+
+       /* system info */
+       test_dump_si(ub_get_sys_info());
+
+       /* timing */
+       printf("\n*** Timing - wait a couple of secs ***\n");
+       start = ub_get_timer(0);
+       printf("\ntime: start %lu\n\n", start);
+       for (i = 0; i < WAIT_SECS; i++)
+               for (j = 0; j < 1000; j++)
+                       ub_udelay(1000);        /* wait 1 ms */
+
+       /* this is the number of milliseconds that passed from ub_get_timer(0) */
+       now = ub_get_timer(start);
+       printf("\ntime: now %lu\n\n", now);
+
+       /* enumerate devices */
+       printf("\n*** Enumerate devices ***\n");
+       devs_no = ub_dev_enum();
+
+       printf("Number of devices found: %d\n", devs_no);
+       if (devs_no == 0)
+               return -1;
+
+
+       printf("\n*** Show devices ***\n");
+       for (i = 0; i < devs_no; i++) {
+               test_dump_di(i);
+               printf("\n");
+       }
+
+       printf("\n*** Operations on devices ***\n");
+
+       /* test opening a device already opened */
+       h = 0;
+       if ((rv = ub_dev_open(h)) != 0) {
+               errf("open device %d error %d\n", h, rv);
+               return -1;
+       }
+       if ((rv = ub_dev_open(h)) != 0)
+               errf("open device %d error %d\n", h, rv);
+
+       ub_dev_close(h);
+
+       /* test storage */
+       printf("Trying storage devices...\n");
+       for (i = 0; i < devs_no; i++) {
+               di = ub_dev_get(i);
+
+               if (di->type & DEV_TYP_STOR)
+                       break;
+
+       }
+       if (i == devs_no)
+               printf("No storage devices available\n");
+       else {
+               if ((rv = ub_dev_open(i)) != 0)
+                       errf("open device %d error %d\n", i, rv);
+               else if ((rv = ub_dev_read(i, &buf, 200, 20)) != 0)
+                       errf("could not read from device %d, error %d\n", i, rv);
+
+               ub_dev_close(i);
+       }
+
+       /* test networking */
+       printf("Trying network devices...\n");
+       for (i = 0; i < devs_no; i++) {
+               di = ub_dev_get(i);
+
+               if (di->type == DEV_TYP_NET)
+                       break;
+
+       }
+       if (i == devs_no)
+               printf("No network devices available\n");
+       else {
+               if ((rv = ub_dev_open(i)) != 0)
+                       errf("open device %d error %d\n", i, rv);
+               else if ((rv = ub_dev_send(i, &buf, 2048)) != 0)
+                       errf("could not send to device %d, error %d\n", i, rv);
+
+               ub_dev_close(i);
+       }
+
+       if (ub_dev_close(h) != 0)
+               errf("could not close device %d\n", h);
+
+       printf("\n*** Env vars ***\n");
+
+       printf("ethact = %s\n", ub_env_get("ethact"));
+       printf("old fileaddr = %s\n", ub_env_get("fileaddr"));
+       ub_env_set("fileaddr", "deadbeef");
+       printf("new fileaddr = %s\n", ub_env_get("fileaddr"));
+
+       const char *env = NULL;
+
+       while ((env = ub_env_enum(env)) != NULL)
+               printf("%s = %s\n", env, ub_env_get(env));
+
+       /* reset */
+       ub_reset();
+       printf("\nHmm, reset returned...?!\n");
+
+       return rv;
+}
+
+void test_dump_sig(struct api_signature *sig)
+{
+       printf("signature:\n");
+       printf("  version\t= %d\n", sig->version);
+       printf("  checksum\t= 0x%08x\n", sig->checksum);
+       printf("  sc entry\t= 0x%08x\n", sig->syscall);
+}
+
+void test_dump_si(struct sys_info *si)
+{
+       int i;
+
+       printf("sys info:\n");
+       printf("  clkbus\t= 0x%08x\n", si->clk_bus);
+       printf("  clkcpu\t= 0x%08x\n", si->clk_cpu);
+       printf("  bar\t\t= 0x%08x\n", si->bar);
+
+       printf("---\n");
+       for (i = 0; i < si->mr_no; i++) {
+               if (si->mr[i].flags == 0)
+                       break;
+
+               printf("  start\t= 0x%08lx\n", si->mr[i].start);
+               printf("  size\t= 0x%08lx\n", si->mr[i].size);
+
+               switch(si->mr[i].flags & 0x000F) {
+                       case MR_ATTR_FLASH:
+                               printf("  type FLASH\n");
+                               break;
+                       case MR_ATTR_DRAM:
+                               printf("  type DRAM\n");
+                               break;
+                       case MR_ATTR_SRAM:
+                               printf("  type SRAM\n");
+                               break;
+                       default:
+                               printf("  type UNKNOWN\n");
+               }
+               printf("---\n");
+       }
+}
+
+static char * test_stor_typ(int type)
+{
+       if (type & DT_STOR_IDE)
+               return "IDE";
+
+       if (type & DT_STOR_SCSI)
+               return "SCSI";
+
+       if (type & DT_STOR_USB)
+               return "USB";
+
+       if (type & DT_STOR_MMC);
+               return "MMC";
+
+       return "Unknown";
+}
+
+void test_dump_di(int handle)
+{
+       int i;
+       struct device_info *di = ub_dev_get(handle);
+
+       printf("device info (%d):\n", handle);
+       printf("  cookie\t= 0x%08x\n", (uint32_t)di->cookie);
+       printf("  type\t\t= 0x%08x\n", di->type);
+
+       if (di->type == DEV_TYP_NET) {
+               printf("  hwaddr\t= ");
+               for (i = 0; i < 6; i++)
+                       printf("%02x ", di->di_net.hwaddr[i]);
+
+               printf("\n");
+
+       } else if (di->type & DEV_TYP_STOR) {
+               printf("  type\t\t= %s\n", test_stor_typ(di->type));
+               printf("  blk size\t\t= %d\n", di->di_stor.block_size);
+               printf("  blk count\t\t= %d\n", di->di_stor.block_count);
+       }
+}
diff --git a/api_examples/glue.c b/api_examples/glue.c
new file mode 100644 (file)
index 0000000..2bf47ae
--- /dev/null
@@ -0,0 +1,405 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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/types.h>
+#include <api_public.h>
+
+#include "glue.h"
+
+static int valid_sig(struct api_signature *sig)
+{
+       uint32_t checksum;
+       struct api_signature s;
+
+       if (sig == NULL)
+               return 0;
+       /*
+        * Clear the checksum field (in the local copy) so as to calculate the
+        * CRC with the same initial contents as at the time when the sig was
+        * produced
+        */
+       s = *sig;
+       s.checksum = 0;
+
+       checksum = crc32(0, (unsigned char *)&s, sizeof(struct api_signature));
+
+       if (checksum != sig->checksum)
+               return 0;
+
+       return 1;
+}
+
+/*
+ * Searches for the U-Boot API signature
+ *
+ * returns 1/0 depending on found/not found result
+ */
+int api_search_sig(struct api_signature **sig) {
+
+       unsigned char *sp;
+
+       if (sig == NULL)
+               return 0;
+
+       sp = (unsigned char *)API_SEARCH_START;
+
+       while ((sp + (int)API_SIG_MAGLEN) < (unsigned char *)API_SEARCH_END) {
+               if (!memcmp(sp, API_SIG_MAGIC, API_SIG_MAGLEN)) {
+                       *sig = (struct api_signature *)sp;
+                       if (valid_sig(*sig))
+                               return 1;
+               }
+               sp += API_SIG_MAGLEN;
+       }
+
+       *sig = NULL;
+       return 0;
+}
+
+/****************************************
+ *
+ * console
+ *
+ ****************************************/
+
+int ub_getc(void)
+{
+       int c;
+
+       if (!syscall(API_GETC, NULL, (uint32_t)&c))
+               return -1;
+
+       return c;
+}
+
+int ub_tstc(void)
+{
+       int t;
+
+       if (!syscall(API_TSTC, NULL, (uint32_t)&t))
+               return -1;
+
+       return t;
+}
+
+void ub_putc(char c)
+{
+       syscall(API_PUTC, NULL, (uint32_t)&c);
+}
+
+void ub_puts(const char *s)
+{
+       syscall(API_PUTS, NULL, (uint32_t)s);
+}
+
+/****************************************
+ *
+ * system
+ *
+ ****************************************/
+
+void ub_reset(void)
+{
+       syscall(API_RESET, NULL);
+}
+
+#define MR_MAX 5
+static struct mem_region mr[MR_MAX];
+static struct sys_info si;
+
+struct sys_info * ub_get_sys_info(void)
+{
+       int err = 0;
+
+       memset(&si, 0, sizeof(struct sys_info));
+       si.mr = mr;
+       si.mr_no = MR_MAX;
+       memset(&mr, 0, sizeof(mr));
+
+       if (!syscall(API_GET_SYS_INFO, &err, (u_int32_t)&si))
+               return NULL;
+
+       return ((err) ? NULL : &si);
+}
+
+/****************************************
+ *
+ * timing
+ *
+ ****************************************/
+
+void ub_udelay(unsigned long usec)
+{
+       syscall(API_UDELAY, NULL, &usec);
+}
+
+unsigned long ub_get_timer(unsigned long base)
+{
+       unsigned long cur;
+
+       if (!syscall(API_GET_TIMER, NULL, &cur, &base))
+               return 0;
+
+       return cur;
+}
+
+
+/****************************************************************************
+ *
+ * devices
+ *
+ * Devices are identified by handles: numbers 0, 1, 2, ..., MAX_DEVS-1
+ *
+ ***************************************************************************/
+
+#define MAX_DEVS 6
+
+static struct device_info devices[MAX_DEVS];
+
+struct device_info * ub_dev_get(int i)
+{
+       return ((i < 0 || i >= MAX_DEVS) ? NULL : &devices[i]);
+}
+
+/*
+ * Enumerates the devices: fills out device_info elements in the devices[]
+ * array.
+ *
+ * returns:            number of devices found
+ */
+int ub_dev_enum(void)
+{
+       struct device_info *di;
+       int n = 0;
+
+       memset(&devices, 0, sizeof(struct device_info) * MAX_DEVS);
+       di = &devices[0];
+
+       if (!syscall(API_DEV_ENUM, NULL, di))
+               return 0;
+
+       while (di->cookie != NULL) {
+
+               if (++n >= MAX_DEVS)
+                       break;
+
+               /* take another device_info */
+               di++;
+
+               /* pass on the previous cookie */
+               di->cookie = devices[n - 1].cookie;
+
+               if (!syscall(API_DEV_ENUM, NULL, di))
+                       return 0;
+       }
+
+       return n;
+}
+
+/*
+ * handle:     0-based id of the device
+ *
+ * returns:    0 when OK, err otherwise
+ */
+int ub_dev_open(int handle)
+{
+       struct device_info *di;
+       int err = 0;
+
+       if (handle < 0 || handle >= MAX_DEVS)
+               return API_EINVAL;
+
+       di = &devices[handle];
+
+       if (!syscall(API_DEV_OPEN, &err, di))
+               return -1;
+
+       return err;
+}
+
+int ub_dev_close(int handle)
+{
+       struct device_info *di;
+
+       if (handle < 0 || handle >= MAX_DEVS)
+               return API_EINVAL;
+
+       di = &devices[handle];
+       if (!syscall(API_DEV_CLOSE, NULL, di))
+               return -1;
+
+       return 0;
+}
+
+/*
+ *
+ * Validates device for read/write, it has to:
+ *
+ * - have sane handle
+ * - be opened
+ *
+ * returns:    0/1 accordingly
+ */
+static int dev_valid(int handle)
+{
+       if (handle < 0 || handle >= MAX_DEVS)
+               return 0;
+
+       if (devices[handle].state != DEV_STA_OPEN)
+               return 0;
+
+       return 1;
+}
+
+static int dev_stor_valid(int handle)
+{
+       if (!dev_valid(handle))
+               return 0;
+
+       if (!(devices[handle].type & DEV_TYP_STOR))
+               return 0;
+
+       return 1;
+}
+
+int ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start)
+{
+       struct device_info *di;
+       lbasize_t act_len;
+       int err = 0;
+
+       if (!dev_stor_valid(handle))
+               return API_ENODEV;
+
+       di = &devices[handle];
+       if (!syscall(API_DEV_READ, &err, di, buf, &len, &start, &act_len))
+               return -1;
+
+       if (err)
+               return err;
+
+       if (act_len != len)
+               return API_EIO;
+
+       return 0;
+}
+
+static int dev_net_valid(int handle)
+{
+       if (!dev_valid(handle))
+               return 0;
+
+       if (devices[handle].type != DEV_TYP_NET)
+               return 0;
+
+       return 1;
+}
+
+int ub_dev_recv(int handle, void *buf, int len)
+{
+       struct device_info *di;
+       int err = 0, act_len;
+
+       if (!dev_net_valid(handle))
+               return API_ENODEV;
+
+       di = &devices[handle];
+       if (!syscall(API_DEV_READ, &err, di, buf, &len, &act_len))
+               return -1;
+
+       if (err)
+               return -1;
+
+       return act_len;
+}
+
+int ub_dev_send(int handle, void *buf, int len)
+{
+       struct device_info *di;
+       int err = 0;
+
+       if (!dev_net_valid(handle))
+               return API_ENODEV;
+
+       di = &devices[handle];
+       if (!syscall(API_DEV_WRITE, &err, di, buf, &len))
+               return -1;
+
+       return err;
+}
+
+/****************************************
+ *
+ * env vars
+ *
+ ****************************************/
+
+char * ub_env_get(const char *name)
+{
+       char *value;
+
+       if (!syscall(API_ENV_GET, NULL, (uint32_t)name, (uint32_t)&value))
+               return NULL;
+
+       return value;
+}
+
+void ub_env_set(const char *name, char *value)
+{
+       syscall(API_ENV_SET, NULL, (uint32_t)name, (uint32_t)value);
+}
+
+
+static char env_name[256];
+
+const char * ub_env_enum(const char *last)
+{
+       const char *env, *str;
+       int i;
+
+       env = NULL;
+
+       /*
+        * It's OK to pass only the name piece as last (and not the whole
+        * 'name=val' string), since the API_ENUM_ENV call uses envmatch()
+        * internally, which handles such case
+        */
+       if (!syscall(API_ENV_ENUM, NULL, (uint32_t)last, (uint32_t)&env))
+               return NULL;
+
+       if (!env)
+               /* no more env. variables to enumerate */
+               return NULL;
+
+       /* next enumerated env var */
+       memset(env_name, 0, 256);
+       for (i = 0, str = env; *str != '=' && *str != '\0';)
+               env_name[i++] = *str++;
+
+       env_name[i] = '\0';
+
+       return env_name;
+}
diff --git a/api_examples/glue.h b/api_examples/glue.h
new file mode 100644 (file)
index 0000000..a82f783
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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
+ *
+ */
+
+/*
+ * This is the header file for conveniency wrapper routines (API glue)
+ */
+
+#ifndef _API_GLUE_H_
+#define _API_GLUE_H_
+
+#define API_SEARCH_START       (255 * 1024 * 1024)     /* start at 1MB below top RAM */
+#define API_SEARCH_END         (256 * 1024 * 1024 - 1) /* ...and search to the end */
+
+int    syscall(int, int *, ...);
+void * syscall_ptr;
+
+int    api_search_sig(struct api_signature **sig);
+
+/*
+ * ub_ library calls are part of the application, not U-Boot code!  They are
+ * front-end wrappers that are used by the consumer application: they prepare
+ * arguments for particular syscall and jump to the low level syscall()
+ */
+
+/* console */
+int    ub_getc(void);
+int    ub_tstc(void);
+void   ub_putc(char c);
+void   ub_puts(const char *s);
+
+/* system */
+void                   ub_reset(void);
+struct sys_info *      ub_get_sys_info(void);
+
+/* time */
+void           ub_udelay(unsigned long);
+unsigned long  ub_get_timer(unsigned long);
+
+/* env vars */
+char *         ub_env_get(const char *name);
+void           ub_env_set(const char *name, char *value);
+const char *   ub_env_enum(const char *last);
+
+/* devices */
+int                    ub_dev_enum(void);
+int                    ub_dev_open(int handle);
+int                    ub_dev_close(int handle);
+int                    ub_dev_read(int handle, void *buf,
+                               lbasize_t len, lbastart_t start);
+int                    ub_dev_send(int handle, void *buf, int len);
+int                    ub_dev_recv(int handle, void *buf, int len);
+struct device_info *   ub_dev_get(int);
+
+#endif /* _API_GLUE_H_ */
diff --git a/api_examples/libgenwrap.c b/api_examples/libgenwrap.c
new file mode 100644 (file)
index 0000000..df62633
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * (C) Copyright 2007 Semihalf
+ *
+ * Written by: Rafal Jaworowski <raj@semihalf.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
+ *
+ *
+ * This is is a set of wrappers/stubs that allow to use certain routines from
+ * U-Boot's lib_generic in the standalone app. This way way we can re-use
+ * existing code e.g. operations on strings and similar.
+ *
+ */
+
+#include <common.h>
+#include <linux/types.h>
+#include <api_public.h>
+
+#include "glue.h"
+
+/*
+ * printf() and vprintf() are stolen from u-boot/common/console.c
+ */
+void printf (const char *fmt, ...)
+{
+       va_list args;
+       uint i;
+       char printbuffer[256];
+
+       va_start (args, fmt);
+
+       /* For this to work, printbuffer must be larger than
+        * anything we ever want to print.
+        */
+       i = vsprintf (printbuffer, fmt, args);
+       va_end (args);
+
+       /* Print the string */
+       ub_puts (printbuffer);
+}
+
+void vprintf (const char *fmt, va_list args)
+{
+       uint i;
+       char printbuffer[256];
+
+       /* For this to work, printbuffer must be larger than
+        * anything we ever want to print.
+        */
+       i = vsprintf (printbuffer, fmt, args);
+
+       /* Print the string */
+       ub_puts (printbuffer);
+}
+
+void putc (const char c)
+{
+       ub_putc(c);
+}
+
+void udelay(unsigned long usec)
+{
+       ub_udelay(usec);
+}
+
+void do_reset (void)
+{
+       ub_reset();
+}
+
+void *malloc(size_t len)
+{
+       return NULL;
+}
index ac532451c97e8f3f2f1df6e0f04bb6c5832dce68..4291d960cf8d6b24bca811acd54874dd6e24acb5 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 214752d9c0dd1caf731af7fa0aa87ed26837dbd3..ef662fa7cb9ec3361fe4fa9635569063920a7aa3 100644 (file)
@@ -142,7 +142,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index b36b3cb450e9c568d7302648f0bc9dad3a014ab1..3b18009883cc66397cafae4b596e9cd452f1d2dc 100644 (file)
@@ -128,7 +128,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 049f9901f71c51a853dc6e83957b069073630196..618a10c9a3cd837a79355a669a8c3e9363c1df8d 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 049f9901f71c51a853dc6e83957b069073630196..618a10c9a3cd837a79355a669a8c3e9363c1df8d 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a9c88f6487c971a04885f2f8f62595e8adb61ef4..f6cc94c122e97774428d44dd7119c7d87508e5a1 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1d6288fea6158f9a2f2c4ddf2cfc62f57e2c976b..7aad803d1d791eb19a31582b308876a364a41362 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 66c324625a7393383d8e429dc91c3b4f974a2cd8..f0d7567642a41b62039714f1fac7ae7408cb6acd 100644 (file)
@@ -112,7 +112,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f275ce7de031d9838e43e9a9700d0a8babac212d..8531657bdecd3d0c30be8dadc35943036df154a8 100644 (file)
@@ -25,6 +25,7 @@
 #include <mpc512x.h>
 #include <asm/bitops.h>
 #include <command.h>
+#include <fdt_support.h>
 
 /* Clocks in use */
 #define SCCR1_CLOCKS_EN        (CLOCK_SCCR1_CFG_EN |                           \
@@ -184,3 +185,11 @@ int checkboard (void)
                brd_rev, cpld_rev);
        return 0;
 }
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+       fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
index 038d84955316ae362a6ce25e4a5e54ae82af73ee..141895278e62c362a99f9ced964d868be6e2049e 100644 (file)
@@ -109,7 +109,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 8b01f45e551017863c96ec0aed87580a57028629..be7795274d367026b80384133704e3188d8699cf 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
 
        __bss_start = .;
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
        }
index 8b01f45e551017863c96ec0aed87580a57028629..be7795274d367026b80384133704e3188d8699cf 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
 
        __bss_start = .;
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
        }
index b99b82c826cf0062b4e3f2775123d1a229ecf46b..73dfe9d76d9d293d5dc83c3b5a20d6fee49ab057 100644 (file)
@@ -87,7 +87,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -95,7 +95,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index b99b82c826cf0062b4e3f2775123d1a229ecf46b..73dfe9d76d9d293d5dc83c3b5a20d6fee49ab057 100644 (file)
@@ -87,7 +87,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -95,7 +95,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index b99b82c826cf0062b4e3f2775123d1a229ecf46b..73dfe9d76d9d293d5dc83c3b5a20d6fee49ab057 100644 (file)
@@ -87,7 +87,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -95,7 +95,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index a5dae0e98ccdb65ae2878580039d679da5a992d6..27dfe084e20ec691e48c6c0d3ff4e0b1eb3398bd 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index b08c9994bdff7ea8d8997c378e84bb271bf8fea8..7dd0bb303474b897f87c3ff95cf695cddac443f8 100644 (file)
@@ -125,7 +125,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 00c793afd0111ffcadbebafbc6eb4e3afaf114c9..c4eace5804940ddb593e92ac5e0655d1a234ddda 100644 (file)
@@ -67,13 +67,13 @@ const unsigned char cfg_simulate_spd_eeprom[128] = {
        0x00,    /* Module data width continued: +0 */
        0x04,    /* 2.5 Volt */
        0x75,    /* SDRAM Cycle Time (cas latency 2.5) = 7.5 ns */
+       0x00,    /* SDRAM Access from clock */
 #ifdef CONFIG_DDR_ECC
        0x02,    /* ECC ON : 02 OFF : 00 */
 #else
        0x00,    /* ECC ON : 02 OFF : 00 */
 #endif
-       0x82,    /* refresh Rate Type: Normal (15.625us) + Self refresh */
-       0,
+       0x82,    /* refresh Rate Type: Normal (7.8us) + Self refresh */
        0,
        0,
        0x01,    /* wcsbc = 1 */
index a5dae0e98ccdb65ae2878580039d679da5a992d6..27dfe084e20ec691e48c6c0d3ff4e0b1eb3398bd 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 0375618d7264086382f7ada969d34ffb0107fb00..045af28f8657acd4f7257cb1cd9b3eb8ede21216 100644 (file)
@@ -133,7 +133,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index be030923b8eb816dd391ae11cece84f0ff143a4f..7dd0bb303474b897f87c3ff95cf695cddac443f8 100644 (file)
@@ -62,19 +62,6 @@ SECTIONS
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
     cpu/ppc4xx/start.o (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -138,7 +125,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5a1c5b1af46a4612e2de12b806ac803487d7eb1e..3a6389c6a9430d21184f4857042d17c47f575045 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/amcc/ebony/init.o    (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a49066fcc94e0b4d06394beeb4f0edac7efecd71..e41caaf344cf5d0f60782a3bafe250df5e1405e1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2007
+ * (C) Copyright 2007-2008
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
 
 #include <common.h>
 #include <ppc4xx.h>
-#include <asm/processor.h>
 #include <i2c.h>
-#include <asm-ppc/io.h>
-#include <asm-ppc/gpio.h>
-
-#include "../cpu/ppc4xx/440spe_pcie.h"
-
-#undef PCIE_ENDPOINT
-/* #define PCIE_ENDPOINT 1 */
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/gpio.h>
+#include <asm/4xx_pcie.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-int ppc440spe_init_pcie_rootport(int port);
-void ppc440spe_setup_pcie(struct pci_controller *hose, int port);
-
 int board_early_init_f (void)
 {
        unsigned long mfr;
@@ -224,10 +219,9 @@ int board_early_init_f (void)
        mtdcr (uic0sr, 0x00000000);     /* clear all interrupts*/
        mtdcr (uic0sr, 0xffffffff);     /* clear all interrupts*/
 
-/* SDR0_MFR should be part of Ethernet init */
-       mfsdr (sdr_mfr, mfr);
-       mfr &= ~SDR0_MFR_ECS_MASK;
-/*     mtsdr(sdr_mfr, mfr); */
+       mfsdr(sdr_mfr, mfr);
+       mfr |= SDR0_MFR_FIXD;           /* Workaround for PCI/DMA */
+       mtsdr(sdr_mfr, mfr);
 
        mtsdr(SDR0_PFC0, CFG_PFC0);
 
@@ -252,6 +246,18 @@ int checkboard (void)
        return 0;
 }
 
+/*
+ * Override the default functions in cpu/ppc4xx/44x_spd_ddr2.c with
+ * board specific values.
+ */
+u32 ddr_wrdtr(u32 default_val) {
+       return (SDRAM_WRDTR_LLWP_1_CYC | SDRAM_WRDTR_WTR_180_DEG_ADV | 0x823);
+}
+
+u32 ddr_clktr(u32 default_val) {
+       return (SDRAM_CLKTR_CLKP_90_DEG_ADV);
+}
+
 #if defined(CFG_DRAM_TEST)
 int testdram (void)
 {
@@ -396,6 +402,7 @@ void pcie_setup_hoses(int busno)
 {
        struct pci_controller *hose;
        int i, bus;
+       int ret = 0;
        char *env;
        unsigned int delay;
 
@@ -409,12 +416,13 @@ void pcie_setup_hoses(int busno)
                if (!katmai_pcie_card_present(i))
                        continue;
 
-#ifdef PCIE_ENDPOINT
-               if (ppc440spe_init_pcie_endport(i)) {
-#else
-               if (ppc440spe_init_pcie_rootport(i)) {
-#endif
-                       printf("PCIE%d: initialization failed\n", i);
+               if (is_end_point(i))
+                       ret = ppc4xx_init_pcie_endport(i);
+               else
+                       ret = ppc4xx_init_pcie_rootport(i);
+               if (ret) {
+                       printf("PCIE%d: initialization as %s failed\n", i,
+                              is_end_point(i) ? "endpoint" : "root-complex");
                        continue;
                }
 
@@ -428,35 +436,33 @@ void pcie_setup_hoses(int busno)
                               CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
                               CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
                               CFG_PCIE_MEMSIZE,
-                              PCI_REGION_MEM
-                       );
+                              PCI_REGION_MEM);
                hose->region_count = 1;
                pci_register_hose(hose);
 
-#ifdef PCIE_ENDPOINT
-               ppc440spe_setup_pcie_endpoint(hose, i);
-               /*
-                * Reson for no scanning is endpoint can not generate
-                * upstream configuration accesses.
-                */
-#else
-               ppc440spe_setup_pcie_rootpoint(hose, i);
-
-               env = getenv ("pciscandelay");
-               if (env != NULL) {
-                       delay = simple_strtoul (env, NULL, 10);
-                       if (delay > 5)
-                               printf ("Warning, expect noticable delay before PCIe"
-                                       "scan due to 'pciscandelay' value!\n");
-                       mdelay (delay * 1000);
+               if (is_end_point(i)) {
+                       ppc4xx_setup_pcie_endpoint(hose, i);
+                       /*
+                        * Reson for no scanning is endpoint can not generate
+                        * upstream configuration accesses.
+                        */
+               } else {
+                       ppc4xx_setup_pcie_rootpoint(hose, i);
+                       env = getenv ("pciscandelay");
+                       if (env != NULL) {
+                               delay = simple_strtoul(env, NULL, 10);
+                               if (delay > 5)
+                                       printf("Warning, expect noticable delay before "
+                                              "PCIe scan due to 'pciscandelay' value!\n");
+                               mdelay(delay * 1000);
+                       }
+
+                       /*
+                        * Config access can only go down stream
+                        */
+                       hose->last_busno = pci_hose_scan(hose);
+                       bus = hose->last_busno + 1;
                }
-
-               /*
-                * Config access can only go down stream
-                */
-               hose->last_busno = pci_hose_scan(hose);
-               bus = hose->last_busno + 1;
-#endif
        }
 }
 #endif /* defined(CONFIG_PCI) */
@@ -541,3 +547,24 @@ int post_hotkeys_pressed(void)
        return (ctrlc());
 }
 #endif
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 val[4];
+       int rc;
+
+       ft_cpu_setup(blob, bd);
+
+       /* Fixup NOR mapping */
+       val[0] = 0;                             /* chip select number */
+       val[1] = 0;                             /* always 0 */
+       val[2] = gd->bd->bi_flashstart;
+       val[3] = gd->bd->bi_flashsize;
+       rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges",
+                                 val, sizeof(val), 1);
+       if (rc)
+               printf("Unable to update property NOR mapping, err=%s\n",
+                      fdt_strerror(rc));
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
index bf8fc5d3dab78175e6250aa3a37ce13abc4d68cb..2474146d8c26266aa00e420c4ce29f36a51465ca 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/amcc/kilauea/Makefile b/board/amcc/kilauea/Makefile
new file mode 100644 (file)
index 0000000..b8da25f
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr@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 cmd_pll.o memory.o
+SOBJS  = init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend *~
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/amcc/kilauea/cmd_pll.c b/board/amcc/kilauea/cmd_pll.c
new file mode 100644 (file)
index 0000000..b2666dd
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * (C) Copyright 2000, 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
+ *
+ */
+
+/*
+ * ehnus: change pll frequency.
+ * Wed Sep  5 11:45:17 CST 2007
+ * hsun@udtech.com.cn
+ */
+
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+#include <i2c.h>
+
+#ifdef CONFIG_CMD_EEPROM
+
+#define EEPROM_CONF_OFFSET             0
+#define EEPROM_TEST_OFFSET             16
+#define EEPROM_SDSTP_PARAM             16
+
+#define PLL_NAME_MAX                   12
+#define BUF_STEP                       8
+
+/* eeprom_wirtes 8Byte per op. */
+#define EEPROM_ALTER_FREQ(freq)                                                \
+       do {                                                            \
+               int __i;                                                \
+               for (__i = 0; __i < 2; __i++)                           \
+                       eeprom_write (CFG_I2C_EEPROM_ADDR,              \
+                                     EEPROM_CONF_OFFSET + __i*BUF_STEP, \
+                                     pll_select[freq],                 \
+                                     BUF_STEP + __i*BUF_STEP);         \
+       } while (0)
+
+#define PDEBUG
+#ifdef PDEBUG
+#define PLL_DEBUG      pll_debug(EEPROM_CONF_OFFSET)
+#else
+#define PLL_DEBUG
+#endif
+
+typedef enum {
+       PLL_ebc20,
+       PLL_333,
+       PLL_4001,
+       PLL_4002,
+       PLL_533,
+       PLL_600,
+       PLL_666,        /* For now, kilauea can't support */
+       RCONF,
+       WTEST,
+       PLL_TOTAL
+} pll_freq_t;
+
+static const char
+pll_name[][PLL_NAME_MAX] = {
+       "PLL_ebc20",
+       "PLL_333",
+       "PLL_400@1",
+       "PLL_400@2",
+       "PLL_533",
+       "PLL_600",
+       "PLL_666",
+       "RCONF",
+       "WTEST",
+       ""
+};
+
+/*
+ * ehnus:
+ */
+static uchar
+pll_select[][EEPROM_SDSTP_PARAM] = {
+       /* 0: CPU 333MHz EBC 20MHz, for test only */
+       {
+               0x8c, 0x12, 0xec, 0x12, 0x88, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 0: 333 */
+       {
+               0x8c, 0x12, 0xec, 0x12, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 1: 400_266 */
+       {
+               0x8e, 0x0e, 0xe8, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 2: 400 */
+       {
+               0x8e, 0x0e, 0xe8, 0x12, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 3: 533 */
+       {
+               0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 4: 600 */
+       {
+               0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 5: 666 */
+       {
+               0x8d, 0x03, 0x78, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       {}
+};
+
+static uchar
+testbuf[EEPROM_SDSTP_PARAM] = {
+       0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+       0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
+};
+
+static void
+pll_debug(int off)
+{
+       int i;
+       uchar buffer[EEPROM_SDSTP_PARAM];
+
+       memset(buffer, 0, sizeof(buffer));
+       eeprom_read(CFG_I2C_EEPROM_ADDR, off,
+                   buffer, EEPROM_SDSTP_PARAM);
+
+       printf("Debug: SDSTP[0-3] at offset \"0x%02x\" lists as follows: \n", off);
+       for (i = 0; i < EEPROM_SDSTP_PARAM; i++)
+               printf("%02x ", buffer[i]);
+       printf("\n");
+}
+
+static void
+test_write(void)
+{
+       printf("Debug: test eeprom_write ... ");
+
+       /*
+        * Write twice, 8 bytes per write
+        */
+       eeprom_write (CFG_I2C_EEPROM_ADDR, EEPROM_TEST_OFFSET,
+                     testbuf, 8);
+       eeprom_write (CFG_I2C_EEPROM_ADDR, EEPROM_TEST_OFFSET+8,
+                     testbuf, 16);
+       printf("done\n");
+
+       pll_debug(EEPROM_TEST_OFFSET);
+}
+
+int
+do_pll_alter (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       char c = '\0';
+       pll_freq_t pll_freq;
+       if (argc < 2) {
+               printf("Usage: \n%s\n", cmdtp->usage);
+               goto ret;
+       }
+
+       for (pll_freq = PLL_ebc20; pll_freq < PLL_TOTAL; pll_freq++)
+               if (!strcmp(pll_name[pll_freq], argv[1]))
+                       break;
+
+       switch (pll_freq) {
+       case PLL_ebc20:
+       case PLL_333:
+       case PLL_4001:
+       case PLL_4002:
+       case PLL_533:
+       case PLL_600:
+               EEPROM_ALTER_FREQ(pll_freq);
+               break;
+
+       case PLL_666:           /* not support */
+               printf("Choose this option will result in a boot failure."
+                      "\nContinue? (Y/N): ");
+
+               c = getc(); putc('\n');
+
+               if ((c == 'y') || (c == 'Y')) {
+                       EEPROM_ALTER_FREQ(pll_freq);
+                       break;
+               }
+               goto ret;
+
+       case RCONF:
+               pll_debug(EEPROM_CONF_OFFSET);
+               goto ret;
+       case WTEST:
+               printf("DEBUG: write test\n");
+               test_write();
+               goto ret;
+
+       default:
+               printf("Invalid options"
+                      "\n\nUsage: \n%s\n", cmdtp->usage);
+               goto ret;
+       }
+
+       printf("PLL set to %s, "
+              "reset the board to take effect\n", pll_name[pll_freq]);
+
+       PLL_DEBUG;
+ret:
+       return 0;
+}
+
+U_BOOT_CMD(
+       pllalter, CFG_MAXARGS, 1,        do_pll_alter,
+       "pllalter- change pll frequence \n",
+       "pllalter <selection>      - change pll frequence \n\n\
+       ** New freq take effect after reset. ** \n\
+       ----------------------------------------------\n\
+       PLL_ebc20: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      Same as PLL_333 \n\
+       \t      except          \n\
+       \t      EBC: 20 MHz     \n\
+       ----------------------------------------------\n\
+       PLL_333: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 666 MHz  \n\
+       \t      CPU: 333 MHz  \n\
+       \t      PLB: 166 MHz  \n\
+       \t      OPB: 83 MHz   \n\
+       \t      DDR: 83 MHz   \n\
+       ------------------------------------------------\n\
+       PLL_400@1: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 800 MHz  \n\
+       \t      CPU: 400 MHz  \n\
+       \t      PLB: 133 MHz  \n\
+       \t      OPB: 66  MHz  \n\
+       \t      DDR: 133 MHz  \n\
+       ------------------------------------------------\n\
+       PLL_400@2: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 800 MHz  \n\
+       \t      CPU: 400 MHz  \n\
+       \t      PLB: 200 MHz  \n\
+       \t      OPB: 100 MHz  \n\
+       \t      DDR: 200 MHz  \n\
+       ----------------------------------------------\n\
+       PLL_533: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1066 MHz  \n\
+       \t      CPU: 533  MHz  \n\
+       \t      PLB: 177  MHz  \n\
+       \t      OPB: 88   MHz  \n\
+       \t      DDR: 177  MHz  \n\
+       ----------------------------------------------\n\
+       PLL_600: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1200 MHz  \n\
+       \t      CPU: 600  MHz  \n\
+       \t      PLB: 200  MHz  \n\
+       \t      OPB: 100  MHz  \n\
+       \t      DDR: 200  MHz  \n\
+       ----------------------------------------------\n\
+       PLL_666: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1333 MHz  \n\
+       \t      CPU: 666  MHz  \n\
+       \t      PLB: 166  MHz  \n\
+       \t      OPB: 83   MHz  \n\
+       \t      DDR: 166  MHz  \n\
+       -----------------------------------------------\n\
+       RCONF: Read current eeprom configuration.      \n\
+       -----------------------------------------------\n\
+       WTEST: Test EEPROM write with predefined values\n\
+       -----------------------------------------------\n"
+       );
+
+#endif /* (CONFIG_COMMANDS & CFG_CMD_EEPROM) */
diff --git a/board/amcc/kilauea/config.mk b/board/amcc/kilauea/config.mk
new file mode 100644 (file)
index 0000000..f5800eb
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# (C) Copyright 2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+TEXT_BASE = 0xFFFA0000
+endif
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
diff --git a/board/amcc/kilauea/init.S b/board/amcc/kilauea/init.S
new file mode 100644 (file)
index 0000000..4338744
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * Based on code provided from UDTech and AMCC
+ *
+ * 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 <ppc4xx.h>
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+
+#define mtsdram_as(reg, value)         \
+       addi    r4,0,reg        ;       \
+       mtdcr   memcfga,r4      ;       \
+       addis   r4,0,value@h    ;       \
+       ori     r4,r4,value@l   ;       \
+       mtdcr   memcfgd,r4      ;
+
+       .globl  ext_bus_cntlr_init
+ext_bus_cntlr_init:
+#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
+
+       /*
+        * DDR2 setup
+        */
+
+       /* Following the DDR Core Manual, here is the initialization */
+
+       /* Step 1 */
+
+       /* Step 2 */
+
+       /* Step 3 */
+
+       /* base=00000000, size=256MByte (6), mode=7 (n*10*8) */
+       mtsdram_as(SDRAM_MB0CF, 0x00006701);
+
+       /* SET SDRAM_MB1CF - Not enabled */
+       mtsdram_as(SDRAM_MB1CF, 0x00000000);
+
+       /* SET SDRAM_MB2CF  - Not enabled */
+       mtsdram_as(SDRAM_MB2CF, 0x00000000);
+
+       /* SET SDRAM_MB3CF  - Not enabled */
+       mtsdram_as(SDRAM_MB3CF, 0x00000000);
+
+       /* SDRAM_CLKTR: Adv Addr clock by 90 deg */
+       mtsdram_as(SDRAM_CLKTR, 0x80000000);
+
+       /* Refresh Time register (0x30) Refresh every 7.8125uS */
+       mtsdram_as(SDRAM_RTR, 0x06180000);
+
+       /* SDRAM_SDTR1 */
+       mtsdram_as(SDRAM_SDTR1, 0x80201000);
+
+       /* SDRAM_SDTR2  */
+       mtsdram_as(SDRAM_SDTR2, 0x32204232);
+
+       /* SDRAM_SDTR3  */
+       mtsdram_as(SDRAM_SDTR3, 0x080b0d1a);
+
+       mtsdram_as(SDRAM_MMODE, 0x00000442);
+       mtsdram_as(SDRAM_MEMODE, 0x00000404);
+
+       /* SDRAM0_MCOPT1 (0X20) No ECC Gen */
+       mtsdram_as(SDRAM_MCOPT1, 0x04322000);
+
+       /* NOP */
+       mtsdram_as(SDRAM_INITPLR0, 0xa8380000);
+       /* precharge 3 DDR clock cycle */
+       mtsdram_as(SDRAM_INITPLR1, 0x81900400);
+       /* EMR2 twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR2, 0x81020000);
+       /* EMR3  twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR3, 0x81030000);
+       /* EMR DLL ENABLE twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR4, 0x81010404);
+       /* MR w/ DLL reset
+        * Note: 5 is CL.  May need to be changed
+        */
+       mtsdram_as(SDRAM_INITPLR5, 0x81000542);
+       /* precharge 3 DDR clock cycle */
+       mtsdram_as(SDRAM_INITPLR6, 0x81900400);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram_as(SDRAM_INITPLR7, 0x8D080000);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram_as(SDRAM_INITPLR8, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram_as(SDRAM_INITPLR9, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram_as(SDRAM_INITPLR10, 0x8D080000);
+       /* MRS - normal operation; wait 2 cycle (set wait to tMRD) */
+       mtsdram_as(SDRAM_INITPLR11, 0x81000442);
+       mtsdram_as(SDRAM_INITPLR12, 0x81010780);
+       mtsdram_as(SDRAM_INITPLR13, 0x81010400);
+       mtsdram_as(SDRAM_INITPLR14, 0x00000000);
+       mtsdram_as(SDRAM_INITPLR15, 0x00000000);
+
+       /* SET MCIF0_CODT   Die Termination On */
+       mtsdram_as(SDRAM_CODT, 0x0080f837);
+       mtsdram_as(SDRAM_MODT0, 0x01800000);
+       mtsdram_as(SDRAM_MODT1, 0x00000000);
+
+       mtsdram_as(SDRAM_WRDTR, 0x00000000);
+
+       /* SDRAM0_MCOPT2 (0X21) Start initialization */
+       mtsdram_as(SDRAM_MCOPT2, 0x20000000);
+
+       /* Step 5 */
+       lis     r3,0x1  /* 400000 =  wait 100ms */
+       mtctr   r3
+
+pll_wait:
+       bdnz    pll_wait
+
+       /* Step 6 */
+
+       /* SDRAM_DLCR */
+       mtsdram_as(SDRAM_DLCR, 0x030000a5);
+
+       /* SDRAM_RDCC */
+       mtsdram_as(SDRAM_RDCC, 0x40000000);
+
+       /* SDRAM_RQDC */
+       mtsdram_as(SDRAM_RQDC, 0x80000038);
+
+       /* SDRAM_RFDC */
+       mtsdram_as(SDRAM_RFDC, 0x00000209);
+
+       /* Enable memory controller */
+       mtsdram_as(SDRAM_MCOPT2, 0x28000000);
+#endif /* #ifndef CONFIG_NAND_U_BOOT */
+
+       blr
diff --git a/board/amcc/kilauea/kilauea.c b/board/amcc/kilauea/kilauea.c
new file mode 100644 (file)
index 0000000..2ee896a
--- /dev/null
@@ -0,0 +1,392 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <ppc4xx.h>
+#include <ppc405.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+
+#if defined(CONFIG_PCI)
+#include <pci.h>
+#include <asm/4xx_pcie.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips   */
+
+/*
+ * Board early initialization function
+ */
+int board_early_init_f (void)
+{
+       u32 val;
+
+       /*--------------------------------------------------------------------+
+        | Interrupt controller setup for the AMCC 405EX(r) PINE evaluation board.
+        +--------------------------------------------------------------------+
+       +---------------------------------------------------------------------+
+       |Interrupt| Source                            | Pol.  | Sensi.| Crit. |
+       +---------+-----------------------------------+-------+-------+-------+
+       | IRQ 00  | UART0                             | High  | Level | Non   |
+       | IRQ 01  | UART1                             | High  | Level | Non   |
+       | IRQ 02  | IIC0                              | High  | Level | Non   |
+       | IRQ 03  | TBD                               | High  | Level | Non   |
+       | IRQ 04  | TBD                               | High  | Level | Non   |
+       | IRQ 05  | EBM                               | High  | Level | Non   |
+       | IRQ 06  | BGI                               | High  | Level | Non   |
+       | IRQ 07  | IIC1                              | Rising| Edge  | Non   |
+       | IRQ 08  | SPI                               | High  | Lvl/ed| Non   |
+       | IRQ 09  | External IRQ 0 - (PCI-Express)    | pgm H | Pgm   | Non   |
+       | IRQ 10  | MAL TX EOB                        | High  | Level | Non   |
+       | IRQ 11  | MAL RX EOB                        | High  | Level | Non   |
+       | IRQ 12  | DMA Channel 0 FIFO Full           | High  | Level | Non   |
+       | IRQ 13  | DMA Channel 0 Stat FIFO           | High  | Level | Non   |
+       | IRQ 14  | DMA Channel 1 FIFO Full           | High  | Level | Non   |
+       | IRQ 15  | DMA Channel 1 Stat FIFO           | High  | Level | Non   |
+       | IRQ 16  | PCIE0 AL                          | high  | Level | Non   |
+       | IRQ 17  | PCIE0 VPD access                  | rising| Edge  | Non   |
+       | IRQ 18  | PCIE0 hot reset request           | rising| Edge  | Non   |
+       | IRQ 19  | PCIE0 hot reset request           | faling| Edge  | Non   |
+       | IRQ 20  | PCIE0 TCR                         | High  | Level | Non   |
+       | IRQ 21  | PCIE0 MSI level0                  | High  | Level | Non   |
+       | IRQ 22  | PCIE0 MSI level1                  | High  | Level | Non   |
+       | IRQ 23  | Security EIP-94                   | High  | Level | Non   |
+       | IRQ 24  | EMAC0 interrupt                   | High  | Level | Non   |
+       | IRQ 25  | EMAC1 interrupt                   | High  | Level | Non   |
+       | IRQ 26  | PCIE0 MSI level2                  | High  | Level | Non   |
+       | IRQ 27  | External IRQ 4                    | pgm H | Pgm   | Non   |
+       | IRQ 28  | UIC2 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 29  | UIC2 Critical Interrupt           | High  | Level | Crit. |
+       | IRQ 30  | UIC1 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 31  | UIC1 Critical Interrupt           | High  | Level | Crit. |
+       |----------------------------------------------------------------------
+       | IRQ 32  | MAL Serr                          | High  | Level | Non   |
+       | IRQ 33  | MAL Txde                          | High  | Level | Non   |
+       | IRQ 34  | MAL Rxde                          | High  | Level | Non   |
+       | IRQ 35  | PCIE0 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 36  | PCIE0 DCR Error                   | High  | Level | Non   |
+       | IRQ 37  | EBC                               | High  |Lvl Edg| Non   |
+       | IRQ 38  | NDFC                              | High  | Level | Non   |
+       | IRQ 39  | GPT Compare Timer 8               | Risin | Edge  | Non   |
+       | IRQ 40  | GPT Compare Timer 9               | Risin | Edge  | Non   |
+       | IRQ 41  | PCIE1 AL                          | high  | Level | Non   |
+       | IRQ 42  | PCIE1 VPD access                  | rising| edge  | Non   |
+       | IRQ 43  | PCIE1 hot reset request           | rising| Edge  | Non   |
+       | IRQ 44  | PCIE1 hot reset request           | faling| Edge  | Non   |
+       | IRQ 45  | PCIE1 TCR                         | High  | Level | Non   |
+       | IRQ 46  | PCIE1 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 47  | GPT Compare Timer 3               | Risin | Edge  | Non   |
+       | IRQ 48  | GPT Compare Timer 4               | Risin | Edge  | Non   |
+       | IRQ 49  | Ext. IRQ 7                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 50  | Ext. IRQ 8 -                      |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 51  | Ext. IRQ 9                        |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 52  | GPT Compare Timer 5               | high  | Edge  | Non   |
+       | IRQ 53  | GPT Compare Timer 6               | high  | Edge  | Non   |
+       | IRQ 54  | GPT Compare Timer 7               | high  | Edge  | Non   |
+       | IRQ 55  | Serial ROM                        | High  | Level | Non   |
+       | IRQ 56  | GPT Decrement Pulse               | High  | Level | Non   |
+       | IRQ 57  | Ext. IRQ 2                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 58  | Ext. IRQ 5                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 59  | Ext. IRQ 6                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 60  | EMAC0 Wake-up                     | High  | Level | Non   |
+       | IRQ 61  | Ext. IRQ 1                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 62  | EMAC1 Wake-up                     | High  | Level | Non   |
+       |----------------------------------------------------------------------
+       | IRQ 64  | PE0 AL                            | High  | Level | Non   |
+       | IRQ 65  | PE0 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 66  | PE0 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 67  | PE0 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 68  | PE0 TCR                           | High  | Level | Non   |
+       | IRQ 69  | PE0 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 70  | PE0 DCR Error                     | High  | Level | Non   |
+       | IRQ 71  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 72  | PE1 AL                            | High  | Level | Non   |
+       | IRQ 73  | PE1 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 74  | PE1 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 75  | PE1 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 76  | PE1 TCR                           | High  | Level | Non   |
+       | IRQ 77  | PE1 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 78  | PE1 DCR Error                     | High  | Level | Non   |
+       | IRQ 79  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 80  | PE2 AL                            | High  | Level | Non   |
+       | IRQ 81  | PE2 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 82  | PE2 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 83  | PE2 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 84  | PE2 TCR                           | High  | Level | Non   |
+       | IRQ 85  | PE2 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 86  | PE2 DCR Error                     | High  | Level | Non   |
+       | IRQ 87  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 88  | External IRQ(5)                   | Progr | Progr | Non   |
+       | IRQ 89  | External IRQ 4 - Ethernet         | Progr | Progr | Non   |
+       | IRQ 90  | External IRQ 3 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 91  | External IRQ 2 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 92  | External IRQ 1 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 93  | External IRQ 0 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 94  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 95  | Reserved                          | N/A   | N/A   | Non   |
+       |---------------------------------------------------------------------
+       +---------+-----------------------------------+-------+-------+------*/
+       /*--------------------------------------------------------------------+
+        | Initialise UIC registers.  Clear all interrupts.  Disable all
+        | interrupts.
+        | Set critical interrupt values.  Set interrupt polarities.  Set
+        | interrupt trigger levels.  Make bit 0 High  priority.  Clear all
+        | interrupts again.
+        +-------------------------------------------------------------------*/
+
+       mtdcr (uic2sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic2er, 0x00000000);     /* disable all interrupts */
+       mtdcr (uic2cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic2pr, 0xf7ffffff);     /* Set Interrupt Polarities */
+       mtdcr (uic2tr, 0x01e1fff8);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic2vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic2sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic2sr, 0xffffffff);     /* clear all interrupts */
+
+       mtdcr (uic1sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic1er, 0x00000000);     /* disable all interrupts */
+       mtdcr (uic1cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic1pr, 0xfffac785);     /* Set Interrupt Polarities */
+       mtdcr (uic1tr, 0x001d0040);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic1vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic1sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic1sr, 0xffffffff);     /* clear all interrupts */
+
+       mtdcr (uic0sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic0er, 0x0000000a);     /* Disable all interrupts */
+                                       /* Except cascade UIC0 and UIC1 */
+       mtdcr (uic0cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic0pr, 0xffbfefef);     /* Set Interrupt Polarities */
+       mtdcr (uic0tr, 0x00007000);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic0vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic0sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic0sr, 0xffffffff);     /* clear all interrupts */
+
+       /*
+        * Note: Some cores are still in reset when the chip starts, so
+        * take them out of reset
+        */
+       mtsdr(SDR0_SRST, 0);
+
+       /*
+        * Configure FPGA register with PCIe reset
+        */
+       out_be32((void *)CFG_FPGA_BASE, 0xff570cc0);    /* assert PCIe reset */
+       mdelay(50);
+       out_be32((void *)CFG_FPGA_BASE, 0xff570cc3);    /* deassert PCIe reset */
+
+       /* Configure 405EX for NAND usage */
+       val = SDR0_CUST0_MUX_NDFC_SEL |
+               SDR0_CUST0_NDFC_ENABLE |
+               SDR0_CUST0_NDFC_BW_8_BIT |
+               SDR0_CUST0_NRB_BUSY |
+               (0x80000000 >> (28 + CFG_NAND_CS));
+       mtsdr(SDR0_CUST0, val);
+
+       /*
+        * Configure PFC (Pin Function Control) registers
+        * -> Enable USB
+        */
+       val = SDR0_PFC1_USBEN | SDR0_PFC1_USBBIGEN | SDR0_PFC1_GPT_FREQ;
+       mtsdr(SDR0_PFC1, val);
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+#ifdef CFG_ENV_IS_IN_FLASH
+       /* Monitor protection ON by default */
+       flash_protect(FLAG_PROTECT_SET,
+                     -CFG_MONITOR_LEN,
+                     0xffffffff,
+                     &flash_info[0]);
+#endif
+
+       return 0;
+}
+
+int board_emac_count(void)
+{
+       u32 pvr = get_pvr();
+
+       /*
+        * 405EXr only has one EMAC interface, 405EX has two
+        */
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               return 1;
+       else
+               return 2;
+}
+
+static int board_pcie_count(void)
+{
+       u32 pvr = get_pvr();
+
+       /*
+        * 405EXr only has one EMAC interface, 405EX has two
+        */
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               return 1;
+       else
+               return 2;
+}
+
+int checkboard (void)
+{
+       char *s = getenv("serial#");
+       u32 pvr = get_pvr();
+
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               printf("Board: Haleakala - AMCC PPC405EXr Evaluation Board");
+       else
+               printf("Board: Kilauea - AMCC PPC405EX Evaluation Board");
+
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
+
+       return (0);
+}
+
+/*************************************************************************
+ *  pci_pre_init
+ *
+ *  This routine is called just prior to registering the hose and gives
+ *  the board the opportunity to check things. Returning a value of zero
+ *  indicates that things are bad & PCI initialization should be aborted.
+ *
+ *      Different boards may wish to customize the pci controller structure
+ *      (add regions, override default access routines, etc) or perform
+ *      certain pre-initialization actions.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int pci_pre_init(struct pci_controller * hose )
+{
+       return 0;
+}
+#endif  /* defined(CONFIG_PCI) */
+
+#ifdef CONFIG_PCI
+static struct pci_controller pcie_hose[2] = {{0},{0}};
+
+void pcie_setup_hoses(int busno)
+{
+       struct pci_controller *hose;
+       int i, bus;
+       int ret = 0;
+       bus = busno;
+       char *env;
+       unsigned int delay;
+
+       for (i = 0; i < board_pcie_count(); i++) {
+
+               if (is_end_point(i))
+                       ret = ppc4xx_init_pcie_endport(i);
+               else
+                       ret = ppc4xx_init_pcie_rootport(i);
+               if (ret) {
+                       printf("PCIE%d: initialization as %s failed\n", i,
+                              is_end_point(i) ? "endpoint" : "root-complex");
+                       continue;
+               }
+
+               hose = &pcie_hose[i];
+               hose->first_busno = bus;
+               hose->last_busno = bus;
+               hose->current_busno = bus;
+
+               /* setup mem resource */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
+                              CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
+                              CFG_PCIE_MEMSIZE,
+                              PCI_REGION_MEM);
+               hose->region_count = 1;
+               pci_register_hose(hose);
+
+               if (is_end_point(i)) {
+                       ppc4xx_setup_pcie_endpoint(hose, i);
+                       /*
+                        * Reson for no scanning is endpoint can not generate
+                        * upstream configuration accesses.
+                        */
+               } else {
+                       ppc4xx_setup_pcie_rootpoint(hose, i);
+                       env = getenv ("pciscandelay");
+                       if (env != NULL) {
+                               delay = simple_strtoul(env, NULL, 10);
+                               if (delay > 5)
+                                       printf("Warning, expect noticable delay before "
+                                              "PCIe scan due to 'pciscandelay' value!\n");
+                               mdelay(delay * 1000);
+                       }
+
+                       /*
+                        * Config access can only go down stream
+                        */
+                       hose->last_busno = pci_hose_scan(hose);
+                       bus = hose->last_busno + 1;
+               }
+       }
+}
+#endif
+
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;       /* No hotkeys supported */
+}
+#endif /* CONFIG_POST */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 val[4];
+       int rc;
+
+       ft_cpu_setup(blob, bd);
+
+       /* Fixup NOR mapping */
+       val[0] = 0;                             /* chip select number */
+       val[1] = 0;                             /* always 0 */
+       val[2] = gd->bd->bi_flashstart;
+       val[3] = gd->bd->bi_flashsize;
+       rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges",
+                                 val, sizeof(val), 1);
+       if (rc)
+               printf("Unable to update property NOR mapping, err=%s\n",
+                      fdt_strerror(rc));
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
diff --git a/board/amcc/kilauea/memory.c b/board/amcc/kilauea/memory.c
new file mode 100644 (file)
index 0000000..1d7a3fa
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <i2c.h>
+
+void sdram_init(void)
+{
+       return;
+}
+
+long int initdram(int board_type)
+{
+       return (CFG_MBYTES_SDRAM << 20);
+}
+
+#if defined(CFG_DRAM_TEST)
+int testdram (void)
+{
+    printf ("testdram\n");
+#if defined (CONFIG_NAND_U_BOOT)
+    return 0;
+#endif
+       uint *pstart = (uint *) 0x00000000;
+       uint *pend = (uint *) 0x00001000;
+       uint *p;
+
+       for (p = pstart; p < pend; p++) {
+               *p = 0xaaaaaaaa;
+       }
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+#if !defined (CONFIG_NAND_SPL)
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+#endif
+                       return 1;
+               }
+       }
+
+       for (p = pstart; p < pend; p++) {
+               *p = 0x55555555;
+       }
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+#if !defined (CONFIG_NAND_SPL)
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+#endif
+                       return 1;
+               }
+       }
+#if !defined (CONFIG_NAND_SPL)
+       printf ("SDRAM test passed!!!\n");
+#endif
+       return 0;
+}
+#endif
diff --git a/board/amcc/kilauea/u-boot-nand.lds b/board/amcc/kilauea/u-boot-nand.lds
new file mode 100644 (file)
index 0000000..27dfe08
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * (C) Copyright 2007
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(powerpc)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.o (.text)
+
+    /* Align to next NAND block */
+    . = ALIGN(0x4000);
+    common/environment.o  (.ppcenv)
+    /* Keep some space here for redundant env and potential bad env blocks */
+    . = ALIGN(0x10000);
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/amcc/kilauea/u-boot.lds b/board/amcc/kilauea/u-boot.lds
new file mode 100644 (file)
index 0000000..1f7653d
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(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
+{
+/* To compile successfully, uncomment the following section.
+ * To go in ram, remove the section.
+ * Added by SunHe.
+ */
+  .resetvec 0xFFFFFFFC :
+  {
+    *(.resetvec)
+  } = 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/ppc4xx/start.o (.text)
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 0067ce0e7e52d215909baa848ae00e6599fefeb9..f964511c572b23db7dfa44d1f4ee319fdcf95886 100644 (file)
@@ -39,6 +39,8 @@ extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
  ************************************************************************/
 int board_early_init_f(void)
 {
+       u32 mfr;
+
        mtebc( pb0ap,  0x03800000 );    /* set chip selects */
        mtebc( pb0cr,  0xffc58000 );    /* ebc0_b0cr, 4MB at 0xffc00000 CS0 */
        mtebc( pb1ap,  0x03800000 );
@@ -64,6 +66,10 @@ int board_early_init_f(void)
        mtdcr( uic0sr, 0x00000000 );    /* clear all interrupts */
        mtdcr( uic0sr, 0xffffffff );
 
+       mfsdr(sdr_mfr, mfr);
+       mfr |= SDR0_MFR_FIXD;           /* Workaround for PCI/DMA */
+       mtsdr(sdr_mfr, mfr);
+
        return  0;
 }
 
index 72ce6855d75fc38b04c190a554af5cce9a7a6797..00ca84c46674cf7297ce1c87111a6da1aa9105b9 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/amcc/makalu/Makefile b/board/amcc/makalu/Makefile
new file mode 100644 (file)
index 0000000..b8da25f
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr@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 cmd_pll.o memory.o
+SOBJS  = init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend *~
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/amcc/makalu/cmd_pll.c b/board/amcc/makalu/cmd_pll.c
new file mode 100644 (file)
index 0000000..b2666dd
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * (C) Copyright 2000, 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
+ *
+ */
+
+/*
+ * ehnus: change pll frequency.
+ * Wed Sep  5 11:45:17 CST 2007
+ * hsun@udtech.com.cn
+ */
+
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+#include <i2c.h>
+
+#ifdef CONFIG_CMD_EEPROM
+
+#define EEPROM_CONF_OFFSET             0
+#define EEPROM_TEST_OFFSET             16
+#define EEPROM_SDSTP_PARAM             16
+
+#define PLL_NAME_MAX                   12
+#define BUF_STEP                       8
+
+/* eeprom_wirtes 8Byte per op. */
+#define EEPROM_ALTER_FREQ(freq)                                                \
+       do {                                                            \
+               int __i;                                                \
+               for (__i = 0; __i < 2; __i++)                           \
+                       eeprom_write (CFG_I2C_EEPROM_ADDR,              \
+                                     EEPROM_CONF_OFFSET + __i*BUF_STEP, \
+                                     pll_select[freq],                 \
+                                     BUF_STEP + __i*BUF_STEP);         \
+       } while (0)
+
+#define PDEBUG
+#ifdef PDEBUG
+#define PLL_DEBUG      pll_debug(EEPROM_CONF_OFFSET)
+#else
+#define PLL_DEBUG
+#endif
+
+typedef enum {
+       PLL_ebc20,
+       PLL_333,
+       PLL_4001,
+       PLL_4002,
+       PLL_533,
+       PLL_600,
+       PLL_666,        /* For now, kilauea can't support */
+       RCONF,
+       WTEST,
+       PLL_TOTAL
+} pll_freq_t;
+
+static const char
+pll_name[][PLL_NAME_MAX] = {
+       "PLL_ebc20",
+       "PLL_333",
+       "PLL_400@1",
+       "PLL_400@2",
+       "PLL_533",
+       "PLL_600",
+       "PLL_666",
+       "RCONF",
+       "WTEST",
+       ""
+};
+
+/*
+ * ehnus:
+ */
+static uchar
+pll_select[][EEPROM_SDSTP_PARAM] = {
+       /* 0: CPU 333MHz EBC 20MHz, for test only */
+       {
+               0x8c, 0x12, 0xec, 0x12, 0x88, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 0: 333 */
+       {
+               0x8c, 0x12, 0xec, 0x12, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 1: 400_266 */
+       {
+               0x8e, 0x0e, 0xe8, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 2: 400 */
+       {
+               0x8e, 0x0e, 0xe8, 0x12, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 3: 533 */
+       {
+               0x8e, 0x43, 0x60, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 4: 600 */
+       {
+               0x8d, 0x02, 0x34, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       /* 5: 666 */
+       {
+               0x8d, 0x03, 0x78, 0x13, 0x98, 0x00, 0x0a, 0x00,
+               0x40, 0x08, 0x23, 0x50, 0x00, 0x05, 0x00, 0x00
+       },
+
+       {}
+};
+
+static uchar
+testbuf[EEPROM_SDSTP_PARAM] = {
+       0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+       0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
+};
+
+static void
+pll_debug(int off)
+{
+       int i;
+       uchar buffer[EEPROM_SDSTP_PARAM];
+
+       memset(buffer, 0, sizeof(buffer));
+       eeprom_read(CFG_I2C_EEPROM_ADDR, off,
+                   buffer, EEPROM_SDSTP_PARAM);
+
+       printf("Debug: SDSTP[0-3] at offset \"0x%02x\" lists as follows: \n", off);
+       for (i = 0; i < EEPROM_SDSTP_PARAM; i++)
+               printf("%02x ", buffer[i]);
+       printf("\n");
+}
+
+static void
+test_write(void)
+{
+       printf("Debug: test eeprom_write ... ");
+
+       /*
+        * Write twice, 8 bytes per write
+        */
+       eeprom_write (CFG_I2C_EEPROM_ADDR, EEPROM_TEST_OFFSET,
+                     testbuf, 8);
+       eeprom_write (CFG_I2C_EEPROM_ADDR, EEPROM_TEST_OFFSET+8,
+                     testbuf, 16);
+       printf("done\n");
+
+       pll_debug(EEPROM_TEST_OFFSET);
+}
+
+int
+do_pll_alter (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       char c = '\0';
+       pll_freq_t pll_freq;
+       if (argc < 2) {
+               printf("Usage: \n%s\n", cmdtp->usage);
+               goto ret;
+       }
+
+       for (pll_freq = PLL_ebc20; pll_freq < PLL_TOTAL; pll_freq++)
+               if (!strcmp(pll_name[pll_freq], argv[1]))
+                       break;
+
+       switch (pll_freq) {
+       case PLL_ebc20:
+       case PLL_333:
+       case PLL_4001:
+       case PLL_4002:
+       case PLL_533:
+       case PLL_600:
+               EEPROM_ALTER_FREQ(pll_freq);
+               break;
+
+       case PLL_666:           /* not support */
+               printf("Choose this option will result in a boot failure."
+                      "\nContinue? (Y/N): ");
+
+               c = getc(); putc('\n');
+
+               if ((c == 'y') || (c == 'Y')) {
+                       EEPROM_ALTER_FREQ(pll_freq);
+                       break;
+               }
+               goto ret;
+
+       case RCONF:
+               pll_debug(EEPROM_CONF_OFFSET);
+               goto ret;
+       case WTEST:
+               printf("DEBUG: write test\n");
+               test_write();
+               goto ret;
+
+       default:
+               printf("Invalid options"
+                      "\n\nUsage: \n%s\n", cmdtp->usage);
+               goto ret;
+       }
+
+       printf("PLL set to %s, "
+              "reset the board to take effect\n", pll_name[pll_freq]);
+
+       PLL_DEBUG;
+ret:
+       return 0;
+}
+
+U_BOOT_CMD(
+       pllalter, CFG_MAXARGS, 1,        do_pll_alter,
+       "pllalter- change pll frequence \n",
+       "pllalter <selection>      - change pll frequence \n\n\
+       ** New freq take effect after reset. ** \n\
+       ----------------------------------------------\n\
+       PLL_ebc20: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      Same as PLL_333 \n\
+       \t      except          \n\
+       \t      EBC: 20 MHz     \n\
+       ----------------------------------------------\n\
+       PLL_333: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 666 MHz  \n\
+       \t      CPU: 333 MHz  \n\
+       \t      PLB: 166 MHz  \n\
+       \t      OPB: 83 MHz   \n\
+       \t      DDR: 83 MHz   \n\
+       ------------------------------------------------\n\
+       PLL_400@1: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 800 MHz  \n\
+       \t      CPU: 400 MHz  \n\
+       \t      PLB: 133 MHz  \n\
+       \t      OPB: 66  MHz  \n\
+       \t      DDR: 133 MHz  \n\
+       ------------------------------------------------\n\
+       PLL_400@2: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 800 MHz  \n\
+       \t      CPU: 400 MHz  \n\
+       \t      PLB: 200 MHz  \n\
+       \t      OPB: 100 MHz  \n\
+       \t      DDR: 200 MHz  \n\
+       ----------------------------------------------\n\
+       PLL_533: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1066 MHz  \n\
+       \t      CPU: 533  MHz  \n\
+       \t      PLB: 177  MHz  \n\
+       \t      OPB: 88   MHz  \n\
+       \t      DDR: 177  MHz  \n\
+       ----------------------------------------------\n\
+       PLL_600: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1200 MHz  \n\
+       \t      CPU: 600  MHz  \n\
+       \t      PLB: 200  MHz  \n\
+       \t      OPB: 100  MHz  \n\
+       \t      DDR: 200  MHz  \n\
+       ----------------------------------------------\n\
+       PLL_666: Board: AMCC 405EX(r) Evaluation Board\n\
+       \t      VCO: 1333 MHz  \n\
+       \t      CPU: 666  MHz  \n\
+       \t      PLB: 166  MHz  \n\
+       \t      OPB: 83   MHz  \n\
+       \t      DDR: 166  MHz  \n\
+       -----------------------------------------------\n\
+       RCONF: Read current eeprom configuration.      \n\
+       -----------------------------------------------\n\
+       WTEST: Test EEPROM write with predefined values\n\
+       -----------------------------------------------\n"
+       );
+
+#endif /* (CONFIG_COMMANDS & CFG_CMD_EEPROM) */
diff --git a/board/amcc/makalu/config.mk b/board/amcc/makalu/config.mk
new file mode 100644 (file)
index 0000000..a46b197
--- /dev/null
@@ -0,0 +1,24 @@
+#
+# (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
+#
+
+TEXT_BASE = 0xFFFA0000
diff --git a/board/amcc/makalu/init.S b/board/amcc/makalu/init.S
new file mode 100644 (file)
index 0000000..57c1774
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * Based on code provided from Senao and AMCC
+ *
+ * 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 <ppc4xx.h>
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+
+#define mtsdram_as(reg, value)         \
+       addi    r4,0,reg        ;       \
+       mtdcr   memcfga,r4      ;       \
+       addis   r4,0,value@h    ;       \
+       ori     r4,r4,value@l   ;       \
+       mtdcr   memcfgd,r4      ;
+
+       .globl  ext_bus_cntlr_init
+ext_bus_cntlr_init:
+
+       /*
+        * DDR2 setup
+        */
+
+       /* Following the DDR Core Manual, here is the initialization */
+
+       /* Step 1 */
+
+       /* Step 2 */
+
+       /* Step 3 */
+
+       /* base=00000000, size=128MByte (5), mode=2 (n*10*4) */
+       mtsdram_as(SDRAM_MB0CF, 0x00005201);
+
+       /* base=08000000, size=128MByte (5), mode=2 (n*10*4) */
+       mtsdram_as(SDRAM_MB1CF, (0x08000000 >> 3) | 0x5201);
+
+       /* SDRAM_CLKTR: Adv Addr clock by 90 deg */
+       mtsdram_as(SDRAM_CLKTR,0x80000000);
+
+       /* Refresh Time register (0x30) Refresh every 7.8125uS */
+       mtsdram_as(SDRAM_RTR, 0x06180000);
+
+       /* SDRAM_SDTR1 */
+       mtsdram_as(SDRAM_SDTR1, 0x80201000);
+
+       /* SDRAM_SDTR2  */
+       mtsdram_as(SDRAM_SDTR2, 0x32204232);
+
+       /* SDRAM_SDTR3  */
+       mtsdram_as(SDRAM_SDTR3, 0x080b0d1a);
+
+       mtsdram_as(SDRAM_MMODE, 0x00000442);
+       mtsdram_as(SDRAM_MEMODE, 0x00000404);
+
+       /* SDRAM0_MCOPT1 (0X20) No ECC Gen */
+       mtsdram_as(SDRAM_MCOPT1, 0x04322000);
+
+       /* NOP */
+       mtsdram_as(SDRAM_INITPLR0, 0xa8380000);
+       /* precharge 3 DDR clock cycle */
+       mtsdram_as(SDRAM_INITPLR1, 0x81900400);
+       /* EMR2 twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR2, 0x81020000);
+       /* EMR3  twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR3, 0x81030000);
+       /* EMR DLL ENABLE twr = 2tck */
+       mtsdram_as(SDRAM_INITPLR4, 0x81010404);
+       /* MR w/ DLL reset
+        * Note: 5 is CL.  May need to be changed
+        */
+       mtsdram_as(SDRAM_INITPLR5, 0x81000542);
+       /* precharge 3 DDR clock cycle */
+       mtsdram_as(SDRAM_INITPLR6, 0x81900400);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram_as(SDRAM_INITPLR7, 0x8D080000);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram_as(SDRAM_INITPLR8, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram_as(SDRAM_INITPLR9, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram_as(SDRAM_INITPLR10, 0x8D080000);
+       /* MRS - normal operation; wait 2 cycle (set wait to tMRD) */
+       mtsdram_as(SDRAM_INITPLR11, 0x81000442);
+       mtsdram_as(SDRAM_INITPLR12, 0x81010780);
+       mtsdram_as(SDRAM_INITPLR13, 0x81010400);
+       mtsdram_as(SDRAM_INITPLR14, 0x00000000);
+       mtsdram_as(SDRAM_INITPLR15, 0x00000000);
+
+       /* SET MCIF0_CODT   Die Termination On */
+       mtsdram_as(SDRAM_CODT, 0x0080f837);
+       mtsdram_as(SDRAM_MODT0, 0x01800000);
+#if 0 /* test-only: not sure if 0 is ok when 2nd bank is used */
+       mtsdram_as(SDRAM_MODT1, 0x00000000);
+#endif
+
+       mtsdram_as(SDRAM_WRDTR, 0x00000000);
+
+       /* SDRAM0_MCOPT2 (0X21) Start initialization */
+       mtsdram_as(SDRAM_MCOPT2, 0x20000000);
+
+       /* Step 5 */
+       lis     r3,0x1  /* 400000 =  wait 100ms */
+       mtctr   r3
+
+pll_wait:
+       bdnz    pll_wait
+
+       /* Step 6 */
+
+       /* SDRAM_DLCR */
+       mtsdram_as(SDRAM_DLCR, 0x030000a5);
+
+       /* SDRAM_RDCC */
+       mtsdram_as(SDRAM_RDCC, 0x40000000);
+
+       /* SDRAM_RQDC */
+       mtsdram_as(SDRAM_RQDC, 0x80000038);
+
+       /* SDRAM_RFDC */
+       mtsdram_as(SDRAM_RFDC, 0x00000209);
+
+       /* Enable memory controller */
+       mtsdram_as(SDRAM_MCOPT2, 0x28000000);
+
+       blr
diff --git a/board/amcc/makalu/makalu.c b/board/amcc/makalu/makalu.c
new file mode 100644 (file)
index 0000000..15e51f4
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <ppc4xx.h>
+#include <ppc405.h>
+#include <libfdt.h>
+#include <asm/processor.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+
+#if defined(CONFIG_PCI)
+#include <pci.h>
+#include <asm/4xx_pcie.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips   */
+
+/*
+ * Board early initialization function
+ */
+int board_early_init_f (void)
+{
+       u32 val;
+
+       /*--------------------------------------------------------------------+
+        | Interrupt controller setup for the AMCC 405EX(r) PINE evaluation board.
+        +--------------------------------------------------------------------+
+       +---------------------------------------------------------------------+
+       |Interrupt| Source                            | Pol.  | Sensi.| Crit. |
+       +---------+-----------------------------------+-------+-------+-------+
+       | IRQ 00  | UART0                             | High  | Level | Non   |
+       | IRQ 01  | UART1                             | High  | Level | Non   |
+       | IRQ 02  | IIC0                              | High  | Level | Non   |
+       | IRQ 03  | TBD                               | High  | Level | Non   |
+       | IRQ 04  | TBD                               | High  | Level | Non   |
+       | IRQ 05  | EBM                               | High  | Level | Non   |
+       | IRQ 06  | BGI                               | High  | Level | Non   |
+       | IRQ 07  | IIC1                              | Rising| Edge  | Non   |
+       | IRQ 08  | SPI                               | High  | Lvl/ed| Non   |
+       | IRQ 09  | External IRQ 0 - (PCI-Express)    | pgm H | Pgm   | Non   |
+       | IRQ 10  | MAL TX EOB                        | High  | Level | Non   |
+       | IRQ 11  | MAL RX EOB                        | High  | Level | Non   |
+       | IRQ 12  | DMA Channel 0 FIFO Full           | High  | Level | Non   |
+       | IRQ 13  | DMA Channel 0 Stat FIFO           | High  | Level | Non   |
+       | IRQ 14  | DMA Channel 1 FIFO Full           | High  | Level | Non   |
+       | IRQ 15  | DMA Channel 1 Stat FIFO           | High  | Level | Non   |
+       | IRQ 16  | PCIE0 AL                          | high  | Level | Non   |
+       | IRQ 17  | PCIE0 VPD access                  | rising| Edge  | Non   |
+       | IRQ 18  | PCIE0 hot reset request           | rising| Edge  | Non   |
+       | IRQ 19  | PCIE0 hot reset request           | faling| Edge  | Non   |
+       | IRQ 20  | PCIE0 TCR                         | High  | Level | Non   |
+       | IRQ 21  | PCIE0 MSI level0                  | High  | Level | Non   |
+       | IRQ 22  | PCIE0 MSI level1                  | High  | Level | Non   |
+       | IRQ 23  | Security EIP-94                   | High  | Level | Non   |
+       | IRQ 24  | EMAC0 interrupt                   | High  | Level | Non   |
+       | IRQ 25  | EMAC1 interrupt                   | High  | Level | Non   |
+       | IRQ 26  | PCIE0 MSI level2                  | High  | Level | Non   |
+       | IRQ 27  | External IRQ 4                    | pgm H | Pgm   | Non   |
+       | IRQ 28  | UIC2 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 29  | UIC2 Critical Interrupt           | High  | Level | Crit. |
+       | IRQ 30  | UIC1 Non-critical Int.            | High  | Level | Non   |
+       | IRQ 31  | UIC1 Critical Interrupt           | High  | Level | Crit. |
+       |----------------------------------------------------------------------
+       | IRQ 32  | MAL Serr                          | High  | Level | Non   |
+       | IRQ 33  | MAL Txde                          | High  | Level | Non   |
+       | IRQ 34  | MAL Rxde                          | High  | Level | Non   |
+       | IRQ 35  | PCIE0 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 36  | PCIE0 DCR Error                   | High  | Level | Non   |
+       | IRQ 37  | EBC                               | High  |Lvl Edg| Non   |
+       | IRQ 38  | NDFC                              | High  | Level | Non   |
+       | IRQ 39  | GPT Compare Timer 8               | Risin | Edge  | Non   |
+       | IRQ 40  | GPT Compare Timer 9               | Risin | Edge  | Non   |
+       | IRQ 41  | PCIE1 AL                          | high  | Level | Non   |
+       | IRQ 42  | PCIE1 VPD access                  | rising| edge  | Non   |
+       | IRQ 43  | PCIE1 hot reset request           | rising| Edge  | Non   |
+       | IRQ 44  | PCIE1 hot reset request           | faling| Edge  | Non   |
+       | IRQ 45  | PCIE1 TCR                         | High  | Level | Non   |
+       | IRQ 46  | PCIE1 bus master VC0              |falling| Edge  | Non   |
+       | IRQ 47  | GPT Compare Timer 3               | Risin | Edge  | Non   |
+       | IRQ 48  | GPT Compare Timer 4               | Risin | Edge  | Non   |
+       | IRQ 49  | Ext. IRQ 7                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 50  | Ext. IRQ 8 -                      |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 51  | Ext. IRQ 9                        |pgm (H)|pgm/Lvl| Non   |
+       | IRQ 52  | GPT Compare Timer 5               | high  | Edge  | Non   |
+       | IRQ 53  | GPT Compare Timer 6               | high  | Edge  | Non   |
+       | IRQ 54  | GPT Compare Timer 7               | high  | Edge  | Non   |
+       | IRQ 55  | Serial ROM                        | High  | Level | Non   |
+       | IRQ 56  | GPT Decrement Pulse               | High  | Level | Non   |
+       | IRQ 57  | Ext. IRQ 2                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 58  | Ext. IRQ 5                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 59  | Ext. IRQ 6                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 60  | EMAC0 Wake-up                     | High  | Level | Non   |
+       | IRQ 61  | Ext. IRQ 1                        |pgm/Fal|pgm/Lvl| Non   |
+       | IRQ 62  | EMAC1 Wake-up                     | High  | Level | Non   |
+       |----------------------------------------------------------------------
+       | IRQ 64  | PE0 AL                            | High  | Level | Non   |
+       | IRQ 65  | PE0 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 66  | PE0 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 67  | PE0 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 68  | PE0 TCR                           | High  | Level | Non   |
+       | IRQ 69  | PE0 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 70  | PE0 DCR Error                     | High  | Level | Non   |
+       | IRQ 71  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 72  | PE1 AL                            | High  | Level | Non   |
+       | IRQ 73  | PE1 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 74  | PE1 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 75  | PE1 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 76  | PE1 TCR                           | High  | Level | Non   |
+       | IRQ 77  | PE1 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 78  | PE1 DCR Error                     | High  | Level | Non   |
+       | IRQ 79  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 80  | PE2 AL                            | High  | Level | Non   |
+       | IRQ 81  | PE2 VPD Access                    | Risin | Edge  | Non   |
+       | IRQ 82  | PE2 Hot Reset Request             | Risin | Edge  | Non   |
+       | IRQ 83  | PE2 Hot Reset Request             | Falli | Edge  | Non   |
+       | IRQ 84  | PE2 TCR                           | High  | Level | Non   |
+       | IRQ 85  | PE2 BusMaster VCO                 | Falli | Edge  | Non   |
+       | IRQ 86  | PE2 DCR Error                     | High  | Level | Non   |
+       | IRQ 87  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 88  | External IRQ(5)                   | Progr | Progr | Non   |
+       | IRQ 89  | External IRQ 4 - Ethernet         | Progr | Progr | Non   |
+       | IRQ 90  | External IRQ 3 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 91  | External IRQ 2 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 92  | External IRQ 1 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 93  | External IRQ 0 - PCI-X            | Progr | Progr | Non   |
+       | IRQ 94  | Reserved                          | N/A   | N/A   | Non   |
+       | IRQ 95  | Reserved                          | N/A   | N/A   | Non   |
+       |---------------------------------------------------------------------
+       +---------+-----------------------------------+-------+-------+------*/
+       /*--------------------------------------------------------------------+
+        | Initialise UIC registers.  Clear all interrupts.  Disable all
+        | interrupts.
+        | Set critical interrupt values.  Set interrupt polarities.  Set
+        | interrupt trigger levels.  Make bit 0 High  priority.  Clear all
+        | interrupts again.
+        +-------------------------------------------------------------------*/
+
+       mtdcr (uic2sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic2er, 0x00000000);     /* disable all interrupts */
+       mtdcr (uic2cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic2pr, 0xf7ffffff);     /* Set Interrupt Polarities */
+       mtdcr (uic2tr, 0x01e1fff8);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic2vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic2sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic2sr, 0xffffffff);     /* clear all interrupts */
+
+       mtdcr (uic1sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic1er, 0x00000000);     /* disable all interrupts */
+       mtdcr (uic1cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic1pr, 0xfffac785);     /* Set Interrupt Polarities */
+       mtdcr (uic1tr, 0x001d0040);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic1vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic1sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic1sr, 0xffffffff);     /* clear all interrupts */
+
+       mtdcr (uic0sr, 0xffffffff);     /* Clear all interrupts */
+       mtdcr (uic0er, 0x0000000a);     /* Disable all interrupts */
+                                       /* Except cascade UIC0 and UIC1 */
+       mtdcr (uic0cr, 0x00000000);     /* Set Critical / Non Critical interrupts */
+       mtdcr (uic0pr, 0xffbfefef);     /* Set Interrupt Polarities */
+       mtdcr (uic0tr, 0x00007000);     /* Set Interrupt Trigger Levels */
+       mtdcr (uic0vr, 0x00000001);     /* Set Vect base=0,INT31 Highest priority */
+       mtdcr (uic0sr, 0x00000000);     /* clear all interrupts */
+       mtdcr (uic0sr, 0xffffffff);     /* clear all interrupts */
+
+       /*
+        * Note: Some cores are still in reset when the chip starts, so
+        * take them out of reset
+        */
+       mtsdr(SDR0_SRST, 0);
+
+       /* Reset PCIe slots */
+       gpio_write_bit(CFG_GPIO_PCIE_RST, 0);
+       udelay(100);
+       gpio_write_bit(CFG_GPIO_PCIE_RST, 1);
+
+       /*
+        * Configure PFC (Pin Function Control) registers
+        * -> Enable USB
+        */
+       val = SDR0_PFC1_USBEN | SDR0_PFC1_USBBIGEN | SDR0_PFC1_GPT_FREQ;
+       mtsdr(SDR0_PFC1, val);
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+#ifdef CFG_ENV_IS_IN_FLASH
+       /* Monitor protection ON by default */
+       flash_protect(FLAG_PROTECT_SET,
+                     -CFG_MONITOR_LEN,
+                     0xffffffff,
+                     &flash_info[0]);
+#endif
+
+       return 0;
+}
+
+int checkboard (void)
+{
+       char *s = getenv("serial#");
+
+       printf("Board: Makalu - AMCC PPC405EX Evaluation Board");
+
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
+
+       return (0);
+}
+
+/*************************************************************************
+ *  pci_pre_init
+ *
+ *  This routine is called just prior to registering the hose and gives
+ *  the board the opportunity to check things. Returning a value of zero
+ *  indicates that things are bad & PCI initialization should be aborted.
+ *
+ *      Different boards may wish to customize the pci controller structure
+ *      (add regions, override default access routines, etc) or perform
+ *      certain pre-initialization actions.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int pci_pre_init(struct pci_controller * hose )
+{
+       return 0;
+}
+#endif  /* defined(CONFIG_PCI) */
+
+#ifdef CONFIG_PCI
+static struct pci_controller pcie_hose[2] = {{0},{0}};
+
+void pcie_setup_hoses(int busno)
+{
+       struct pci_controller *hose;
+       int i, bus;
+       int ret = 0;
+       bus = busno;
+       char *env;
+       unsigned int delay;
+
+       for (i = 0; i < 2; i++) {
+
+               if (is_end_point(i))
+                       ret = ppc4xx_init_pcie_endport(i);
+               else
+                       ret = ppc4xx_init_pcie_rootport(i);
+               if (ret) {
+                       printf("PCIE%d: initialization as %s failed\n", i,
+                              is_end_point(i) ? "endpoint" : "root-complex");
+                       continue;
+               }
+
+               hose = &pcie_hose[i];
+               hose->first_busno = bus;
+               hose->last_busno = bus;
+               hose->current_busno = bus;
+
+               /* setup mem resource */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
+                              CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
+                              CFG_PCIE_MEMSIZE,
+                              PCI_REGION_MEM);
+               hose->region_count = 1;
+               pci_register_hose(hose);
+
+               if (is_end_point(i)) {
+                       ppc4xx_setup_pcie_endpoint(hose, i);
+                       /*
+                        * Reson for no scanning is endpoint can not generate
+                        * upstream configuration accesses.
+                        */
+               } else {
+                       ppc4xx_setup_pcie_rootpoint(hose, i);
+                       env = getenv ("pciscandelay");
+                       if (env != NULL) {
+                               delay = simple_strtoul(env, NULL, 10);
+                               if (delay > 5)
+                                       printf("Warning, expect noticable delay before "
+                                              "PCIe scan due to 'pciscandelay' value!\n");
+                               mdelay(delay * 1000);
+                       }
+
+                       /*
+                        * Config access can only go down stream
+                        */
+                       hose->last_busno = pci_hose_scan(hose);
+                       bus = hose->last_busno + 1;
+               }
+       }
+}
+#endif
+
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;       /* No hotkeys supported */
+}
+#endif /* CONFIG_POST */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 val[4];
+       int rc;
+
+       ft_cpu_setup(blob, bd);
+
+       /* Fixup NOR mapping */
+       val[0] = 0;                             /* chip select number */
+       val[1] = 0;                             /* always 0 */
+       val[2] = gd->bd->bi_flashstart;
+       val[3] = gd->bd->bi_flashsize;
+       rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges",
+                                 val, sizeof(val), 1);
+       if (rc)
+               printf("Unable to update property NOR mapping, err=%s\n",
+                      fdt_strerror(rc));
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
diff --git a/board/amcc/makalu/memory.c b/board/amcc/makalu/memory.c
new file mode 100644 (file)
index 0000000..b03b60b
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+
+void sdram_init(void)
+{
+       return;
+}
+
+long int initdram(int board_type)
+{
+       /*
+        * Same as on Kilauea, Makalu generates exception 0x200
+        * (machine check) after trap_init() in board_init_f,
+        * when SDRAM is initialized here (late) and d-cache is
+        * used earlier as INIT_RAM.
+        * So for now, initialize DDR2 in init.S very early and
+        * also use it for INIT_RAM. Then this exception doesn't
+        * occur.
+        */
+#if 0
+       u32 val;
+
+       /* base=00000000, size=128MByte (5), mode=2 (n*10*4) */
+       mtsdram(SDRAM_MB0CF, 0x00005201);
+
+       /* SET SDRAM_MB1CF - Not enabled */
+       mtsdram(SDRAM_MB1CF, 0x00000000);
+
+       /* SET SDRAM_MB2CF  - Not enabled */
+       mtsdram(SDRAM_MB2CF, 0x00000000);
+
+       /* SET SDRAM_MB3CF  - Not enabled */
+       mtsdram(SDRAM_MB3CF, 0x00000000);
+
+       /* SDRAM_CLKTR: Adv Addr clock by 90 deg */
+       mtsdram(SDRAM_CLKTR, 0x80000000);
+
+       /* Refresh Time register (0x30) Refresh every 7.8125uS */
+       mtsdram(SDRAM_RTR, 0x06180000);
+
+       /* SDRAM_SDTR1 */
+       mtsdram(SDRAM_SDTR1, 0x80201000);
+
+       /* SDRAM_SDTR2  */
+       mtsdram(SDRAM_SDTR2, 0x32204232);
+
+       /* SDRAM_SDTR3  */
+       mtsdram(SDRAM_SDTR3, 0x080b0d1a);
+
+       mtsdram(SDRAM_MMODE, 0x00000442);
+       mtsdram(SDRAM_MEMODE, 0x00000404);
+
+       /* SDRAM0_MCOPT1 (0X20) No ECC Gen */
+       mtsdram(SDRAM_MCOPT1, 0x04322000);
+
+       /* NOP */
+       mtsdram(SDRAM_INITPLR0, 0xa8380000);
+       /* precharge 3 DDR clock cycle */
+       mtsdram(SDRAM_INITPLR1, 0x81900400);
+       /* EMR2 twr = 2tck */
+       mtsdram(SDRAM_INITPLR2, 0x81020000);
+       /* EMR3  twr = 2tck */
+       mtsdram(SDRAM_INITPLR3, 0x81030000);
+       /* EMR DLL ENABLE twr = 2tck */
+       mtsdram(SDRAM_INITPLR4, 0x81010404);
+       /* MR w/ DLL reset
+        * Note: 5 is CL.  May need to be changed
+        */
+       mtsdram(SDRAM_INITPLR5, 0x81000542);
+       /* precharge 3 DDR clock cycle */
+       mtsdram(SDRAM_INITPLR6, 0x81900400);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram(SDRAM_INITPLR7, 0x8D080000);
+       /* Auto-refresh trfc = 26tck */
+       mtsdram(SDRAM_INITPLR8, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram(SDRAM_INITPLR9, 0x8D080000);
+       /* Auto-refresh */
+       mtsdram(SDRAM_INITPLR10, 0x8D080000);
+       /* MRS - normal operation; wait 2 cycle (set wait to tMRD) */
+       mtsdram(SDRAM_INITPLR11, 0x81000442);
+       mtsdram(SDRAM_INITPLR12, 0x81010780);
+       mtsdram(SDRAM_INITPLR13, 0x81010400);
+       mtsdram(SDRAM_INITPLR14, 0x00000000);
+       mtsdram(SDRAM_INITPLR15, 0x00000000);
+
+       /* SET MCIF0_CODT   Die Termination On */
+       mtsdram(SDRAM_CODT, 0x0080f837);
+       mtsdram(SDRAM_MODT0, 0x01800000);
+       mtsdram(SDRAM_MODT1, 0x00000000);
+
+       mtsdram(SDRAM_WRDTR, 0x00000000);
+
+       /* SDRAM0_MCOPT2 (0X21) Start initialization */
+       mtsdram(SDRAM_MCOPT2, 0x20000000);
+
+       /* Step 5 */
+       do {
+               mfsdram(SDRAM_MCSTAT, val);
+       } while ((val & SDRAM_MCSTAT_MIC_COMP) != SDRAM_MCSTAT_MIC_COMP);
+
+       /* Step 6 */
+
+       /* SDRAM_DLCR */
+       mtsdram(SDRAM_DLCR, 0x030000a5);
+
+       /* SDRAM_RDCC */
+       mtsdram(SDRAM_RDCC, 0x40000000);
+
+       /* SDRAM_RQDC */
+       mtsdram(SDRAM_RQDC, 0x80000038);
+
+       /* SDRAM_RFDC */
+       mtsdram(SDRAM_RFDC, 0x00000209);
+
+       /* Enable memory controller */
+       mfsdram(SDRAM_MCOPT2, val);
+       val |= SDRAM_MCOPT2_DCEN_ENABLE;
+       mtsdram(SDRAM_MCOPT2, val);
+#endif
+       return (CFG_MBYTES_SDRAM << 20);
+}
+
+#if defined(CFG_DRAM_TEST)
+int testdram (void)
+{
+    printf ("testdram\n");
+#if defined (CONFIG_NAND_U_BOOT)
+    return 0;
+#endif
+       uint *pstart = (uint *) 0x00000000;
+       uint *pend = (uint *) 0x00001000;
+       uint *p;
+
+       for (p = pstart; p < pend; p++) {
+               *p = 0xaaaaaaaa;
+       }
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+#if !defined (CONFIG_NAND_SPL)
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+#endif
+                       return 1;
+               }
+       }
+
+       for (p = pstart; p < pend; p++) {
+               *p = 0x55555555;
+       }
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+#if !defined (CONFIG_NAND_SPL)
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+#endif
+                       return 1;
+               }
+       }
+#if !defined (CONFIG_NAND_SPL)
+       printf ("SDRAM test passed!!!\n");
+#endif
+       return 0;
+}
+#endif
diff --git a/board/amcc/makalu/u-boot.lds b/board/amcc/makalu/u-boot.lds
new file mode 100644 (file)
index 0000000..1f7653d
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(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
+{
+/* To compile successfully, uncomment the following section.
+ * To go in ram, remove the section.
+ * Added by SunHe.
+ */
+  .resetvec 0xFFFFFFFC :
+  {
+    *(.resetvec)
+  } = 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/ppc4xx/start.o (.text)
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 316fee88c03e5dcb84605436d5f673d65543c6c4..5f0808d4573404d5226d8daaf3e045ded0960bac 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/amcc/ocotea/init.o   (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5fe3af9a092a2ed7b12c0224044840d2e9407fe2..306c92c157ed8c3406e0c2bffc2b2cf7f3a5d990 100644 (file)
  */
 
 #include <ppc_asm.tmpl>
+#include <asm-ppc/mmu.h>
 #include <config.h>
 
-/* General */
-#define TLB_VALID   0x00000200
-#define _256M       0x10000000
-
-/* Supported page sizes */
-
-#define SZ_1K      0x00000000
-#define SZ_4K      0x00000010
-#define SZ_16K     0x00000020
-#define SZ_64K     0x00000030
-#define SZ_256K            0x00000040
-#define SZ_1M      0x00000050
-#define SZ_8M       0x00000060
-#define SZ_16M     0x00000070
-#define SZ_256M            0x00000090
-
-/* Storage attributes */
-#define SA_W       0x00000800      /* Write-through */
-#define SA_I       0x00000400      /* Caching inhibited */
-#define SA_M       0x00000200      /* Memory coherence */
-#define SA_G       0x00000100      /* Guarded */
-#define SA_E       0x00000080      /* Endian */
-
-/* Access control */
-#define AC_X       0x00000024      /* Execute */
-#define AC_W       0x00000012      /* Write */
-#define AC_R       0x00000009      /* Read */
-
-/* Some handy macros */
-
-#define EPN(e)         ((e) & 0xfffffc00)
-#define TLB0(epn,sz)   ( (EPN((epn)) | (sz) | TLB_VALID ) )
-#define TLB1(rpn,erpn) ( ((rpn)&0xfffffc00) | (erpn) )
-#define TLB2(a)                ( (a)&0x00000fbf )
-
-#define tlbtab_start\
-       mflr    r1  ;\
-       bl 0f       ;
-
-#define tlbtab_end\
-       .long 0, 0, 0   ;   \
-0:     mflr    r0      ;   \
-       mtlr    r1      ;   \
-       blr             ;
-
-#define tlbentry(epn,sz,rpn,erpn,attr)\
-       .long TLB0(epn,sz),TLB1(rpn,erpn),TLB2(attr)
-
-
 /**************************************************************************
  * TLB TABLE
  *
 tlbtab:
        tlbtab_start
 
-       /*
-        * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the
+       /* vxWorks needs this as first entry for the Machine Check interrupt */
+       tlbentry( 0x40000000, SZ_256M, 0, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for DDR SDRAM (Up to 2GB) */
+#ifdef CONFIG_4xx_DCACHE
+       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G)
+#else
+       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+#endif
+
+       /* TLB-entry for EBC */
+       tlbentry( CFG_BCSR_BASE, SZ_256M, CFG_BCSR_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* BOOT_CS (FLASH) must be forth. Before relocation SA_I can be off to use the
         * speed up boot process. It is patched after relocation to enable SA_I
         */
 #ifndef CONFIG_NAND_SPL
@@ -97,9 +61,6 @@ tlbtab:
        tlbentry( CFG_NAND_BOOT_SPL_SRC, SZ_4K, CFG_NAND_BOOT_SPL_SRC, 1, AC_R|AC_W|AC_X|SA_G )
 #endif
 
-       /* TLB-entry for DDR SDRAM (Up to 2GB) */
-       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
-
 #ifdef CFG_INIT_RAM_DCACHE
        /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */
        tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G )
@@ -111,9 +72,6 @@ tlbtab:
        tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I )
        tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
 
-       /* TLB-entry for EBC */
-       tlbentry( CFG_BCSR_BASE, SZ_1K, CFG_BCSR_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
-
        /* TLB-entry for NAND */
        tlbentry( CFG_NAND_ADDR, SZ_1K, CFG_NAND_ADDR, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
 
index 78e2cb42a9a8743dfd238c661409d2d8913688bc..b43ec48091f3820fb2f6815eddedaaedbd247b5c 100644 (file)
 #include <asm/io.h>
 #include <ppc440.h>
 
-#include "sdram.h"
-
-#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) || \
-       defined(CONFIG_DDR_DATA_EYE)
-/*-----------------------------------------------------------------------------+
- * wait_for_dlllock.
- +----------------------------------------------------------------------------*/
-static int wait_for_dlllock(void)
-{
-       unsigned long val;
-       int wait = 0;
-
-       /* -----------------------------------------------------------+
-        * Wait for the DCC master delay line to finish calibration
-        * ----------------------------------------------------------*/
-       mtdcr(ddrcfga, DDR0_17);
-       val = DDR0_17_DLLLOCKREG_UNLOCKED;
-
-       while (wait != 0xffff) {
-               val = mfdcr(ddrcfgd);
-               if ((val & DDR0_17_DLLLOCKREG_MASK) == DDR0_17_DLLLOCKREG_LOCKED)
-                       /* dlllockreg bit on */
-                       return 0;
-               else
-                       wait++;
-       }
-       debug("0x%04x: DDR0_17 Value (dlllockreg bit): 0x%08x\n", wait, val);
-       debug("Waiting for dlllockreg bit to raise\n");
-
-       return -1;
-}
-#endif
-
-#if defined(CONFIG_DDR_DATA_EYE)
-/*-----------------------------------------------------------------------------+
- * wait_for_dram_init_complete.
- +----------------------------------------------------------------------------*/
-int wait_for_dram_init_complete(void)
-{
-       unsigned long val;
-       int wait = 0;
-
-       /* --------------------------------------------------------------+
-        * Wait for 'DRAM initialization complete' bit in status register
-        * -------------------------------------------------------------*/
-       mtdcr(ddrcfga, DDR0_00);
-
-       while (wait != 0xffff) {
-               val = mfdcr(ddrcfgd);
-               if ((val & DDR0_00_INT_STATUS_BIT6) == DDR0_00_INT_STATUS_BIT6)
-                       /* 'DRAM initialization complete' bit */
-                       return 0;
-               else
-                       wait++;
-       }
-
-       debug("DRAM initialization complete bit in status register did not rise\n");
-
-       return -1;
-}
-
-#define NUM_TRIES 64
-#define NUM_READS 10
-
 /*-----------------------------------------------------------------------------+
- * denali_core_search_data_eye.
- +----------------------------------------------------------------------------*/
-void denali_core_search_data_eye(unsigned long memory_size)
-{
-       int k, j;
-       u32 val;
-       u32 wr_dqs_shift, dqs_out_shift, dll_dqs_delay_X;
-       u32 max_passing_cases = 0, wr_dqs_shift_with_max_passing_cases = 0;
-       u32 passing_cases = 0, dll_dqs_delay_X_sw_val = 0;
-       u32 dll_dqs_delay_X_start_window = 0, dll_dqs_delay_X_end_window = 0;
-       volatile u32 *ram_pointer;
-       u32 test[NUM_TRIES] = {
-               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
-               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
-               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
-               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
-               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
-               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
-               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
-               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
-               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
-               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
-               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
-               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
-               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
-               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
-               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55,
-               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55 };
-
-       ram_pointer = (volatile u32 *)(CFG_SDRAM_BASE);
-
-       for (wr_dqs_shift = 64; wr_dqs_shift < 96; wr_dqs_shift++) {
-               /*for (wr_dqs_shift=1; wr_dqs_shift<96; wr_dqs_shift++) {*/
-
-               /* -----------------------------------------------------------+
-                * De-assert 'start' parameter.
-                * ----------------------------------------------------------*/
-               mtdcr(ddrcfga, DDR0_02);
-               val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-               mtdcr(ddrcfgd, val);
-
-               /* -----------------------------------------------------------+
-                * Set 'wr_dqs_shift'
-                * ----------------------------------------------------------*/
-               mtdcr(ddrcfga, DDR0_09);
-               val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK)
-                       | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
-               mtdcr(ddrcfgd, val);
-
-               /* -----------------------------------------------------------+
-                * Set 'dqs_out_shift' = wr_dqs_shift + 32
-                * ----------------------------------------------------------*/
-               dqs_out_shift = wr_dqs_shift + 32;
-               mtdcr(ddrcfga, DDR0_22);
-               val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK)
-                       | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
-               mtdcr(ddrcfgd, val);
-
-               passing_cases = 0;
-
-               for (dll_dqs_delay_X = 1; dll_dqs_delay_X < 64; dll_dqs_delay_X++) {
-                       /*for (dll_dqs_delay_X=1; dll_dqs_delay_X<128; dll_dqs_delay_X++) {*/
-                       /* -----------------------------------------------------------+
-                        * Set 'dll_dqs_delay_X'.
-                        * ----------------------------------------------------------*/
-                       /* dll_dqs_delay_0 */
-                       mtdcr(ddrcfga, DDR0_17);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
-                               | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-                       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
-                       mtdcr(ddrcfga, DDR0_18);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
-                               | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-                       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
-                       mtdcr(ddrcfga, DDR0_19);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
-                               | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-
-                       ppcMsync();
-                       ppcMbar();
-
-                       /* -----------------------------------------------------------+
-                        * Assert 'start' parameter.
-                        * ----------------------------------------------------------*/
-                       mtdcr(ddrcfga, DDR0_02);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON;
-                       mtdcr(ddrcfgd, val);
-
-                       ppcMsync();
-                       ppcMbar();
-
-                       /* -----------------------------------------------------------+
-                        * Wait for the DCC master delay line to finish calibration
-                        * ----------------------------------------------------------*/
-                       if (wait_for_dlllock() != 0) {
-                               printf("dlllock did not occur !!!\n");
-                               printf("denali_core_search_data_eye!!!\n");
-                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n",
-                                      wr_dqs_shift, dll_dqs_delay_X);
-                               hang();
-                       }
-                       ppcMsync();
-                       ppcMbar();
-
-                       if (wait_for_dram_init_complete() != 0) {
-                               printf("dram init complete did not occur !!!\n");
-                               printf("denali_core_search_data_eye!!!\n");
-                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n",
-                                      wr_dqs_shift, dll_dqs_delay_X);
-                               hang();
-                       }
-                       udelay(100);  /* wait 100us to ensure init is really completed !!! */
-
-                       /* write values */
-                       for (j=0; j<NUM_TRIES; j++) {
-                               ram_pointer[j] = test[j];
-
-                               /* clear any cache at ram location */
-                               __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
-                       }
-
-                       /* read values back */
-                       for (j=0; j<NUM_TRIES; j++) {
-                               for (k=0; k<NUM_READS; k++) {
-                                       /* clear any cache at ram location */
-                                       __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
-
-                                       if (ram_pointer[j] != test[j])
-                                               break;
-                               }
-
-                               /* read error */
-                               if (k != NUM_READS)
-                                       break;
-                       }
-
-                       /* See if the dll_dqs_delay_X value passed.*/
-                       if (j < NUM_TRIES) {
-                               /* Failed */
-                               passing_cases = 0;
-                               /* break; */
-                       } else {
-                               /* Passed */
-                               if (passing_cases == 0)
-                                       dll_dqs_delay_X_sw_val = dll_dqs_delay_X;
-                               passing_cases++;
-                               if (passing_cases >= max_passing_cases) {
-                                       max_passing_cases = passing_cases;
-                                       wr_dqs_shift_with_max_passing_cases = wr_dqs_shift;
-                                       dll_dqs_delay_X_start_window = dll_dqs_delay_X_sw_val;
-                                       dll_dqs_delay_X_end_window = dll_dqs_delay_X;
-                               }
-                       }
-
-                       /* -----------------------------------------------------------+
-                        * De-assert 'start' parameter.
-                        * ----------------------------------------------------------*/
-                       mtdcr(ddrcfga, DDR0_02);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-                       mtdcr(ddrcfgd, val);
-
-               } /* for (dll_dqs_delay_X=0; dll_dqs_delay_X<128; dll_dqs_delay_X++) */
-
-       } /* for (wr_dqs_shift=0; wr_dqs_shift<96; wr_dqs_shift++) */
-
-       /* -----------------------------------------------------------+
-        * Largest passing window is now detected.
-        * ----------------------------------------------------------*/
-
-       /* Compute dll_dqs_delay_X value */
-       dll_dqs_delay_X = (dll_dqs_delay_X_end_window + dll_dqs_delay_X_start_window) / 2;
-       wr_dqs_shift = wr_dqs_shift_with_max_passing_cases;
-
-       debug("DQS calibration - Window detected:\n");
-       debug("max_passing_cases = %d\n", max_passing_cases);
-       debug("wr_dqs_shift      = %d\n", wr_dqs_shift);
-       debug("dll_dqs_delay_X   = %d\n", dll_dqs_delay_X);
-       debug("dll_dqs_delay_X window = %d - %d\n",
-              dll_dqs_delay_X_start_window, dll_dqs_delay_X_end_window);
-
-       /* -----------------------------------------------------------+
-        * De-assert 'start' parameter.
-        * ----------------------------------------------------------*/
-       mtdcr(ddrcfga, DDR0_02);
-       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-       mtdcr(ddrcfgd, val);
-
-       /* -----------------------------------------------------------+
-        * Set 'wr_dqs_shift'
-        * ----------------------------------------------------------*/
-       mtdcr(ddrcfga, DDR0_09);
-       val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK)
-               | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_09=0x%08lx\n", val);
-
-       /* -----------------------------------------------------------+
-        * Set 'dqs_out_shift' = wr_dqs_shift + 32
-        * ----------------------------------------------------------*/
-       dqs_out_shift = wr_dqs_shift + 32;
-       mtdcr(ddrcfga, DDR0_22);
-       val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK)
-               | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_22=0x%08lx\n", val);
-
-       /* -----------------------------------------------------------+
-        * Set 'dll_dqs_delay_X'.
-        * ----------------------------------------------------------*/
-       /* dll_dqs_delay_0 */
-       mtdcr(ddrcfga, DDR0_17);
-       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
-               | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_17=0x%08lx\n", val);
-
-       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
-       mtdcr(ddrcfga, DDR0_18);
-       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
-               | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_18=0x%08lx\n", val);
-
-       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
-       mtdcr(ddrcfga, DDR0_19);
-       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
-               | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_19=0x%08lx\n", val);
-
-       /* -----------------------------------------------------------+
-        * Assert 'start' parameter.
-        * ----------------------------------------------------------*/
-       mtdcr(ddrcfga, DDR0_02);
-       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON;
-       mtdcr(ddrcfgd, val);
-
-       ppcMsync();
-       ppcMbar();
-
-       /* -----------------------------------------------------------+
-        * Wait for the DCC master delay line to finish calibration
-        * ----------------------------------------------------------*/
-       if (wait_for_dlllock() != 0) {
-               printf("dlllock did not occur !!!\n");
-               hang();
-       }
-       ppcMsync();
-       ppcMbar();
-
-       if (wait_for_dram_init_complete() != 0) {
-               printf("dram init complete did not occur !!!\n");
-               hang();
-       }
-       udelay(100);  /* wait 100us to ensure init is really completed !!! */
-}
-#endif /* CONFIG_DDR_DATA_EYE */
+ * Prototypes
+ *-----------------------------------------------------------------------------*/
+extern int denali_wait_for_dlllock(void);
+extern void denali_core_search_data_eye(void);
 
 #if defined(CONFIG_NAND_SPL)
 /* Using cpu/ppc4xx/speed.c to calculate the bus frequency is too big
@@ -428,15 +96,22 @@ long int initdram (int board_type)
        mtsdram(DDR0_44, 0x00000003);
        mtsdram(DDR0_02, 0x00000001);
 
-       wait_for_dlllock();
+       denali_wait_for_dlllock();
 #endif /* #ifndef CONFIG_NAND_U_BOOT */
 
 #ifdef CONFIG_DDR_DATA_EYE
        /* -----------------------------------------------------------+
         * Perform data eye search if requested.
         * ----------------------------------------------------------*/
-       denali_core_search_data_eye(CFG_MBYTES_SDRAM << 20);
+       denali_core_search_data_eye();
 #endif
 
+       /*
+        * Clear possible errors resulting from data-eye-search.
+        * If not done, then we could get an interrupt later on when
+        * exceptions are enabled.
+        */
+       set_mcsr(get_mcsr());
+
        return (CFG_MBYTES_SDRAM << 20);
 }
diff --git a/board/amcc/sequoia/sdram.h b/board/amcc/sequoia/sdram.h
deleted file mode 100644 (file)
index 7f847aa..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * (C) Copyright 2006
- * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
- * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
- * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com
- * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
- * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * 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 _SPD_SDRAM_DENALI_H_
-#define _SPD_SDRAM_DENALI_H_
-
-#define ppcMsync       sync
-#define ppcMbar                eieio
-
-/* General definitions */
-#define MAX_SPD_BYTE        128         /* highest SPD byte # to read */
-#define DENALI_REG_NUMBER   45          /* 45 Regs in PPC440EPx Denali Core */
-#define SUPPORTED_DIMMS_NB  7           /* Number of supported DIMM modules types */
-#define SDRAM_NONE          0           /* No DIMM detected in Slot */
-#define MAXRANKS            2           /* 2 ranks maximum */
-
-/* Supported PLB Frequencies */
-#define PLB_FREQ_133MHZ     133333333
-#define PLB_FREQ_152MHZ     152000000
-#define PLB_FREQ_160MHZ     160000000
-#define PLB_FREQ_166MHZ     166666666
-
-/* Denali Core Registers */
-#define SDRAM_DCR_BASE 0x10
-
-#define DDR_DCR_BASE 0x10
-#define ddrcfga  (DDR_DCR_BASE+0x0)   /* DDR configuration address reg */
-#define ddrcfgd  (DDR_DCR_BASE+0x1)   /* DDR configuration data reg    */
-
-/*-----------------------------------------------------------------------------+
-  | Values for ddrcfga register - indirect addressing of these regs
-  +-----------------------------------------------------------------------------*/
-
-#define DDR0_00                         0x00
-#define DDR0_00_INT_ACK_MASK              0x7F000000 /* Write only */
-#define DDR0_00_INT_ACK_ALL               0x7F000000
-#define DDR0_00_INT_ACK_ENCODE(n)           ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_00_INT_ACK_DECODE(n)           ((((unsigned long)(n))>>24)&0x7F)
-/* Status */
-#define DDR0_00_INT_STATUS_MASK           0x00FF0000 /* Read only */
-/* Bit0. A single access outside the defined PHYSICAL memory space detected. */
-#define DDR0_00_INT_STATUS_BIT0           0x00010000
-/* Bit1. Multiple accesses outside the defined PHYSICAL memory space detected. */
-#define DDR0_00_INT_STATUS_BIT1           0x00020000
-/* Bit2. Single correctable ECC event detected */
-#define DDR0_00_INT_STATUS_BIT2           0x00040000
-/* Bit3. Multiple correctable ECC events detected. */
-#define DDR0_00_INT_STATUS_BIT3           0x00080000
-/* Bit4. Single uncorrectable ECC event detected. */
-#define DDR0_00_INT_STATUS_BIT4           0x00100000
-/* Bit5. Multiple uncorrectable ECC events detected. */
-#define DDR0_00_INT_STATUS_BIT5           0x00200000
-/* Bit6. DRAM initialization complete. */
-#define DDR0_00_INT_STATUS_BIT6           0x00400000
-/* Bit7. Logical OR of all lower bits. */
-#define DDR0_00_INT_STATUS_BIT7           0x00800000
-
-#define DDR0_00_INT_STATUS_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_00_INT_STATUS_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_00_DLL_INCREMENT_MASK        0x00007F00
-#define DDR0_00_DLL_INCREMENT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_00_DLL_INCREMENT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_00_DLL_START_POINT_MASK      0x0000007F
-#define DDR0_00_DLL_START_POINT_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_00_DLL_START_POINT_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-
-#define DDR0_01                         0x01
-#define DDR0_01_PLB0_DB_CS_LOWER_MASK     0x1F000000
-#define DDR0_01_PLB0_DB_CS_LOWER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_01_PLB0_DB_CS_LOWER_DECODE(n)  ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_01_PLB0_DB_CS_UPPER_MASK     0x001F0000
-#define DDR0_01_PLB0_DB_CS_UPPER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<16)
-#define DDR0_01_PLB0_DB_CS_UPPER_DECODE(n)  ((((unsigned long)(n))>>16)&0x1F)
-#define DDR0_01_OUT_OF_RANGE_TYPE_MASK    0x00000700 /* Read only */
-#define DDR0_01_OUT_OF_RANGE_TYPE_ENCODE(n)               ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_01_OUT_OF_RANGE_TYPE_DECODE(n)               ((((unsigned long)(n))>>8)&0x7)
-#define DDR0_01_INT_MASK_MASK             0x000000FF
-#define DDR0_01_INT_MASK_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_01_INT_MASK_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
-#define DDR0_01_INT_MASK_ALL_ON           0x000000FF
-#define DDR0_01_INT_MASK_ALL_OFF          0x00000000
-
-#define DDR0_02                         0x02
-#define DDR0_02_MAX_CS_REG_MASK           0x02000000 /* Read only */
-#define DDR0_02_MAX_CS_REG_ENCODE(n)        ((((unsigned long)(n))&0x2)<<24)
-#define DDR0_02_MAX_CS_REG_DECODE(n)        ((((unsigned long)(n))>>24)&0x2)
-#define DDR0_02_MAX_COL_REG_MASK          0x000F0000 /* Read only */
-#define DDR0_02_MAX_COL_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<16)
-#define DDR0_02_MAX_COL_REG_DECODE(n)       ((((unsigned long)(n))>>16)&0xF)
-#define DDR0_02_MAX_ROW_REG_MASK          0x00000F00 /* Read only */
-#define DDR0_02_MAX_ROW_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_02_MAX_ROW_REG_DECODE(n)       ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_02_START_MASK                0x00000001
-#define DDR0_02_START_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_02_START_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
-#define DDR0_02_START_OFF                 0x00000000
-#define DDR0_02_START_ON                  0x00000001
-
-#define DDR0_03                         0x03
-#define DDR0_03_BSTLEN_MASK               0x07000000
-#define DDR0_03_BSTLEN_ENCODE(n)            ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_03_BSTLEN_DECODE(n)            ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_03_CASLAT_MASK               0x00070000
-#define DDR0_03_CASLAT_ENCODE(n)            ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_03_CASLAT_DECODE(n)            ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_03_CASLAT_LIN_MASK           0x00000F00
-#define DDR0_03_CASLAT_LIN_ENCODE(n)        ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_03_CASLAT_LIN_DECODE(n)        ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_03_INITAREF_MASK             0x0000000F
-#define DDR0_03_INITAREF_ENCODE(n)          ((((unsigned long)(n))&0xF)<<0)
-#define DDR0_03_INITAREF_DECODE(n)          ((((unsigned long)(n))>>0)&0xF)
-
-#define DDR0_04                         0x04
-#define DDR0_04_TRC_MASK                  0x1F000000
-#define DDR0_04_TRC_ENCODE(n)               ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_04_TRC_DECODE(n)               ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_04_TRRD_MASK                 0x00070000
-#define DDR0_04_TRRD_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_04_TRRD_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_04_TRTP_MASK                 0x00000700
-#define DDR0_04_TRTP_ENCODE(n)              ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_04_TRTP_DECODE(n)              ((((unsigned long)(n))>>8)&0x7)
-
-#define DDR0_05                         0x05
-#define DDR0_05_TMRD_MASK                 0x1F000000
-#define DDR0_05_TMRD_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_05_TMRD_DECODE(n)              ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_05_TEMRS_MASK                0x00070000
-#define DDR0_05_TEMRS_ENCODE(n)             ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_05_TEMRS_DECODE(n)             ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_05_TRP_MASK                  0x00000F00
-#define DDR0_05_TRP_ENCODE(n)               ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_05_TRP_DECODE(n)               ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_05_TRAS_MIN_MASK             0x000000FF
-#define DDR0_05_TRAS_MIN_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_05_TRAS_MIN_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
-
-#define DDR0_06                         0x06
-#define DDR0_06_WRITEINTERP_MASK          0x01000000
-#define DDR0_06_WRITEINTERP_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_06_WRITEINTERP_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_06_TWTR_MASK                 0x00070000
-#define DDR0_06_TWTR_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_06_TWTR_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_06_TDLL_MASK                 0x0000FF00
-#define DDR0_06_TDLL_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_06_TDLL_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
-#define DDR0_06_TRFC_MASK                 0x0000007F
-#define DDR0_06_TRFC_ENCODE(n)              ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_06_TRFC_DECODE(n)              ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_07                         0x07
-#define DDR0_07_NO_CMD_INIT_MASK          0x01000000
-#define DDR0_07_NO_CMD_INIT_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_07_NO_CMD_INIT_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_07_TFAW_MASK                 0x001F0000
-#define DDR0_07_TFAW_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<16)
-#define DDR0_07_TFAW_DECODE(n)              ((((unsigned long)(n))>>16)&0x1F)
-#define DDR0_07_AUTO_REFRESH_MODE_MASK    0x00000100
-#define DDR0_07_AUTO_REFRESH_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_07_AUTO_REFRESH_MODE_DECODE(n) ((((unsigned long)(n))>>8)&0x1)
-#define DDR0_07_AREFRESH_MASK             0x00000001
-#define DDR0_07_AREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_07_AREFRESH_DECODE(n)          ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_08                         0x08
-#define DDR0_08_WRLAT_MASK                0x07000000
-#define DDR0_08_WRLAT_ENCODE(n)             ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_08_WRLAT_DECODE(n)             ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_08_TCPD_MASK                 0x00FF0000
-#define DDR0_08_TCPD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_08_TCPD_DECODE(n)              ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_08_DQS_N_EN_MASK             0x00000100
-#define DDR0_08_DQS_N_EN_ENCODE(n)          ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_08_DQS_N_EN_DECODE(n)          ((((unsigned long)(n))>>8)&0x1)
-#define DDR0_08_DDRII_SDRAM_MODE_MASK     0x00000001
-#define DDR0_08_DDRII_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_08_DDRII_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_09                         0x09
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_MASK  0x1F000000
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_DECODE(n) ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_09_RTT_0_MASK                0x00030000
-#define DDR0_09_RTT_0_ENCODE(n)             ((((unsigned long)(n))&0x3)<<16)
-#define DDR0_09_RTT_0_DECODE(n)             ((((unsigned long)(n))>>16)&0x3)
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_MASK  0x00007F00
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_09_WR_DQS_SHIFT_MASK         0x0000007F
-#define DDR0_09_WR_DQS_SHIFT_ENCODE(n)      ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_09_WR_DQS_SHIFT_DECODE(n)      ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_10                         0x0A
-#define DDR0_10_WRITE_MODEREG_MASK        0x00010000 /* Write only */
-#define DDR0_10_WRITE_MODEREG_ENCODE(n)     ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_10_WRITE_MODEREG_DECODE(n)     ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_10_CS_MAP_MASK               0x00000300
-#define DDR0_10_CS_MAP_NO_MEM             0x00000000
-#define DDR0_10_CS_MAP_RANK0_INSTALLED    0x00000100
-#define DDR0_10_CS_MAP_RANK1_INSTALLED    0x00000200
-#define DDR0_10_CS_MAP_ENCODE(n)            ((((unsigned long)(n))&0x3)<<8)
-#define DDR0_10_CS_MAP_DECODE(n)            ((((unsigned long)(n))>>8)&0x3)
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_MASK  0x0000001F
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<0)
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_DECODE(n) ((((unsigned long)(n))>>0)&0x1F)
-
-#define DDR0_11                         0x0B
-#define DDR0_11_SREFRESH_MASK             0x01000000
-#define DDR0_11_SREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_11_SREFRESH_DECODE(n)          ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_11_TXSNR_MASK                0x00FF0000
-#define DDR0_11_TXSNR_ENCODE(n)             ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_11_TXSNR_DECODE(n)             ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_11_TXSR_MASK                 0x0000FF00
-#define DDR0_11_TXSR_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_11_TXSR_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
-
-#define DDR0_12                         0x0C
-#define DDR0_12_TCKE_MASK                 0x0000007
-#define DDR0_12_TCKE_ENCODE(n)              ((((unsigned long)(n))&0x7)<<0)
-#define DDR0_12_TCKE_DECODE(n)              ((((unsigned long)(n))>>0)&0x7)
-
-#define DDR0_13                         0x0D
-
-#define DDR0_14                         0x0E
-#define DDR0_14_DLL_BYPASS_MODE_MASK      0x01000000
-#define DDR0_14_DLL_BYPASS_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_14_DLL_BYPASS_MODE_DECODE(n)   ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_14_REDUC_MASK                0x00010000
-#define DDR0_14_REDUC_64BITS              0x00000000
-#define DDR0_14_REDUC_32BITS              0x00010000
-#define DDR0_14_REDUC_ENCODE(n)             ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_14_REDUC_DECODE(n)             ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_14_REG_DIMM_ENABLE_MASK      0x00000100
-#define DDR0_14_REG_DIMM_ENABLE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_14_REG_DIMM_ENABLE_DECODE(n)   ((((unsigned long)(n))>>8)&0x1)
-
-#define DDR0_15                         0x0F
-
-#define DDR0_16                         0x10
-
-#define DDR0_17                         0x11
-#define DDR0_17_DLL_DQS_DELAY_0_MASK      0x7F000000
-#define DDR0_17_DLL_DQS_DELAY_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_17_DLL_DQS_DELAY_0_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_17_DLLLOCKREG_MASK           0x00010000 /* Read only */
-#define DDR0_17_DLLLOCKREG_LOCKED         0x00010000
-#define DDR0_17_DLLLOCKREG_UNLOCKED       0x00000000
-#define DDR0_17_DLLLOCKREG_ENCODE(n)        ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_17_DLLLOCKREG_DECODE(n)        ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_17_DLL_LOCK_MASK             0x00007F00 /* Read only */
-#define DDR0_17_DLL_LOCK_ENCODE(n)          ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_17_DLL_LOCK_DECODE(n)          ((((unsigned long)(n))>>8)&0x7F)
-
-#define DDR0_18                         0x12
-#define DDR0_18_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
-#define DDR0_18_DLL_DQS_DELAY_4_MASK      0x7F000000
-#define DDR0_18_DLL_DQS_DELAY_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_18_DLL_DQS_DELAY_4_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_3_MASK      0x007F0000
-#define DDR0_18_DLL_DQS_DELAY_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_18_DLL_DQS_DELAY_3_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_2_MASK      0x00007F00
-#define DDR0_18_DLL_DQS_DELAY_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_18_DLL_DQS_DELAY_2_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_1_MASK      0x0000007F
-#define DDR0_18_DLL_DQS_DELAY_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_18_DLL_DQS_DELAY_1_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_19                         0x13
-#define DDR0_19_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
-#define DDR0_19_DLL_DQS_DELAY_8_MASK      0x7F000000
-#define DDR0_19_DLL_DQS_DELAY_8_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_19_DLL_DQS_DELAY_8_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_7_MASK      0x007F0000
-#define DDR0_19_DLL_DQS_DELAY_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_19_DLL_DQS_DELAY_7_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_6_MASK      0x00007F00
-#define DDR0_19_DLL_DQS_DELAY_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_19_DLL_DQS_DELAY_6_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_5_MASK      0x0000007F
-#define DDR0_19_DLL_DQS_DELAY_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_19_DLL_DQS_DELAY_5_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_20                         0x14
-#define DDR0_20_DLL_DQS_BYPASS_3_MASK      0x7F000000
-#define DDR0_20_DLL_DQS_BYPASS_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_20_DLL_DQS_BYPASS_3_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_2_MASK      0x007F0000
-#define DDR0_20_DLL_DQS_BYPASS_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_20_DLL_DQS_BYPASS_2_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_1_MASK      0x00007F00
-#define DDR0_20_DLL_DQS_BYPASS_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_20_DLL_DQS_BYPASS_1_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_0_MASK      0x0000007F
-#define DDR0_20_DLL_DQS_BYPASS_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_20_DLL_DQS_BYPASS_0_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_21                         0x15
-#define DDR0_21_DLL_DQS_BYPASS_7_MASK      0x7F000000
-#define DDR0_21_DLL_DQS_BYPASS_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_21_DLL_DQS_BYPASS_7_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_6_MASK      0x007F0000
-#define DDR0_21_DLL_DQS_BYPASS_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_21_DLL_DQS_BYPASS_6_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_5_MASK      0x00007F00
-#define DDR0_21_DLL_DQS_BYPASS_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_21_DLL_DQS_BYPASS_5_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_4_MASK      0x0000007F
-#define DDR0_21_DLL_DQS_BYPASS_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_21_DLL_DQS_BYPASS_4_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_22                         0x16
-/* ECC */
-#define DDR0_22_CTRL_RAW_MASK             0x03000000
-#define DDR0_22_CTRL_RAW_ECC_DISABLE      0x00000000 /* ECC not being used */
-#define DDR0_22_CTRL_RAW_ECC_CHECK_ONLY   0x01000000 /* ECC checking is on, but no attempts to correct*/
-#define DDR0_22_CTRL_RAW_NO_ECC_RAM       0x02000000 /* No ECC RAM storage available */
-#define DDR0_22_CTRL_RAW_ECC_ENABLE       0x03000000 /* ECC checking and correcting on */
-#define DDR0_22_CTRL_RAW_ENCODE(n)          ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_22_CTRL_RAW_DECODE(n)          ((((unsigned long)(n))>>24)&0x3)
-
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_MASK 0x007F0000
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_22_DQS_OUT_SHIFT_MASK        0x00007F00
-#define DDR0_22_DQS_OUT_SHIFT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_22_DQS_OUT_SHIFT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_22_DLL_DQS_BYPASS_8_MASK     0x0000007F
-#define DDR0_22_DLL_DQS_BYPASS_8_ENCODE(n)  ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_22_DLL_DQS_BYPASS_8_DECODE(n)  ((((unsigned long)(n))>>0)&0x7F)
-
-
-#define DDR0_23                         0x17
-#define DDR0_23_ODT_RD_MAP_CS0_MASK       0x03000000
-#define DDR0_23_ODT_RD_MAP_CS0_ENCODE(n)   ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_23_ODT_RD_MAP_CS0_DECODE(n)   ((((unsigned long)(n))>>24)&0x3)
-#define DDR0_23_ECC_C_SYND_MASK           0x00FF0000 /* Read only */
-#define DDR0_23_ECC_C_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_23_ECC_C_SYND_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_23_ECC_U_SYND_MASK           0x0000FF00 /* Read only */
-#define DDR0_23_ECC_U_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_23_ECC_U_SYND_DECODE(n)        ((((unsigned long)(n))>>8)&0xFF)
-#define DDR0_23_FWC_MASK                  0x00000001 /* Write only */
-#define DDR0_23_FWC_ENCODE(n)               ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_23_FWC_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_24                         0x18
-#define DDR0_24_RTT_PAD_TERMINATION_MASK  0x03000000
-#define DDR0_24_RTT_PAD_TERMINATION_ENCODE(n) ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_24_RTT_PAD_TERMINATION_DECODE(n) ((((unsigned long)(n))>>24)&0x3)
-#define DDR0_24_ODT_WR_MAP_CS1_MASK       0x00030000
-#define DDR0_24_ODT_WR_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<16)
-#define DDR0_24_ODT_WR_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>16)&0x3)
-#define DDR0_24_ODT_RD_MAP_CS1_MASK       0x00000300
-#define DDR0_24_ODT_RD_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<8)
-#define DDR0_24_ODT_RD_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>8)&0x3)
-#define DDR0_24_ODT_WR_MAP_CS0_MASK       0x00000003
-#define DDR0_24_ODT_WR_MAP_CS0_ENCODE(n)    ((((unsigned long)(n))&0x3)<<0)
-#define DDR0_24_ODT_WR_MAP_CS0_DECODE(n)    ((((unsigned long)(n))>>0)&0x3)
-
-#define DDR0_25                         0x19
-#define DDR0_25_VERSION_MASK              0xFFFF0000 /* Read only */
-#define DDR0_25_VERSION_ENCODE(n)           ((((unsigned long)(n))&0xFFFF)<<16)
-#define DDR0_25_VERSION_DECODE(n)           ((((unsigned long)(n))>>16)&0xFFFF)
-#define DDR0_25_OUT_OF_RANGE_LENGTH_MASK  0x000003FF /* Read only */
-#define DDR0_25_OUT_OF_RANGE_LENGTH_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0)
-#define DDR0_25_OUT_OF_RANGE_LENGTH_DECODE(n) ((((unsigned long)(n))>>0)&0x3FF)
-
-#define DDR0_26                         0x1A
-#define DDR0_26_TRAS_MAX_MASK             0xFFFF0000
-#define DDR0_26_TRAS_MAX_ENCODE(n)          ((((unsigned long)(n))&0xFFFF)<<16)
-#define DDR0_26_TRAS_MAX_DECODE(n)          ((((unsigned long)(n))>>16)&0xFFFF)
-#define DDR0_26_TREF_MASK                 0x00003FFF
-#define DDR0_26_TREF_ENCODE(n)              ((((unsigned long)(n))&0x3FF)<<0)
-#define DDR0_26_TREF_DECODE(n)              ((((unsigned long)(n))>>0)&0x3FF)
-
-#define DDR0_27                         0x1B
-#define DDR0_27_EMRS_DATA_MASK            0x3FFF0000
-#define DDR0_27_EMRS_DATA_ENCODE(n)         ((((unsigned long)(n))&0x3FFF)<<16)
-#define DDR0_27_EMRS_DATA_DECODE(n)         ((((unsigned long)(n))>>16)&0x3FFF)
-#define DDR0_27_TINIT_MASK                0x0000FFFF
-#define DDR0_27_TINIT_ENCODE(n)             ((((unsigned long)(n))&0xFFFF)<<0)
-#define DDR0_27_TINIT_DECODE(n)             ((((unsigned long)(n))>>0)&0xFFFF)
-
-#define DDR0_28                         0x1C
-#define DDR0_28_EMRS3_DATA_MASK           0x3FFF0000
-#define DDR0_28_EMRS3_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<16)
-#define DDR0_28_EMRS3_DATA_DECODE(n)        ((((unsigned long)(n))>>16)&0x3FFF)
-#define DDR0_28_EMRS2_DATA_MASK           0x00003FFF
-#define DDR0_28_EMRS2_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<0)
-#define DDR0_28_EMRS2_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0x3FFF)
-
-#define DDR0_29                         0x1D
-
-#define DDR0_30                         0x1E
-
-#define DDR0_31                         0x1F
-#define DDR0_31_XOR_CHECK_BITS_MASK       0x0000FFFF
-#define DDR0_31_XOR_CHECK_BITS_ENCODE(n)    ((((unsigned long)(n))&0xFFFF)<<0)
-#define DDR0_31_XOR_CHECK_BITS_DECODE(n)    ((((unsigned long)(n))>>0)&0xFFFF)
-
-#define DDR0_32                         0x20
-#define DDR0_32_OUT_OF_RANGE_ADDR_MASK    0xFFFFFFFF /* Read only */
-#define DDR0_32_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_32_OUT_OF_RANGE_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_33                         0x21
-#define DDR0_33_OUT_OF_RANGE_ADDR_MASK    0x00000001 /* Read only */
-#define DDR0_33_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_33_OUT_OF_RANGE_ADDR_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_34                         0x22
-#define DDR0_34_ECC_U_ADDR_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_34_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_34_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_35                         0x23
-#define DDR0_35_ECC_U_ADDR_MASK           0x00000001 /* Read only */
-#define DDR0_35_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_35_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_36                         0x24
-#define DDR0_36_ECC_U_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_36_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_36_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_37                         0x25
-#define DDR0_37_ECC_U_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_37_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_37_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_38                         0x26
-#define DDR0_38_ECC_C_ADDR_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_38_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_38_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_39                         0x27
-#define DDR0_39_ECC_C_ADDR_MASK           0x00000001 /* Read only */
-#define DDR0_39_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_39_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_40                         0x28
-#define DDR0_40_ECC_C_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_40_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_40_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_41                         0x29
-#define DDR0_41_ECC_C_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_41_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_41_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_42                         0x2A
-#define DDR0_42_ADDR_PINS_MASK            0x07000000
-#define DDR0_42_ADDR_PINS_ENCODE(n)         ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_42_ADDR_PINS_DECODE(n)         ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_42_CASLAT_LIN_GATE_MASK      0x0000000F
-#define DDR0_42_CASLAT_LIN_GATE_ENCODE(n)   ((((unsigned long)(n))&0xF)<<0)
-#define DDR0_42_CASLAT_LIN_GATE_DECODE(n)   ((((unsigned long)(n))>>0)&0xF)
-
-#define DDR0_43                         0x2B
-#define DDR0_43_TWR_MASK                  0x07000000
-#define DDR0_43_TWR_ENCODE(n)               ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_43_TWR_DECODE(n)               ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_43_APREBIT_MASK              0x000F0000
-#define DDR0_43_APREBIT_ENCODE(n)           ((((unsigned long)(n))&0xF)<<16)
-#define DDR0_43_APREBIT_DECODE(n)           ((((unsigned long)(n))>>16)&0xF)
-#define DDR0_43_COLUMN_SIZE_MASK          0x00000700
-#define DDR0_43_COLUMN_SIZE_ENCODE(n)       ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_43_COLUMN_SIZE_DECODE(n)       ((((unsigned long)(n))>>8)&0x7)
-#define DDR0_43_EIGHT_BANK_MODE_MASK      0x00000001
-#define DDR0_43_EIGHT_BANK_MODE_8_BANKS     0x00000001
-#define DDR0_43_EIGHT_BANK_MODE_4_BANKS     0x00000000
-#define DDR0_43_EIGHT_BANK_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_43_EIGHT_BANK_MODE_DECODE(n)   ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_44                         0x2C
-#define DDR0_44_TRCD_MASK                 0x000000FF
-#define DDR0_44_TRCD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_44_TRCD_DECODE(n)              ((((unsigned long)(n))>>0)&0xFF)
-
-#endif /* _SPD_SDRAM_DENALI_H_ */
index 4e47ab395b4ff22de9ec1589fac93b574ed669c8..e46efef10a725b5e81ad60dd684090bff59a1fb8 100644 (file)
  */
 
 #include <common.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+#include <ppc440.h>
+#include <asm/gpio.h>
 #include <asm/processor.h>
 #include <asm/io.h>
-#include <ppc440.h>
+#include <asm/ppc4xx-intvec.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -42,36 +46,6 @@ int board_early_init_f(void)
        mtdcr(ebccfga, xbcfg);
        mtdcr(ebccfgd, 0xb8400000);
 
-       /*--------------------------------------------------------------------
-        * Setup the GPIO pins
-        *-------------------------------------------------------------------*/
-       /* test-only: take GPIO init from pcs440ep ???? in config file */
-       out32(GPIO0_OR, 0x00000000);
-       out32(GPIO0_TCR, 0x0000000f);
-       out32(GPIO0_OSRL, 0x50015400);
-       out32(GPIO0_OSRH, 0x550050aa);
-       out32(GPIO0_TSRL, 0x50015400);
-       out32(GPIO0_TSRH, 0x55005000);
-       out32(GPIO0_ISR1L, 0x50000000);
-       out32(GPIO0_ISR1H, 0x00000000);
-       out32(GPIO0_ISR2L, 0x00000000);
-       out32(GPIO0_ISR2H, 0x00000100);
-       out32(GPIO0_ISR3L, 0x00000000);
-       out32(GPIO0_ISR3H, 0x00000000);
-
-       out32(GPIO1_OR, 0x00000000);
-       out32(GPIO1_TCR, 0xc2000000);
-       out32(GPIO1_OSRL, 0x5c280000);
-       out32(GPIO1_OSRH, 0x00000000);
-       out32(GPIO1_TSRL, 0x0c000000);
-       out32(GPIO1_TSRH, 0x00000000);
-       out32(GPIO1_ISR1L, 0x00005550);
-       out32(GPIO1_ISR1H, 0x00000000);
-       out32(GPIO1_ISR2L, 0x00050000);
-       out32(GPIO1_ISR2H, 0x00000000);
-       out32(GPIO1_ISR3L, 0x01400000);
-       out32(GPIO1_ISR3H, 0x00000000);
-
        /*--------------------------------------------------------------------
         * Setup the interrupt controller polarities, triggers, etc.
         *-------------------------------------------------------------------*/
@@ -100,16 +74,16 @@ int board_early_init_f(void)
        mtdcr(uic2sr, 0xffffffff);      /* clear all */
 
        /* 50MHz tmrclk */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x04) = 0x00;
+       out_8((u8 *) CFG_BCSR_BASE + 0x04, 0x00);
 
        /* clear write protects */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x00;
+       out_8((u8 *) CFG_BCSR_BASE + 0x07, 0x00);
 
        /* enable Ethernet */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x08) = 0x00;
+       out_8((u8 *) CFG_BCSR_BASE + 0x08, 0x00);
 
        /* enable USB device */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x09) = 0x20;
+       out_8((u8 *) CFG_BCSR_BASE + 0x09, 0x20);
 
        /* select Ethernet pins */
        mfsdr(SDR0_PFC1, sdr0_pfc1);
@@ -414,6 +388,16 @@ int testdram(void)
 }
 #endif
 
+#if defined(CONFIG_PCI) && defined(CONFIG_PCI_PNP)
+/*
+ * Assign interrupts to PCI devices.
+ */
+void sequoia_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
+{
+       pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIR2);
+}
+#endif
+
 /*************************************************************************
  *  pci_pre_init
  *
@@ -465,6 +449,9 @@ int pci_pre_init(struct pci_controller *hose)
        addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
        mtdcr(plb1_acr, addr);
 
+#ifdef CONFIG_PCI_PNP
+       hose->fixup_irq = sequoia_pci_fixup_irq;
+#endif
        return 1;
 }
 #endif /* defined(CONFIG_PCI) */
@@ -583,3 +570,24 @@ int post_hotkeys_pressed(void)
        return 0;       /* No hotkeys supported */
 }
 #endif /* CONFIG_POST */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 val[4];
+       int rc;
+
+       ft_cpu_setup(blob, bd);
+
+       /* Fixup NOR mapping */
+       val[0] = 0;                             /* chip select number */
+       val[1] = 0;                             /* always 0 */
+       val[2] = gd->bd->bi_flashstart;
+       val[3] = gd->bd->bi_flashsize;
+       rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges",
+                                 val, sizeof(val), 1);
+       if (rc)
+               printf("Unable to update property NOR mapping, err=%s\n",
+                      fdt_strerror(rc));
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
index cf2e2b5581230fc2bbe4ae8bf0ef4a183503d712..e0b51138fc1b1046e63fb3e574c74ef17cec4431 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a423f982858327f4056d253674057020abbd6cf9..e1407373739ef1cffd3c58634cebc1751b83421c 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index be030923b8eb816dd391ae11cece84f0ff143a4f..7dd0bb303474b897f87c3ff95cf695cddac443f8 100644 (file)
@@ -62,19 +62,6 @@ SECTIONS
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
     cpu/ppc4xx/start.o (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -138,7 +125,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 57b9d1c421820256efdf85626f2e38bc766115d4..040b8004dac1a179b01171c52043903c44622829 100644 (file)
@@ -33,25 +33,25 @@ void show_reset_reg(void)
 
        /* read clock regsiter */
        printf("===== Display reset and initialize register Start =========\n");
-       mfclk(clk_pllc,reg);
+       mfcpr(clk_pllc,reg);
        printf("cpr_pllc   = %#010x\n",reg);
 
-       mfclk(clk_plld,reg);
+       mfcpr(clk_plld,reg);
        printf("cpr_plld   = %#010x\n",reg);
 
-       mfclk(clk_primad,reg);
+       mfcpr(clk_primad,reg);
        printf("cpr_primad = %#010x\n",reg);
 
-       mfclk(clk_primbd,reg);
+       mfcpr(clk_primbd,reg);
        printf("cpr_primbd = %#010x\n",reg);
 
-       mfclk(clk_opbd,reg);
+       mfcpr(clk_opbd,reg);
        printf("cpr_opbd   = %#010x\n",reg);
 
-       mfclk(clk_perd,reg);
+       mfcpr(clk_perd,reg);
        printf("cpr_perd   = %#010x\n",reg);
 
-       mfclk(clk_mald,reg);
+       mfcpr(clk_mald,reg);
        printf("cpr_mald   = %#010x\n",reg);
 
        /* read sdr register */
index 664716ed441792247f3ece502933864f52c6e6d1..af4223f7ebfde817442e82a4e83cf42f29be2816 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/amcc/taishan/init.o  (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1dcbab5a2442abf22b7b44318447c52ee855322d..c9a8af89440dd13df9c26c09b0aff885716bb79d 100644 (file)
@@ -62,19 +62,6 @@ SECTIONS
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
     cpu/ppc4xx/start.o (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -139,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a9a7b0af6abc32472295f56b3a2d1acf59afbcee..855d952ca1fe48cfb50eb835eb626208e58fd97d 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/amcc/yosemite/init.o (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9df4f925c269125b84a01abc9b88115e6252ac42..e3e5ce3cc926a9f65ede0d0c285ab80d6494f9ec 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o         (.text)
     board/amcc/yucca/init.o    (.text)
-    cpu/ppc4xx/kgdb.o          (.text)
-    cpu/ppc4xx/traps.o         (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o                (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o         (.text)
-    common/dlmalloc.o          (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o          (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d7cc384ba0b8dde54135a40ac842c85fbb50f8bd..52486cc4c93164b4cb749af67fe087ccff3d3a4a 100644 (file)
 
 #include <common.h>
 #include <ppc4xx.h>
-#include <asm/processor.h>
 #include <i2c.h>
-#include <asm-ppc/io.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/4xx_pcie.h>
 
 #include "yucca.h"
-#include "../cpu/ppc4xx/440spe_pcie.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#undef PCIE_ENDPOINT
-/* #define PCIE_ENDPOINT 1 */
-
 void fpga_init (void);
 
-void get_sys_info(PPC440_SYS_INFO *board_cfg );
-int compare_to_true(char *str );
-char *remove_l_w_space(char *in_str );
-char *remove_t_w_space(char *in_str );
-int get_console_port(void);
-
-int ppc440spe_init_pcie_rootport(int port);
-void ppc440spe_setup_pcie(struct pci_controller *hose, int port);
-
 #define DEBUG_ENV
 #ifdef DEBUG_ENV
 #define DEBUGF(fmt,args...) printf(fmt ,##args)
@@ -541,10 +529,10 @@ int board_early_init_f (void)
        mtdcr (uic0sr, 0x00000000);     /* clear all interrupts */
        mtdcr (uic0sr, 0xffffffff);     /* clear all interrupts */
 
-       /* SDR0_MFR should be part of Ethernet init */
-       mfsdr (sdr_mfr, mfr);
-       mfr &= ~SDR0_MFR_ECS_MASK;
-       /*mtsdr(sdr_mfr, mfr);*/
+       mfsdr(sdr_mfr, mfr);
+       mfr |= SDR0_MFR_FIXD;           /* Workaround for PCI/DMA */
+       mtsdr(sdr_mfr, mfr);
+
        fpga_init();
 
        return 0;
@@ -850,6 +838,7 @@ void pcie_setup_hoses(int busno)
 {
        struct pci_controller *hose;
        int i, bus;
+       int ret = 0;
        char *env;
        unsigned int delay;
 
@@ -863,14 +852,16 @@ void pcie_setup_hoses(int busno)
                if (!yucca_pcie_card_present(i))
                        continue;
 
-#ifdef PCIE_ENDPOINT
-               yucca_setup_pcie_fpga_endpoint(i);
-               if (ppc440spe_init_pcie_endport(i)) {
-#else
-               yucca_setup_pcie_fpga_rootpoint(i);
-               if (ppc440spe_init_pcie_rootport(i)) {
-#endif
-                       printf("PCIE%d: initialization failed\n", i);
+               if (is_end_point(i)) {
+                       yucca_setup_pcie_fpga_endpoint(i);
+                       ret = ppc4xx_init_pcie_endport(i);
+               } else {
+                       yucca_setup_pcie_fpga_rootpoint(i);
+                       ret = ppc4xx_init_pcie_rootport(i);
+               }
+               if (ret) {
+                       printf("PCIE%d: initialization as %s failed\n", i,
+                              is_end_point(i) ? "endpoint" : "root-complex");
                        continue;
                }
 
@@ -884,35 +875,33 @@ void pcie_setup_hoses(int busno)
                        CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
                        CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
                        CFG_PCIE_MEMSIZE,
-                       PCI_REGION_MEM
-                       );
+                       PCI_REGION_MEM);
                hose->region_count = 1;
                pci_register_hose(hose);
 
-#ifdef PCIE_ENDPOINT
-               ppc440spe_setup_pcie_endpoint(hose, i);
-               /*
-                * Reson for no scanning is endpoint can not generate
-                * upstream configuration accesses.
-                */
-#else
-               ppc440spe_setup_pcie_rootpoint(hose, i);
-
-               env = getenv ("pciscandelay");
-               if (env != NULL) {
-                       delay = simple_strtoul (env, NULL, 10);
-                       if (delay > 5)
-                               printf ("Warning, expect noticable delay before PCIe"
-                                       "scan due to 'pciscandelay' value!\n");
-                       mdelay (delay * 1000);
-               }
+               if (is_end_point(i)) {
+                       ppc4xx_setup_pcie_endpoint(hose, i);
+                       /*
+                        * Reson for no scanning is endpoint can not generate
+                        * upstream configuration accesses.
+                        */
+               } else {
+                       ppc4xx_setup_pcie_rootpoint(hose, i);
+                       env = getenv("pciscandelay");
+                       if (env != NULL) {
+                               delay = simple_strtoul(env, NULL, 10);
+                               if (delay > 5)
+                                       printf("Warning, expect noticable delay before "
+                                              "PCIe scan due to 'pciscandelay' value!\n");
+                               mdelay(delay * 1000);
+                       }
 
-               /*
-                * Config access can only go down stream
-                */
-               hose->last_busno = pci_hose_scan(hose);
-               bus = hose->last_busno + 1;
-#endif
+                       /*
+                        * Config access can only go down stream
+                        */
+                       hose->last_busno = pci_hose_scan(hose);
+                       bus = hose->last_busno + 1;
+               }
        }
 }
 #endif /* defined(CONFIG_PCI) */
index 109e7fe3e1fd76bc8f8d5d31aa539181cf81d9be..208f5ddf24a5bd0c3f6a21565d42475bb5356bb7 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -133,7 +133,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/apollon/Makefile b/board/apollon/Makefile
new file mode 100644 (file)
index 0000000..5348f2d
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := apollon.o mem.o sys_info.o
+SOBJS  := lowlevel_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)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
diff --git a/board/apollon/apollon.c b/board/apollon/apollon.c
new file mode 100644 (file)
index 0000000..064d143
--- /dev/null
@@ -0,0 +1,472 @@
+/*
+ * (C) Copyright 2005-2007
+ * Samsung Electronics.
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * Derived from omap2420
+ *
+ * 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/omap2420.h>
+#include <asm/io.h>
+#include <asm/arch/bits.h>
+#include <asm/arch/mux.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/sys_info.h>
+#include <asm/arch/mem.h>
+#include <asm/mach-types.h>
+
+void wait_for_command_complete(unsigned int wd_base);
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define write_config_reg(reg, value)                                   \
+do {                                                                   \
+       writeb(value, reg);                                             \
+} while (0)
+
+#define mask_config_reg(reg, mask)                                     \
+do {                                                                   \
+       char value = readb(reg) & ~(mask);                              \
+       writeb(value, reg);                                             \
+} while (0)
+
+/*******************************************************
+ * Routine: delay
+ * Description: spinning delay to use before udelay works
+ ******************************************************/
+static inline void delay(unsigned long loops)
+{
+       __asm__("1:\n" "subs %0, %1, #1\n"
+                 "bne 1b":"=r" (loops):"0"(loops));
+}
+
+/*****************************************
+ * Routine: board_init
+ * Description: Early hardware init.
+ *****************************************/
+int board_init(void)
+{
+       gpmc_init();            /* in SRAM or SDRM, finish GPMC */
+
+       gd->bd->bi_arch_number = 919;
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = (OMAP2420_SDRC_CS0 + 0x100);
+
+       return 0;
+}
+
+/**********************************************************
+ * Routine: s_init
+ * Description: Does early system init of muxing and clocks.
+ * - Called path is with sram stack.
+ **********************************************************/
+void s_init(void)
+{
+       watchdog_init();
+       set_muxconf_regs();
+       delay(100);
+
+       peripheral_enable();
+       icache_enable();
+}
+
+/*******************************************************
+ * Routine: misc_init_r
+ * Description: Init ethernet (done here so udelay works)
+ ********************************************************/
+int misc_init_r(void)
+{
+       ether_init();           /* better done here so timers are init'ed */
+       return (0);
+}
+
+/****************************************
+ * Routine: watchdog_init
+ * Description: Shut down watch dogs
+ *****************************************/
+void watchdog_init(void)
+{
+       /* There are 4 watch dogs.  1 secure, and 3 general purpose.
+        * The ROM takes care of the secure one. Of the 3 GP ones,
+        * 1 can reset us directly, the other 2 only generate MPU interrupts.
+        */
+       __raw_writel(WD_UNLOCK1, WD2_BASE + WSPR);
+       wait_for_command_complete(WD2_BASE);
+       __raw_writel(WD_UNLOCK2, WD2_BASE + WSPR);
+
+#define MPU_WD_CLOCKED 1
+#if MPU_WD_CLOCKED
+       /* value 0x10 stick on aptix, BIT4 polarity seems oppsite */
+       __raw_writel(WD_UNLOCK1, WD3_BASE + WSPR);
+       wait_for_command_complete(WD3_BASE);
+       __raw_writel(WD_UNLOCK2, WD3_BASE + WSPR);
+
+       __raw_writel(WD_UNLOCK1, WD4_BASE + WSPR);
+       wait_for_command_complete(WD4_BASE);
+       __raw_writel(WD_UNLOCK2, WD4_BASE + WSPR);
+#endif
+}
+
+/******************************************************
+ * Routine: wait_for_command_complete
+ * Description: Wait for posting to finish on watchdog
+ ******************************************************/
+void wait_for_command_complete(unsigned int wd_base)
+{
+       int pending = 1;
+       do {
+               pending = __raw_readl(wd_base + WWPS);
+       } while (pending);
+}
+
+/*******************************************************************
+ * Routine:ether_init
+ * Description: take the Ethernet controller out of reset and wait
+ *                for the EEPROM load to complete.
+ ******************************************************************/
+void ether_init(void)
+{
+#ifdef CONFIG_DRIVER_LAN91C96
+       int cnt = 20;
+
+       __raw_writeb(0x03, OMAP2420_CTRL_BASE + 0x0f2); /*protect->gpio74 */
+
+       __raw_writew(0x0, LAN_RESET_REGISTER);
+       do {
+               __raw_writew(0x1, LAN_RESET_REGISTER);
+               udelay(100);
+               if (cnt == 0) {
+                       printf("1. eth reset err\n");
+                       goto eth_reset_err_out;
+               }
+               --cnt;
+       } while (__raw_readw(LAN_RESET_REGISTER) != 0x1);
+
+       cnt = 20;
+
+       do {
+               __raw_writew(0x0, LAN_RESET_REGISTER);
+               udelay(100);
+               if (cnt == 0) {
+                       printf("2. eth reset err\n");
+                       goto eth_reset_err_out;
+               }
+               --cnt;
+       } while (__raw_readw(LAN_RESET_REGISTER) != 0x0000);
+       udelay(1000);
+
+       mask_config_reg(ETH_CONTROL_REG, 0x01);
+       udelay(1000);
+
+eth_reset_err_out:
+       return;
+#endif
+}
+
+/**********************************************
+ * Routine: dram_init
+ * Description: sets uboots idea of sdram size
+ **********************************************/
+int dram_init(void)
+{
+       unsigned int size0 = 0, size1 = 0;
+       u32 mtype, btype, rev = 0, cpu = 0;
+#define NOT_EARLY 0
+
+       btype = get_board_type();
+       mtype = get_mem_type();
+       rev = get_cpu_rev();
+       cpu = get_cpu_type();
+
+       display_board_info(btype);
+
+       if ((mtype == DDR_COMBO) || (mtype == DDR_STACKED)) {
+               /* init other chip select */
+               do_sdrc_init(SDRC_CS1_OSET, NOT_EARLY);
+       }
+
+       size0 = get_sdr_cs_size(SDRC_CS0_OSET);
+       size1 = get_sdr_cs_size(SDRC_CS1_OSET);
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size = size0;
+#if CONFIG_NR_DRAM_BANKS > 1
+       gd->bd->bi_dram[1].start = PHYS_SDRAM_1 + size0;
+       gd->bd->bi_dram[1].size = size1;
+#endif
+
+       return 0;
+}
+
+/**********************************************************
+ * Routine: set_muxconf_regs
+ * Description: Setting up the configuration Mux registers
+ *              specific to the hardware
+ *********************************************************/
+void set_muxconf_regs(void)
+{
+       muxSetupSDRC();
+       muxSetupGPMC();
+       muxSetupUsb0();         /* USB Device */
+       muxSetupUsbHost();      /* USB Host */
+       muxSetupUART1();
+       muxSetupLCD();
+       muxSetupMMCSD();
+       muxSetupTouchScreen();
+}
+
+/*****************************************************************
+ * Routine: peripheral_enable
+ * Description: Enable the clks & power for perifs (GPT2, UART1,...)
+ ******************************************************************/
+void peripheral_enable(void)
+{
+       unsigned int v, if_clks = 0, func_clks = 0;
+
+       /* Enable GP2 timer. */
+       if_clks |= BIT4 | BIT3;
+       func_clks |= BIT4 | BIT3;
+       /* Sys_clk input OMAP2420_GPT2 */
+       v = __raw_readl(CM_CLKSEL2_CORE) | 0x4 | 0x2;
+       __raw_writel(v, CM_CLKSEL2_CORE);
+       __raw_writel(0x1, CM_CLKSEL_WKUP);
+
+#ifdef CFG_NS16550
+       /* Enable UART1 clock */
+       func_clks |= BIT21;
+       if_clks |= BIT21;
+#endif
+       /* Interface clocks on */
+       v = __raw_readl(CM_ICLKEN1_CORE) | if_clks;
+       __raw_writel(v, CM_ICLKEN1_CORE);
+       /* Functional Clocks on */
+       v = __raw_readl(CM_FCLKEN1_CORE) | func_clks;
+       __raw_writel(v, CM_FCLKEN1_CORE);
+       delay(1000);
+
+#ifndef KERNEL_UPDATED
+       {
+#define V1 0xffffffff
+#define V2 0x00000007
+
+               __raw_writel(V1, CM_FCLKEN1_CORE);
+               __raw_writel(V2, CM_FCLKEN2_CORE);
+               __raw_writel(V1, CM_ICLKEN1_CORE);
+               __raw_writel(V1, CM_ICLKEN2_CORE);
+       }
+#endif
+}
+
+/****************************************
+ * Routine: muxSetupUsb0   (ostboot)
+ * Description: Setup usb muxing
+ *****************************************/
+void muxSetupUsb0(void)
+{
+       mask_config_reg(CONTROL_PADCONF_USB0_PUEN, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_VP, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_VM, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_RCV, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_TXEN, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_SE0, 0x1f);
+       mask_config_reg(CONTROL_PADCONF_USB0_DAT, 0x1f);
+}
+
+/****************************************
+ * Routine: muxSetupUSBHost   (ostboot)
+ * Description: Setup USB Host muxing
+ *****************************************/
+void muxSetupUsbHost(void)
+{
+       /* V19 */
+       write_config_reg(CONTROL_PADCONF_USB1_RCV, 1);
+       /* W20 */
+       write_config_reg(CONTROL_PADCONF_USB1_TXEN, 1);
+       /* N14 */
+       write_config_reg(CONTROL_PADCONF_GPIO69, 3);
+       /* P15 */
+       write_config_reg(CONTROL_PADCONF_GPIO70, 3);
+       /* L18 */
+       write_config_reg(CONTROL_PADCONF_GPIO102, 3);
+       /* L19 */
+       write_config_reg(CONTROL_PADCONF_GPIO103, 3);
+       /* K15 */
+       write_config_reg(CONTROL_PADCONF_GPIO104, 3);
+       /* K14 */
+       write_config_reg(CONTROL_PADCONF_GPIO105, 3);
+}
+
+/****************************************
+ * Routine: muxSetupUART1  (ostboot)
+ * Description: Set up uart1 muxing
+ *****************************************/
+void muxSetupUART1(void)
+{
+       /* UART1_CTS pin configuration, PIN = D21, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_UART1_CTS, 0);
+       /* UART1_RTS pin configuration, PIN = H21, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_UART1_RTS, 0);
+       /* UART1_TX pin configuration, PIN = L20, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_UART1_TX, 0);
+       /* UART1_RX pin configuration, PIN = T21, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_UART1_RX, 0);
+}
+
+/****************************************
+ * Routine: muxSetupLCD   (ostboot)
+ * Description: Setup lcd muxing
+ *****************************************/
+void muxSetupLCD(void)
+{
+       /* LCD_D0 pin configuration, PIN = Y7, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D0, 0);
+       /* LCD_D1 pin configuration, PIN = P10 , Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D1, 0);
+       /* LCD_D2 pin configuration, PIN = V8, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D2, 0);
+       /* LCD_D3 pin configuration, PIN = Y8, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D3, 0);
+       /* LCD_D4 pin configuration, PIN = W8, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D4, 0);
+       /* LCD_D5 pin configuration, PIN = R10, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D5, 0);
+       /* LCD_D6 pin configuration, PIN = Y9, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D6, 0);
+       /* LCD_D7 pin configuration, PIN = V9, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D7, 0);
+       /* LCD_D8 pin configuration, PIN = W9, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D8, 0);
+       /* LCD_D9 pin configuration, PIN = P11, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D9, 0);
+       /* LCD_D10 pin configuration, PIN = V10, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D10, 0);
+       /* LCD_D11 pin configuration, PIN = Y10, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D11, 0);
+       /* LCD_D12 pin configuration, PIN = W10, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D12, 0);
+       /* LCD_D13 pin configuration, PIN = R11, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D13, 0);
+       /* LCD_D14 pin configuration, PIN = V11, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D14, 0);
+       /* LCD_D15 pin configuration, PIN = W11, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D15, 0);
+       /* LCD_D16 pin configuration, PIN = P12, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D16, 0);
+       /* LCD_D17 pin configuration, PIN = R12, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_D17, 0);
+       /* LCD_PCLK pin configuration, PIN = W6, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_PCLK, 0);
+       /* LCD_VSYNC pin configuration, PIN = V7, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_VSYNC, 0);
+       /* LCD_HSYNC pin configuration, PIN = Y6, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_HSYNC, 0);
+       /* LCD_ACBIAS pin configuration, PIN = W7, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_DSS_ACBIAS, 0);
+}
+
+/****************************************
+ * Routine: muxSetupMMCSD (ostboot)
+ * Description: set up MMC muxing
+ *****************************************/
+void muxSetupMMCSD(void)
+{
+       /* SDMMC_CLKI pin configuration,  PIN = H15, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_CLKI, 0);
+       /* SDMMC_CLKO pin configuration,  PIN = G19, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_CLKO, 0);
+       /* SDMMC_CMD pin configuration,   PIN = H18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_CMD, 0);
+       /* SDMMC_DAT0 pin configuration,  PIN = F20, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT0, 0);
+       /* SDMMC_DAT1 pin configuration,  PIN = H14, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT1, 0);
+       /* SDMMC_DAT2 pin configuration,  PIN = E19, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT2, 0);
+       /* SDMMC_DAT3 pin configuration,  PIN = D19, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT3, 0);
+       /* SDMMC_DDIR0 pin configuration, PIN = F19, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR0, 0);
+       /* SDMMC_DDIR1 pin configuration, PIN = E20, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR1, 0);
+       /* SDMMC_DDIR2 pin configuration, PIN = F18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR2, 0);
+       /* SDMMC_DDIR3 pin configuration, PIN = E18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR3, 0);
+       /* SDMMC_CDIR pin configuration,  PIN = G18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_MMC_CMD_DIR, 0);
+}
+
+/******************************************
+ * Routine: muxSetupTouchScreen (ostboot)
+ * Description:  Set up touch screen muxing
+ *******************************************/
+void muxSetupTouchScreen(void)
+{
+       /* SPI1_CLK pin configuration,  PIN = U18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_SPI1_CLK, 0);
+       /* SPI1_MOSI pin configuration, PIN = V20, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_SPI1_SIMO, 0);
+       /* SPI1_MISO pin configuration, PIN = T18, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_SPI1_SOMI, 0);
+       /* SPI1_nCS0 pin configuration, PIN = U19, Mode = 0, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_SPI1_NCS0, 0);
+#define CONTROL_PADCONF_GPIO85 CONTROL_PADCONF_SPI1_NCS1
+       /* PEN_IRQ pin configuration,   PIN = N15, Mode = 3, PUPD=Disabled */
+       write_config_reg(CONTROL_PADCONF_GPIO85, 3);
+}
+
+/***************************************************************
+ * Routine: muxSetupGPMC (ostboot)
+ * Description: Configures balls which cam up in protected mode
+ ***************************************************************/
+void muxSetupGPMC(void)
+{
+       /* gpmc_io_dir, MCR */
+       writel(0x4800008C, 0x19000000);
+
+       /* NOR FLASH CS0 */
+       /* signal - Gpmc_clk; pin - J4; offset - 0x0088; mode 0; Byte-3 */
+       write_config_reg(CONTROL_PADCONF_GPMC_D2_BYTE3, 0);
+       /* MPDB(Multi Port Debug Port) CS1 */
+       /* signal - gpmc_ncs1; pin - N8; offset - 0x008D; mode 0; Byte-1 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE1, 0);
+       /* signal - Gpmc_ncs2; pin - E2; offset - 0x008E; mode 0; Byte-2 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE2, 0);
+       /* signal - Gpmc_ncs3; pin - N2; offset - 0x008F; mode 0; Byte-3 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE3, 0);
+       /* signal - Gpmc_ncs4; pin - ??; offset - 0x0090; mode 0; Byte-4 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE4, 0);
+       /* signal - Gpmc_ncs5; pin - ??; offset - 0x0091; mode 0; Byte-5 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE5, 0);
+       /* signal - Gpmc_ncs6; pin - ??; offset - 0x0092; mode 0; Byte-6 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE6, 0);
+       /* signal - Gpmc_ncs7; pin - ??; offset - 0x0093; mode 0; Byte-7 */
+       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE7, 0);
+}
+
+/****************************************************************
+ * Routine: muxSetupSDRC  (ostboot)
+ * Description: Configures balls which come up in protected mode
+ ****************************************************************/
+void muxSetupSDRC(void)
+{
+       /* It's set by IPL */
+}
diff --git a/board/apollon/config.mk b/board/apollon/config.mk
new file mode 100644 (file)
index 0000000..417b954
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2005-2007
+# Samsung Electronics
+#
+# Samsung December board with OMAP2420 (ARM1136) cpu
+# see http://www.ti.com/ for more information on Texas Instruments
+#
+# December has 1 bank of 128MB mDDR-SDRAM on CS0
+# December has 1 bank of  00MB mDDR-SDRAM on CS1
+# Physical Address:
+# 8000'0000 (bank0)
+# A000/0000 (bank1) ES2 will be configurable
+# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
+# (mem base + reserved)
+# For use with external or internal boots.
+TEXT_BASE = 0x80e80000
+
+# Used with full SRAM boot.
+# This is either with a GP system or a signed boot image.
+# easiest, and safest way to go if you can.
+#TEXT_BASE = 0x40270000
+
+# Handy to get symbols to debug ROM version.
+#TEXT_BASE = 0x0
+#TEXT_BASE = 0x08000000
diff --git a/board/apollon/lowlevel_init.S b/board/apollon/lowlevel_init.S
new file mode 100644 (file)
index 0000000..8381fea
--- /dev/null
@@ -0,0 +1,337 @@
+/*
+ * Board specific setup info
+ *
+ * (C) Copyright 2005-2007
+ * Samsung Electronics,
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <version.h>
+#include <asm/arch/omap2420.h>
+#include <asm/arch/mem.h>
+#include <asm/arch/clocks.h>
+#include "mem.h"
+
+#define APOLLON_CS0_BASE       0x00000000
+
+#ifdef PRCM_CONFIG_I
+#define SDRC_ACTIM_CTRLA_0_VAL 0x7BA35907
+#define SDRC_ACTIM_CTRLB_0_VAL 0x00000013
+#define SDRC_RFR_CTRL_0_VAL    0x00044C01
+#elif defined(PRCM_CONFIG_II)
+#define SDRC_ACTIM_CTRLA_0_VAL 0x4A59B485
+#define SDRC_ACTIM_CTRLB_0_VAL 0x0000000C
+#define SDRC_RFR_CTRL_0_VAL    0x00030001
+#endif
+
+#define SDRAM_BASE_ADDRESS     0x80008000
+
+_TEXT_BASE:
+       .word   TEXT_BASE       /* sdram load addr from config.mk */
+
+.globl lowlevel_init
+lowlevel_init:
+
+#ifdef CFG_NOR_BOOT
+       /* Check running in SDRAM */
+       mov     r0, pc, lsr #28
+       cmp     r0, #8
+       beq     prcm_setup
+
+flash_setup:
+       /* In Flash */
+       ldr     r0, =WD2_BASE
+       ldr     r1, =WD_UNLOCK1
+       str     r1, [r0, #WSPR]
+
+       ldr     r1, =WD_UNLOCK2
+       str     r1, [r0, #WSPR]
+
+       /* Pin muxing for SDRC */
+       mov     r1, #0x00
+       ldr     r0, =0x480000A1         /* ball C12, mode 0 */
+       strb    r1, [r0]
+
+       ldr     r0, =0x48000032         /* ball D11, mode 0 */
+       strb    r1, [r0]
+
+       ldr     r0, =0x480000A3         /* ball B13, mode 0 */
+       strb    r1, [r0]
+
+       /* SDRC setting */
+       ldr     r0, =OMAP2420_SDRC_BASE
+       ldr     r1, =0x00000010
+       str     r1, [r0, #0x10]
+
+       ldr     r1, =0x00000100
+       str     r1, [r0, #0x44]
+
+       /* SDRC CS0 configuration */
+       ldr     r1, =0x00d04011
+       str     r1, [r0, #0x80]
+
+       ldr     r1, =SDRC_ACTIM_CTRLA_0_VAL
+       str     r1, [r0, #0x9C]
+
+       ldr     r1, =SDRC_ACTIM_CTRLB_0_VAL
+       str     r1, [r0, #0xA0]
+
+       ldr     r1, =SDRC_RFR_CTRL_0_VAL
+       str     r1, [r0, #0xA4]
+
+       ldr     r1, =0x00000041
+       str     r1, [r0, #0x70]
+
+       /* Manual command sequence */
+       ldr     r1, =0x00000007
+       str     r1, [r0, #0xA8]
+
+       ldr     r1, =0x00000000
+       str     r1, [r0, #0xA8]
+
+       ldr     r1, =0x00000001
+       str     r1, [r0, #0xA8]
+
+       ldr     r1, =0x00000002
+       str     r1, [r0, #0xA8]
+       str     r1, [r0, #0xA8]
+
+       /*
+        * CS0 SDRC Mode register
+        *   Burst length = 4 - DDR memory
+        *   Serial mode
+        *   CAS latency = 3
+        */
+       ldr     r1, =0x00000032
+       str     r1, [r0, #0x84]
+
+       /* Note: You MUST set EMR values */
+       /* EMR1 & EMR2 */
+       ldr     r1, =0x00000000
+       str     r1, [r0, #0x88]
+       str     r1, [r0, #0x8C]
+
+#ifdef OLD_SDRC_DLLA_CTRL
+       /* SDRC_DLLA_CTRL */
+       ldr     r1, =0x00007306
+       str     r1, [r0, #0x60]
+
+       ldr     r1, =0x00007303
+       str     r1, [r0, #0x60]
+#else
+       /* SDRC_DLLA_CTRL */
+       ldr     r1, =0x00000506
+       str     r1, [r0, #0x60]
+
+       ldr     r1, =0x00000503
+       str     r1, [r0, #0x60]
+#endif
+
+#ifdef __BROKEN_FEATURE__
+       /* SDRC_DLLB_CTRL */
+       ldr     r1, =0x00000506
+       str     r1, [r0, #0x68]
+
+       ldr     r1, =0x00000503
+       str     r1, [r0, #0x68]
+#endif
+
+       /* little delay after init */
+       mov     r2, #0x1800
+1:
+       subs    r2, r2, #0x1
+       bne     1b
+
+       /* Setup base address */
+       ldr     r0, =0x00000000         /* NOR address */
+       ldr     r1, =SDRAM_BASE_ADDRESS /* SDRAM address */
+       ldr     r2, =0x20000            /* Size: 128KB */
+
+copy_loop:
+       ldmia   r0!, {r3-r10}
+       stmia   r1!, {r3-r10}
+       cmp     r0, r2
+       ble     copy_loop
+
+       ldr     r1, =SDRAM_BASE_ADDRESS
+       mov     lr, pc
+       mov     pc, r1
+#endif
+
+prcm_setup:
+       ldr     r0, =OMAP2420_CM_BASE
+       ldr     r1, [r0, #0x544]        /* CLKSEL2_PLL */
+       bic     r1, r1, #0x03
+       orr     r1, r1, #0x02
+       str     r1, [r0, #0x544]
+
+       ldr     r1, [r0, #0x500]
+       bic     r1, r1, #0x03
+       orr     r1, r1, #0x01
+       str     r1, [r0, #0x500]
+
+       ldr     r1, [r0, #0x140]
+       bic     r1, r1, #0x1f
+       orr     r1, r1, #0x02
+       str     r1, [r0, #0x140]
+
+#ifdef PRCM_CONFIG_I
+       ldr     r1, =0x000003C3
+#else
+       ldr     r1, =0x00000343
+#endif
+       str     r1, [r0, #0x840]
+
+       ldr     r1, =0x00000002
+       str     r1, [r0, #0x340]
+
+       ldr     r1, =CM_CLKSEL1_CORE
+#ifdef PRCM_CONFIG_I
+       ldr     r2, =0x08300C44
+#else
+       ldr     r2, =0x04600C26
+#endif
+       str     r2, [r1]
+
+       ldr     r0, =OMAP2420_CM_BASE
+       ldr     r1, [r0, #0x084]
+       and     r1, r1, #0x01
+       cmp     r1, #0x01
+       bne     clkvalid
+
+       b       .
+
+clkvalid:
+       mov     r1, #0x01
+       str     r1, [r0, #0x080]
+
+waitvalid:
+       ldr     r1, [r0, #0x084]
+       and     r1, r1, #0x01
+       cmp     r1, #0x00
+       bne     waitvalid
+
+       ldr     r0, =CM_CLKSEL1_PLL
+#ifdef PRCM_CONFIG_I
+       ldr     r1, =0x01837100
+#else
+       ldr     r1, =0x01832100
+#endif
+       str     r1, [r0]
+
+       ldr     r0, =PRCM_CLKCFG_CTRL
+       mov     r1, #0x01
+       str     r1, [r0]
+       mov     r6, #0x50
+loop1:
+       subs    r6, r6, #0x01
+       cmp     r6, #0x01
+       bne     loop1
+
+       ldr     r0, =CM_CLKEN_PLL
+       mov     r1, #0x0f
+       str     r1, [r0]
+
+       mov     r6, #0x100
+loop2:
+       subs    r6, r6, #0x01
+       cmp     r6, #0x01
+       bne     loop2
+
+       ldr     r0, =0x48008200
+       ldr     r1, =0xbfffffff
+       str     r1, [r0]
+
+       ldr     r0, =0x48008210
+       ldr     r1, =0xfffffff9
+       str     r1, [r0]
+
+       ldr     r0, =0x4806a004
+       ldr     r1, =0x00
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a020
+       ldr     r1, =0x07
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a00c
+       ldr     r1, =0x83
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a000
+       ldr     r1, =0x1a
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a004
+       ldr     r1, =0x00
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a00c
+       ldr     r1, =0x03
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a010
+       ldr     r1, =0x03
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a008
+       ldr     r1, =0x04
+       strb    r1, [r0]
+
+       ldr     r0, =0x4806a020
+       ldr     r1, =0x00
+       strb    r1, [r0]
+
+#if 0
+       ldr     r0, =0x4806a000
+       mov     r1, #'u'
+       strb    r1, [r0]
+#endif
+
+#if 0
+       /* LED0 OFF */
+       ldr     r3, =0x480000E5
+       mov     r4, #0x0b
+       strb    r4, [r3]
+#endif
+
+       ldr     sp,     SRAM_STACK
+       str     ip,     [sp]    /* stash old link register */
+       mov     ip,     lr      /* save link reg across call */
+       bl      s_init          /* go setup pll,mux,memory */
+       ldr     ip,     [sp]    /* restore save ip */
+       mov     lr,     ip      /* restore link reg */
+
+       /* map interrupt controller */
+       ldr     r0,     VAL_INTH_SETUP
+       mcr     p15, 0, r0, c15, c2, 4
+
+       /* back to arch calling code */
+       mov     pc,     lr
+
+       /* the literal pools origin */
+       .ltorg
+
+VAL_INTH_SETUP:
+       .word PERIFERAL_PORT_BASE
+SRAM_STACK:
+       .word LOW_LEVEL_SRAM_STACK
diff --git a/board/apollon/mem.c b/board/apollon/mem.c
new file mode 100644 (file)
index 0000000..c0edca5
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * (C) Copyright 2005-2007
+ * Samsung Electronics,
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * Derived from omap2420
+ *
+ * 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/omap2420.h>
+#include <asm/io.h>
+#include <asm/arch/bits.h>
+#include <asm/arch/mux.h>
+#include <asm/arch/mem.h>
+#include <asm/arch/clocks.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/sys_info.h>
+
+#include "mem.h"
+
+/************************************************************
+ * sdelay() - simple spin loop.  Will be constant time as
+ *  its generally used in 12MHz bypass conditions only.  This
+ *  is necessary until timers are accessible.
+ *
+ *  not inline to increase chances its in cache when called
+ *************************************************************/
+void sdelay(unsigned long loops)
+{
+       __asm__("1:\n" "subs %0, %1, #1\n"
+                 "bne 1b":"=r" (loops):"0"(loops));
+}
+
+/********************************************************************
+ * prcm_init() - inits clocks for PRCM as defined in clocks.h
+ * (config II default).
+ *   -- called from SRAM, or Flash (using temp SRAM stack).
+ ********************************************************************/
+void prcm_init(void) { }
+
+/**************************************************************************
+ * make_cs1_contiguous() - for es2 and above remap cs1 behind cs0 to allow
+ *  command line mem=xyz use all memory with out discontigious support
+ *  compiled in.  Could do it at the ATAG, but there really is two banks...
+ * Called as part of 2nd phase DDR init.
+ **************************************************************************/
+void make_cs1_contiguous(void)
+{
+       u32 size, a_add_low, a_add_high;
+
+       size = get_sdr_cs_size(SDRC_CS0_OSET);
+       size /= SZ_32M;         /* find size to offset CS1 */
+       a_add_high = (size & 3) << 8;   /* set up low field */
+       a_add_low = (size & 0x3C) >> 2; /* set up high field */
+       __raw_writel((a_add_high | a_add_low), SDRC_CS_CFG);
+
+}
+
+/********************************************************
+ *  mem_ok() - test used to see if timings are correct
+ *             for a part. Helps in gussing which part
+ *             we are currently using.
+ *******************************************************/
+u32 mem_ok(void)
+{
+       u32 val1, val2;
+       u32 pattern = 0x12345678;
+
+       /* clear pos A */
+       __raw_writel(0x0, OMAP2420_SDRC_CS0 + 0x400);
+       /* pattern to pos B */
+       __raw_writel(pattern, OMAP2420_SDRC_CS0);
+       /* remove pattern off the bus */
+       __raw_writel(0x0, OMAP2420_SDRC_CS0 + 4);
+       /* get pos A value */
+       val1 = __raw_readl(OMAP2420_SDRC_CS0 + 0x400);
+       val2 = __raw_readl(OMAP2420_SDRC_CS0);  /* get val2 */
+
+       /* see if pos A value changed */
+       if ((val1 != 0) || (val2 != pattern))
+               return (0);
+       else
+               return (1);
+}
+
+/********************************************************
+ *  sdrc_init() - init the sdrc chip selects CS0 and CS1
+ *  - early init routines, called from flash or
+ *  SRAM.
+ *******************************************************/
+void sdrc_init(void)
+{
+#define EARLY_INIT 1
+       /* only init up first bank here */
+       do_sdrc_init(SDRC_CS0_OSET, EARLY_INIT);
+}
+
+/*************************************************************************
+ * do_sdrc_init(): initialize the SDRAM for use.
+ *  -called from low level code with stack only.
+ *  -code sets up SDRAM timing and muxing for 2422 or 2420.
+ *  -optimal settings can be placed here, or redone after i2c
+ *      inspection of board info
+ *
+ *  This is a bit ugly, but should handle all memory moduels
+ *   used with the APOLLON. The first time though this code from s_init()
+ *   we configure the first chip select.  Later on we come back and
+ *   will configure the 2nd chip select if it exists.
+ *
+ **************************************************************************/
+void do_sdrc_init(u32 offset, u32 early)
+{
+}
+
+/*****************************************************
+ * gpmc_init(): init gpmc bus
+ * Init GPMC for x16, MuxMode (SDRAM in x32).
+ * This code can only be executed from SRAM or SDRAM.
+ *****************************************************/
+void gpmc_init(void)
+{
+       u32 mux = 0, mtype, mwidth, rev, tval;
+
+       rev = get_cpu_rev();
+       if (rev == CPU_2420_2422_ES1)
+               tval = 1;
+       else
+               tval = 0;       /* disable bit switched meaning */
+
+       /* global settings */
+       __raw_writel(0x10, GPMC_SYSCONFIG);     /* smart idle */
+       __raw_writel(0x0, GPMC_IRQENABLE);      /* isr's sources masked */
+       __raw_writel(tval, GPMC_TIMEOUT_CONTROL);       /* timeout disable */
+#ifdef CFG_NAND_BOOT
+       /* set nWP, disable limited addr */
+       __raw_writel(0x001, GPMC_CONFIG);
+#else
+       /* set nWP, disable limited addr */
+       __raw_writel(0x111, GPMC_CONFIG);
+#endif
+
+       /* discover bus connection from sysboot */
+       if (is_gpmc_muxed() == GPMC_MUXED)
+               mux = BIT9;
+       mtype = get_gpmc0_type();
+       mwidth = get_gpmc0_width();
+
+       /* setup cs0 */
+       __raw_writel(0x0, GPMC_CONFIG7_0);      /* disable current map */
+       sdelay(1000);
+
+#ifdef CFG_NOR_BOOT
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_3, GPMC_CONFIG1_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_3, GPMC_CONFIG2_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_3, GPMC_CONFIG3_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_3, GPMC_CONFIG4_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_3, GPMC_CONFIG5_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_3, GPMC_CONFIG6_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_3, GPMC_CONFIG7_0);
+#else
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_0 | mux | mtype | mwidth,
+                    GPMC_CONFIG1_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_0, GPMC_CONFIG2_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_0, GPMC_CONFIG3_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_0, GPMC_CONFIG4_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_0, GPMC_CONFIG5_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_0, GPMC_CONFIG6_0);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_0, GPMC_CONFIG7_0);
+#endif
+       sdelay(2000);
+
+       /* setup cs1 */
+       __raw_writel(0, GPMC_CONFIG7_1);        /* disable any mapping */
+       sdelay(1000);
+
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_1, GPMC_CONFIG1_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_1, GPMC_CONFIG2_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_1, GPMC_CONFIG3_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_1, GPMC_CONFIG4_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_1, GPMC_CONFIG5_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_1, GPMC_CONFIG6_1);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_1, GPMC_CONFIG7_1);
+       sdelay(2000);
+
+       /* setup cs2 */
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_0 | mux | mtype | mwidth,
+                    GPMC_CONFIG1_2);
+       /* It's same as cs 0 */
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_0, GPMC_CONFIG2_2);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_0, GPMC_CONFIG3_2);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_0, GPMC_CONFIG4_2);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_0, GPMC_CONFIG5_2);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_0, GPMC_CONFIG6_2);
+#ifdef CFG_NOR_BOOT
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_0, GPMC_CONFIG7_2);
+#else
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_2, GPMC_CONFIG7_2);
+#endif
+
+#ifndef CFG_NOR_BOOT
+       /* setup cs3 */
+       __raw_writel(0, GPMC_CONFIG7_3);        /* disable any mapping */
+       sdelay(1000);
+
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_3, GPMC_CONFIG1_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_3, GPMC_CONFIG2_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_3, GPMC_CONFIG3_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_3, GPMC_CONFIG4_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_3, GPMC_CONFIG5_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_3, GPMC_CONFIG6_3);
+       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_3, GPMC_CONFIG7_3);
+#endif
+
+#ifndef ASYNC_NOR
+       __raw_writew(0xaa, (APOLLON_CS3_BASE + 0xaaa));
+       __raw_writew(0x55, (APOLLON_CS3_BASE + 0x554));
+       __raw_writew(0xc0, (APOLLON_CS3_BASE | SYNC_NOR_VALUE));
+#endif
+       sdelay(2000);
+}
diff --git a/board/apollon/mem.h b/board/apollon/mem.h
new file mode 100644 (file)
index 0000000..5bc96fa
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * (C) Copyright 2005-2007
+ * Samsung Electronics,
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _APOLLON_OMAP24XX_MEM_H_
+#define _APOLLON_OMAP24XX_MEM_H_
+
+/* Slower full frequency range default timings for x32 operation*/
+#define APOLLON_2420_SDRC_SHARING              0x00000100
+#define APOLLON_2420_SDRC_MDCFG_0_DDR          0x00d04011
+#define APOLLON_2420_SDRC_MR_0_DDR             0x00000032
+
+/* optimized timings good for current shipping parts */
+#define APOLLON_242X_SDRC_ACTIM_CTRLA_0_100MHz 0x4A59B485
+#define APOLLON_242X_SDRC_ACTIM_CTRLB_0_100MHz 0x0000000C
+
+#define APOLLON_242X_SDRC_ACTIM_CTRLA_0_166MHz 0x7BA35907
+#define APOLLON_242X_SDRC_ACTIM_CTRLB_0_166MHz 0x00000013
+
+#define APOLLON_242X_SDRC_RFR_CTRL_100MHz      0x00030001
+#define APOLLON_242X_SDRC_RFR_CTRL_166MHz      0x00044C01
+
+#define APOLLON_242x_SDRC_DLLAB_CTRL_100MHz    0x00007306
+#define APOLLON_242x_SDRC_DLLAB_CTRL_166MHz    0x00000506
+
+#ifdef PRCM_CONFIG_I
+#define APOLLON_2420_SDRC_ACTIM_CTRLA_0        APOLLON_242X_SDRC_ACTIM_CTRLA_0_166MHz
+#define APOLLON_2420_SDRC_ACTIM_CTRLB_0        APOLLON_242X_SDRC_ACTIM_CTRLB_0_166MHz
+#define APOLLON_2420_SDRC_RFR_CTRL     APOLLON_242X_SDRC_RFR_CTRL_166MHz
+#define APOLLON_2420_SDRC_DLLAB_CTRL   APOLLON_242x_SDRC_DLLAB_CTRL_166MHz
+#elif PRCM_CONFIG_II
+#define APOLLON_2420_SDRC_ACTIM_CTRLA_0        APOLLON_242X_SDRC_ACTIM_CTRLA_0_100MHz
+#define APOLLON_2420_SDRC_ACTIM_CTRLB_0        APOLLON_242X_SDRC_ACTIM_CTRLB_0_100MHz
+#define APOLLON_2420_SDRC_RFR_CTRL     APOLLON_242X_SDRC_RFR_CTRL_100MHz
+#define APOLLON_2420_SDRC_DLLAB_CTRL   APOLLON_242x_SDRC_DLLAB_CTRL_100MHz
+#endif
+
+/* GPMC settings */
+#ifdef PRCM_CONFIG_I           /* L3 at 165MHz */
+/* CS0: OneNAND */
+# define APOLLON_24XX_GPMC_CONFIG1_0   0x00000001
+# define APOLLON_24XX_GPMC_CONFIG2_0   0x000c1000
+# define APOLLON_24XX_GPMC_CONFIG3_0   0x00030400
+# define APOLLON_24XX_GPMC_CONFIG4_0   0x0b841006
+# define APOLLON_24XX_GPMC_CONFIG5_0   0x020f0c11
+# define APOLLON_24XX_GPMC_CONFIG6_0   0x00000000
+# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000e40|(APOLLON_CS0_BASE >> 24))
+
+/* CS1: Ethernet */
+# define APOLLON_24XX_GPMC_CONFIG1_1   0x00011200
+# define APOLLON_24XX_GPMC_CONFIG2_1   0x001F1F01
+# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
+# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C0b1C0a
+# define APOLLON_24XX_GPMC_CONFIG5_1   0x041F1F1F
+# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
+# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
+
+/* CS2: OneNAND */
+/* It's same as CS0 */
+# define APOLLON_24XX_GPMC_CONFIG7_2   (0x00000e40|(APOLLON_CS2_BASE >> 24))
+
+/* CS3: NOR */
+#ifdef ASYNC_NOR
+# define APOLLON_24XX_GPMC_CONFIG1_3   0x00021201
+# define APOLLON_24XX_GPMC_CONFIG2_3   0x00121601
+# define APOLLON_24XX_GPMC_CONFIG3_3   0x00040401
+# define APOLLON_24XX_GPMC_CONFIG4_3   0x12061605
+# define APOLLON_24XX_GPMC_CONFIG5_3   0x01151317
+#else
+# define SYNC_NOR_VALUE                        0x24aaa
+# define APOLLON_24XX_GPMC_CONFIG1_3   0xe5011211
+# define APOLLON_24XX_GPMC_CONFIG2_3   0x00090b01
+# define APOLLON_24XX_GPMC_CONFIG3_3   0x00020201
+# define APOLLON_24XX_GPMC_CONFIG4_3   0x09030b03
+# define APOLLON_24XX_GPMC_CONFIG5_3   0x010a0a0c
+#endif /* ASYNC_NOR */
+# define APOLLON_24XX_GPMC_CONFIG6_3   0x00000000
+# define APOLLON_24XX_GPMC_CONFIG7_3   (0x00000e40|(APOLLON_CS3_BASE >> 24))
+#endif /* endif PRCM_CONFIG_I */
+
+#ifdef PRCM_CONFIG_II          /* L3 at 100MHz */
+/* CS0: OneNAND */
+# define APOLLON_24XX_GPMC_CONFIG1_0   0x00000001
+# define APOLLON_24XX_GPMC_CONFIG2_0   0x00081080
+# define APOLLON_24XX_GPMC_CONFIG3_0   0x00030300
+# define APOLLON_24XX_GPMC_CONFIG4_0   0x08041004
+# define APOLLON_24XX_GPMC_CONFIG5_0   0x020b0910
+# define APOLLON_24XX_GPMC_CONFIG6_0   0x00000000
+# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000C40|(APOLLON_CS0_BASE >> 24))
+
+/* CS1: ethernet */
+# define APOLLON_24XX_GPMC_CONFIG1_1   0x00401203
+# define APOLLON_24XX_GPMC_CONFIG2_1   0x001F1F01
+# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
+# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C091C09
+# define APOLLON_24XX_GPMC_CONFIG5_1   0x041F1F1F
+# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
+# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
+
+/* CS2: OneNAND */
+/* It's same as CS0 */
+# define APOLLON_24XX_GPMC_CONFIG7_2   (0x00000e40|(APOLLON_CS2_BASE >> 24))
+
+/* CS3: NOR */
+#define ASYNC_NOR
+#ifdef ASYNC_NOR
+# define APOLLON_24XX_GPMC_CONFIG1_3   0x00021201
+# define APOLLON_24XX_GPMC_CONFIG2_3   0x00121601
+# define APOLLON_24XX_GPMC_CONFIG3_3   0x00040401
+# define APOLLON_24XX_GPMC_CONFIG4_3   0x12061605
+# define APOLLON_24XX_GPMC_CONFIG5_3   0x01151317
+#else
+# define SYNC_NOR_VALUE                        0x24aaa
+# define APOLLON_24XX_GPMC_CONFIG1_3   0xe1001202
+# define APOLLON_24XX_GPMC_CONFIG2_3   0x00151501
+# define APOLLON_24XX_GPMC_CONFIG3_3   0x00050501
+# define APOLLON_24XX_GPMC_CONFIG4_3   0x0e070e07
+# define APOLLON_24XX_GPMC_CONFIG5_3   0x01131F1F
+#endif /* ASYNC_NOR */
+# define APOLLON_24XX_GPMC_CONFIG6_3   0x00000000
+# define APOLLON_24XX_GPMC_CONFIG7_3   (0x00000C40|(APOLLON_CS3_BASE >> 24))
+#endif /* endif PRCM_CONFIG_II */
+
+#ifdef PRCM_CONFIG_III         /* L3 at 133MHz */
+# ifdef CFG_NAND_BOOT
+#  define APOLLON_24XX_GPMC_CONFIG1_0   0x0
+#  define APOLLON_24XX_GPMC_CONFIG2_0   0x00141400
+#  define APOLLON_24XX_GPMC_CONFIG3_0   0x00141400
+#  define APOLLON_24XX_GPMC_CONFIG4_0   0x0F010F01
+#  define APOLLON_24XX_GPMC_CONFIG5_0   0x010C1414
+#  define APOLLON_24XX_GPMC_CONFIG6_0   0x00000A80
+# else /* NOR boot */
+#  define APOLLON_24XX_GPMC_CONFIG1_0   0x3
+#  define APOLLON_24XX_GPMC_CONFIG2_0   0x00151501
+#  define APOLLON_24XX_GPMC_CONFIG3_0   0x00060602
+#  define APOLLON_24XX_GPMC_CONFIG4_0   0x10081008
+#  define APOLLON_24XX_GPMC_CONFIG5_0   0x01131F1F
+#  define APOLLON_24XX_GPMC_CONFIG6_0   0x000004c4
+# endif        /* endif CFG_NAND_BOOT */
+# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000C40|(APOLLON_CS0_BASE >> 24))
+# define APOLLON_24XX_GPMC_CONFIG1_1   0x00011000
+# define APOLLON_24XX_GPMC_CONFIG2_1   0x001f1f01
+# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
+# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C091C09
+# define APOLLON_24XX_GPMC_CONFIG5_1   0x041f1F1F
+# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
+# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
+#endif /* endif CFG_PRCM_III */
+
+#endif /* endif _APOLLON_OMAP24XX_MEM_H_ */
diff --git a/board/apollon/sys_info.c b/board/apollon/sys_info.c
new file mode 100644 (file)
index 0000000..26ac9a2
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+ * (C) Copyright 2005-2007
+ * Samsung Electronics,
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * Derived from omap2420
+ *
+ * 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/omap2420.h>
+#include <asm/io.h>
+#include <asm/arch/bits.h>
+#include <asm/arch/mem.h>      /* get mem tables */
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/sys_info.h>
+#include <i2c.h>
+
+/**************************************************************************
+ * get_prod_id() - get id info from chips
+ ***************************************************************************/
+static u32 get_prod_id(void)
+{
+       u32 p;
+       p = __raw_readl(PRODUCTION_ID); /* get production ID */
+       return ((p & CPU_242X_PID_MASK) >> 16);
+}
+
+/**************************************************************************
+ * get_cpu_type() - low level get cpu type
+ * - no C globals yet.
+ * - just looking to say if this is a 2422 or 2420 or ...
+ * - to start with we will look at switch settings..
+ * - 2422 id's same as 2420 for ES1 will rely on H4 board characteristics
+ *   (mux for 2420, non-mux for 2422).
+ ***************************************************************************/
+u32 get_cpu_type(void)
+{
+       u32 v;
+
+       switch (get_prod_id()) {
+       case 1:;                /* 2420 */
+       case 2:
+               return (CPU_2420);
+               break;          /* 2420 pop */
+       case 4:
+               return (CPU_2422);
+               break;
+       case 8:
+               return (CPU_2423);
+               break;
+       default:
+               break;          /* early 2420/2422's unmarked */
+       }
+
+       v = __raw_readl(TAP_IDCODE_REG);
+       v &= CPU_24XX_ID_MASK;
+       /* currently 2420 and 2422 have same id */
+       if (v == CPU_2420_CHIPID) {
+               if (is_gpmc_muxed() == GPMC_MUXED)      /* if mux'ed */
+                       return (CPU_2420);
+               else
+                       return (CPU_2422);
+       } else
+               return (CPU_2420);      /* don't know, say 2420 */
+}
+
+/******************************************
+ * get_cpu_rev(void) - extract version info
+ ******************************************/
+u32 get_cpu_rev(void)
+{
+       u32 v;
+       v = __raw_readl(TAP_IDCODE_REG);
+       v = v >> 28;
+       return (v + 1);         /* currently 2422 and 2420 match up */
+}
+
+/****************************************************
+ * is_mem_sdr() - return 1 if mem type in use is SDR
+ ****************************************************/
+u32 is_mem_sdr(void)
+{
+       volatile u32 *burst = (volatile u32 *)(SDRC_MR_0 + SDRC_CS0_OSET);
+       if (*burst == H4_2420_SDRC_MR_0_SDR)
+               return (1);
+       return (0);
+}
+
+/***********************************************************
+ * get_mem_type() - identify type of mDDR part used.
+ * 2422 uses stacked DDR, 2 parts CS0/CS1.
+ * 2420 may have 1 or 2, no good way to know...only init 1...
+ * when eeprom data is up we can select 1 more.
+ *************************************************************/
+u32 get_mem_type(void)
+{
+       u32 cpu, sdr = is_mem_sdr();
+
+       cpu = get_cpu_type();
+       if (cpu == CPU_2422 || cpu == CPU_2423)
+               return (DDR_STACKED);
+
+       if (get_prod_id() == 0x2)
+               return (XDR_POP);
+
+       if (get_board_type() == BOARD_H4_MENELAUS)
+               if (sdr)
+                       return (SDR_DISCRETE);
+               else
+                       return (DDR_COMBO);
+       else if (sdr)           /* SDP + SDR kit */
+               return (SDR_DISCRETE);
+       else
+               return (DDR_DISCRETE);  /* origional SDP */
+}
+
+/***********************************************************************
+ * get_cs0_size() - get size of chip select 0/1
+ ************************************************************************/
+u32 get_sdr_cs_size(u32 offset)
+{
+       u32 size;
+       size = __raw_readl(SDRC_MCFG_0 + offset) >> 8;  /* get ram size field */
+       size &= 0x2FF;          /* remove unwanted bits */
+       size *= SZ_2M;          /* find size in MB */
+       return (size);
+}
+
+/***********************************************************************
+ * get_board_type() - get board type based on current production stats.
+ *  --- NOTE: 2 I2C EEPROMs will someday be populated with proper info.
+ *      when they are available we can get info from there.  This should
+ *      be correct of all known boards up until today.
+ ************************************************************************/
+u32 get_board_type(void)
+{
+       return (BOARD_H4_SDP);
+}
+
+/******************************************************************
+ * get_sysboot_value() - get init word settings (dip switch on h4)
+ ******************************************************************/
+inline u32 get_sysboot_value(void)
+{
+       return (0x00000FFF & __raw_readl(CONTROL_STATUS));
+}
+
+/***************************************************************************
+ *  get_gpmc0_base() - Return current address hardware will be
+ *     fetching from. The below effectively gives what is correct, its a bit
+ *   mis-leading compared to the TRM.  For the most general case the mask
+ *   needs to be also taken into account this does work in practice.
+ *   - for u-boot we currently map:
+ *       -- 0 to nothing,
+ *       -- 4 to flash
+ *       -- 8 to enent
+ *       -- c to wifi
+ ****************************************************************************/
+u32 get_gpmc0_base(void)
+{
+       u32 b;
+
+       b = __raw_readl(GPMC_CONFIG7_0);
+       b &= 0x1F;              /* keep base [5:0] */
+       b = b << 24;            /* ret 0x0b000000 */
+       return (b);
+}
+
+/*****************************************************************
+ *  is_gpmc_muxed() - tells if address/data lines are multiplexed
+ *****************************************************************/
+u32 is_gpmc_muxed(void)
+{
+       u32 mux;
+       mux = get_sysboot_value();
+       if ((mux & (BIT0 | BIT1 | BIT2 | BIT3)) == (BIT0 | BIT2 | BIT3))
+               return (GPMC_MUXED);    /* NAND Boot mode */
+       if (mux & BIT1)         /* if mux'ed */
+               return (GPMC_MUXED);
+       else
+               return (GPMC_NONMUXED);
+}
+
+/************************************************************************
+ *  get_gpmc0_type() - read sysboot lines to see type of memory attached
+ ************************************************************************/
+u32 get_gpmc0_type(void)
+{
+       u32 type;
+       type = get_sysboot_value();
+       if ((type & (BIT3 | BIT2)) == (BIT3 | BIT2))
+               return (TYPE_NAND);
+       else
+               return (TYPE_NOR);
+}
+
+/*******************************************************************
+ * get_gpmc0_width() - See if bus is in x8 or x16 (mainly for nand)
+ *******************************************************************/
+u32 get_gpmc0_width(void)
+{
+       u32 width;
+       width = get_sysboot_value();
+       if ((width & 0xF) == (BIT3 | BIT2))
+               return (WIDTH_8BIT);
+       else
+               return (WIDTH_16BIT);
+}
+
+/*********************************************************************
+ * wait_on_value() - common routine to allow waiting for changes in
+ *   volatile regs.
+ *********************************************************************/
+u32 wait_on_value(u32 read_bit_mask, u32 match_value, u32 read_addr, u32 bound)
+{
+       u32 i = 0, val;
+       do {
+               ++i;
+               val = __raw_readl(read_addr) & read_bit_mask;
+               if (val == match_value)
+                       return (1);
+               if (i == bound)
+                       return (0);
+       } while (1);
+}
+
+/*********************************************************************
+ *  display_board_info() - print banner with board info.
+ *********************************************************************/
+void display_board_info(u32 btype)
+{
+       char cpu_2420[] = "2420";       /* cpu type */
+       char cpu_2422[] = "2422";
+       char cpu_2423[] = "2423";
+       char db_men[] = "Menelaus";     /* board type */
+       char db_ip[] = "IP";
+       char mem_sdr[] = "mSDR";        /* memory type */
+       char mem_ddr[] = "mDDR";
+       char t_tst[] = "TST";   /* security level */
+       char t_emu[] = "EMU";
+       char t_hs[] = "HS";
+       char t_gp[] = "GP";
+       char unk[] = "?";
+
+       char *cpu_s, *db_s, *mem_s, *sec_s;
+       u32 cpu, rev, sec;
+
+       rev = get_cpu_rev();
+       cpu = get_cpu_type();
+       sec = get_device_type();
+
+       if (is_mem_sdr())
+               mem_s = mem_sdr;
+       else
+               mem_s = mem_ddr;
+
+       if (cpu == CPU_2423)
+               cpu_s = cpu_2423;
+       else if (cpu == CPU_2422)
+               cpu_s = cpu_2422;
+       else
+               cpu_s = cpu_2420;
+
+       if (btype == BOARD_H4_MENELAUS)
+               db_s = db_men;
+       else
+               db_s = db_ip;
+
+       switch (sec) {
+       case TST_DEVICE:
+               sec_s = t_tst;
+               break;
+       case EMU_DEVICE:
+               sec_s = t_emu;
+               break;
+       case HS_DEVICE:
+               sec_s = t_hs;
+               break;
+       case GP_DEVICE:
+               sec_s = t_gp;
+               break;
+       default:
+               sec_s = unk;
+       }
+
+       printf("OMAP%s-%s revision %d\n", cpu_s, sec_s, rev - 1);
+       printf("Samsung Apollon SDP Base Board + %s \n", mem_s);
+}
+
+/*************************************************************************
+ * get_board_rev() - setup to pass kernel board revision information
+ *          0 = 242x IP platform (first 2xx boards)
+ *          1 = 242x Menelaus platfrom.
+ *************************************************************************/
+u32 get_board_rev(void)
+{
+       u32 rev = 0;
+       u32 btype = get_board_type();
+
+       if (btype == BOARD_H4_MENELAUS)
+               rev = 1;
+       return (rev);
+}
+
+/********************************************************
+ *  get_base(); get upper addr of current execution
+ *******************************************************/
+u32 get_base(void)
+{
+       u32 val;
+       __asm__ __volatile__("mov %0, pc \n":"=r"(val)::"memory");
+       val &= 0xF0000000;
+       val >>= 28;
+       return (val);
+}
+
+/********************************************************
+ *  get_base2(); get 2upper addr of current execution
+ *******************************************************/
+u32 get_base2(void)
+{
+       u32 val;
+       __asm__ __volatile__("mov %0, pc \n":"=r"(val)::"memory");
+       val &= 0xFF000000;
+       val >>= 24;
+       return (val);
+}
+
+/********************************************************
+ *  running_in_flash() - tell if currently running in
+ *   flash.
+ *******************************************************/
+u32 running_in_flash(void)
+{
+       if (get_base() < 4)
+               return (1);     /* in flash */
+       return (0);             /* running in SRAM or SDRAM */
+}
+
+/********************************************************
+ *  running_in_sram() - tell if currently running in
+ *   sram.
+ *******************************************************/
+u32 running_in_sram(void)
+{
+       if (get_base() == 4)
+               return (1);     /* in SRAM */
+       return (0);             /* running in FLASH or SDRAM */
+}
+
+/********************************************************
+ *  running_in_sdram() - tell if currently running in
+ *   flash.
+ *******************************************************/
+u32 running_in_sdram(void)
+{
+       if (get_base() > 4)
+               return (1);     /* in sdram */
+       return (0);             /* running in SRAM or FLASH */
+}
+
+/*************************************************************
+ *  running_from_internal_boot() - am I a signed NOR image.
+ *************************************************************/
+u32 running_from_internal_boot(void)
+{
+       u32 v, base;
+
+       v = get_sysboot_value() & BIT3;
+       base = get_base2();
+       /* if running at mask rom flash address and
+        * sysboot3 says this was an internal boot
+        */
+       if ((base == 0x08) && v)
+               return (1);
+       else
+               return (0);
+}
+
+/*************************************************************
+ *  get_device_type(): tell if GP/HS/EMU/TST
+ *************************************************************/
+u32 get_device_type(void)
+{
+       int mode;
+       mode = __raw_readl(CONTROL_STATUS) & (BIT10 | BIT9 | BIT8);
+       return (mode >>= 8);
+}
diff --git a/board/apollon/u-boot.lds b/board/apollon/u-boot.lds
new file mode 100644 (file)
index 0000000..7b29a5b
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ *
+ * Copyright (C) 2005-2007 Samsung Electronics
+ * Kyungin Park <kyugnmin.park@samsung.com>
+ *
+ * January 2004 - Changed to support H4 device
+ * Copyright (c) 2004 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text   :
+       {
+               cpu/arm1136/start.o     (.text)
+               *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata : { *(.rodata) }
+
+       . = ALIGN(4);
+       .data : { *(.data) }
+
+       . = ALIGN(4);
+       .got : { *(.got) }
+
+       . = .;
+       __u_boot_cmd_start = .;
+       .u_boot_cmd : { *(.u_boot_cmd) }
+       __u_boot_cmd_end = .;
+
+       . = ALIGN(4);
+       __bss_start = .;
+       .bss (NOLOAD) : { *(.bss) }
+       _end = .;
+}
index 64d946c439210f6a58ece41c2838bea70d3a6498..418101ff866d410432b3f4aed294522ae70ca169 100644 (file)
@@ -50,6 +50,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 7a3a9b8fc86b14fbffc958c67e9b4a5c7dd483ff..3f52f04316a8ad3019c2e68c84130956ea6b017e 100644 (file)
@@ -53,6 +53,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f4fbf969c3cf6445dd210053c319e591440dc3ae..14cd22800bb7a1023e6d597b413fe63768f9e2a9 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 34e347aecd5e6b7abd2ace5dd293f840838d427a..247812e10366bceebdb88a7d932401c699896ba9 100644 (file)
@@ -71,7 +71,7 @@ SECTIONS
        . = ALIGN(8);
        _edata = .;
 
-       .bss : {
+       .bss (NOLOAD) : {
                *(.bss)
                *(.bss.*)
        }
diff --git a/board/atum8548/Makefile b/board/atum8548/Makefile
new file mode 100644 (file)
index 0000000..e198062
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# Copyright 2004 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
+
+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/atum8548/atum8548.c b/board/atum8548/atum8548.c
new file mode 100644 (file)
index 0000000..f11abd8
--- /dev/null
@@ -0,0 +1,420 @@
+/*
+ * Copyright 2007
+ * Robert Lazarski, Instituto Atlantico, robertlazarski@gmail.com
+ *
+ * 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 <pci.h>
+#include <asm/processor.h>
+#include <asm/immap_85xx.h>
+#include <asm/immap_fsl_pci.h>
+#include <asm/io.h>
+#include <spd.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.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);
+long int fixed_sdram(void);
+
+int board_early_init_f (void)
+{
+       return 0;
+}
+
+int checkboard (void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
+       volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR);
+
+       if ((uint)&gur->porpllsr != 0xe00e0000) {
+               printf("immap size error %x\n",&gur->porpllsr);
+       }
+       printf ("Board: ATUM8548\n");
+
+       lbc->ltesr = 0xffffffff;        /* Clear LBC error interrupts */
+       lbc->lteir = 0xffffffff;        /* Enable LBC error interrupts */
+       ecm->eedr = 0xffffffff;         /* Clear ecm errors */
+       ecm->eeer = 0xffffffff;         /* Enable ecm errors */
+
+       return 0;
+}
+
+#if !defined(CONFIG_SPD_EEPROM)
+/*************************************************************************
+ *  fixed sdram init -- doesn't use serial presence detect.
+ ************************************************************************/
+long int fixed_sdram (void)
+{
+       volatile ccsr_ddr_t *ddr= (void *)(CFG_MPC85xx_DDR_ADDR);
+
+       ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
+       ddr->cs0_config = CFG_DDR_CS0_CONFIG;
+       ddr->timing_cfg_0 = CFG_DDR_TIMING_0;
+       ddr->timing_cfg_1 = CFG_DDR_TIMING_1;
+       ddr->timing_cfg_2 = CFG_DDR_TIMING_2;
+       ddr->sdram_mode = CFG_DDR_MODE;
+       ddr->sdram_interval = CFG_DDR_INTERVAL;
+    #if defined (CONFIG_DDR_ECC)
+       ddr->err_disable = 0x0000000D;
+       ddr->err_sbe = 0x00ff0000;
+    #endif
+       asm("sync;isync;msync");
+       udelay(500);
+    #if defined (CONFIG_DDR_ECC)
+       /* Enable ECC checking */
+       ddr->sdram_cfg = (CFG_DDR_CONTROL | 0x20000000);
+    #else
+       ddr->sdram_cfg = CFG_DDR_CONTROL;
+    #endif
+       asm("sync; isync; msync");
+       udelay(500);
+       return CFG_SDRAM_SIZE * 1024 * 1024;
+}
+#endif /* !defined(CONFIG_SPD_EEPROM) */
+
+long int
+initdram(int board_type)
+{
+       long dram_size = 0;
+
+       puts("Initializing\n");
+
+#if defined(CONFIG_SPD_EEPROM)
+       puts("spd_sdram\n");
+       dram_size = spd_sdram ();
+#else
+       puts("fixed_sdram\n");
+       dram_size = fixed_sdram ();
+#endif
+
+#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++) {
+               printf ("DRAM test attempting to write 0xaaaaaaaa at: %08x\n", (uint) 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
+
+#ifdef CONFIG_PCI1
+static struct pci_controller pci1_hose;
+#endif
+
+#ifdef CONFIG_PCI2
+static struct pci_controller pci2_hose;
+#endif
+
+#ifdef CONFIG_PCIE1
+static struct pci_controller pcie1_hose;
+#endif
+
+int first_free_busno=0;
+
+void
+pci_init_board(void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+
+       uint devdisr = gur->devdisr;
+       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
+               devdisr, io_sel, host_agent);
+
+       /* explicitly set 'Clock out select register' to echo SYSCLK input to our CPLD */
+       gur->clkocr  |= MPC85xx_ATUM_CLKOCR;
+
+       if (io_sel & 1) {
+               if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
+                       printf ("    eTSEC1 is in sgmii mode.\n");
+               if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
+                       printf ("    eTSEC2 is in sgmii mode.\n");
+               if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS))
+                       printf ("    eTSEC3 is in sgmii mode.\n");
+               if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII4_DIS))
+                       printf ("    eTSEC4 is in sgmii mode.\n");
+       }
+
+#ifdef CONFIG_PCIE1
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie1_hose;
+       int pcie_ep = (host_agent == 5);
+       int pcie_configured  = io_sel & 6;
+
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               printf ("\n    PCIE1 connected to slot as %s (base address %x)",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det) {
+                       pci->pme_msg_det = 0xffffffff;
+                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+               }
+               printf ("\n");
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCIE1_MEM_BASE,
+                              CFG_PCIE1_MEM_PHYS,
+                              CFG_PCIE1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCIE1_IO_BASE,
+                              CFG_PCIE1_IO_PHYS,
+                              CFG_PCIE1_IO_SIZE,
+                              PCI_REGION_IO);
+
+               hose->region_count = 3;
+#ifdef CFG_PCIE1_MEM_BASE2
+               /* outbound memory */
+               pci_set_region(hose->regions + 3,
+                              CFG_PCIE1_MEM_BASE2,
+                              CFG_PCIE1_MEM_PHYS2,
+                              CFG_PCIE1_MEM_SIZE2,
+                              PCI_REGION_MEM);
+               hose->region_count++;
+#endif
+               hose->first_busno=first_free_busno;
+
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno=hose->last_busno+1;
+               printf("    PCIE1 on bus %02x - %02x\n",
+                      hose->first_busno,hose->last_busno);
+
+       } else {
+               printf ("    PCIE1: disabled\n");
+       }
+
+ }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+#endif
+
+#ifdef CONFIG_PCI1
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCI1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pci1_hose;
+
+       uint pci_agent = (host_agent == 6);
+       uint pci_speed = 33333000; /*get_clock_freq (); PCI PSPEED in [4:5] */
+       uint pci_32 = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;      /* PORDEVSR[15] */
+       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
+       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+
+       if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
+               printf ("\n    PCI1: %d bit, %s MHz, %s, %s, %s (base address %x)\n",
+                       (pci_32) ? 32 : 64,
+                       (pci_speed == 33333000) ? "33" :
+                       (pci_speed == 66666000) ? "66" : "unknown",
+                       pci_clk_sel ? "sync" : "async",
+                       pci_agent ? "agent" : "host",
+                       pci_arb ? "arbiter" : "external-arbiter",
+                       (uint)pci
+                       );
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCI1_MEM_BASE,
+                              CFG_PCI1_MEM_PHYS,
+                              CFG_PCI1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCI1_IO_BASE,
+                              CFG_PCI1_IO_PHYS,
+                              CFG_PCI1_IO_SIZE,
+                              PCI_REGION_IO);
+               hose->region_count = 3;
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               first_free_busno=hose->last_busno+1;
+               printf ("PCI1 on bus %02x - %02x\n",
+                       hose->first_busno,hose->last_busno);
+       } else {
+               printf ("    PCI1: disabled\n");
+       }
+}
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+#endif
+
+#ifdef CONFIG_PCI2
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCI2_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pci2_hose;
+
+       if (!(devdisr & MPC85xx_DEVDISR_PCI2)) {
+               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_set_region(hose->regions + 1,
+                              CFG_PCI2_MEM_BASE,
+                              CFG_PCI2_MEM_PHYS,
+                              CFG_PCI2_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               pci_set_region(hose->regions + 2,
+                              CFG_PCI2_IO_BASE,
+                              CFG_PCI2_IO_PHYS,
+                              CFG_PCI2_IO_SIZE,
+                              PCI_REGION_IO);
+               hose->region_count = 3;
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               first_free_busno=hose->last_busno+1;
+               printf ("PCI2 on bus %02x - %02x\n",
+                       hose->first_busno,hose->last_busno);
+       } else {
+               printf ("    PCI2: disabled\n");
+       }
+}
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCI2;
+#endif
+}
+
+
+int last_stage_init(void)
+{
+       int ic = icache_status ();
+       printf ("icache_status: %d\n", ic);
+       return 0;
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       int node, tmp[2];
+       const char *path;
+
+       ft_cpu_setup(blob, bd);
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
+#ifdef CONFIG_PCI1
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCI2
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pci2_hose.last_busno - pci2_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE1
+               path = fdt_getprop(blob, node, "pci2", NULL);
+               if (path) {
+                       tmp[1] = pcie1_hose.last_busno - pcie1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+       }
+}
+#endif
diff --git a/board/atum8548/config.mk b/board/atum8548/config.mk
new file mode 100644 (file)
index 0000000..9065817
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# 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
+#
+
+#
+# atum8548 board
+# TEXT_BASE = 0xfff80000
+# TEXT_BASE = 0xfffff000
+ifndef TEXT_BASE
+TEXT_BASE = 0xfff80000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8548=1
diff --git a/board/atum8548/init.S b/board/atum8548/init.S
new file mode 100644 (file)
index 0000000..654a569
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2007
+ * Robert Lazarski, Instituto Atlantico, robertlazarski@gmail.com
+ * Copyright 2004, 2007 Freescale Semiconductor.
+ * Copyright 2002,2003, Motorola Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
+#include <config.h>
+#include <mpc85xx.h>
+
+#define LAWAR_TRGT_PCI1                0x00000000
+#define LAWAR_TRGT_PCI2                0x00100000
+#define LAWAR_TRGT_PCIE                0x00200000
+#define LAWAR_TRGT_DDR         0x00f00000
+
+/*
+ * TLB0 and TLB1 Entries
+ *
+ * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
+ * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
+ * these TLB entries are established.
+ *
+ * The TLB entries for DDR are dynamically setup in spd_sdram()
+ * and use TLB1 Entries 8 through 15 as needed according to the
+ * size of DDR memory.
+ *
+ * MAS0: tlbsel, esel, nv
+ * MAS1: valid, iprot, tid, ts, tsize
+ * MAS2: epn, x0, x1, w, i, m, g, e
+ * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
+ */
+
+#define        entry_start \
+       mflr    r1      ;       \
+       bl      0f      ;
+
+#define        entry_end \
+0:     mflr    r0      ;       \
+       mtlr    r1      ;       \
+       blr             ;
+
+
+       .section        .bootpg, "ax"
+       .globl  tlb1_entry
+tlb1_entry:
+       entry_start
+
+       /*
+        * Number of TLB0 and TLB1 entries in the following table
+        */
+       .long (2f-1f)/16
+
+1:
+#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
+       /*
+        * TLB0         4K      Non-cacheable, guarded
+        * 0xff700000   4K      Initial CCSRBAR mapping
+        *
+        * This ends up at a TLB0 Index==0 entry, and must not collide
+        * with other TLB0 Entries.
+        */
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+#else
+#error("Update the number of table entries in tlb1_entry")
+#endif
+
+       /*
+        * TLB0         16K     Cacheable, guarded
+        * Temporary Global data for initialization
+        *
+        * Use four 4K TLB0 entries.  These entries must be cacheable
+        * as they provide the bootstrap memory before the memory
+        * controler and real memory have been configured.
+        *
+        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
+        * and must not collide with other TLB0 entries.
+        */
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, MAS2_G)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, MAS2_G)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, MAS2_G)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, MAS2_G)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /* TLB 1 Initializations */
+       /*
+        * TLB 0, 1:    128M    Non-cacheable, guarded
+        * 0xf8000000   128M    FLASH
+        * Out of reset this entry is only 4K.
+        */
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE + 0x4000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE + 0x4000000, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 2:       1G      Non-cacheable, guarded
+        * 0x80000000   1G      PCI1/PCIE  8,9,a,b
+        */
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 3, 4:    512M    Non-cacheable, guarded
+        * 0xc0000000   1G      PCI2
+        */
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_PHYS + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_PHYS + 0x10000000, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  1M      PCI1 IO
+        * 0xe210_0000  1M      PCI2 IO
+        * 0xe300_0000  1M      PCIe IO
+        */
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+2:
+       entry_end
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000    0x7fff_ffff     DDR                     2G
+ * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000    0xbfff_ffff     PCIe MEM                512M
+ * 0xc000_0000    0xdfff_ffff     PCI2 MEM                512M
+ * 0xe000_0000    0xe000_ffff     CCSR                    1M
+ * 0xe200_0000    0xe10f_ffff     PCI1 IO                 1M
+ * 0xe280_0000    0xe20f_ffff     PCI2 IO                 1M
+ * 0xe300_0000    0xe30f_ffff     PCIe IO                 1M
+ * 0xf800_0000    0xffff_ffff     FLASH (boot bank)       128M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ *
+ * LAW 0 is reserved for boot mapping
+ */
+
+       .section .bootpg, "ax"
+       .globl  law_entry
+law_entry:
+       entry_start
+
+       .long (4f-3f)/8
+3:
+       .long  0
+       .long  (LAWAR_TRGT_DDR | (LAWAR_SIZE & LAWAR_SIZE_1G)) & ~LAWAR_EN
+
+       .long   (CFG_PCI1_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
+
+       .long   (CFG_PCI1_IO_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M)
+
+       .long   (CFG_PCI2_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)
+
+       .long   (CFG_PCI2_IO_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M)
+
+       .long   (CFG_PCIE1_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE | (LAWAR_SIZE & LAWAR_SIZE_512M)
+
+       .long   (CFG_PCIE1_IO_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE | (LAWAR_SIZE & LAWAR_SIZE_1M)
+
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       .long   (CFG_LBC_CACHE_BASE>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)
+
+4:
+       entry_end
diff --git a/board/atum8548/u-boot.lds b/board/atum8548/u-boot.lds
new file mode 100644 (file)
index 0000000..0d1c217
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * 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/atum8548/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/atum8548/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)
+    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 (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index cdf550f67b57f61612a53b23634c62db6a138554..7b8667040f94763092b990c4d14dce76e37308d3 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index ec09fa23c33e8f15b576f4bc435e77adda323e90..3d38f2340bc6760945d7f5bb71c65fbbe37bc2e1 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index ec09fa23c33e8f15b576f4bc435e77adda323e90..3d38f2340bc6760945d7f5bb71c65fbbe37bc2e1 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 8fa9c0f7ed568bfa144496c11fb890357b03b832..703056b5b2f4aea45b733ebf3e7f028c9dfa3624 100644 (file)
@@ -111,7 +111,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f4fbf969c3cf6445dd210053c319e591440dc3ae..14cd22800bb7a1023e6d597b413fe63768f9e2a9 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 872f09439c24533a858efd6f70ad9cda03607bd9..2267bf8d1c697b7eb4921bed6449bec069c0e037 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 5ce2694cbf7dd85155267f865adc8d13d7a5419e..e617e908d5c113e13cb99a3ff5599bea5a8356eb 100644 (file)
@@ -117,7 +117,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index cf4bbb921d362ae9e099b3888ca9bf413e946b3a..1c89d410fd0f8fa8d5f935d00ceef963ba4867dd 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     board/cray/L1/init.o       (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -141,7 +141,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index d75d6d1ce9aa4c29f74384f043c717b4b1198dc3..bbc7607eb63e74605d97ae796ee7de5af2bc9114 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -142,7 +142,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 14ac3fb4fcd9b6ce45e85f0a8827b461ab28a3d0..de8ffa040ebe1b1b7d138910bb02b5a47a00246d 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -142,7 +142,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..3b797767240ee8f95bf6f052d9da5795ef92e7e7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index e10ac437ec585167ca55fd9965d0514208baeba6..8c10d47ae5acf3b07c6fa3d09dc63bb27f2dc72b 100644 (file)
@@ -53,6 +53,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 481d291874c85f2b9604cd1f4fa3295a805d6bac..c437db6740db6f942a8502e27ef5217f7926cab1 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -136,7 +136,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 710b2a2d6e60df7b2ed55352a92a537654f4863e..a4fcd1a9bb4916f6755ee71cf24fcb3071347fdf 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 710b2a2d6e60df7b2ed55352a92a537654f4863e..a4fcd1a9bb4916f6755ee71cf24fcb3071347fdf 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 710b2a2d6e60df7b2ed55352a92a537654f4863e..a4fcd1a9bb4916f6755ee71cf24fcb3071347fdf 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 861873272b6196a71a7ab4685cf2d0e83126ed61..1e1c5590d77a6fed6185fbe0cb514b24f0e6d3cf 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 258bece23cf59813a511d23556e4da02ff940c25..6bd06270a4f99f020b77e16b5753126bce03e59f 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 7099fc40de6fe2d54e167a363011f38bba0791c5..b055c90857993a1160c0f7b942668c9d0573949c 100644 (file)
@@ -119,7 +119,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index b3747e42426e94d50f9372505a110aa31569dc94..a1678b919b899252159831b25a87522d3c8ce57e 100644 (file)
@@ -119,7 +119,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1122d7521c43ed8247912246da5b541f63e20482..4a89cebaaa9f50fc2846b73809984246c0abf8d0 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 1d2a7d764b20a950803f6fab808978db68f5f31c..2a763adf7fea6cb32acf3ff83954ed52fb385472 100644 (file)
@@ -109,7 +109,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 4a0e5b4aedf4ae40974a21b8bf46c9c4fe50e5a4..06f6524480caeaea766fcd509135f31b725d7dd9 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -141,7 +141,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index ef937dd01513b2e09d827cc1f0fe615cf11e3746..7fd4fb1b2d3d22b9c18a8a3617311efdb61b5526 100644 (file)
@@ -127,7 +127,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 3b9aa7c5d1ce23dffbd48a8f0f5818ecafea20d9..ec1c2a0a93fe94561017c8e5a50f26cb57b297ce 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o         (.text)
     cpu/ppc4xx/traps.o         (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o                (.text)
+    cpu/ppc4xx/4xx_uart.o              (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o         (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -152,7 +152,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 95854f29327d5a278db4ece3752dbb2999728b62..bea9524833249f85705807751fd4f6d769a3fe43 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -137,7 +137,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index ff15b3fef9f2ba7af0a1838701e29b858cf1b815..cf37735b7e72f17c1a94daad9ce7f40e4586101d 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o         (.text)
     cpu/ppc4xx/traps.o         (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o                (.text)
+    cpu/ppc4xx/4xx_uart.o              (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o         (.text)
     common/dlmalloc.o          (.text)
@@ -150,7 +150,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 196171ce5aa9dab779def53adb4952fa47352765..ed50def4845c017499487c1ef5937aa892250cca 100644 (file)
@@ -24,6 +24,7 @@
  * MA 02111-1307 USA
  */
 
+#include "asm/io.h"
 #include "lcd.h"
 
 
@@ -36,43 +37,41 @@ int lcd_depth;
 unsigned char *glob_lcd_reg;
 unsigned char *glob_lcd_mem;
 
-#ifdef CFG_LCD_ENDIAN
+#if defined(CFG_LCD_ENDIAN)
 void lcd_setup(int lcd, int config)
 {
        if (lcd == 0) {
                /*
                 * Set endianess and reset lcd controller 0 (small)
                 */
-               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_LCD0_RST); /* set reset to low */
+               out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_LCD0_RST); /* set reset to low */
                udelay(10); /* wait 10us */
-               if (config == 1) {
-                       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_LCD_ENDIAN); /* big-endian */
-               } else {
-                       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_LCD_ENDIAN); /* little-endian */
-               }
+               if (config == 1)
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_LCD_ENDIAN); /* big-endian */
+               else
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_LCD_ENDIAN); /* little-endian */
                udelay(10); /* wait 10us */
-               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_LCD0_RST); /* set reset to high */
+               out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_LCD0_RST); /* set reset to high */
        } else {
                /*
                 * Set endianess and reset lcd controller 1 (big)
                 */
-               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_LCD1_RST); /* set reset to low */
+               out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_LCD1_RST); /* set reset to low */
                udelay(10); /* wait 10us */
-               if (config == 1) {
-                       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_LCD_ENDIAN); /* big-endian */
-               } else {
-                       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_LCD_ENDIAN); /* little-endian */
-               }
+               if (config == 1)
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_LCD_ENDIAN); /* big-endian */
+               else
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_LCD_ENDIAN); /* little-endian */
                udelay(10); /* wait 10us */
-               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_LCD1_RST); /* set reset to high */
+               out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_LCD1_RST); /* set reset to high */
        }
 
        /*
         * CFG_LCD_ENDIAN may also be FPGA_RESET, so set inactive
         */
-       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_LCD_ENDIAN); /* set reset high again */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_LCD_ENDIAN); /* set reset high again */
 }
-#endif /* #ifdef CFG_LCD_ENDIAN */
+#endif /* CFG_LCD_ENDIAN */
 
 
 void lcd_bmp(uchar *logo_bmp)
@@ -94,7 +93,6 @@ void lcd_bmp(uchar *logo_bmp)
         * Check for bmp mark 'BM'
         */
        if (*(ushort *)logo_bmp != 0x424d) {
-
                /*
                 * Decompress bmp image
                 */
@@ -104,12 +102,10 @@ void lcd_bmp(uchar *logo_bmp)
                        printf("Error: malloc in gunzip failed!\n");
                        return;
                }
-               if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) {
+               if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0)
                        return;
-               }
-               if (len == CFG_VIDEO_LOGO_MAX_SIZE) {
+               if (len == CFG_VIDEO_LOGO_MAX_SIZE)
                        printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n");
-               }
 
                /*
                 * Check for bmp mark 'BM'
@@ -152,9 +148,8 @@ void lcd_bmp(uchar *logo_bmp)
                break;
        default:
                printf("LCD: Unknown bpp (%d) im image!\n", bpp);
-               if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
+               if ((dst != NULL) && (dst != (uchar *)logo_bmp))
                        free(dst);
-               }
                return;
        }
        printf(" (%d*%d, %dbpp)\n", width, height, bpp);
@@ -164,7 +159,7 @@ void lcd_bmp(uchar *logo_bmp)
         */
        if ((colors <= 256) && (lcd_depth <= 8)) {
                ptr = (unsigned char *)(dst + 14 + 40);
-               for (i=0; i<colors; i++) {
+               for (i = 0; i < colors; i++) {
                        b = *ptr++;
                        g = *ptr++;
                        r = *ptr++;
@@ -179,11 +174,11 @@ void lcd_bmp(uchar *logo_bmp)
        ptr = glob_lcd_mem;
        ptr2 = (ushort *)glob_lcd_mem;
        header_size = 14 + 40 + 4*colors;          /* skip bmp header */
-       for (y=0; y<height; y++) {
+       for (y = 0; y < height; y++) {
                bmp = &dst[(height-1-y)*line_size + header_size];
                if (lcd_depth == 16) {
                        if (bpp == 24) {
-                               for (x=0; x<width; x++) {
+                               for (x = 0; x < width; x++) {
                                        /*
                                         * Generate epson 16bpp fb-format from 24bpp image
                                         */
@@ -194,7 +189,7 @@ void lcd_bmp(uchar *logo_bmp)
                                        *ptr2++ = val;
                                }
                        } else if (bpp == 8) {
-                               for (x=0; x<line_size; x++) {
+                               for (x = 0; x < line_size; x++) {
                                        /* query rgb value from palette */
                                        ptr = (unsigned char *)(dst + 14 + 40) ;
                                        ptr += (*bmp++) << 2;
@@ -206,15 +201,13 @@ void lcd_bmp(uchar *logo_bmp)
                                }
                        }
                } else {
-                       for (x=0; x<line_size; x++) {
+                       for (x = 0; x < line_size; x++)
                                *ptr++ = *bmp++;
-                       }
                }
        }
 
-       if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
+       if ((dst != NULL) && (dst != (uchar *)logo_bmp))
                free(dst);
-       }
 }
 
 
@@ -229,10 +222,10 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        /*
         * Detect epson
         */
-       lcd_reg[0] = 0x00;
-       lcd_reg[1] = 0x00;
+       out_8(&lcd_reg[0], 0x00);
+       out_8(&lcd_reg[1], 0x00);
 
-       if (lcd_reg[0] == 0x1c) {
+       if (in_8(&lcd_reg[0]) == 0x1c) {
                /*
                 * Big epson detected
                 */
@@ -241,7 +234,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
                palette_value = 0x1e4;
                lcd_depth = 16;
                puts("LCD:   S1D13806");
-       } else if (lcd_reg[1] == 0x1c) {
+       } else if (in_8(&lcd_reg[1]) == 0x1c) {
                /*
                 * Big epson detected (with register swap bug)
                 */
@@ -250,7 +243,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
                palette_value = 0x1e5;
                lcd_depth = 16;
                puts("LCD:   S1D13806S");
-       } else if (lcd_reg[0] == 0x18) {
+       } else if (in_8(&lcd_reg[0]) == 0x18) {
                /*
                 * Small epson detected (704)
                 */
@@ -259,7 +252,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
                palette_value = 0x17;
                lcd_depth = 8;
                puts("LCD:   S1D13704");
-       } else if (lcd_reg[0x10000] == 0x24) {
+       } else if (in_8(&lcd_reg[0x10000]) == 0x24) {
                /*
                 * Small epson detected (705)
                 */
@@ -277,7 +270,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        /*
         * Setup lcd controller regs
         */
-       for (i = 0; i<reg_count; i++) {
+       for (i = 0; i < reg_count; i++) {
                s1dReg = regs[i].Index;
                if (reg_byte_swap) {
                        if ((s1dReg & 0x0001) == 0)
@@ -301,7 +294,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        lcd_bmp(logo_bmp);
 }
 
-#ifdef CONFIG_VIDEO_SM501
+#if defined(CONFIG_VIDEO_SM501)
 int do_esdbmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        ulong addr;
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/esd/cpci440/cpci440.c b/board/esd/cpci440/cpci440.c
deleted file mode 100644 (file)
index 43d8a3b..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * (C) Copyright 2002
- * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-
-#include <common.h>
-#include <asm/processor.h>
-
-
-extern void lxt971_no_sleep(void);
-
-
-long int fixed_sdram( void );
-
-int board_early_init_f (void)
-{
-       uint reg;
-
-       /*--------------------------------------------------------------------
-        * Setup the external bus controller/chip selects
-        *-------------------------------------------------------------------*/
-       mtdcr( ebccfga, xbcfg );
-       reg = mfdcr( ebccfgd );
-       mtdcr( ebccfgd, reg | 0x04000000 );     /* Set ATC */
-
-       mtebc( pb0ap, 0x92015480 );     /* FLASH/SRAM */
-       mtebc( pb0cr, 0xFF87A000 ); /* BAS=0xff8 8MB R/W 16-bit */
-       /* test-only: other regs still missing... */
-
-       /*--------------------------------------------------------------------
-        * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
-       mtdcr( uic0sr, 0xffffffff );    /* clear all */
-       mtdcr( uic0er, 0x00000000 );    /* disable all */
-       mtdcr( uic0cr, 0x00000009 );    /* SMI & UIC1 crit are critical */
-       mtdcr( uic0pr, 0xfffffe13 );    /* per ref-board manual */
-       mtdcr( uic0tr, 0x01c00008 );    /* per ref-board manual */
-       mtdcr( uic0vr, 0x00000001 );    /* int31 highest, base=0x000 */
-       mtdcr( uic0sr, 0xffffffff );    /* clear all */
-
-       mtdcr( uic1sr, 0xffffffff );    /* clear all */
-       mtdcr( uic1er, 0x00000000 );    /* disable all */
-       mtdcr( uic1cr, 0x00000000 );    /* all non-critical */
-       mtdcr( uic1pr, 0xffffe0ff );    /* per ref-board manual */
-       mtdcr( uic1tr, 0x00ffc000 );    /* per ref-board manual */
-       mtdcr( uic1vr, 0x00000001 );    /* int31 highest, base=0x000 */
-       mtdcr( uic1sr, 0xffffffff );    /* clear all */
-
-       return 0;
-}
-
-
-int checkboard (void)
-{
-       sys_info_t sysinfo;
-       get_sys_info(&sysinfo);
-
-       printf("Board: esd CPCI-440\n");
-       printf("\tVCO: %lu MHz\n", sysinfo.freqVCOMhz/1000000);
-       printf("\tCPU: %lu MHz\n", sysinfo.freqProcessor/1000000);
-       printf("\tPLB: %lu MHz\n", sysinfo.freqPLB/1000000);
-       printf("\tOPB: %lu MHz\n", sysinfo.freqOPB/1000000);
-       printf("\tEPB: %lu MHz\n", sysinfo.freqEPB/1000000);
-
-       /*
-        * Disable sleep mode in LXT971
-        */
-       lxt971_no_sleep();
-
-       return (0);
-}
-
-
-long int initdram (int board_type)
-{
-       long    dram_size = 0;
-
-       dram_size = fixed_sdram();
-       return dram_size;
-}
-
-
-/*************************************************************************
- *  fixed sdram init -- doesn't use serial presence detect.
- *
- *  Assumes:    64 MB, non-ECC, non-registered
- *              PLB @ 133 MHz
- *
- ************************************************************************/
-long int fixed_sdram( void )
-{
-       uint    reg;
-
-#if 1 /* test-only */
-       /*--------------------------------------------------------------------
-        * Setup some default
-        *------------------------------------------------------------------*/
-       mtsdram( mem_uabba, 0x00000000 );   /* ubba=0 (default)             */
-       mtsdram( mem_slio,  0x00000000 );   /* rdre=0 wrre=0 rarw=0         */
-       mtsdram( mem_devopt,0x00000000 );   /* dll=0 ds=0 (normal)          */
-       mtsdram( mem_wddctr,0x40000000 );   /* wrcp=0 dcd=0                 */
-       mtsdram( mem_clktr, 0x40000000 );   /* clkp=1 (90 deg wr) dcdt=0    */
-
-       /*--------------------------------------------------------------------
-        * Setup for board-specific specific mem
-        *------------------------------------------------------------------*/
-       /*
-        * Following for CAS Latency = 2.5 @ 133 MHz PLB
-        */
-       mtsdram( mem_b0cr, 0x00082001 );/* SDBA=0x000, 64MB, Mode 2, enabled*/
-       mtsdram( mem_tr0,  0x410a4012 );/* WR=2  WD=1 CL=2.5 PA=3 CP=4 LD=2 */
-       /* RA=10 RD=3                       */
-       mtsdram( mem_tr1,  0x8080082f );/* SS=T2 SL=STAGE 3 CD=1 CT=0x02f   */
-       mtsdram( mem_rtr,  0x08200000 );/* Rate 15.625 ns @ 133 MHz PLB     */
-       mtsdram( mem_cfg1, 0x00000000 );/* Self-refresh exit, disable PM    */
-       udelay( 400 );                  /* Delay 200 usecs (min)            */
-
-       /*--------------------------------------------------------------------
-        * Enable the controller, then wait for DCEN to complete
-        *------------------------------------------------------------------*/
-       mtsdram( mem_cfg0, 0x86000000 );/* DCEN=1, PMUD=1, 64-bit           */
-       for(;;)
-       {
-               mfsdram( mem_mcsts, reg );
-               if( reg & 0x80000000 )
-                       break;
-       }
-
-       return( 64 * 1024 * 1024 );      /* 64 MB                           */
-#else
-       return( 32 * 1024 * 1024 );      /* 64 MB                           */
-#endif
-}
diff --git a/board/esd/cpci440/init.S b/board/esd/cpci440/init.S
deleted file mode 100644 (file)
index 82f37fd..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-*  Copyright (C) 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 <ppc_asm.tmpl>
-#include <config.h>
-
-/* General */
-#define TLB_VALID   0x00000200
-
-/* Supported page sizes */
-
-#define SZ_1K      0x00000000
-#define SZ_4K      0x00000010
-#define SZ_16K     0x00000020
-#define SZ_64K     0x00000030
-#define SZ_256K            0x00000040
-#define SZ_1M      0x00000050
-#define SZ_16M     0x00000070
-#define SZ_256M            0x00000090
-
-/* Storage attributes */
-#define SA_W       0x00000800      /* Write-through */
-#define SA_I       0x00000400      /* Caching inhibited */
-#define SA_M       0x00000200      /* Memory coherence */
-#define SA_G       0x00000100      /* Guarded */
-#define SA_E       0x00000080      /* Endian */
-
-/* Access control */
-#define AC_X       0x00000024      /* Execute */
-#define AC_W       0x00000012      /* Write */
-#define AC_R       0x00000009      /* Read */
-
-/* Some handy macros */
-
-#define EPN(e)         ((e) & 0xfffffc00)
-#define TLB0(epn,sz)   ( (EPN((epn)) | (sz) | TLB_VALID ) )
-#define TLB1(rpn,erpn) ( ((rpn)&0xfffffc00) | (erpn) )
-#define TLB2(a)                ( (a)&0x00000fbf )
-
-#define tlbtab_start\
-       mflr    r1  ;\
-       bl 0f       ;
-
-#define tlbtab_end\
-       .long 0, 0, 0   ;   \
-0:     mflr    r0      ;   \
-       mtlr    r1      ;   \
-       blr             ;
-
-#define tlbentry(epn,sz,rpn,erpn,attr)\
-       .long TLB0(epn,sz),TLB1(rpn,erpn),TLB2(attr)
-
-
-/**************************************************************************
- * TLB TABLE
- *
- * This table is used by the cpu boot code to setup the initial tlb
- * entries. Rather than make broad assumptions in the cpu source tree,
- * this table lets each board set things up however they like.
- *
- *  Pointer to the table is returned in r1
- *
- *************************************************************************/
-
-    .section .bootpg,"ax"
-    .globl tlbtab
-
-tlbtab:
-    tlbtab_start
-    tlbentry( 0xf0000000, SZ_256M, 0xf0000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
-    tlbentry( CFG_PERIPHERAL_BASE, SZ_256M, 0x40000000, 1, AC_R|AC_W|SA_G|SA_I)
-    tlbentry( CFG_ISRAM_BASE, SZ_4K, 0x80000000, 0, AC_R|AC_W|AC_X )
-    tlbentry( CFG_ISRAM_BASE + 0x1000, SZ_4K, 0x80001000, 0, AC_R|AC_W|AC_X )
-    tlbentry( CFG_SDRAM_BASE, SZ_256M, 0x00000000, 0, AC_R|AC_W|AC_X )
-    tlbtab_end
diff --git a/board/esd/cpci440/strataflash.c b/board/esd/cpci440/strataflash.c
deleted file mode 100644 (file)
index 2f055c2..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
- * (C) Copyright 2002
- * Brad Kemp, Seranoa Networks, Brad.Kemp@seranoa.com
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <asm/processor.h>
-
-#undef  DEBUG_FLASH
-/*
- * This file implements a Common Flash Interface (CFI) driver for U-Boot.
- * The width of the port and the width of the chips are determined at initialization.
- * These widths are used to calculate the address for access CFI data structures.
- * It has been tested on an Intel Strataflash implementation.
- *
- * References
- * JEDEC Standard JESD68 - Common Flash Interface (CFI)
- * JEDEC Standard JEP137-A Common Flash Interface (CFI) ID Codes
- * Intel Application Note 646 Common Flash Interface (CFI) and Command Sets
- * Intel 290667-008 3 Volt Intel StrataFlash Memory datasheet
- *
- * TODO
- * Use Primary Extended Query table (PRI) and Alternate Algorithm Query Table (ALT) to determine if protection is available
- * Add support for other command sets Use the PRI and ALT to determine command set
- * Verify erase and program timeouts.
- */
-
-#define FLASH_CMD_CFI                  0x98
-#define FLASH_CMD_READ_ID              0x90
-#define FLASH_CMD_RESET                        0xff
-#define FLASH_CMD_BLOCK_ERASE          0x20
-#define FLASH_CMD_ERASE_CONFIRM                0xD0
-#define FLASH_CMD_WRITE                        0x40
-#define FLASH_CMD_PROTECT              0x60
-#define FLASH_CMD_PROTECT_SET          0x01
-#define FLASH_CMD_PROTECT_CLEAR                0xD0
-#define FLASH_CMD_CLEAR_STATUS         0x50
-#define FLASH_CMD_WRITE_TO_BUFFER       0xE8
-#define FLASH_CMD_WRITE_BUFFER_CONFIRM  0xD0
-
-#define FLASH_STATUS_DONE              0x80
-#define FLASH_STATUS_ESS               0x40
-#define FLASH_STATUS_ECLBS             0x20
-#define FLASH_STATUS_PSLBS             0x10
-#define FLASH_STATUS_VPENS             0x08
-#define FLASH_STATUS_PSS               0x04
-#define FLASH_STATUS_DPS               0x02
-#define FLASH_STATUS_R                 0x01
-#define FLASH_STATUS_PROTECT           0x01
-
-#define FLASH_OFFSET_CFI               0x55
-#define FLASH_OFFSET_CFI_RESP          0x10
-#define FLASH_OFFSET_WTOUT             0x1F
-#define FLASH_OFFSET_WBTOUT             0x20
-#define FLASH_OFFSET_ETOUT             0x21
-#define FLASH_OFFSET_CETOUT             0x22
-#define FLASH_OFFSET_WMAX_TOUT         0x23
-#define FLASH_OFFSET_WBMAX_TOUT         0x24
-#define FLASH_OFFSET_EMAX_TOUT         0x25
-#define FLASH_OFFSET_CEMAX_TOUT         0x26
-#define FLASH_OFFSET_SIZE              0x27
-#define FLASH_OFFSET_INTERFACE          0x28
-#define FLASH_OFFSET_BUFFER_SIZE        0x2A
-#define FLASH_OFFSET_NUM_ERASE_REGIONS 0x2C
-#define FLASH_OFFSET_ERASE_REGIONS     0x2D
-#define FLASH_OFFSET_PROTECT           0x02
-#define FLASH_OFFSET_USER_PROTECTION    0x85
-#define FLASH_OFFSET_INTEL_PROTECTION   0x81
-
-
-#define FLASH_MAN_CFI                  0x01000000
-
-
-typedef union {
-       unsigned char c;
-       unsigned short w;
-       unsigned long l;
-} cfiword_t;
-
-typedef union {
-       unsigned char * cp;
-       unsigned short *wp;
-       unsigned long *lp;
-} cfiptr_t;
-
-#define NUM_ERASE_REGIONS 4
-
-flash_info_t   flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips        */
-
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-
-
-static void flash_add_byte(flash_info_t *info, cfiword_t * cword, uchar c);
-static void flash_make_cmd(flash_info_t * info, uchar cmd, void * cmdbuf);
-static void flash_write_cmd(flash_info_t * info, int sect, uchar offset, uchar cmd);
-static int flash_isequal(flash_info_t * info, int sect, uchar offset, uchar cmd);
-static int flash_isset(flash_info_t * info, int sect, uchar offset, uchar cmd);
-static int flash_detect_cfi(flash_info_t * info);
-static ulong flash_get_size (ulong base, int banknum);
-static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword);
-static int flash_full_status_check(flash_info_t * info, ulong sector, ulong tout, char * prompt);
-#ifdef CFG_FLASH_USE_BUFFER_WRITE
-static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp, int len);
-#endif
-/*-----------------------------------------------------------------------
- * create an address based on the offset and the port width
- */
-inline uchar * flash_make_addr(flash_info_t * info, int sect, int offset)
-{
-       return ((uchar *)(info->start[sect] + (offset * info->portwidth)));
-}
-/*-----------------------------------------------------------------------
- * read a character at a port width address
- */
-inline uchar flash_read_uchar(flash_info_t * info, uchar offset)
-{
-       uchar *cp;
-       cp = flash_make_addr(info, 0, offset);
-       return (cp[info->portwidth - 1]);
-}
-
-/*-----------------------------------------------------------------------
- * read a short word by swapping for ppc format.
- */
-ushort flash_read_ushort(flash_info_t * info, int sect,  uchar offset)
-{
-    uchar * addr;
-
-    addr = flash_make_addr(info, sect, offset);
-    return ((addr[(2*info->portwidth) - 1] << 8) | addr[info->portwidth - 1]);
-
-}
-
-/*-----------------------------------------------------------------------
- * read a long word by picking the least significant byte of each maiximum
- * port size word. Swap for ppc format.
- */
-ulong flash_read_long(flash_info_t * info, int sect,  uchar offset)
-{
-    uchar * addr;
-
-    addr = flash_make_addr(info, sect, offset);
-    return ( (addr[(2*info->portwidth) - 1] << 24 ) | (addr[(info->portwidth) -1] << 16) |
-           (addr[(4*info->portwidth) - 1] << 8) | addr[(3*info->portwidth) - 1]);
-
-}
-
-/*-----------------------------------------------------------------------
- */
-unsigned long flash_init (void)
-{
-       unsigned long size;
-       int i;
-       unsigned long  address;
-
-
-       /* The flash is positioned back to back, with the demultiplexing of the chip
-        * based on the A24 address line.
-        *
-        */
-
-       address = CFG_FLASH_BASE;
-       size = 0;
-
-       /* Init: no FLASHes known */
-       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
-               flash_info[i].flash_id = FLASH_UNKNOWN;
-               size += flash_info[i].size = flash_get_size(address, i);
-               address += CFG_FLASH_INCREMENT;
-               if (flash_info[0].flash_id == FLASH_UNKNOWN) {
-                       printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",i,
-                               flash_info[0].size, flash_info[i].size<<20);
-               }
-       }
-
-#if 0 /* test-only */
-       /* Monitor protection ON by default */
-#if (CFG_MONITOR_BASE >= CFG_FLASH_BASE)
-       for(i=0; flash_info[0].start[i] < CFG_MONITOR_BASE+monitor_flash_len-1; i++)
-               (void)flash_real_protect(&flash_info[0], i, 1);
-#endif
-#endif
-
-       return (size);
-}
-
-/*-----------------------------------------------------------------------
- */
-int flash_erase (flash_info_t *info, int s_first, int s_last)
-{
-       int rcode = 0;
-       int prot;
-       int sect;
-
-       if( info->flash_id != FLASH_MAN_CFI) {
-               printf ("Can't erase unknown flash type - aborted\n");
-               return 1;
-       }
-       if ((s_first < 0) || (s_first > s_last)) {
-               printf ("- no sectors to erase\n");
-               return 1;
-       }
-
-       prot = 0;
-       for (sect=s_first; sect<=s_last; ++sect) {
-               if (info->protect[sect]) {
-                       prot++;
-               }
-       }
-       if (prot) {
-               printf ("- Warning: %d protected sectors will not be erased!\n",
-                       prot);
-       } else {
-               printf ("\n");
-       }
-
-
-       for (sect = s_first; sect<=s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
-                       flash_write_cmd(info, sect, 0, FLASH_CMD_CLEAR_STATUS);
-                       flash_write_cmd(info, sect, 0, FLASH_CMD_BLOCK_ERASE);
-                       flash_write_cmd(info, sect, 0, FLASH_CMD_ERASE_CONFIRM);
-
-                       if(flash_full_status_check(info, sect, info->erase_blk_tout, "erase")) {
-                               rcode = 1;
-                       } else
-                               printf(".");
-               }
-       }
-       printf (" done\n");
-       return rcode;
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info  (flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id != FLASH_MAN_CFI) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       printf("CFI conformant FLASH (%d x %d)",
-              (info->portwidth  << 3 ), (info->chipwidth  << 3 ));
-       printf ("  Size: %ld MB in %d Sectors\n",
-               info->size >> 20, info->sector_count);
-       printf(" Erase timeout %ld ms, write timeout %ld ms, buffer write timeout %ld ms, buffer size %d\n",
-              info->erase_blk_tout, info->write_tout, info->buffer_write_tout, info->buffer_size);
-
-       printf ("  Sector Start Addresses:");
-       for (i=0; i<info->sector_count; ++i) {
-               if ((i % 5) == 0)
-                       printf ("\n");
-               printf (" %08lX%5s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : " "
-                       );
-       }
-       printf ("\n");
-       return;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       ulong wp;
-       ulong cp;
-       int aln;
-       cfiword_t cword;
-       int i, rc;
-
-       /* get lower aligned address */
-       wp = (addr & ~(info->portwidth - 1));
-
-       /* handle unaligned start */
-       if((aln = addr - wp) != 0) {
-               cword.l = 0;
-               cp = wp;
-               for(i=0;i<aln; ++i, ++cp)
-                       flash_add_byte(info, &cword, (*(uchar *)cp));
-
-               for(; (i< info->portwidth) && (cnt > 0) ; i++) {
-                       flash_add_byte(info, &cword, *src++);
-                       cnt--;
-                       cp++;
-               }
-               for(; (cnt == 0) && (i < info->portwidth); ++i, ++cp)
-                       flash_add_byte(info, &cword, (*(uchar *)cp));
-               if((rc = flash_write_cfiword(info, wp, cword)) != 0)
-                       return rc;
-               wp = cp;
-       }
-
-#ifdef CFG_FLASH_USE_BUFFER_WRITE
-       while(cnt >= info->portwidth) {
-               i = info->buffer_size > cnt? cnt: info->buffer_size;
-               if((rc = flash_write_cfibuffer(info, wp, src,i)) != ERR_OK)
-                       return rc;
-               wp += i;
-               src += i;
-               cnt -=i;
-       }
-#else
-       /* handle the aligned part */
-       while(cnt >= info->portwidth) {
-               cword.l = 0;
-               for(i = 0; i < info->portwidth; i++) {
-                       flash_add_byte(info, &cword, *src++);
-               }
-               if((rc = flash_write_cfiword(info, wp, cword)) != 0)
-                       return rc;
-               wp += info->portwidth;
-               cnt -= info->portwidth;
-       }
-#endif /* CFG_FLASH_USE_BUFFER_WRITE */
-       if (cnt == 0) {
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       cword.l = 0;
-       for (i=0, cp=wp; (i<info->portwidth) && (cnt>0); ++i, ++cp) {
-               flash_add_byte(info, &cword, *src++);
-               --cnt;
-       }
-       for (; i<info->portwidth; ++i, ++cp) {
-               flash_add_byte(info, & cword, (*(uchar *)cp));
-       }
-
-       return flash_write_cfiword(info, wp, cword);
-}
-
-/*-----------------------------------------------------------------------
- */
-int flash_real_protect(flash_info_t *info, long sector, int prot)
-{
-       int retcode = 0;
-
-       flash_write_cmd(info, sector, 0, FLASH_CMD_CLEAR_STATUS);
-       flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT);
-       if(prot)
-               flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT_SET);
-       else
-               flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT_CLEAR);
-
-       if((retcode = flash_full_status_check(info, sector, info->erase_blk_tout,
-                                        prot?"protect":"unprotect")) == 0) {
-
-               info->protect[sector] = prot;
-               /* Intel's unprotect unprotects all locking */
-               if(prot == 0) {
-                       int i;
-                       for(i = 0 ; i<info->sector_count; i++) {
-                               if(info->protect[i])
-                                       flash_real_protect(info, i, 1);
-                       }
-               }
-       }
-
-       return retcode;
-}
-/*-----------------------------------------------------------------------
- *  wait for XSR.7 to be set. Time out with an error if it does not.
- *  This routine does not set the flash to read-array mode.
- */
-static int flash_status_check(flash_info_t * info, ulong sector, ulong tout, char * prompt)
-{
-       ulong start;
-
-       /* Wait for command completion */
-       start = get_timer (0);
-       while(!flash_isset(info, sector, 0, FLASH_STATUS_DONE)) {
-               if (get_timer(start) > info->erase_blk_tout) {
-                       printf("Flash %s timeout at address %lx\n", prompt, info->start[sector]);
-                       flash_write_cmd(info, sector, 0, FLASH_CMD_RESET);
-                       return ERR_TIMOUT;
-               }
-       }
-       return ERR_OK;
-}
-/*-----------------------------------------------------------------------
- * Wait for XSR.7 to be set, if it times out print an error, otherwise do a full status check.
- * This routine sets the flash to read-array mode.
- */
-static int flash_full_status_check(flash_info_t * info, ulong sector, ulong tout, char * prompt)
-{
-       int retcode;
-       retcode = flash_status_check(info, sector, tout, prompt);
-       if((retcode == ERR_OK) && !flash_isequal(info,sector, 0, FLASH_STATUS_DONE)) {
-               retcode = ERR_INVAL;
-               printf("Flash %s error at address %lx\n", prompt,info->start[sector]);
-               if(flash_isset(info, sector, 0, FLASH_STATUS_ECLBS | FLASH_STATUS_PSLBS)){
-                       printf("Command Sequence Error.\n");
-               } else if(flash_isset(info, sector, 0, FLASH_STATUS_ECLBS)){
-                       printf("Block Erase Error.\n");
-                       retcode = ERR_NOT_ERASED;
-               } else if (flash_isset(info, sector, 0, FLASH_STATUS_PSLBS)) {
-                       printf("Locking Error\n");
-               }
-               if(flash_isset(info, sector, 0, FLASH_STATUS_DPS)){
-                       printf("Block locked.\n");
-                       retcode = ERR_PROTECTED;
-               }
-               if(flash_isset(info, sector, 0, FLASH_STATUS_VPENS))
-                       printf("Vpp Low Error.\n");
-       }
-       flash_write_cmd(info, sector, 0, FLASH_CMD_RESET);
-       return retcode;
-}
-/*-----------------------------------------------------------------------
- */
-static void flash_add_byte(flash_info_t *info, cfiword_t * cword, uchar c)
-{
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               cword->c = c;
-               break;
-       case FLASH_CFI_16BIT:
-               cword->w = (cword->w << 8) | c;
-               break;
-       case FLASH_CFI_32BIT:
-               cword->l = (cword->l << 8) | c;
-       }
-}
-
-
-/*-----------------------------------------------------------------------
- * make a proper sized command based on the port and chip widths
- */
-static void flash_make_cmd(flash_info_t * info, uchar cmd, void * cmdbuf)
-{
-       int i;
-       uchar *cp = (uchar *)cmdbuf;
-       for(i=0; i< info->portwidth; i++)
-               *cp++ = ((i+1) % info->chipwidth) ? '\0':cmd;
-}
-
-/*
- * Write a proper sized command to the correct address
- */
-static void flash_write_cmd(flash_info_t * info, int sect, uchar offset, uchar cmd)
-{
-
-       volatile cfiptr_t addr;
-       cfiword_t cword;
-       addr.cp = flash_make_addr(info, sect, offset);
-       flash_make_cmd(info, cmd, &cword);
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               *addr.cp = cword.c;
-               break;
-       case FLASH_CFI_16BIT:
-               *addr.wp = cword.w;
-               break;
-       case FLASH_CFI_32BIT:
-               *addr.lp = cword.l;
-               break;
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-static int flash_isequal(flash_info_t * info, int sect, uchar offset, uchar cmd)
-{
-       cfiptr_t cptr;
-       cfiword_t cword;
-       int retval;
-       cptr.cp = flash_make_addr(info, sect, offset);
-       flash_make_cmd(info, cmd, &cword);
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               retval = (cptr.cp[0] == cword.c);
-               break;
-       case FLASH_CFI_16BIT:
-               retval = (cptr.wp[0] == cword.w);
-               break;
-       case FLASH_CFI_32BIT:
-               retval = (cptr.lp[0] == cword.l);
-               break;
-       default:
-               retval = 0;
-               break;
-       }
-       return retval;
-}
-/*-----------------------------------------------------------------------
- */
-static int flash_isset(flash_info_t * info, int sect, uchar offset, uchar cmd)
-{
-       cfiptr_t cptr;
-       cfiword_t cword;
-       int retval;
-       cptr.cp = flash_make_addr(info, sect, offset);
-       flash_make_cmd(info, cmd, &cword);
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               retval = ((cptr.cp[0] & cword.c) == cword.c);
-               break;
-       case FLASH_CFI_16BIT:
-               retval = ((cptr.wp[0] & cword.w) == cword.w);
-               break;
-       case FLASH_CFI_32BIT:
-               retval = ((cptr.lp[0] & cword.l) == cword.l);
-               break;
-       default:
-               retval = 0;
-               break;
-       }
-       return retval;
-}
-
-/*-----------------------------------------------------------------------
- * detect if flash is compatible with the Common Flash Interface (CFI)
- * http://www.jedec.org/download/search/jesd68.pdf
- *
- */
-static int flash_detect_cfi(flash_info_t * info)
-{
-
-       for(info->portwidth=FLASH_CFI_8BIT; info->portwidth <= FLASH_CFI_32BIT;
-           info->portwidth <<= 1) {
-               for(info->chipwidth =FLASH_CFI_BY8;
-                   info->chipwidth <= info->portwidth;
-                   info->chipwidth <<= 1) {
-                       flash_write_cmd(info, 0, 0, FLASH_CMD_RESET);
-                       flash_write_cmd(info, 0, FLASH_OFFSET_CFI, FLASH_CMD_CFI);
-                       if(flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP,'Q') &&
-                          flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R') &&
-                          flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y'))
-                               return 1;
-               }
-       }
-       return 0;
-}
-/*
- * The following code cannot be run from FLASH!
- *
- */
-static ulong flash_get_size (ulong base, int banknum)
-{
-       flash_info_t * info = &flash_info[banknum];
-       int i, j;
-       int sect_cnt;
-       unsigned long sector;
-       unsigned long tmp;
-       int size_ratio;
-       uchar num_erase_regions;
-       int  erase_region_size;
-       int  erase_region_count;
-
-       info->start[0] = base;
-
-       if(flash_detect_cfi(info)){
-#ifdef DEBUG_FLASH
-               printf("portwidth=%d chipwidth=%d\n", info->portwidth, info->chipwidth); /* test-only */
-#endif
-               size_ratio = info->portwidth / info->chipwidth;
-               num_erase_regions = flash_read_uchar(info, FLASH_OFFSET_NUM_ERASE_REGIONS);
-#ifdef DEBUG_FLASH
-               printf("found %d erase regions\n", num_erase_regions);
-#endif
-               sect_cnt = 0;
-               sector = base;
-               for(i = 0 ; i < num_erase_regions; i++) {
-                       if(i > NUM_ERASE_REGIONS) {
-                               printf("%d erase regions found, only %d used\n",
-                                      num_erase_regions, NUM_ERASE_REGIONS);
-                               break;
-                       }
-                       tmp = flash_read_long(info, 0, FLASH_OFFSET_ERASE_REGIONS);
-                       erase_region_size = (tmp & 0xffff)? ((tmp & 0xffff) * 256): 128;
-                       tmp >>= 16;
-                       erase_region_count = (tmp & 0xffff) +1;
-                       for(j = 0; j< erase_region_count; j++) {
-                               info->start[sect_cnt] = sector;
-                               sector += (erase_region_size * size_ratio);
-                               info->protect[sect_cnt] = flash_isset(info, sect_cnt, FLASH_OFFSET_PROTECT, FLASH_STATUS_PROTECT);
-                               sect_cnt++;
-                       }
-               }
-
-               info->sector_count = sect_cnt;
-               /* multiply the size by the number of chips */
-               info->size = (1 << flash_read_uchar(info, FLASH_OFFSET_SIZE)) * size_ratio;
-               info->buffer_size = (1 << flash_read_ushort(info, 0, FLASH_OFFSET_BUFFER_SIZE));
-               tmp = 1 << flash_read_uchar(info, FLASH_OFFSET_ETOUT);
-               info->erase_blk_tout = (tmp * (1 << flash_read_uchar(info, FLASH_OFFSET_EMAX_TOUT)));
-               tmp = 1 << flash_read_uchar(info, FLASH_OFFSET_WBTOUT);
-               info->buffer_write_tout = (tmp * (1 << flash_read_uchar(info, FLASH_OFFSET_WBMAX_TOUT)));
-               tmp = 1 << flash_read_uchar(info, FLASH_OFFSET_WTOUT);
-               info->write_tout = (tmp * (1 << flash_read_uchar(info, FLASH_OFFSET_WMAX_TOUT)))/ 1000;
-               info->flash_id = FLASH_MAN_CFI;
-       }
-
-       flash_write_cmd(info, 0, 0, FLASH_CMD_RESET);
-       return(info->size);
-}
-
-
-/*-----------------------------------------------------------------------
- */
-static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
-{
-
-       cfiptr_t ctladdr;
-       cfiptr_t cptr;
-       int flag;
-
-       ctladdr.cp = flash_make_addr(info, 0, 0);
-       cptr.cp = (uchar *)dest;
-
-
-       /* Check if Flash is (sufficiently) erased */
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               flag = ((cptr.cp[0] & cword.c) == cword.c);
-               break;
-       case FLASH_CFI_16BIT:
-               flag = ((cptr.wp[0] & cword.w) == cword.w);
-               break;
-       case FLASH_CFI_32BIT:
-               flag = ((cptr.lp[0] & cword.l)  == cword.l);
-               break;
-       default:
-               return 2;
-       }
-       if(!flag)
-               return 2;
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       flash_write_cmd(info, 0, 0, FLASH_CMD_CLEAR_STATUS);
-       flash_write_cmd(info, 0, 0, FLASH_CMD_WRITE);
-
-       switch(info->portwidth) {
-       case FLASH_CFI_8BIT:
-               cptr.cp[0] = cword.c;
-               break;
-       case FLASH_CFI_16BIT:
-               cptr.wp[0] = cword.w;
-               break;
-       case FLASH_CFI_32BIT:
-               cptr.lp[0] = cword.l;
-               break;
-       }
-
-       /* re-enable interrupts if necessary */
-       if(flag)
-               enable_interrupts();
-
-       return flash_full_status_check(info, 0, info->write_tout, "write");
-}
-
-#ifdef CFG_FLASH_USE_BUFFER_WRITE
-
-/* loop through the sectors from the highest address
- * when the passed address is greater or equal to the sector address
- * we have a match
- */
-static int find_sector(flash_info_t *info, ulong addr)
-{
-       int sector;
-       for(sector = info->sector_count - 1; sector >= 0; sector--) {
-               if(addr >= info->start[sector])
-                       break;
-       }
-       return sector;
-}
-
-static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp, int len)
-{
-
-       int sector;
-       int cnt;
-       int retcode;
-       volatile cfiptr_t src;
-       volatile cfiptr_t dst;
-
-       src.cp = cp;
-       dst.cp = (uchar *)dest;
-       sector = find_sector(info, dest);
-       flash_write_cmd(info, sector, 0, FLASH_CMD_CLEAR_STATUS);
-       flash_write_cmd(info, sector, 0, FLASH_CMD_WRITE_TO_BUFFER);
-       if((retcode = flash_status_check(info, sector, info->buffer_write_tout,
-                                        "write to buffer")) == ERR_OK) {
-               switch(info->portwidth) {
-               case FLASH_CFI_8BIT:
-                       cnt = len;
-                       break;
-               case FLASH_CFI_16BIT:
-                       cnt = len >> 1;
-                       break;
-               case FLASH_CFI_32BIT:
-                       cnt = len >> 2;
-                       break;
-               default:
-                       return ERR_INVAL;
-                       break;
-               }
-               flash_write_cmd(info, sector, 0, (uchar)cnt-1);
-               while(cnt-- > 0) {
-                       switch(info->portwidth) {
-                       case FLASH_CFI_8BIT:
-                               *dst.cp++ = *src.cp++;
-                               break;
-                       case FLASH_CFI_16BIT:
-                               *dst.wp++ = *src.wp++;
-                               break;
-                       case FLASH_CFI_32BIT:
-                               *dst.lp++ = *src.lp++;
-                               break;
-                       default:
-                               return ERR_INVAL;
-                               break;
-                       }
-               }
-               flash_write_cmd(info, sector, 0, FLASH_CMD_WRITE_BUFFER_CONFIRM);
-               retcode = flash_full_status_check(info, sector, info->buffer_write_tout,
-                                            "buffer write");
-       }
-       flash_write_cmd(info, sector, 0, FLASH_CMD_CLEAR_STATUS);
-       return retcode;
-}
-#endif /* CFG_USE_FLASH_BUFFER_WRITE */
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index fef5b524331695479dbad53fcdc6bf5b74fcbb2d..22d712802dde6f1ee18b3048723721f28a73db99 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o         (.text)
     cpu/ppc4xx/traps.o         (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o                (.text)
+    cpu/ppc4xx/iop480_uart.o   (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o         (.text)
     common/dlmalloc.o          (.text)
@@ -153,7 +153,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 43f776579ef780a00497dc67bc4f6b9759373bc8..3f230507af16e68f6888b890a4df918c8e208654 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -139,7 +139,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1cf375fef56ca3f8ef4110767628b15750332ecd..e1562020eabca0e826237396dd83ee538062ca79 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 98338e9351575749055ebe1e90e80ea27261dd13..193e8b25b949858503d2d4cf6dc0c12768d875de 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 4177f68ef4dfd5002554e92b2907231c5da57efa..f83dfe870bc969ad7ff934ffa7b9168383a5ec0f 100644 (file)
@@ -25,7 +25,7 @@
 #include <command.h>
 #include <pci.h>
 #include <pci_ids.h>
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 
 
 #if defined(CONFIG_CMD_BSP)
index 476b4a055026d3f080603c73d6610437c818e985..508c5d23bb91e9a2ecd07a56a516ed215a4b5d40 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5b5ad8c4465d8afd99ac5ba5f04d13386bffd15e..9a0bf1e360337ff730ddbc00290987da4cd44501 100644 (file)
@@ -27,7 +27,7 @@
 #include <net.h>
 #include <asm/io.h>
 #include <pci.h>
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #include <asm/processor.h>
 
 #include "pci405.h"
index e5d2273f07f478e3a9c826c98792906e6b10a98f..c4ab0720091d69798147e91b07f8bc33d2ab43af 100644 (file)
@@ -26,7 +26,7 @@
 #include <command.h>
 #include <malloc.h>
 #include <pci.h>
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 
 #include "pci405.h"
 
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f026a7ac3b22d13b7664e901d9f9c753e42ea9a7..57762b54ee043e3262996e3f77323a584857d1e2 100644 (file)
@@ -109,8 +109,8 @@ int misc_init_f (void)
 
 int misc_init_r (void)
 {
-       volatile unsigned char *duart0_mcr = (unsigned char *)((ulong)DUART0_BA + 4);
-       volatile unsigned char *duart1_mcr = (unsigned char *)((ulong)DUART1_BA + 4);
+       unsigned char *duart0_mcr = (unsigned char *)((ulong)DUART0_BA + 4);
+       unsigned char *duart1_mcr = (unsigned char *)((ulong)DUART1_BA + 4);
        unsigned char *dst;
        ulong len = sizeof(fpgadata);
        int status;
@@ -184,16 +184,28 @@ int misc_init_r (void)
        /*
         * Reset external DUARTs
         */
-       out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | CFG_DUART_RST);
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_DUART_RST); /* set reset to high */
        udelay(10); /* wait 10us */
-       out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) & ~CFG_DUART_RST);
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_DUART_RST); /* set reset to low */
        udelay(1000); /* wait 1ms */
 
+       /*
+        * Set NAND-FLASH GPIO signals to default
+        */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~(CFG_NAND_CLE | CFG_NAND_ALE));
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_NAND_CE);
+
+       /*
+        * Setup EEPROM write protection
+        */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_EEPROM_WP);
+       out_be32((void*)GPIO0_TCR, in_be32((void*)GPIO0_TCR) | CFG_EEPROM_WP);
+
        /*
         * Enable interrupts in exar duart mcr[3]
         */
-       *duart0_mcr = 0x08;
-       *duart1_mcr = 0x08;
+       out_8(duart0_mcr, 0x08);
+       out_8(duart1_mcr, 0x08);
 
        return (0);
 }
@@ -259,3 +271,74 @@ void reset_phy(void)
        lxt971_no_sleep();
 #endif
 }
+
+
+#if defined(CFG_EEPROM_WREN)
+/* Input: <dev_addr>  I2C address of EEPROM device to enable.
+ *         <state>     -1: deliver current state
+ *                    0: disable write
+ *                    1: enable write
+ *  Returns:           -1: wrong device address
+ *                      0: dis-/en- able done
+ *                  0/1: current state if <state> was -1.
+ */
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+       if (CFG_I2C_EEPROM_ADDR != dev_addr) {
+               return -1;
+       } else {
+               switch (state) {
+               case 1:
+                       /* Enable write access, clear bit GPIO0. */
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO0. */
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in_be32((void*)GPIO0_OR) & CFG_EEPROM_WP));
+                       break;
+               }
+       }
+       return state;
+}
+
+int do_eep_wren (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int query = argc == 1;
+       int state = 0;
+
+       if (query) {
+               /* Query write access state. */
+               state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, -1);
+               if (state < 0) {
+                       puts ("Query of write access state failed.\n");
+               } else {
+                       printf ("Write access for device 0x%0x is %sabled.\n",
+                               CFG_I2C_EEPROM_ADDR, state ? "en" : "dis");
+                       state = 0;
+               }
+       } else {
+               if ('0' == argv[1][0]) {
+                       /* Disable write access. */
+                       state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, 0);
+               } else {
+                       /* Enable write access. */
+                       state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, 1);
+               }
+               if (state < 0) {
+                       puts ("Setup of write access state failed.\n");
+               }
+       }
+
+       return state;
+}
+
+U_BOOT_CMD(eepwren,    2,      0,      do_eep_wren,
+          "eepwren - Enable / disable / query EEPROM write access\n",
+          NULL);
+#endif /* #if defined(CFG_EEPROM_WREN) */
index 43f776579ef780a00497dc67bc4f6b9759373bc8..3f230507af16e68f6888b890a4df918c8e208654 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -139,7 +139,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index e84d69ebb7df33501b70df45508aa67c41922054..f75fe0a220f94963b252a00b7439e32f6f849d85 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -137,7 +137,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
similarity index 90%
rename from board/esd/cpci440/Makefile
rename to board/esd/pmc440/Makefile
index d13d31c9748952bd3a6ccefa7849f5416344b158..4dd9c386cdb979cca7c412e7ca8b857df1938231 100644 (file)
 #
 
 include $(TOPDIR)/config.mk
-ifneq ($(OBJTREE),$(SRCTREE))
-$(shell mkdir -p $(obj)../common)
-endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  = $(BOARD).o strataflash.o ../common/misc.o
+COBJS  = $(BOARD).o cmd_pmc440.o sdram.o fpga.o \
+       ../common/cmd_loadpci.o
+
 SOBJS  = init.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
@@ -36,7 +35,7 @@ OBJS  := $(addprefix $(obj),$(COBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
 
 $(LIB):        $(OBJS) $(SOBJS)
-       $(AR) $(ARFLAGS) $@ $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
 
 clean:
        rm -f $(SOBJS) $(OBJS)
diff --git a/board/esd/pmc440/cmd_pmc440.c b/board/esd/pmc440/cmd_pmc440.c
new file mode 100644 (file)
index 0000000..350af48
--- /dev/null
@@ -0,0 +1,558 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd Gmbh, matthias.fuchs@esd-electronics.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/io.h>
+#include <asm/cache.h>
+#include <asm/processor.h>
+
+#include "pmc440.h"
+
+int is_monarch(void);
+int bootstrap_eeprom_write(unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
+int eeprom_write_enable(unsigned dev_addr, int state);
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CMD_BSP)
+
+static int got_fifoirq;
+static int got_hcirq;
+
+int fpga_interrupt(u32 arg)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)arg;
+       int rc = -1; /* not for us */
+       u32 status = FPGA_IN32(&fpga->status);
+
+       /* check for interrupt from fifo module */
+       if (status & STATUS_FIFO_ISF) {
+               /* disable this int source */
+               FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_FIFOIE_GATE);
+               rc = 0;
+               got_fifoirq = 1; /* trigger backend */
+       }
+
+       if (status & STATUS_HOST_ISF) {
+               FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_HCINT_GATE);
+               rc = 0;
+               got_hcirq = 1;
+       }
+
+       return rc;
+}
+
+
+int do_waithci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       got_hcirq = 0;
+
+       FPGA_CLRBITS(&fpga->ctrla, CTRL_HOST_IE);
+       FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_HCINT_GATE);
+
+       irq_install_handler(IRQ0_FPGA,
+                           (interrupt_handler_t *)fpga_interrupt,
+                           fpga);
+
+       FPGA_SETBITS(&fpga->ctrla, CTRL_HOST_IE);
+
+       while (!got_hcirq) {
+               /* Abort if ctrl-c was pressed */
+               if (ctrlc()) {
+                       puts("\nAbort\n");
+                       break;
+               }
+       }
+       if (got_hcirq)
+               printf("Got interrupt!\n");
+
+       FPGA_CLRBITS(&fpga->ctrla, CTRL_HOST_IE);
+       irq_free_handler(IRQ0_FPGA);
+       return 0;
+}
+U_BOOT_CMD(
+       waithci,        1,      1,      do_waithci,
+       "waithci - Wait for host control interrupt\n",
+       NULL
+       );
+
+
+void dump_fifo(pmc440_fpga_t *fpga, int f, int *n)
+{
+       u32 ctrl;
+
+       while (!((ctrl = FPGA_IN32(&fpga->fifo[f].ctrl)) & FIFO_EMPTY)) {
+               printf("%5d  %d    %3d  %08x",
+                      (*n)++, f, ctrl & (FIFO_LEVEL_MASK | FIFO_FULL),
+                      FPGA_IN32(&fpga->fifo[f].data));
+               if (ctrl & FIFO_OVERFLOW) {
+                       printf(" OVERFLOW\n");
+                       FPGA_CLRBITS(&fpga->fifo[f].ctrl, FIFO_OVERFLOW);
+               } else
+                       printf("\n");
+       }
+}
+
+
+int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+       int i;
+       int n = 0;
+       u32 ctrl, data, f;
+       char str[] = "\\|/-";
+       int abort = 0;
+       int count = 0;
+       int count2 = 0;
+
+       switch (argc) {
+       case 1:
+               /* print all fifos status information */
+               printf("fifo level status\n");
+               printf("______________________________\n");
+               for (i=0; i<FIFO_COUNT; i++) {
+                       ctrl = FPGA_IN32(&fpga->fifo[i].ctrl);
+                       printf(" %d    %3d  %s%s%s %s\n",
+                              i, ctrl & (FIFO_LEVEL_MASK | FIFO_FULL),
+                              ctrl & FIFO_FULL ? "FULL     " : "",
+                              ctrl & FIFO_EMPTY ? "EMPTY    " : "",
+                              ctrl & (FIFO_FULL|FIFO_EMPTY) ? "" : "NOT EMPTY",
+                              ctrl & FIFO_OVERFLOW ? "OVERFLOW" : "");
+               }
+               break;
+
+       case 2:
+               /* completely read out fifo 'n' */
+               if (!strcmp(argv[1],"read")) {
+                       printf("  #   fifo level data\n");
+                       printf("______________________________\n");
+
+                       for (i=0; i<FIFO_COUNT; i++)
+                               dump_fifo(fpga, i, &n);
+
+               } else if (!strcmp(argv[1],"wait")) {
+                       got_fifoirq = 0;
+
+                       irq_install_handler(IRQ0_FPGA,
+                                           (interrupt_handler_t *)fpga_interrupt,
+                                           fpga);
+
+                       printf("  #   fifo level data\n");
+                       printf("______________________________\n");
+
+                       /* enable all fifo interrupts */
+                       FPGA_OUT32(&fpga->hostctrl,
+                                  HOSTCTRL_FIFOIE_GATE | HOSTCTRL_FIFOIE_FLAG);
+                       for (i=0; i<FIFO_COUNT; i++) {
+                               /* enable interrupts from all fifos */
+                               FPGA_SETBITS(&fpga->fifo[i].ctrl, FIFO_IE);
+                       }
+
+                       while (1) {
+                               /* wait loop */
+                               while (!got_fifoirq) {
+                                       count++;
+                                       if (!(count % 100)) {
+                                               count2++;
+                                               putc(0x08); /* backspace */
+                                               putc(str[count2 % 4]);
+                                       }
+
+                                       /* Abort if ctrl-c was pressed */
+                                       if ((abort = ctrlc())) {
+                                               puts("\nAbort\n");
+                                               break;
+                                       }
+                                       udelay(1000);
+                               }
+                               if (abort)
+                                       break;
+
+                               /* simple fifo backend */
+                               if (got_fifoirq) {
+                                       for (i=0; i<FIFO_COUNT; i++)
+                                               dump_fifo(fpga, i, &n);
+
+                                       got_fifoirq = 0;
+                                       /* unmask global fifo irq */
+                                       FPGA_OUT32(&fpga->hostctrl,
+                                                  HOSTCTRL_FIFOIE_GATE | HOSTCTRL_FIFOIE_FLAG);
+                               }
+                       }
+
+                       /* disable all fifo interrupts */
+                       FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_FIFOIE_GATE);
+                       for (i=0; i<FIFO_COUNT; i++)
+                               FPGA_CLRBITS(&fpga->fifo[i].ctrl, FIFO_IE);
+
+                       irq_free_handler(IRQ0_FPGA);
+
+               } else {
+                       printf("Usage:\nfifo %s\n", cmdtp->help);
+                       return 1;
+               }
+               break;
+
+       case 4:
+       case 5:
+               if (!strcmp(argv[1],"write")) {
+                       /* get fifo number or fifo address */
+                       f = simple_strtoul(argv[2], NULL, 16);
+
+                       /* data paramter */
+                       data = simple_strtoul(argv[3], NULL, 16);
+
+                       /* get optional count parameter */
+                       n = 1;
+                       if (argc >= 5)
+                               n = (int)simple_strtoul(argv[4], NULL, 10);
+
+                       if (f < FIFO_COUNT) {
+                               printf("writing %d x %08x to fifo %d\n",
+                                      n, data, f);
+                               for (i=0; i<n; i++)
+                                       FPGA_OUT32(&fpga->fifo[f].data, data);
+                       } else {
+                               printf("writing %d x %08x to fifo port at address %08x\n",
+                                      n, data, f);
+                               for (i=0; i<n; i++)
+                                       out32(f, data);
+                       }
+               } else {
+                       printf("Usage:\nfifo %s\n", cmdtp->help);
+                       return 1;
+               }
+               break;
+
+       default:
+               printf("Usage:\nfifo %s\n", cmdtp->help);
+               return 1;
+       }
+       return 0;
+}
+U_BOOT_CMD(
+       fifo,   5,      1,      do_fifo,
+       "fifo    - Fifo module operations\n",
+       "wait\nfifo read\n"
+       "fifo write fifo(0..3) data [cnt=1]\n"
+       "fifo write address(>=4) data [cnt=1]\n"
+       "  - without arguments: print all fifo's status\n"
+       "  - with 'wait' argument: interrupt driven read from all fifos\n"
+       "  - with 'read' argument: read current contents from all fifos\n"
+       "  - with 'write' argument: write 'data' 'cnt' times to 'fifo' or 'address'\n"
+       );
+
+
+int do_setup_bootstrap_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong sdsdp[5];
+       ulong delay;
+       int count=16;
+
+       if (argc < 2) {
+               printf("Usage:\nsbe %s\n", cmdtp->help);
+               return -1;
+       }
+
+       if (argc > 1) {
+               if (!strcmp(argv[1], "400")) {
+                       /* PLB=133MHz, PLB/PCI=3 */
+                       printf("Bootstrapping for 400MHz\n");
+                       sdsdp[0]=0x8678624e;
+                       sdsdp[1]=0x095fa030;
+                       sdsdp[2]=0x40082350;
+                       sdsdp[3]=0x0d050000;
+               } else if (!strcmp(argv[1], "533")) {
+                       /* PLB=133MHz, PLB/PCI=3 */
+                       printf("Bootstrapping for 533MHz\n");
+                       sdsdp[0]=0x87788252;
+                       sdsdp[1]=0x095fa030;
+                       sdsdp[2]=0x40082350;
+                       sdsdp[3]=0x0d050000;
+               } else if (!strcmp(argv[1], "667")) {
+                       /* PLB=133MHz, PLB/PCI=4 */
+                       printf("Bootstrapping for 667MHz\n");
+                       sdsdp[0]=0x8778a256;
+                       sdsdp[1]=0x0947a030;
+                       sdsdp[2]=0x40082350;
+                       sdsdp[3]=0x0d050000;
+               } else if (!strcmp(argv[1], "test")) {
+                       /* TODO: this will replace the 667 MHz config above.
+                        * But it needs some more testing on a real 667 MHz CPU.
+                        */
+                       printf("Bootstrapping for test (667MHz PLB=133PLB PLB/PCI=3)\n");
+                       sdsdp[0]=0x8778a256;
+                       sdsdp[1]=0x095fa030;
+                       sdsdp[2]=0x40082350;
+                       sdsdp[3]=0x0d050000;
+               } else {
+                       printf("Usage:\nsbe %s\n", cmdtp->help);
+                       return -1;
+               }
+       }
+
+       if (argc > 2) {
+               sdsdp[4] = 0;
+               if (argv[2][0]=='1')
+                       sdsdp[4]=0x19750100;
+               else if (argv[2][0]=='0')
+                       sdsdp[4]=0x19750000;
+               if (sdsdp[4])
+                       count += 4;
+       }
+
+       if (argc > 3) {
+               delay = simple_strtoul(argv[3], NULL, 10);
+               if (delay > 20)
+                       delay = 20;
+               sdsdp[4] |= delay;
+       }
+
+       printf("Writing boot EEPROM ...\n");
+       if (bootstrap_eeprom_write(CFG_I2C_BOOT_EEPROM_ADDR,
+                                  0, (uchar*)sdsdp, count) != 0)
+               printf("bootstrap_eeprom_write failed\n");
+       else
+               printf("done (dump via 'i2c md 52 0.1 14')\n");
+
+       return 0;
+}
+U_BOOT_CMD(
+       sbe, 4, 0, do_setup_bootstrap_eeprom,
+       "sbe     - setup bootstrap eeprom\n",
+       "<cpufreq:400|533|667> [<console-uart:0|1> [<bringup delay (0..20s)>]]"
+       );
+
+
+#if defined(CONFIG_PRAM)
+#include <environment.h>
+extern env_t *env_ptr;
+
+int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       u32 memsize;
+       u32 pram, env_base;
+       char *v;
+       u32 param;
+       ulong *lptr;
+
+       memsize = gd->bd->bi_memsize;
+
+       v = getenv("pram");
+       if (v)
+               pram = simple_strtoul(v, NULL, 10);
+       else {
+               printf("Error: pram undefined. Please define pram in KiB\n");
+               return 1;
+       }
+
+       param = memsize - (pram << 10);
+       printf("PARAM: @%08x\n", param);
+
+       memset((void*)param, 0, (pram << 10));
+       env_base = memsize - 4096 - ((CFG_ENV_SIZE + 4096) & ~(4096-1));
+       memcpy((void*)env_base, env_ptr, CFG_ENV_SIZE);
+
+       lptr = (ulong*)memsize;
+       *(--lptr) = CFG_ENV_SIZE;
+       *(--lptr) = memsize - env_base;
+       *(--lptr) = crc32(0, (void*)(memsize - 0x08), 0x08);
+       *(--lptr) = 0;
+
+       /* make sure data can be accessed through PCI */
+       flush_dcache_range(param, param + (pram << 10) - 1);
+       return 0;
+}
+U_BOOT_CMD(
+       painit, 1,      1,      do_painit,
+       "painit  - prepare PciAccess system\n",
+       NULL
+       );
+#endif /* CONFIG_PRAM */
+
+
+int do_selfreset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       if (argc > 1) {
+               if (argv[1][0] == '0') {
+                       /* assert */
+                       printf("self-reset# asserted\n");
+                       out_be32((void*)GPIO0_TCR,
+                                in_be32((void*)GPIO0_TCR) | GPIO0_SELF_RST);
+               } else {
+                       /* deassert */
+                       printf("self-reset# deasserted\n");
+                       out_be32((void*)GPIO0_TCR,
+                                in_be32((void*)GPIO0_TCR) & ~GPIO0_SELF_RST);
+               }
+       } else {
+               printf("self-reset# is %s\n",
+                      in_be32((void*)GPIO0_TCR) & GPIO0_SELF_RST ?
+                      "active" : "inactive");
+       }
+
+       return 0;
+}
+U_BOOT_CMD(
+       selfreset,      2,      1,      do_selfreset,
+       "selfreset- assert self-reset# signal\n",
+       NULL
+       );
+
+
+int do_resetout(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       /* requiers bootet FPGA and PLD_IOEN_N active */
+       if (in_be32((void*)GPIO1_OR) & GPIO1_IOEN_N) {
+               printf("Error: resetout requires a bootet FPGA\n");
+               return -1;
+       }
+
+       if (argc > 1) {
+               if (argv[1][0] == '0') {
+                       /* assert */
+                       printf("PMC-RESETOUT# asserted\n");
+                       FPGA_OUT32(&fpga->hostctrl,
+                                  HOSTCTRL_PMCRSTOUT_GATE);
+               } else {
+                       /* deassert */
+                       printf("PMC-RESETOUT# deasserted\n");
+                       FPGA_OUT32(&fpga->hostctrl,
+                                  HOSTCTRL_PMCRSTOUT_GATE | HOSTCTRL_PMCRSTOUT_FLAG);
+               }
+       } else {
+               printf("PMC-RESETOUT# is %s\n",
+                      FPGA_IN32(&fpga->hostctrl) & HOSTCTRL_PMCRSTOUT_FLAG ?
+                      "inactive" : "active");
+       }
+
+       return 0;
+}
+U_BOOT_CMD(
+       resetout,       2,      1,      do_resetout,
+       "resetout - assert PMC-RESETOUT# signal\n",
+       NULL
+       );
+
+
+int do_inta(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       if (is_monarch()) {
+               printf("This command is only supported in non-monarch mode\n");
+               return -1;
+       }
+
+       if (argc > 1) {
+               if (argv[1][0] == '0') {
+                       /* assert */
+                       printf("inta# asserted\n");
+                       out_be32((void*)GPIO1_TCR,
+                                in_be32((void*)GPIO1_TCR) | GPIO1_INTA_FAKE);
+               } else {
+                       /* deassert */
+                       printf("inta# deasserted\n");
+                       out_be32((void*)GPIO1_TCR,
+                                in_be32((void*)GPIO1_TCR) & ~GPIO1_INTA_FAKE);
+               }
+       } else {
+               printf("inta# is %s\n", in_be32((void*)GPIO1_TCR) & GPIO1_INTA_FAKE ? "active" : "inactive");
+       }
+       return 0;
+}
+U_BOOT_CMD(
+       inta,   2,      1,      do_inta,
+       "inta    - Assert/Deassert or query INTA# state in non-monarch mode\n",
+       NULL
+       );
+
+
+/* test-only */
+int do_pmm(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong pciaddr;
+
+       if (argc > 1) {
+               pciaddr = simple_strtoul(argv[1], NULL, 16);
+
+               pciaddr &= 0xf0000000;
+
+               /* map PCI address at 0xc0000000 in PLB space */
+               out32r(PCIX0_PMM1MA, 0x00000000); /* PMM1 Mask/Attribute - disabled b4 setting */
+               out32r(PCIX0_PMM1LA, 0xc0000000); /* PMM1 Local Address */
+               out32r(PCIX0_PMM1PCILA, pciaddr); /* PMM1 PCI Low Address */
+               out32r(PCIX0_PMM1PCIHA, 0x00000000); /* PMM1 PCI High Address */
+               out32r(PCIX0_PMM1MA, 0xf0000001); /* 256MB + No prefetching, and enable region */
+       } else {
+               printf("Usage:\npmm %s\n", cmdtp->help);
+       }
+       return 0;
+}
+U_BOOT_CMD(
+       pmm,    2,      1,      do_pmm,
+       "pmm     - Setup pmm[1] registers\n",
+       "<pciaddr> (pciaddr will be aligned to 256MB)\n"
+       );
+
+#if defined(CFG_EEPROM_WREN)
+int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int query = argc == 1;
+       int state = 0;
+
+       if (query) {
+               /* Query write access state. */
+               state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, -1);
+               if (state < 0) {
+                       puts("Query of write access state failed.\n");
+               } else {
+                       printf("Write access for device 0x%0x is %sabled.\n",
+                              CFG_I2C_EEPROM_ADDR, state ? "en" : "dis");
+                       state = 0;
+               }
+       } else {
+               if ('0' == argv[1][0]) {
+                       /* Disable write access. */
+                       state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, 0);
+               } else {
+                       /* Enable write access. */
+                       state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, 1);
+               }
+               if (state < 0) {
+                       puts("Setup of write access state failed.\n");
+               }
+       }
+
+       return state;
+}
+U_BOOT_CMD(eepwren, 2, 0, do_eep_wren,
+          "eepwren - Enable / disable / query EEPROM write access\n",
+          NULL);
+#endif /* #if defined(CFG_EEPROM_WREN) */
+
+#endif /* CONFIG_CMD_BSP */
similarity index 88%
rename from board/esd/cpci440/config.mk
rename to board/esd/pmc440/config.mk
index 8e5f63fe489e16e923c5755e764bc84f613f0f86..e62b8d30e41e09d70481af20dc1c294b02e69c20 100644 (file)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-
 #
-# esd ADCIOP boards
+# AMCC 440EPx Reference Platform (Sequoia) board
 #
 
-#TEXT_BASE = 0xFFFE0000
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
 
-ifeq ($(ramsym),1)
-TEXT_BASE = 0x07FD0000
-else
-TEXT_BASE = 0xFFFC0000
-#TEXT_BASE = 0x01fc0000
+ifndef TEXT_BASE
+TEXT_BASE = 0xFFFA0000
 endif
 
 PLATFORM_CPPFLAGS += -DCONFIG_440=1
diff --git a/board/esd/pmc440/fpga.c b/board/esd/pmc440/fpga.c
new file mode 100644 (file)
index 0000000..a35f42b
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <spartan2.h>
+#include <spartan3.h>
+#include <command.h>
+#include "fpga.h"
+#include "pmc440.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_FPGA)
+
+#define USE_SP_CODE
+
+#ifdef USE_SP_CODE
+Xilinx_Spartan3_Slave_Parallel_fns pmc440_fpga_fns = {
+       fpga_pre_config_fn,
+       fpga_pgm_fn,
+       fpga_init_fn,
+       NULL, /* err */
+       fpga_done_fn,
+       fpga_clk_fn,
+       fpga_cs_fn,
+       fpga_wr_fn,
+       NULL, /* rdata */
+       fpga_wdata_fn,
+       fpga_busy_fn,
+       fpga_abort_fn,
+       fpga_post_config_fn,
+};
+#else
+Xilinx_Spartan3_Slave_Serial_fns pmc440_fpga_fns = {
+       fpga_pre_config_fn,
+       fpga_pgm_fn,
+       fpga_clk_fn,
+       fpga_init_fn,
+       fpga_done_fn,
+       fpga_wr_fn,
+       fpga_post_config_fn,
+};
+#endif
+
+Xilinx_Spartan2_Slave_Serial_fns ngcc_fpga_fns = {
+       ngcc_fpga_pre_config_fn,
+       ngcc_fpga_pgm_fn,
+       ngcc_fpga_clk_fn,
+       ngcc_fpga_init_fn,
+       ngcc_fpga_done_fn,
+       ngcc_fpga_wr_fn,
+       ngcc_fpga_post_config_fn
+};
+
+Xilinx_desc fpga[CONFIG_FPGA_COUNT] = {
+       XILINX_XC3S1200E_DESC(
+#ifdef USE_SP_CODE
+               slave_parallel,
+#else
+               slave_serial,
+#endif
+               (void *)&pmc440_fpga_fns,
+               0),
+       XILINX_XC2S200_DESC(
+               slave_serial,
+               (void *)&ngcc_fpga_fns,
+               0)
+};
+
+
+/*
+ * Set the active-low FPGA reset signal.
+ */
+void fpga_reset(int assert)
+{
+       debug("%s:%d: RESET ", __FUNCTION__, __LINE__);
+       if (assert) {
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_DATA);
+               debug("asserted\n");
+       } else {
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_DATA);
+               debug("deasserted\n");
+       }
+}
+
+
+/*
+ * Initialize the SelectMap interface.  We assume that the mode and the
+ * initial state of all of the port pins have already been set!
+ */
+void fpga_serialslave_init(void)
+{
+       debug("%s:%d: Initialize serial slave interface\n", __FUNCTION__,
+             __LINE__);
+       fpga_pgm_fn(FALSE, FALSE, 0);   /* make sure program pin is inactive */
+}
+
+
+/*
+ * Set the FPGA's active-low SelectMap program line to the specified level
+ */
+int fpga_pgm_fn(int assert, int flush, int cookie)
+{
+       debug("%s:%d: FPGA PROGRAM ",
+             __FUNCTION__, __LINE__);
+
+       if (assert) {
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_PRG);
+               debug("asserted\n");
+       } else {
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_PRG);
+               debug("deasserted\n");
+       }
+       return assert;
+}
+
+
+/*
+ * Test the state of the active-low FPGA INIT line.  Return 1 on INIT
+ * asserted (low).
+ */
+int fpga_init_fn(int cookie)
+{
+       if (in_be32((void*)GPIO1_IR) & GPIO1_FPGA_INIT)
+               return 0;
+       else
+               return 1;
+}
+
+#ifdef USE_SP_CODE
+int fpga_abort_fn(int cookie)
+{
+       return 0;
+}
+
+
+int fpga_cs_fn(int assert_cs, int flush, int cookie)
+{
+       return assert_cs;
+}
+
+
+int fpga_busy_fn(int cookie)
+{
+       return 1;
+}
+#endif
+
+
+/*
+ * Test the state of the active-high FPGA DONE pin
+ */
+int fpga_done_fn(int cookie)
+{
+       if (in_be32((void*)GPIO1_IR) & GPIO1_FPGA_DONE)
+               return 1;
+       else
+               return 0;
+}
+
+
+/*
+ * FPGA pre-configuration function. Just make sure that
+ * FPGA reset is asserted to keep the FPGA from starting up after
+ * configuration.
+ */
+int fpga_pre_config_fn(int cookie)
+{
+       debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
+       fpga_reset(TRUE);
+
+       /* release init# */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | GPIO0_FPGA_FORCEINIT);
+       /* disable PLD IOs */
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_IOEN_N);
+       return 0;
+}
+
+
+/*
+ * FPGA post configuration function. Blip the FPGA reset line and then see if
+ * the FPGA appears to be running.
+ */
+int fpga_post_config_fn(int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+       int rc=0;
+       char *s;
+
+       debug("%s:%d: FPGA post configuration\n", __FUNCTION__, __LINE__);
+
+       /* enable PLD0..7 pins */
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_IOEN_N);
+
+       fpga_reset(TRUE);
+       udelay (100);
+       fpga_reset(FALSE);
+       udelay (100);
+
+       FPGA_OUT32(&fpga->status, (gd->board_type << STATUS_HWREV_SHIFT) & STATUS_HWREV_MASK);
+
+       /* NGCC only: enable ledlink */
+       if ((s = getenv("bd_type")) && !strcmp(s, "ngcc"))
+               FPGA_SETBITS(&fpga->ctrla, 0x29f8c000);
+
+       return rc;
+}
+
+
+int fpga_clk_fn(int assert_clk, int flush, int cookie)
+{
+       if (assert_clk)
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_CLK);
+       else
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_CLK);
+
+       return assert_clk;
+}
+
+
+int fpga_wr_fn(int assert_write, int flush, int cookie)
+{
+       if (assert_write)
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_DATA);
+       else
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_DATA);
+
+       return assert_write;
+}
+
+#ifdef USE_SP_CODE
+int fpga_wdata_fn(uchar data, int flush, int cookie)
+{
+       uchar val = data;
+       ulong or = in_be32((void*)GPIO1_OR);
+       int i = 7;
+       do {
+               /* Write data */
+               if (val & 0x80)
+                       or = (or & ~GPIO1_FPGA_CLK) | GPIO1_FPGA_DATA;
+               else
+                       or = or & ~(GPIO1_FPGA_CLK | GPIO1_FPGA_DATA);
+
+               out_be32((void*)GPIO1_OR, or);
+
+               /* Assert the clock */
+               or |= GPIO1_FPGA_CLK;
+               out_be32((void*)GPIO1_OR, or);
+               val <<= 1;
+               i --;
+       } while (i > 0);
+
+       /* Write last data bit (the 8th clock comes from the sp_load() code */
+       if (val & 0x80)
+               or = (or & ~GPIO1_FPGA_CLK) | GPIO1_FPGA_DATA;
+       else
+               or = or & ~(GPIO1_FPGA_CLK | GPIO1_FPGA_DATA);
+
+       out_be32((void*)GPIO1_OR, or);
+
+       return 0;
+}
+#endif
+
+#define NGCC_FPGA_PRG  CLOCK_EN
+#define NGCC_FPGA_DATA RESET_OUT
+#define NGCC_FPGA_DONE CLOCK_IN
+#define NGCC_FPGA_INIT IRIGB_R_IN
+#define NGCC_FPGA_CLK  CLOCK_OUT
+
+void ngcc_fpga_serialslave_init(void)
+{
+       debug("%s:%d: Initialize serial slave interface\n",
+             __FUNCTION__, __LINE__);
+
+       /* make sure program pin is inactive */
+       ngcc_fpga_pgm_fn (FALSE, FALSE, 0);
+}
+
+/*
+ * Set the active-low FPGA reset signal.
+ */
+void ngcc_fpga_reset(int assert)
+{
+       debug("%s:%d: RESET ", __FUNCTION__, __LINE__);
+
+       if (assert) {
+               FPGA_CLRBITS(NGCC_CTRL_BASE, NGCC_CTRL_FPGARST_N);
+               debug("asserted\n");
+       } else {
+               FPGA_SETBITS(NGCC_CTRL_BASE, NGCC_CTRL_FPGARST_N);
+               debug("deasserted\n");
+       }
+}
+
+
+/*
+ * Set the FPGA's active-low SelectMap program line to the specified level
+ */
+int ngcc_fpga_pgm_fn(int assert, int flush, int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       debug("%s:%d: FPGA PROGRAM ", __FUNCTION__, __LINE__);
+
+       if (assert) {
+               FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_PRG);
+               debug("asserted\n");
+       } else {
+               FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_PRG);
+               debug("deasserted\n");
+       }
+
+       return assert;
+}
+
+
+/*
+ * Test the state of the active-low FPGA INIT line.  Return 1 on INIT
+ * asserted (low).
+ */
+int ngcc_fpga_init_fn(int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       debug("%s:%d: INIT check... ", __FUNCTION__, __LINE__);
+       if (FPGA_IN32(&fpga->status) & NGCC_FPGA_INIT) {
+               debug("high\n");
+               return 0;
+       } else {
+               debug("low\n");
+               return 1;
+       }
+}
+
+
+/*
+ * Test the state of the active-high FPGA DONE pin
+ */
+int ngcc_fpga_done_fn(int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       debug("%s:%d: DONE check... ", __FUNCTION__, __LINE__);
+       if (FPGA_IN32(&fpga->status) & NGCC_FPGA_DONE) {
+               debug("DONE high\n");
+               return 1;
+       } else {
+               debug("low\n");
+               return 0;
+       }
+}
+
+
+/*
+ * FPGA pre-configuration function.
+ */
+int ngcc_fpga_pre_config_fn(int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+       debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__);
+
+       ngcc_fpga_reset(TRUE);
+       FPGA_CLRBITS(&fpga->ctrla, 0xfffffe00);
+
+       ngcc_fpga_reset(TRUE);
+       return 0;
+}
+
+
+/*
+ * FPGA post configuration function. Blip the FPGA reset line and then see if
+ * the FPGA appears to be running.
+ */
+int ngcc_fpga_post_config_fn(int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       debug("%s:%d: NGCC FPGA post configuration\n", __FUNCTION__, __LINE__);
+
+       udelay (100);
+       ngcc_fpga_reset(FALSE);
+
+       FPGA_SETBITS(&fpga->ctrla, 0x29f8c000);
+
+       return 0;
+}
+
+
+int ngcc_fpga_clk_fn(int assert_clk, int flush, int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       if (assert_clk)
+               FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_CLK);
+       else
+               FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_CLK);
+
+       return assert_clk;
+}
+
+
+int ngcc_fpga_wr_fn(int assert_write, int flush, int cookie)
+{
+       pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA;
+
+       if (assert_write)
+               FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_DATA);
+       else
+               FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_DATA);
+
+       return assert_write;
+}
+
+
+/*
+ * Initialize the fpga.  Return 1 on success, 0 on failure.
+ */
+int pmc440_init_fpga(void)
+{
+       char *s;
+
+       debug("%s:%d: Initialize FPGA interface (relocation offset = 0x%.8lx)\n",
+             __FUNCTION__, __LINE__, gd->reloc_off);
+       fpga_init(gd->reloc_off);
+
+       fpga_serialslave_init ();
+       debug("%s:%d: Adding fpga 0\n", __FUNCTION__, __LINE__);
+       fpga_add (fpga_xilinx, &fpga[0]);
+
+       /* NGCC only */
+       if ((s = getenv("bd_type")) && !strcmp(s, "ngcc")) {
+               ngcc_fpga_serialslave_init ();
+               debug("%s:%d: Adding fpga 1\n", __FUNCTION__, __LINE__);
+               fpga_add (fpga_xilinx, &fpga[1]);
+       }
+
+       return 0;
+}
+#endif /* CONFIG_FPGA */
diff --git a/board/esd/pmc440/fpga.h b/board/esd/pmc440/fpga.h
new file mode 100644 (file)
index 0000000..d61a3cf
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+extern int pmc440_init_fpga(void);
+
+extern int fpga_pgm_fn(int assert_pgm, int flush, int cookie);
+extern int fpga_init_fn(int cookie);
+extern int fpga_err_fn(int cookie);
+extern int fpga_done_fn(int cookie);
+extern int fpga_clk_fn(int assert_clk, int flush, int cookie);
+extern int fpga_cs_fn(int assert_cs, int flush, int cookie);
+extern int fpga_wr_fn(int assert_write, int flush, int cookie);
+extern int fpga_wdata_fn (uchar data, int flush, int cookie);
+extern int fpga_read_data_fn(unsigned char *data, int cookie);
+extern int fpga_write_data_fn(unsigned char data, int flush, int cookie);
+extern int fpga_busy_fn(int cookie);
+extern int fpga_abort_fn(int cookie );
+extern int fpga_pre_config_fn(int cookie );
+extern int fpga_post_config_fn(int cookie );
+
+extern int ngcc_fpga_pgm_fn(int assert_pgm, int flush, int cookie);
+extern int ngcc_fpga_init_fn(int cookie);
+extern int ngcc_fpga_done_fn(int cookie);
+extern int ngcc_fpga_clk_fn(int assert_clk, int flush, int cookie);
+extern int ngcc_fpga_wr_fn(int assert_write, int flush, int cookie);
+extern int ngcc_fpga_pre_config_fn(int cookie );
+extern int ngcc_fpga_post_config_fn(int cookie );
diff --git a/board/esd/pmc440/init.S b/board/esd/pmc440/init.S
new file mode 100644 (file)
index 0000000..148af71
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <asm-ppc/mmu.h>
+#include <config.h>
+
+/**************************************************************************
+ * TLB TABLE
+ *
+ * This table is used by the cpu boot code to setup the initial tlb
+ * entries. Rather than make broad assumptions in the cpu source tree,
+ * this table lets each board set things up however they like.
+ *
+ *  Pointer to the table is returned in r1
+ *
+ *************************************************************************/
+    .section .bootpg,"ax"
+    .globl tlbtab
+
+tlbtab:
+       tlbtab_start
+
+       /*
+        * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the
+        * speed up boot process. It is patched after relocation to enable SA_I
+        */
+#ifndef CONFIG_NAND_SPL
+       tlbentry( CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 1, AC_R|AC_W|AC_X|SA_G )
+#else
+       tlbentry( CFG_NAND_BOOT_SPL_SRC, SZ_4K, CFG_NAND_BOOT_SPL_SRC, 1, AC_R|AC_W|AC_X|SA_G )
+#endif
+
+       /* TLB-entry for DDR SDRAM (Up to 2GB) */
+#ifdef CONFIG_4xx_DCACHE
+       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G)
+#else
+       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+#endif
+
+#ifdef CFG_INIT_RAM_DCACHE
+       /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */
+       tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G )
+#endif
+
+       /* TLB-entry for PCI Memory */
+       tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entries for EBC */
+       /* PMC440 maps EBC to 0xef000000 which is handled by the peripheral
+        * tlb entry.
+        * This dummy entry is only for convinience in order not to modify the
+        * amount of entries. Currently OS/9 relies on this :-)
+        */
+       tlbentry( 0xc0000000, SZ_256M, 0xc0000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for NAND */
+       tlbentry( CFG_NAND_ADDR, SZ_1K, CFG_NAND_ADDR, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for Internal Registers & OCM */
+       tlbentry( 0xe0000000, SZ_16M, 0xe0000000, 0,  AC_R|AC_W|AC_X|SA_I )
+
+       /*TLB-entry PCI registers*/
+       tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1,  AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for peripherals */
+       tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
+
+       /* TLB-entry PCI IO space */
+       tlbentry(0xE8000000, SZ_64K, 0xE8000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
+
+       /* TODO:  what about high IO space */
+       tlbtab_end
+
+#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+       /*
+        * For NAND booting the first TLB has to be reconfigured to full size
+        * and with caching disabled after running from RAM!
+        */
+#define TLB00  TLB0(CFG_BOOT_BASE_ADDR, SZ_256M)
+#define TLB01  TLB1(CFG_BOOT_BASE_ADDR, 1)
+#define TLB02  TLB2(AC_R|AC_W|AC_X|SA_G|SA_I)
+
+       .globl  reconfig_tlb0
+reconfig_tlb0:
+       sync
+       isync
+       addi    r4,r0,0x0000            /* TLB entry #0 */
+       lis     r5,TLB00@h
+       ori     r5,r5,TLB00@l
+       tlbwe   r5,r4,0x0000            /* Save it out */
+       lis     r5,TLB01@h
+       ori     r5,r5,TLB01@l
+       tlbwe   r5,r4,0x0001            /* Save it out */
+       lis     r5,TLB02@h
+       ori     r5,r5,TLB02@l
+       tlbwe   r5,r4,0x0002            /* Save it out */
+       sync
+       isync
+       blr
+#endif
diff --git a/board/esd/pmc440/pmc440.c b/board/esd/pmc440/pmc440.c
new file mode 100644 (file)
index 0000000..edf3a14
--- /dev/null
@@ -0,0 +1,898 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com.
+ * Based on board/amcc/sequoia/sequoia.c
+ *
+ * (C) Copyright 2006
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2006
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Alain Saurel,           AMCC/IBM, alain.saurel@fr.ibm.com
+ *
+ * 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 <libfdt.h>
+#include <fdt_support.h>
+#include <ppc440.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <command.h>
+#include <i2c.h>
+#ifdef CONFIG_RESET_PHY_R
+#include <miiphy.h>
+#endif
+#include <serial.h>
+#include "fpga.h"
+#include "pmc440.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips   */
+
+ulong flash_get_size(ulong base, int banknum);
+int pci_is_66mhz(void);
+int bootstrap_eeprom_read(unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
+
+
+struct serial_device *default_serial_console(void)
+{
+       uchar buf[4];
+       ulong delay;
+       int i;
+       ulong val;
+
+       /*
+        * Use default console on P4 when strapping jumper
+        * is installed (bootstrap option != 'H').
+        */
+       mfsdr(SDR_PINSTP, val);
+       if (((val & 0xf0000000) >> 29) != 7)
+               return &serial1_device;
+
+       ulong scratchreg = in_be32((void*)GPIO0_ISR3L);
+       if (!(scratchreg & 0x80)) {
+               /* mark scratchreg valid */
+               scratchreg = (scratchreg & 0xffffff00) | 0x80;
+
+               i = bootstrap_eeprom_read(CFG_I2C_BOOT_EEPROM_ADDR, 0x10, buf, 4);
+               if ((i != -1) && (buf[0] == 0x19) && (buf[1] == 0x75)) {
+                       scratchreg |= buf[2];
+
+                       /* bringup delay for console */
+                       for (delay=0; delay<(1000 * (ulong)buf[3]); delay++) {
+                               udelay(1000);
+                       }
+               } else
+                       scratchreg |= 0x01;
+               out_be32((void*)GPIO0_ISR3L, scratchreg);
+       }
+
+       if (scratchreg & 0x01)
+               return &serial1_device;
+       else
+               return &serial0_device;
+}
+
+int board_early_init_f(void)
+{
+       u32 sdr0_cust0;
+       u32 sdr0_pfc1, sdr0_pfc2;
+       u32 reg;
+
+       /* general EBC configuration (disable EBC timeouts) */
+       mtdcr(ebccfga, xbcfg);
+       mtdcr(ebccfgd, 0xf8400000);
+
+       /*--------------------------------------------------------------------
+        * Setup the GPIO pins
+        * TODO: setup GPIOs via CFG_4xx_GPIO_TABLE in board's config file
+        *-------------------------------------------------------------------*/
+       out32(GPIO0_OR,    0x40000002);
+       out32(GPIO0_TCR,   0x4c90011f);
+       out32(GPIO0_OSRL,  0x28011400);
+       out32(GPIO0_OSRH,  0x55005000);
+       out32(GPIO0_TSRL,  0x08011400);
+       out32(GPIO0_TSRH,  0x55005000);
+       out32(GPIO0_ISR1L, 0x54000000);
+       out32(GPIO0_ISR1H, 0x00000000);
+       out32(GPIO0_ISR2L, 0x44000000);
+       out32(GPIO0_ISR2H, 0x00000100);
+       out32(GPIO0_ISR3L, 0x00000000);
+       out32(GPIO0_ISR3H, 0x00000000);
+
+       out32(GPIO1_OR,    0x80002408);
+       out32(GPIO1_TCR,   0xd6003c08);
+       out32(GPIO1_OSRL,  0x0a5a0000);
+       out32(GPIO1_OSRH,  0x00000000);
+       out32(GPIO1_TSRL,  0x00000000);
+       out32(GPIO1_TSRH,  0x00000000);
+       out32(GPIO1_ISR1L, 0x00005555);
+       out32(GPIO1_ISR1H, 0x40000000);
+       out32(GPIO1_ISR2L, 0x04010000);
+       out32(GPIO1_ISR2H, 0x00000000);
+       out32(GPIO1_ISR3L, 0x01400000);
+       out32(GPIO1_ISR3H, 0x00000000);
+
+       /* patch PLB:PCI divider for 66MHz PCI */
+       mfcpr(clk_spcid, reg);
+       if (pci_is_66mhz() && (reg != 0x02000000)) {
+               mtcpr(clk_spcid, 0x02000000); /* 133MHZ : 2 for 66MHz PCI */
+
+               mfcpr(clk_icfg, reg);
+               reg |= CPR0_ICFG_RLI_MASK;
+               mtcpr(clk_icfg, reg);
+
+               mtspr(dbcr0, 0x20000000); /* do chip reset */
+       }
+
+       /*--------------------------------------------------------------------
+        * Setup the interrupt controller polarities, triggers, etc.
+        *-------------------------------------------------------------------*/
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
+       mtdcr(uic0pr, 0xfffff7ef);
+       mtdcr(uic0tr, 0x00000000);
+       mtdcr(uic0vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+       mtdcr(uic1er, 0x00000000);      /* disable all */
+       mtdcr(uic1cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic1pr, 0xffffc7f5);
+       mtdcr(uic1tr, 0x00000000);
+       mtdcr(uic1vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+       mtdcr(uic2er, 0x00000000);      /* disable all */
+       mtdcr(uic2cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic2pr, 0x27ffffff);
+       mtdcr(uic2tr, 0x00000000);
+       mtdcr(uic2vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+
+       /* select Ethernet pins */
+       mfsdr(SDR0_PFC1, sdr0_pfc1);
+       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) | SDR0_PFC1_SELECT_CONFIG_4;
+       mfsdr(SDR0_PFC2, sdr0_pfc2);
+       sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) | SDR0_PFC2_SELECT_CONFIG_4;
+
+       /* enable 2nd IIC */
+       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL;
+
+       mtsdr(SDR0_PFC2, sdr0_pfc2);
+       mtsdr(SDR0_PFC1, sdr0_pfc1);
+
+       /* setup NAND FLASH */
+       mfsdr(SDR0_CUST0, sdr0_cust0);
+       sdr0_cust0 = SDR0_CUST0_MUX_NDFC_SEL    |
+               SDR0_CUST0_NDFC_ENABLE          |
+               SDR0_CUST0_NDFC_BW_8_BIT        |
+               SDR0_CUST0_NDFC_ARE_MASK        |
+               (0x80000000 >> (28 + CFG_NAND_CS));
+       mtsdr(SDR0_CUST0, sdr0_cust0);
+
+       return 0;
+}
+
+/*---------------------------------------------------------------------------+
+  | misc_init_r.
+  +---------------------------------------------------------------------------*/
+int misc_init_r(void)
+{
+       uint pbcr;
+       int size_val = 0;
+       u32 reg;
+       unsigned long usb2d0cr = 0;
+       unsigned long usb2phy0cr, usb2h0cr = 0;
+       unsigned long sdr0_pfc1;
+       char *act = getenv("usbact");
+
+       /*
+        * FLASH stuff...
+        */
+
+       /* Re-do sizing to get full correct info */
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+#if defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
+       mtdcr(ebccfga, pb2cr);
+#else
+       mtdcr(ebccfga, pb0cr);
+#endif
+       pbcr = mfdcr(ebccfgd);
+       switch (gd->bd->bi_flashsize) {
+       case 1 << 20:
+               size_val = 0;
+               break;
+       case 2 << 20:
+               size_val = 1;
+               break;
+       case 4 << 20:
+               size_val = 2;
+               break;
+       case 8 << 20:
+               size_val = 3;
+               break;
+       case 16 << 20:
+               size_val = 4;
+               break;
+       case 32 << 20:
+               size_val = 5;
+               break;
+       case 64 << 20:
+               size_val = 6;
+               break;
+       case 128 << 20:
+               size_val = 7;
+               break;
+       }
+       pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
+#if defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
+       mtdcr(ebccfga, pb2cr);
+#else
+       mtdcr(ebccfga, pb0cr);
+#endif
+       mtdcr(ebccfgd, pbcr);
+
+       /*
+        * Re-check to get correct base address
+        */
+       flash_get_size(gd->bd->bi_flashstart, 0);
+
+#ifdef CFG_ENV_IS_IN_FLASH
+       /* Monitor protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           -CFG_MONITOR_LEN,
+                           0xffffffff,
+                           &flash_info[0]);
+
+       /* Env protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           CFG_ENV_ADDR_REDUND,
+                           CFG_ENV_ADDR_REDUND + 2*CFG_ENV_SECT_SIZE - 1,
+                           &flash_info[0]);
+#endif
+
+       /*
+        * USB suff...
+        */
+       if ((act == NULL || strcmp(act, "hostdev") == 0) &&
+           !(in_be32((void*)GPIO0_IR) & GPIO0_USB_PRSNT)){
+               /* SDR Setting */
+               mfsdr(SDR0_PFC1, sdr0_pfc1);
+               mfsdr(SDR0_USB2D0CR, usb2d0cr);
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mfsdr(SDR0_USB2H0CR, usb2h0cr);
+
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;    /*1*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;         /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;          /*1*/
+
+               /* An 8-bit/60MHz interface is the only possible alternative
+                  when connecting the Device to the PHY */
+               usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;        /*1*/
+
+               usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+               sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
+
+               mtsdr(SDR0_PFC1, sdr0_pfc1);
+               mtsdr(SDR0_USB2D0CR, usb2d0cr);
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mtsdr(SDR0_USB2H0CR, usb2h0cr);
+
+               /*clear resets*/
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x00000000);
+               udelay(1000);
+               mtsdr(SDR0_SRST0, 0x00000000);
+
+               printf("USB:   Host\n");
+
+       } else if ((strcmp(act, "dev") == 0) || (in_be32((void*)GPIO0_IR) & GPIO0_USB_PRSNT)) {
+               /*-------------------PATCH-------------------------------*/
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;         /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;          /*1*/
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+
+               udelay (1000);
+               mtsdr(SDR0_SRST1, 0x672c6000);
+
+               udelay (1000);
+               mtsdr(SDR0_SRST0, 0x00000080);
+
+               udelay (1000);
+               mtsdr(SDR0_SRST1, 0x60206000);
+
+               *(unsigned int *)(0xe0000350) = 0x00000001;
+
+               udelay (1000);
+               mtsdr(SDR0_SRST1, 0x60306000);
+               /*-------------------PATCH-------------------------------*/
+
+               /* SDR Setting */
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mfsdr(SDR0_USB2H0CR, usb2h0cr);
+               mfsdr(SDR0_USB2D0CR, usb2d0cr);
+               mfsdr(SDR0_PFC1, sdr0_pfc1);
+
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;     /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;          /*1*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;           /*0*/
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;           /*0*/
+
+               usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;         /*0*/
+
+               usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+
+               sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;                /*1*/
+
+               mtsdr(SDR0_USB2H0CR, usb2h0cr);
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mtsdr(SDR0_USB2D0CR, usb2d0cr);
+               mtsdr(SDR0_PFC1, sdr0_pfc1);
+
+               /*clear resets*/
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x00000000);
+               udelay(1000);
+               mtsdr(SDR0_SRST0, 0x00000000);
+
+               printf("USB:   Device\n");
+       }
+
+       /*
+        * Clear PLB4A0_ACR[WRP]
+        * This fix will make the MAL burst disabling patch for the Linux
+        * EMAC driver obsolete.
+        */
+       reg = mfdcr(plb4_acr) & ~PLB4_ACR_WRP;
+       mtdcr(plb4_acr, reg);
+
+#ifdef CONFIG_FPGA
+       pmc440_init_fpga();
+#endif
+
+       /* turn off POST LED */
+       out_be32((void*)GPIO1_OR,  in_be32((void*)GPIO1_OR) & ~GPIO1_POST_N);
+       /* turn on RUN LED */
+       out_be32((void*)GPIO0_OR,  in_be32((void*)GPIO0_OR) & ~GPIO0_LED_RUN_N);
+       return 0;
+}
+
+int is_monarch(void)
+{
+       if (in_be32((void*)GPIO1_IR) & GPIO1_NONMONARCH)
+               return 0;
+
+       return 1;
+}
+
+int pci_is_66mhz(void)
+{
+       if (in_be32((void*)GPIO1_IR) & GPIO1_M66EN)
+               return 1;
+       return 0;
+}
+
+int board_revision(void)
+{
+       return (int)((in_be32((void*)GPIO1_IR) & GPIO1_HWID_MASK) >> 4);
+}
+
+int checkboard(void)
+{
+       puts("Board: esd GmbH - PMC440");
+
+       gd->board_type = board_revision();
+       printf(", Rev 1.%ld, ", gd->board_type);
+
+       if (!is_monarch()) {
+               puts("non-");
+       }
+
+       printf("monarch, PCI=%s MHz\n", pci_is_66mhz() ? "66" : "33");
+       return (0);
+}
+
+
+#if defined(CONFIG_PCI) && defined(CONFIG_PCI_PNP)
+/*
+ * Assign interrupts to PCI devices. Some OSs rely on this.
+ */
+void pmc440_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
+{
+       unsigned char int_line[] = {IRQ_PCIC, IRQ_PCID, IRQ_PCIA, IRQ_PCIB};
+
+       pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE,
+                                  int_line[PCI_DEV(dev) & 0x03]);
+}
+#endif
+
+/*************************************************************************
+ *  pci_pre_init
+ *
+ *  This routine is called just prior to registering the hose and gives
+ *  the board the opportunity to check things. Returning a value of zero
+ *  indicates that things are bad & PCI initialization should be aborted.
+ *
+ *     Different boards may wish to customize the pci controller structure
+ *     (add regions, override default access routines, etc) or perform
+ *     certain pre-initialization actions.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int pci_pre_init(struct pci_controller *hose)
+{
+       unsigned long addr;
+
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB3 devices to 0.
+         | Set PLB3 arbiter to fair mode.
+         +-------------------------------------------------------------------------*/
+       mfsdr(sdr_amp1, addr);
+       mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb3_acr);
+       mtdcr(plb3_acr, addr | 0x80000000);
+
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB4 devices to 0.
+         +-------------------------------------------------------------------------*/
+       mfsdr(sdr_amp0, addr);
+       mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
+       mtdcr(plb4_acr, addr);
+
+       /*-------------------------------------------------------------------------+
+         | Set Nebula PLB4 arbiter to fair mode.
+         +-------------------------------------------------------------------------*/
+       /* Segment0 */
+       addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
+       addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
+       addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
+       addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
+       mtdcr(plb0_acr, addr);
+
+       /* Segment1 */
+       addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
+       addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
+       addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
+       addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
+       mtdcr(plb1_acr, addr);
+
+#ifdef CONFIG_PCI_PNP
+       hose->fixup_irq = pmc440_pci_fixup_irq;
+#endif
+
+       return 1;
+}
+#endif /* defined(CONFIG_PCI) */
+
+/*************************************************************************
+ *  pci_target_init
+ *
+ *     The bootstrap configuration provides default settings for the pci
+ *     inbound map (PIM). But the bootstrap config choices are limited and
+ *     may not be sufficient for a given board.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
+void pci_target_init(struct pci_controller *hose)
+{
+       /*--------------------------------------------------------------------------+
+        * Set up Direct MMIO registers
+        *--------------------------------------------------------------------------*/
+       /*--------------------------------------------------------------------------+
+         | PowerPC440EPX PCI Master configuration.
+         | Map one 1Gig range of PLB/processor addresses to PCI memory space.
+         |   PLB address 0x80000000-0xBFFFFFFF ==> PCI address 0x80000000-0xBFFFFFFF
+         |   Use byte reversed out routines to handle endianess.
+         | Make this region non-prefetchable.
+         +--------------------------------------------------------------------------*/
+       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+       out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
+       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE);       /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM0PCIHA, 0x00000000);    /* PMM0 PCI High Address */
+       out32r(PCIX0_PMM0MA, 0xc0000001);       /* 1G + No prefetching, and enable region */
+
+       if (!is_monarch()) {
+               /* BAR1: top 64MB of RAM */
+               out32r(PCIX0_PTM1MS, 0xfc000001);       /* Memory Size/Attribute */
+               out32r(PCIX0_PTM1LA, 0x0c000000);       /* Local Addr. Reg */
+       } else {
+               /* BAR1: complete 256MB RAM (TODO: make dynamic) */
+               out32r(PCIX0_PTM1MS, 0xf0000001);       /* Memory Size/Attribute */
+               out32r(PCIX0_PTM1LA, 0x00000000);       /* Local Addr. Reg */
+       }
+
+       /* BAR2: 16 MB FPGA registers */
+       out32r(PCIX0_PTM2MS, 0xff000001);       /* Memory Size/Attribute */
+       out32r(PCIX0_PTM2LA, 0xef000000);       /* Local Addr. Reg */
+
+       if (is_monarch()) {
+               /* BAR2: map FPGA registers behind system memory at 1GB */
+               pci_write_config_dword(0, PCI_BASE_ADDRESS_2, 0x40000008);
+       }
+
+       /*--------------------------------------------------------------------------+
+        * Set up Configuration registers
+        *--------------------------------------------------------------------------*/
+
+       /* Program the board's vendor id */
+       pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
+                             CFG_PCI_SUBSYS_VENDORID);
+
+#if 0   /* disabled for PMC405 backward compatibility */
+       /* Configure command register as bus master */
+       pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
+#endif
+
+       /* 240nS PCI clock */
+       pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
+
+       /* No error reporting */
+       pci_write_config_word(0, PCI_ERREN, 0);
+
+       pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
+
+       if (!is_monarch()) {
+               /* Program the board's subsystem id/classcode */
+               pci_write_config_word(0, PCI_SUBSYSTEM_ID,
+                                     CFG_PCI_SUBSYS_ID_NONMONARCH);
+               pci_write_config_word(0, PCI_CLASS_SUB_CODE,
+                                     CFG_PCI_CLASSCODE_NONMONARCH);
+
+               /* PCI configuration done: release ERREADY */
+               out_be32((void*)GPIO1_OR,  in_be32((void*)GPIO1_OR)  | GPIO1_PPC_EREADY);
+               out_be32((void*)GPIO1_TCR, in_be32((void*)GPIO1_TCR) | GPIO1_PPC_EREADY);
+       } else {
+               /* Program the board's subsystem id/classcode */
+               pci_write_config_word(0, PCI_SUBSYSTEM_ID,
+                                     CFG_PCI_SUBSYS_ID_MONARCH);
+               pci_write_config_word(0, PCI_CLASS_SUB_CODE,
+                                     CFG_PCI_CLASSCODE_MONARCH);
+       }
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+
+/*************************************************************************
+ *  pci_master_init
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
+void pci_master_init(struct pci_controller *hose)
+{
+       unsigned short temp_short;
+
+       /*--------------------------------------------------------------------------+
+         | Write the PowerPC440 EP PCI Configuration regs.
+         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
+         +--------------------------------------------------------------------------*/
+       if (is_monarch()) {
+               pci_read_config_word(0, PCI_COMMAND, &temp_short);
+               pci_write_config_word(0, PCI_COMMAND,
+                                     temp_short | PCI_COMMAND_MASTER |
+                                     PCI_COMMAND_MEMORY);
+       }
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
+
+
+static void wait_for_pci_ready(void)
+{
+       int i;
+       char *s = getenv("pcidelay");
+       if (s) {
+               int ms = simple_strtoul(s, NULL, 10);
+               printf("PCI:   Waiting for %d ms\n", ms);
+               for (i=0; i<ms; i++)
+                       udelay(1000);
+       }
+
+       if (!(in_be32((void*)GPIO1_IR) & GPIO1_PPC_EREADY)) {
+               printf("PCI:   Waiting for EREADY (CTRL-C to skip) ... ");
+               while (1) {
+                       if (ctrlc()) {
+                               puts("abort\n");
+                               break;
+                       }
+                       if (in_be32((void*)GPIO1_IR) & GPIO1_PPC_EREADY) {
+                               printf("done\n");
+                               break;
+                       }
+               }
+       }
+}
+
+
+/*************************************************************************
+ *  is_pci_host
+ *
+ *     This routine is called to determine if a pci scan should be
+ *     performed. With various hardware environments (especially cPCI and
+ *     PPMC) it's insufficient to depend on the state of the arbiter enable
+ *     bit in the strap register, or generic host/adapter assumptions.
+ *
+ *     Rather than hard-code a bad assumption in the general 440 code, the
+ *     440 pci code requires the board to decide at runtime.
+ *
+ *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ *
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int is_pci_host(struct pci_controller *hose)
+{
+       char *s = getenv("pciscan");
+       if (s == NULL)
+               if (is_monarch()) {
+                       wait_for_pci_ready();
+                       return 1;
+               } else
+                       return 0;
+       else if (!strcmp(s, "yes"))
+               return 1;
+
+       return 0;
+}
+#endif /* defined(CONFIG_PCI) */
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;       /* No hotkeys supported */
+}
+#endif /* CONFIG_POST */
+
+
+#ifdef CONFIG_RESET_PHY_R
+void reset_phy(void)
+{
+       if (miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x1f, 0x0001) == 0) {
+               miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x11, 0x0010);
+               miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x11, 0x0df0);
+               miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x10, 0x0e10);
+               miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x1f, 0x0000);
+       }
+
+       if (miiphy_write("ppc_4xx_eth1", CONFIG_PHY1_ADDR, 0x1f, 0x0001) == 0) {
+               miiphy_write("ppc_4xx_eth1", CONFIG_PHY1_ADDR, 0x11, 0x0010);
+               miiphy_write("ppc_4xx_eth1", CONFIG_PHY1_ADDR, 0x11, 0x0df0);
+               miiphy_write("ppc_4xx_eth1", CONFIG_PHY1_ADDR, 0x10, 0x0e10);
+               miiphy_write("ppc_4xx_eth1", CONFIG_PHY1_ADDR, 0x1f, 0x0000);
+       }
+}
+#endif
+
+#if defined(CFG_EEPROM_WREN)
+/* Input: <dev_addr>  I2C address of EEPROM device to enable.
+ *         <state>     -1: deliver current state
+ *                    0: disable write
+ *                    1: enable write
+ *  Returns:           -1: wrong device address
+ *                      0: dis-/en- able done
+ *                  0/1: current state if <state> was -1.
+ */
+int eeprom_write_enable(unsigned dev_addr, int state)
+{
+       if ((CFG_I2C_EEPROM_ADDR != dev_addr) && (CFG_I2C_BOOT_EEPROM_ADDR != dev_addr)) {
+               return -1;
+       } else {
+               switch (state) {
+               case 1:
+                       /* Enable write access, clear bit GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) & ~GPIO0_EP_EEP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) | GPIO0_EP_EEP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in32(GPIO0_OR) & GPIO0_EP_EEP));
+                       break;
+               }
+       }
+       return state;
+}
+#endif /* #if defined(CFG_EEPROM_WREN) */
+
+
+#define CFG_BOOT_EEPROM_PAGE_WRITE_BITS 3
+int bootstrap_eeprom_write(unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt)
+{
+       unsigned end = offset + cnt;
+       unsigned blk_off;
+       int rcode = 0;
+
+#if defined(CFG_EEPROM_WREN)
+       eeprom_write_enable(dev_addr, 1);
+#endif
+       /* Write data until done or would cross a write page boundary.
+        * We must write the address again when changing pages
+        * because the address counter only increments within a page.
+        */
+
+       while (offset < end) {
+               unsigned alen, len;
+               unsigned maxlen;
+               uchar addr[2];
+
+               blk_off = offset & 0xFF;        /* block offset */
+
+               addr[0] = offset >> 8;          /* block number */
+               addr[1] = blk_off;              /* block offset */
+               alen    = 2;
+               addr[0] |= dev_addr;            /* insert device address */
+
+               len = end - offset;
+
+#define        BOOT_EEPROM_PAGE_SIZE      (1 << CFG_BOOT_EEPROM_PAGE_WRITE_BITS)
+#define        BOOT_EEPROM_PAGE_OFFSET(x) ((x) & (BOOT_EEPROM_PAGE_SIZE - 1))
+
+               maxlen = BOOT_EEPROM_PAGE_SIZE - BOOT_EEPROM_PAGE_OFFSET(blk_off);
+               if (maxlen > I2C_RXTX_LEN)
+                       maxlen = I2C_RXTX_LEN;
+
+               if (len > maxlen)
+                       len = maxlen;
+
+               if (i2c_write (addr[0], offset, alen-1, buffer, len) != 0)
+                       rcode = 1;
+
+               buffer += len;
+               offset += len;
+
+#if defined(CFG_EEPROM_PAGE_WRITE_DELAY_MS)
+               udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
+#endif
+       }
+#if defined(CFG_EEPROM_WREN)
+       eeprom_write_enable(dev_addr, 0);
+#endif
+       return rcode;
+}
+
+
+int bootstrap_eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt)
+{
+       unsigned end = offset + cnt;
+       unsigned blk_off;
+       int rcode = 0;
+
+       /* Read data until done or would cross a page boundary.
+        * We must write the address again when changing pages
+        * because the next page may be in a different device.
+        */
+       while (offset < end) {
+               unsigned alen, len;
+               unsigned maxlen;
+               uchar addr[2];
+
+               blk_off = offset & 0xFF;        /* block offset */
+
+               addr[0] = offset >> 8;          /* block number */
+               addr[1] = blk_off;              /* block offset */
+               alen    = 2;
+
+               addr[0] |= dev_addr;            /* insert device address */
+
+               len = end - offset;
+
+               maxlen = 0x100 - blk_off;
+               if (maxlen > I2C_RXTX_LEN)
+                       maxlen = I2C_RXTX_LEN;
+               if (len > maxlen)
+                       len = maxlen;
+
+               if (i2c_read (addr[0], offset, alen-1, buffer, len) != 0)
+                       rcode = 1;
+               buffer += len;
+               offset += len;
+       }
+
+       return rcode;
+}
+
+
+#if defined(CONFIG_USB_OHCI_NEW) && defined(CFG_USB_OHCI_BOARD_INIT)
+int usb_board_init(void)
+{
+       char *act = getenv("usbact");
+       int i;
+
+       if ((act == NULL || strcmp(act, "hostdev") == 0) &&
+           !(in_be32((void*)GPIO0_IR) & GPIO0_USB_PRSNT))
+               /* enable power on USB socket */
+               out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_USB_PWR_N);
+
+       for (i=0; i<1000; i++)
+               udelay(1000);
+
+       return 0;
+}
+
+int usb_board_stop(void)
+{
+       /* disable power on USB socket */
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_USB_PWR_N);
+       return 0;
+}
+
+int usb_board_init_fail(void)
+{
+       usb_board_stop();
+       return 0;
+}
+#endif /* defined(CONFIG_USB_OHCI) && defined(CFG_USB_OHCI_BOARD_INIT) */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 val[4];
+       int rc;
+
+       ft_cpu_setup(blob, bd);
+
+       /* Fixup NOR mapping */
+       val[0] = 0;                             /* chip select number */
+       val[1] = 0;                             /* always 0 */
+       val[2] = gd->bd->bi_flashstart;
+       val[3] = gd->bd->bi_flashsize;
+       rc = fdt_find_and_setprop(blob, "/plb/opb/ebc", "ranges",
+                                 val, sizeof(val), 1);
+       if (rc)
+               printf("Unable to update property NOR mapping, err=%s\n",
+                      fdt_strerror(rc));
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
diff --git a/board/esd/pmc440/pmc440.h b/board/esd/pmc440/pmc440.h
new file mode 100644 (file)
index 0000000..7e70fd1
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __PMC440_H__
+#define __PMC440_H__
+
+
+/*-----------------------------------------------------------------------
+ * GPIOs
+ */
+#define GPIO1_INTA_FAKE           (0x80000000 >> (45-32)) /* GPIO45 OD */
+#define GPIO1_NONMONARCH          (0x80000000 >> (63-32)) /* GPIO63 I */
+#define GPIO1_PPC_EREADY          (0x80000000 >> (62-32)) /* GPIO62 I/O */
+#define GPIO1_M66EN               (0x80000000 >> (61-32)) /* GPIO61 I */
+#define GPIO1_POST_N              (0x80000000 >> (60-32)) /* GPIO60 O */
+#define GPIO1_IOEN_N              (0x80000000 >> (50-32)) /* GPIO50 O */
+#define GPIO1_HWID_MASK           (0xf0000000 >> (56-32)) /* GPIO56..59 I */
+
+#define GPIO1_USB_PWR_N           (0x80000000 >> (32-32)) /* GPIO32 I */
+#define GPIO0_LED_RUN_N           (0x80000000 >> 30)      /* GPIO30 O */
+#define GPIO0_EP_EEP              (0x80000000 >> 23)      /* GPIO23 O */
+#define GPIO0_USB_ID              (0x80000000 >> 21)      /* GPIO21 I */
+#define GPIO0_USB_PRSNT           (0x80000000 >> 20)      /* GPIO20 I */
+#define GPIO0_SELF_RST            (0x80000000 >> 6)       /* GPIO6  OD */
+
+/* FPGA programming pin configuration */
+#define GPIO1_FPGA_PRG            (0x80000000 >> (53-32)) /* FPGA program pin (ppc output) */
+#define GPIO1_FPGA_CLK            (0x80000000 >> (51-32)) /* FPGA clk pin (ppc output)     */
+#define GPIO1_FPGA_DATA           (0x80000000 >> (52-32)) /* FPGA data pin (ppc output)    */
+#define GPIO1_FPGA_DONE           (0x80000000 >> (55-32)) /* FPGA done pin (ppc input)     */
+#define GPIO1_FPGA_INIT           (0x80000000 >> (54-32)) /* FPGA init pin (ppc input)     */
+#define GPIO0_FPGA_FORCEINIT      (0x80000000 >> 27)      /* low: force INIT# low */
+
+/*-----------------------------------------------------------------------
+ * FPGA interface
+ */
+#define FPGA_BA CFG_FPGA_BASE0
+#define FPGA_OUT32(p,v) out_be32(((void*)(p)), (v))
+#define FPGA_IN32(p) in_be32((void*)(p))
+#define FPGA_SETBITS(p,v) out_be32(((void*)(p)), in_be32((void*)(p)) | (v))
+#define FPGA_CLRBITS(p,v) out_be32(((void*)(p)), in_be32((void*)(p)) & ~(v))
+
+struct pmc440_fifo_s {
+       u32 data;
+       u32 ctrl;
+};
+
+/* fifo ctrl register */
+#define FIFO_IE              (1 << 15)
+#define FIFO_OVERFLOW        (1 << 10)
+#define FIFO_EMPTY           (1 <<  9)
+#define FIFO_FULL            (1 <<  8)
+#define FIFO_LEVEL_MASK      0x000000ff
+
+#define FIFO_COUNT           4
+
+struct pmc440_fpga_s {
+       u32 ctrla;
+       u32 status;
+       u32 ctrlb;
+       u32 pad1[0x40 / sizeof(u32) - 3];
+       u32 irig_time;                  /* offset: 0x0040 */
+       u32 irig_tod;
+       u32 irig_cf;
+       u32 pad2;
+       u32 irig_rx_time;               /* offset: 0x0050 */
+       u32 pad3[3];
+       u32 hostctrl;                   /* offset: 0x0060 */
+       u32 pad4[0x20 / sizeof(u32) - 1];
+       struct pmc440_fifo_s fifo[FIFO_COUNT]; /* 0x0080..0x009f */
+};
+
+typedef struct pmc440_fpga_s pmc440_fpga_t;
+
+/* ctrl register */
+#define CTRL_HOST_IE         (1 <<  8)
+
+/* outputs */
+#define RESET_EN    (1 << 31)
+#define CLOCK_EN    (1 << 30)
+#define RESET_OUT   (1 << 19)
+#define CLOCK_OUT   (1 << 22)
+#define RESET_OUT   (1 << 19)
+#define IRIGB_R_OUT (1 << 14)
+
+
+/* status register */
+#define STATUS_VERSION_SHIFT 24
+#define STATUS_VERSION_MASK  0xff000000
+#define STATUS_HWREV_SHIFT   20
+#define STATUS_HWREV_MASK    0x00f00000
+
+#define STATUS_CAN_ISF       (1 << 11)
+#define STATUS_CSTM_ISF      (1 << 10)
+#define STATUS_FIFO_ISF      (1 <<  9)
+#define STATUS_HOST_ISF      (1 <<  8)
+
+
+/* inputs */
+#define RESET_IN    (1 << 0)
+#define CLOCK_IN    (1 << 1)
+#define IRIGB_R_IN  (1 << 5)
+
+
+/* hostctrl register */
+#define HOSTCTRL_PMCRSTOUT_GATE (1 <<  17)
+#define HOSTCTRL_PMCRSTOUT_FLAG (1 <<  16)
+#define HOSTCTRL_CSTM1IE_GATE (1 <<  7)
+#define HOSTCTRL_CSTM1IW_FLAG (1 <<  6)
+#define HOSTCTRL_CSTM0IE_GATE (1 <<  5)
+#define HOSTCTRL_CSTM0IW_FLAG (1 <<  4)
+#define HOSTCTRL_FIFOIE_GATE (1 <<  3)
+#define HOSTCTRL_FIFOIE_FLAG (1 <<  2)
+#define HOSTCTRL_HCINT_GATE  (1 <<  1)
+#define HOSTCTRL_HCINT_FLAG  (1 <<  0)
+
+#define NGCC_CTRL_BASE         (CFG_FPGA_BASE0 + 0x80000)
+#define NGCC_CTRL_FPGARST_N    (1 <<  2)
+
+/*-----------------------------------------------------------------------
+ * FPGA to PPC interrupt
+ */
+#define IRQ0_FPGA            (32+28) /* UIC1 - FPGA internal */
+#define IRQ1_FPGA            (32+30) /* UIC1 - custom module */
+#define IRQ2_FPGA            (64+ 3) /* UIC2 - custom module / CAN */
+#define IRQ_ETH0             (64+ 4) /* UIC2 */
+#define IRQ_ETH1             (   27) /* UIC0 */
+#define IRQ_RTC              (64+ 0) /* UIC2 */
+#define IRQ_PCIA             (64+ 1) /* UIC2 */
+#define IRQ_PCIB             (32+18) /* UIC1 */
+#define IRQ_PCIC             (32+19) /* UIC1 */
+#define IRQ_PCID             (32+20) /* UIC1 */
+
+#endif /* __PMC440_H__ */
diff --git a/board/esd/pmc440/sdram.c b/board/esd/pmc440/sdram.c
new file mode 100644 (file)
index 0000000..624c457
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * (C) Copyright 2006
+ * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
+ * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com
+ *
+ * (C) Copyright 2006-2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* define DEBUG for debug output */
+#undef DEBUG
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <ppc440.h>
+
+extern int denali_wait_for_dlllock(void);
+extern void denali_core_search_data_eye(void);
+
+
+#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
+ *
+ ************************************************************************/
+long int initdram (int board_type)
+{
+#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
+#if !defined(CONFIG_NAND_SPL)
+       ulong speed = get_bus_freq(0);
+#else
+       ulong speed = 133333333;        /* 133MHz is on the safe side   */
+#endif
+
+       mtsdram(DDR0_02, 0x00000000);
+
+       mtsdram(DDR0_00, 0x0000190A);
+       mtsdram(DDR0_01, 0x01000000);
+       mtsdram(DDR0_03, 0x02030602);
+       mtsdram(DDR0_04, 0x0A020200);
+       mtsdram(DDR0_05, 0x02020308);
+       mtsdram(DDR0_06, 0x0102C812);
+       mtsdram(DDR0_07, 0x000D0100);
+       mtsdram(DDR0_08, 0x02430001);
+       mtsdram(DDR0_09, 0x00011D5F);
+       mtsdram(DDR0_10, 0x00000300);
+       mtsdram(DDR0_11, 0x0027C800);
+       mtsdram(DDR0_12, 0x00000003);
+       mtsdram(DDR0_14, 0x00000000);
+       mtsdram(DDR0_17, 0x19000000);
+       mtsdram(DDR0_18, 0x19191919);
+       mtsdram(DDR0_19, 0x19191919);
+       mtsdram(DDR0_20, 0x0B0B0B0B);
+       mtsdram(DDR0_21, 0x0B0B0B0B);
+       mtsdram(DDR0_22, 0x00267F0B);
+       mtsdram(DDR0_23, 0x00000000);
+       mtsdram(DDR0_24, 0x01010002);
+       if (speed > 133333334)
+               mtsdram(DDR0_26, 0x5B26050C);
+       else
+               mtsdram(DDR0_26, 0x5B260408);
+       mtsdram(DDR0_27, 0x0000682B);
+       mtsdram(DDR0_28, 0x00000000);
+       mtsdram(DDR0_31, 0x00000000);
+       mtsdram(DDR0_42, 0x01000006);
+       mtsdram(DDR0_43, 0x030A0200);
+       mtsdram(DDR0_44, 0x00000003);
+       mtsdram(DDR0_02, 0x00000001);
+
+       denali_wait_for_dlllock();
+#endif /* #ifndef CONFIG_NAND_U_BOOT */
+
+#ifdef CONFIG_DDR_DATA_EYE
+       /* -----------------------------------------------------------+
+        * Perform data eye search if requested.
+        * ----------------------------------------------------------*/
+       denali_core_search_data_eye();
+#endif
+
+       /*
+        * Clear possible errors resulting from data-eye-search.
+        * If not done, then we could get an interrupt later on when
+        * exceptions are enabled.
+        */
+       set_mcsr(get_mcsr());
+
+       return (CFG_MBYTES_SDRAM << 20);
+}
diff --git a/board/esd/pmc440/u-boot-nand.lds b/board/esd/pmc440/u-boot-nand.lds
new file mode 100644 (file)
index 0000000..e0b5113
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * (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)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.o (.text)
+
+    /* Align to next NAND block */
+    . = ALIGN(0x4000);
+    common/environment.o  (.ppcenv)
+    /* Keep some space here for redundant env and potential bad env blocks */
+    . = ALIGN(0x10000);
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+
+  _end = . ;
+  PROVIDE (end = .);
+}
similarity index 87%
rename from board/esd/cpci440/u-boot.lds
rename to board/esd/pmc440/u-boot.lds
index 57220d385a3b5f172784c53a21b14fa298dfac20..e1407373739ef1cffd3c58634cebc1751b83421c 100644 (file)
@@ -28,13 +28,11 @@ SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/
 SECTIONS
 {
   .resetvec 0xFFFFFFFC :
-/*  .resetvec 0x01FFFFFC :*/
   {
     *(.resetvec)
   } = 0xffff
 
   .bootpg 0xFFFFF000 :
-/*  .bootpg 0x01FFF000 :*/
   {
     cpu/ppc4xx/start.o (.bootpg)
   } = 0xffff
@@ -69,20 +67,6 @@ SECTIONS
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
     cpu/ppc4xx/start.o (.text)
-    board/esd/cpci440/init.o   (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -95,7 +79,6 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
-    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -147,13 +130,16 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
    *(.bss)
    *(COMMON)
   }
+
+  ppcenv_assert = ASSERT(. < 0xFFFF8000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified.");
+
   _end = . ;
   PROVIDE (end = .);
 }
index a803b1cbadca730106175efcbec1a32a8ec66878..4f47323e44494ce98c62a62946bd9c3b5f22fc3d 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 43f776579ef780a00497dc67bc4f6b9759373bc8..3f230507af16e68f6888b890a4df918c8e208654 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -139,7 +139,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 2857a0bef5ede64a9050afae9d15ba8514161571..87a584979b9c545e1500218f3e14774b85d61229 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 #include <common.h>
+#include <asm/io.h>
 #include <asm/processor.h>
 #include <command.h>
 #include <malloc.h>
@@ -112,11 +113,11 @@ int misc_init_f (void)
 
 int misc_init_r (void)
 {
-       volatile unsigned char *duart0_mcr = (unsigned char *)((ulong)DUART0_BA + 4);
-       volatile unsigned char *duart1_mcr = (unsigned char *)((ulong)DUART1_BA + 4);
-       volatile unsigned short *lcd_contrast =
+       unsigned char *duart0_mcr = (unsigned char *)((ulong)DUART0_BA + 4);
+       unsigned char *duart1_mcr = (unsigned char *)((ulong)DUART1_BA + 4);
+       unsigned short *lcd_contrast =
                (unsigned short *)((ulong)CFG_FPGA_BASE_ADDR + CFG_FPGA_CTRL + 4);
-       volatile unsigned short *lcd_backlight =
+       unsigned short *lcd_backlight =
                (unsigned short *)((ulong)CFG_FPGA_BASE_ADDR + CFG_FPGA_CTRL + 6);
        unsigned char *dst;
        ulong len = sizeof(fpgadata);
@@ -180,25 +181,37 @@ int misc_init_r (void)
        /*
         * Reset FPGA via FPGA_INIT pin
         */
-       out32(GPIO0_TCR, in32(GPIO0_TCR) | FPGA_INIT); /* setup FPGA_INIT as output */
-       out32(GPIO0_OR, in32(GPIO0_OR) & ~FPGA_INIT);  /* reset low */
+       out_be32((void*)GPIO0_TCR, in_be32((void*)GPIO0_TCR) | FPGA_INIT); /* setup FPGA_INIT as output */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~FPGA_INIT);  /* reset low */
        udelay(1000); /* wait 1ms */
-       out32(GPIO0_OR, in32(GPIO0_OR) | FPGA_INIT);   /* reset high */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | FPGA_INIT);   /* reset high */
        udelay(1000); /* wait 1ms */
 
        /*
         * Reset external DUARTs
         */
-       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_DUART_RST); /* set reset to high */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_DUART_RST); /* set reset to high */
        udelay(10); /* wait 10us */
-       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_DUART_RST); /* set reset to low */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_DUART_RST); /* set reset to low */
        udelay(1000); /* wait 1ms */
 
+       /*
+        * Set NAND-FLASH GPIO signals to default
+        */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~(CFG_NAND_CLE | CFG_NAND_ALE));
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_NAND_CE);
+
+       /*
+        * Setup EEPROM write protection
+        */
+       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_EEPROM_WP);
+       out_be32((void*)GPIO0_TCR, in_be32((void*)GPIO0_TCR) | CFG_EEPROM_WP);
+
        /*
         * Enable interrupts in exar duart mcr[3]
         */
-       *duart0_mcr = 0x08;
-       *duart1_mcr = 0x08;
+       out_8(duart0_mcr, 0x08);
+       out_8(duart1_mcr, 0x08);
 
        /*
         * Init lcd interface and display logo
@@ -240,17 +253,23 @@ int misc_init_r (void)
        /*
         * Set invert bit in small lcd controller
         */
-       *(unsigned char *)(CFG_LCD_SMALL_REG + 2) |= 0x01;
+       out_8((unsigned char *)(CFG_LCD_SMALL_REG + 2),
+             in_8((unsigned char *)(CFG_LCD_SMALL_REG + 2)) | 0x01);
 
        /*
         * Set default contrast voltage on epson vga controller
         */
-       *lcd_contrast = 0x4646;
+       out_be16(lcd_contrast, 0x4646);
 
        /*
         * Enable backlight
         */
-       *lcd_backlight = 0xffff;
+       out_be16(lcd_backlight, 0xffff);
+
+       /*
+        * Enable external I2C bus
+        */
+       out_be32((void*)GPIO0_TCR, in_be32((void*)GPIO0_TCR) | CFG_IIC_ON);
 
        return (0);
 }
@@ -281,11 +300,6 @@ int checkboard (void)
 
        putc ('\n');
 
-       /*
-        * Disable sleep mode in LXT971
-        */
-       lxt971_no_sleep();
-
        return 0;
 }
 
@@ -334,3 +348,86 @@ void ide_set_reset(int on)
        }
 }
 #endif /* CONFIG_IDE_RESET */
+
+#if defined(CONFIG_RESET_PHY_R)
+void reset_phy(void)
+{
+#ifdef CONFIG_LXT971_NO_SLEEP
+
+       /*
+        * Disable sleep mode in LXT971
+        */
+       lxt971_no_sleep();
+#endif
+}
+#endif
+
+#if defined(CFG_EEPROM_WREN)
+/* Input: <dev_addr>  I2C address of EEPROM device to enable.
+ *         <state>     -1: deliver current state
+ *                    0: disable write
+ *                    1: enable write
+ *  Returns:           -1: wrong device address
+ *                      0: dis-/en- able done
+ *                  0/1: current state if <state> was -1.
+ */
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+       if (CFG_I2C_EEPROM_ADDR != dev_addr) {
+               return -1;
+       } else {
+               switch (state) {
+               case 1:
+                       /* Enable write access, clear bit GPIO0. */
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) & ~CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO0. */
+                       out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in_be32((void*)GPIO0_OR) & CFG_EEPROM_WP));
+                       break;
+               }
+       }
+       return state;
+}
+
+int do_eep_wren (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int query = argc == 1;
+       int state = 0;
+
+       if (query) {
+               /* Query write access state. */
+               state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, -1);
+               if (state < 0) {
+                       puts ("Query of write access state failed.\n");
+               } else {
+                       printf ("Write access for device 0x%0x is %sabled.\n",
+                               CFG_I2C_EEPROM_ADDR, state ? "en" : "dis");
+                       state = 0;
+               }
+       } else {
+               if ('0' == argv[1][0]) {
+                       /* Disable write access. */
+                       state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, 0);
+               } else {
+                       /* Enable write access. */
+                       state = eeprom_write_enable (CFG_I2C_EEPROM_ADDR, 1);
+               }
+               if (state < 0) {
+                       puts ("Setup of write access state failed.\n");
+               }
+       }
+
+       return state;
+}
+
+U_BOOT_CMD(eepwren,    2,      0,      do_eep_wren,
+          "eepwren - Enable / disable / query EEPROM write access\n",
+          NULL);
+#endif /* #if defined(CFG_EEPROM_WREN) */
index f7a20d1da23d9099dc7b20ad17d3ba612d8501ba..9dad74828a1d6d0025185167ded98f145b9fccf4 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 95854f29327d5a278db4ece3752dbb2999728b62..bea9524833249f85705807751fd4f6d769a3fe43 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -137,7 +137,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 4c541bf5c29554e07fbafdc79f29ee4b30753f67..9fa760451c2c9879f897754b2f20b8f5c181790e 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index c50db8f8c8bf184aa38d88ebed0d327f6477f939..c231d82ddfe9bd60aff2ede8f86770e96973d28b 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5b70a40aab6f6267d375a42e330cd3a5724e54dc..b3c2bf95015ec27203ce173e16edff4d211180fc 100644 (file)
@@ -51,7 +51,7 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
                                  /* Stabs debugging sections.    */
        .stab 0 : { *(.stab) }
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d5dea8238ef2839635e86ed2438c8c84859f0b84..ec9dd024a335db4620907de585b238c3f831f970 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -139,7 +139,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 21a2d9e32a0f8de8492a3d56e419675ed58cbce6..51db49094d575d02cd6c97c8c3db66b429944e7f 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 04995ea756331f908f655718270cb55f452ba879..8ac0176c338c5cbdd87a31cbd3f744527ada5efe 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 44f613e4185f2c840ccd1bdf1d986302cd51f1cf..9cee9f19bb542155148400b7ccd99189b37c1a15 100644 (file)
@@ -31,7 +31,9 @@ LIB   = $(obj)lib$(VENDOR).a
 
 COBJS  := sys_eeprom.o \
           pixis.o      \
-          pq-mds-pib.o
+          pq-mds-pib.o \
+          fsl_logo_bmp.o \
+          fsl_diu_fb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/freescale/common/fsl_diu_fb.c b/board/freescale/common/fsl_diu_fb.c
new file mode 100644 (file)
index 0000000..5a8576e
--- /dev/null
@@ -0,0 +1,618 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ * York Sun <yorksun@freescale.com>
+ *
+ * FSL DIU Framebuffer driver
+ *
+ * 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 <i2c.h>
+#include <malloc.h>
+
+#ifdef CONFIG_FSL_DIU_FB
+
+#include "fsl_diu_fb.h"
+
+#ifdef DEBUG
+#define DPRINTF(fmt, args...) printf("%s: " fmt,__FUNCTION__,## args)
+#else
+#define DPRINTF(fmt, args...)
+#endif
+
+struct fb_videomode {
+       const char *name;       /* optional */
+       unsigned int refresh;           /* optional */
+       unsigned int xres;
+       unsigned int yres;
+       unsigned int pixclock;
+       unsigned int left_margin;
+       unsigned int right_margin;
+       unsigned int upper_margin;
+       unsigned int lower_margin;
+       unsigned int hsync_len;
+       unsigned int vsync_len;
+       unsigned int sync;
+       unsigned int vmode;
+       unsigned int flag;
+};
+
+#define FB_SYNC_VERT_HIGH_ACT  2       /* vertical sync high active    */
+#define FB_SYNC_COMP_HIGH_ACT  8       /* composite sync high active   */
+#define FB_VMODE_NONINTERLACED  0      /* non interlaced */
+
+/*
+ * These parameters give default parameters
+ * for video output 1024x768,
+ * FIXME - change timing to proper amounts
+ * hsync 31.5kHz, vsync 60Hz
+ */
+static struct fb_videomode fsl_diu_mode_1024 = {
+       .refresh        = 60,
+       .xres           = 1024,
+       .yres           = 768,
+       .pixclock       = 15385,
+       .left_margin    = 160,
+       .right_margin   = 24,
+       .upper_margin   = 29,
+       .lower_margin   = 3,
+       .hsync_len      = 136,
+       .vsync_len      = 6,
+       .sync           = FB_SYNC_COMP_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+static struct fb_videomode fsl_diu_mode_1280 = {
+       .name           = "1280x1024-60",
+       .refresh        = 60,
+       .xres           = 1280,
+       .yres           = 1024,
+       .pixclock       = 9375,
+       .left_margin    = 38,
+       .right_margin   = 128,
+       .upper_margin   = 2,
+       .lower_margin   = 7,
+       .hsync_len      = 216,
+       .vsync_len      = 37,
+       .sync           = FB_SYNC_COMP_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+       .vmode          = FB_VMODE_NONINTERLACED
+};
+
+/*
+ * These are the fields of area descriptor(in DDR memory) for every plane
+ */
+struct diu_ad {
+       /* Word 0(32-bit) in DDR memory */
+       unsigned int pix_fmt; /* hard coding pixel format */
+       /* Word 1(32-bit) in DDR memory */
+       unsigned int addr;
+       /* Word 2(32-bit) in DDR memory */
+       unsigned int src_size_g_alpha;
+       /* Word 3(32-bit) in DDR memory */
+       unsigned int aoi_size;
+       /* Word 4(32-bit) in DDR memory */
+       unsigned int offset_xyi;
+       /* Word 5(32-bit) in DDR memory */
+       unsigned int offset_xyd;
+       /* Word 6(32-bit) in DDR memory */
+       unsigned int ckmax_r:8;
+       unsigned int ckmax_g:8;
+       unsigned int ckmax_b:8;
+       unsigned int res9:8;
+       /* Word 7(32-bit) in DDR memory */
+       unsigned int ckmin_r:8;
+       unsigned int ckmin_g:8;
+       unsigned int ckmin_b:8;
+       unsigned int res10:8;
+       /* Word 8(32-bit) in DDR memory */
+       unsigned int next_ad;
+       /* Word 9(32-bit) in DDR memory, just for 64-bit aligned */
+       unsigned int res1;
+       unsigned int res2;
+       unsigned int res3;
+}__attribute__ ((packed));
+
+/*
+ * DIU register map
+ */
+struct diu {
+       unsigned int desc[3];
+       unsigned int gamma;
+       unsigned int pallete;
+       unsigned int cursor;
+       unsigned int curs_pos;
+       unsigned int diu_mode;
+       unsigned int bgnd;
+       unsigned int bgnd_wb;
+       unsigned int disp_size;
+       unsigned int wb_size;
+       unsigned int wb_mem_addr;
+       unsigned int hsyn_para;
+       unsigned int vsyn_para;
+       unsigned int syn_pol;
+       unsigned int thresholds;
+       unsigned int int_status;
+       unsigned int int_mask;
+       unsigned int colorbar[8];
+       unsigned int filling;
+       unsigned int plut;
+} __attribute__ ((packed));
+
+struct diu_hw {
+       struct diu *diu_reg;
+       volatile unsigned int mode;             /* DIU operation mode */
+};
+
+struct diu_addr {
+       unsigned char  *  paddr;        /* Virtual address */
+       unsigned int       offset;
+};
+
+#define FSL_DIU_BASE_OFFSET    0x2C000 /* Offset of Display Interface Unit */
+
+/*
+ * Modes of operation of DIU
+ */
+#define MFB_MODE0      0       /* DIU off */
+#define MFB_MODE1      1       /* All three planes output to display */
+#define MFB_MODE2      2       /* Plane 1 to display,
+                                * planes 2+3 written back to memory */
+#define MFB_MODE3      3       /* All three planes written back to memory */
+#define MFB_MODE4      4       /* Color bar generation */
+
+#define MAX_CURS               32
+
+static struct fb_info fsl_fb_info;
+static struct diu_addr gamma, cursor;
+static struct diu_ad fsl_diu_fb_ad __attribute__ ((aligned(32)));
+static struct diu_ad dummy_ad __attribute__ ((aligned(32)));
+static unsigned char *dummy_fb;
+static struct diu_hw dr = {
+       .mode = MFB_MODE1,
+};
+
+int fb_enabled = 0;
+int fb_initialized = 0;
+const int default_xres = 1280;
+const int default_pixel_format = 0x88882317;
+
+static int map_video_memory(struct fb_info *info, unsigned long bytes_align);
+static void enable_lcdc(void);
+static void disable_lcdc(void);
+static int fsl_diu_enable_panel(struct fb_info *info);
+static int fsl_diu_disable_panel(struct fb_info *info);
+static int allocate_buf(struct diu_addr *buf, u32 size, u32 bytes_align);
+static u32 get_busfreq(void);
+
+int fsl_diu_init(int xres,
+                unsigned int pixel_format,
+                int gamma_fix,
+                unsigned char *splash_bmp)
+{
+       struct fb_videomode *fsl_diu_mode_db;
+       struct diu_ad *ad = &fsl_diu_fb_ad;
+       struct diu *hw;
+       struct fb_info *info = &fsl_fb_info;
+       struct fb_var_screeninfo *var = &info->var;
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
+       volatile unsigned int *guts_clkdvdr = &gur->clkdvdr;
+       unsigned char *gamma_table_base;
+       unsigned int i, j;
+       unsigned long speed_ccb, temp, pixval;
+
+       DPRINTF("Enter fsl_diu_init\n");
+       dr.diu_reg = (struct diu *) (CFG_IMMR + FSL_DIU_BASE_OFFSET);
+       hw = (struct diu *) dr.diu_reg;
+
+       disable_lcdc();
+
+       if (xres == 1280) {
+               fsl_diu_mode_db = &fsl_diu_mode_1280;
+       } else {
+               fsl_diu_mode_db = &fsl_diu_mode_1024;
+       }
+
+       if (0 == fb_initialized) {
+               allocate_buf(&gamma, 768, 32);
+               DPRINTF("gamma is allocated @ 0x%x\n",
+                       (unsigned int)gamma.paddr);
+               allocate_buf(&cursor, MAX_CURS * MAX_CURS * 2, 32);
+               DPRINTF("curosr is allocated @ 0x%x\n",
+                       (unsigned int)cursor.paddr);
+
+               /* create a dummy fb and dummy ad */
+               dummy_fb = malloc(64);
+               if (NULL == dummy_fb) {
+                       printf("Cannot allocate dummy fb\n");
+                       return -1;
+               }
+               dummy_ad.addr = cpu_to_le32((unsigned int)dummy_fb);
+               dummy_ad.pix_fmt = 0x88882317;
+               dummy_ad.src_size_g_alpha = 0x04400000; /* alpha = 0 */
+               dummy_ad.aoi_size = 0x02000400;
+               dummy_ad.offset_xyi = 0;
+               dummy_ad.offset_xyd = 0;
+               dummy_ad.next_ad = 0;
+               /* Memory allocation for framebuffer */
+               if (map_video_memory(info, 32)) {
+                       printf("Unable to allocate fb memory 1\n");
+                       return -1;
+               }
+       } else {
+               memset(info->screen_base, 0, info->smem_len);
+       }
+
+       dr.diu_reg->desc[0] = (unsigned int) &dummy_ad;
+       dr.diu_reg->desc[1] = (unsigned int) &dummy_ad;
+       dr.diu_reg->desc[2] = (unsigned int) &dummy_ad;
+       DPRINTF("dummy dr.diu_reg->desc[0] = 0x%x\n", dr.diu_reg->desc[0]);
+       DPRINTF("dummy desc[0] = 0x%x\n", hw->desc[0]);
+
+       /* read mode info */
+       var->xres = fsl_diu_mode_db->xres;
+       var->yres = fsl_diu_mode_db->yres;
+       var->bits_per_pixel = 32;
+       var->pixclock = fsl_diu_mode_db->pixclock;
+       var->left_margin = fsl_diu_mode_db->left_margin;
+       var->right_margin = fsl_diu_mode_db->right_margin;
+       var->upper_margin = fsl_diu_mode_db->upper_margin;
+       var->lower_margin = fsl_diu_mode_db->lower_margin;
+       var->hsync_len = fsl_diu_mode_db->hsync_len;
+       var->vsync_len = fsl_diu_mode_db->vsync_len;
+       var->sync = fsl_diu_mode_db->sync;
+       var->vmode = fsl_diu_mode_db->vmode;
+       info->line_length = var->xres * var->bits_per_pixel / 8;
+       info->logo_size = 0;
+       info->logo_height = 0;
+
+       ad->pix_fmt = pixel_format;
+       ad->addr    = cpu_to_le32((unsigned int)info->screen_base);
+       ad->src_size_g_alpha
+                       = cpu_to_le32((var->yres << 12) | var->xres);
+       /* fix me. AOI should not be greater than display size */
+       ad->aoi_size    = cpu_to_le32(( var->yres << 16) |  var->xres);
+       ad->offset_xyi = 0;
+       ad->offset_xyd = 0;
+
+       /* Disable chroma keying function */
+       ad->ckmax_r = 0;
+       ad->ckmax_g = 0;
+       ad->ckmax_b = 0;
+
+       ad->ckmin_r = 255;
+       ad->ckmin_g = 255;
+       ad->ckmin_b = 255;
+
+       gamma_table_base = gamma.paddr;
+       DPRINTF("gamma_table_base is allocated @ 0x%x\n",
+               (unsigned int)gamma_table_base);
+
+       /* Prep for DIU init  - gamma table */
+
+       for (i = 0; i <= 2; i++)
+               for (j = 0; j <= 255; j++)
+                       *gamma_table_base++ = j;
+
+       if (gamma_fix == 1) {   /* fix the gamma */
+               DPRINTF("Fix gamma table\n");
+               gamma_table_base = gamma.paddr;
+               for (i = 0; i < 256*3; i++) {
+                       gamma_table_base[i] = (gamma_table_base[i] << 2)
+                               | ((gamma_table_base[i] >> 6) & 0x03);
+               }
+       }
+
+       DPRINTF("update-lcdc: HW - %p\n Disabling DIU\n", hw);
+
+       /* Program DIU registers */
+
+       hw->gamma = (unsigned int) gamma.paddr;
+       hw->cursor= (unsigned int) cursor.paddr;
+       hw->bgnd = 0x007F7F7F;                          /* BGND */
+       hw->bgnd_wb = 0;                                /* BGND_WB */
+       hw->disp_size = var->yres << 16 | var->xres;    /* DISP SIZE */
+       hw->wb_size = 0;                                /* WB SIZE */
+       hw->wb_mem_addr = 0;                            /* WB MEM ADDR */
+       hw->hsyn_para = var->left_margin << 22 |        /* BP_H */
+                       var->hsync_len << 11   |        /* PW_H */
+                       var->right_margin;              /* FP_H */
+       hw->vsyn_para = var->upper_margin << 22 |       /* BP_V */
+                       var->vsync_len << 11    |       /* PW_V  */
+                       var->lower_margin;              /* FP_V  */
+
+       /* Pixel Clock configuration */
+       DPRINTF("DIU: Bus Frequency = %d\n", get_busfreq());
+       speed_ccb = get_busfreq();
+
+       DPRINTF("DIU pixclock in ps - %d\n", var->pixclock);
+       temp = 1;
+       temp *= 1000000000;
+       temp /= var->pixclock;
+       temp *= 1000;
+       pixval = speed_ccb / temp;
+       DPRINTF("DIU pixval = %lu\n", pixval);
+
+       hw->syn_pol = 0;                        /* SYNC SIGNALS POLARITY */
+       hw->thresholds = 0x00037800;            /* The Thresholds */
+       hw->int_status = 0;                     /* INTERRUPT STATUS */
+       hw->int_mask = 0;                       /* INT MASK */
+       hw->plut = 0x01F5F666;
+
+       /* Modify PXCLK in GUTS CLKDVDR */
+       DPRINTF("DIU: Current value of CLKDVDR = 0x%08x\n", *guts_clkdvdr);
+       temp = *guts_clkdvdr & 0x2000FFFF;
+       *guts_clkdvdr = temp;                           /* turn off clock */
+       *guts_clkdvdr = temp | 0x80000000 | ((pixval & 0x1F) << 16);
+       DPRINTF("DIU: Modified value of CLKDVDR = 0x%08x\n", *guts_clkdvdr);
+
+       fb_initialized = 1;
+
+       if (splash_bmp) {
+               info->logo_height = fsl_diu_display_bmp(splash_bmp, 0, 0, 0);
+               info->logo_size = info->logo_height * info->line_length;
+               DPRINTF("logo height %d, logo_size 0x%x\n",
+                       info->logo_height,info->logo_size);
+       }
+
+       /* Enable the DIU */
+       fsl_diu_enable_panel(info);
+       enable_lcdc();
+
+       return 0;
+}
+
+char *fsl_fb_open(struct fb_info **info)
+{
+       *info = &fsl_fb_info;
+       return (char *) ((unsigned int)(*info)->screen_base
+                        + (*info)->logo_size);
+}
+
+void fsl_diu_close(void)
+{
+       struct fb_info *info = &fsl_fb_info;
+       fsl_diu_disable_panel(info);
+}
+
+static int fsl_diu_enable_panel(struct fb_info *info)
+{
+       struct diu *hw = dr.diu_reg;
+       struct diu_ad *ad = &fsl_diu_fb_ad;
+
+       DPRINTF("Entered: enable_panel\n");
+       if (hw->desc[0] != (unsigned int)ad)
+               hw->desc[0] = (unsigned int)ad;
+       DPRINTF("desc[0] = 0x%x\n", hw->desc[0]);
+       return 0;
+}
+
+static int fsl_diu_disable_panel(struct fb_info *info)
+{
+       struct diu *hw = dr.diu_reg;
+
+       DPRINTF("Entered: disable_panel\n");
+       if (hw->desc[0] != (unsigned int)&dummy_ad)
+               hw->desc[0] = (unsigned int)&dummy_ad;
+       return 0;
+}
+
+static int map_video_memory(struct fb_info *info, unsigned long bytes_align)
+{
+       unsigned long offset;
+       unsigned long mask;
+
+       DPRINTF("Entered: map_video_memory\n");
+       /* allocate maximum 1280*1024 with 32bpp */
+       info->smem_len = 1280 * 4 *1024 + bytes_align;
+       DPRINTF("MAP_VIDEO_MEMORY: smem_len = %d\n", info->smem_len);
+       info->screen_base = malloc(info->smem_len);
+       if (info->screen_base == NULL) {
+               printf("Unable to allocate fb memory\n");
+               return -1;
+       }
+       info->smem_start = (unsigned int) info->screen_base;
+       mask = bytes_align - 1;
+       offset = (unsigned long)info->screen_base & mask;
+       if (offset) {
+               info->screen_base += offset;
+               info->smem_len = info->smem_len - (bytes_align - offset);
+       } else
+               info->smem_len = info->smem_len - bytes_align;
+
+       info->screen_size = info->smem_len;
+
+       DPRINTF("Allocated fb @ 0x%08lx, size=%d.\n",
+               info->smem_start, info->smem_len);
+
+       return 0;
+}
+
+static void enable_lcdc(void)
+{
+       struct diu *hw = dr.diu_reg;
+
+       DPRINTF("Entered: enable_lcdc, fb_enabled = %d\n", fb_enabled);
+       if (!fb_enabled) {
+               hw->diu_mode = dr.mode;
+               fb_enabled++;
+       }
+       DPRINTF("diu_mode = %d\n", hw->diu_mode);
+}
+
+static void disable_lcdc(void)
+{
+       struct diu *hw = dr.diu_reg;
+
+       DPRINTF("Entered: disable_lcdc, fb_enabled = %d\n", fb_enabled);
+       if (fb_enabled) {
+               hw->diu_mode = 0;
+               fb_enabled = 0;
+       }
+}
+
+static u32 get_busfreq(void)
+{
+       u32 fs_busfreq = 0;
+
+       fs_busfreq = get_bus_freq(0);
+       return fs_busfreq;
+}
+
+/*
+ * Align to 64-bit(8-byte), 32-byte, etc.
+ */
+static int allocate_buf(struct diu_addr *buf, u32 size, u32 bytes_align)
+{
+       u32 offset, ssize;
+       u32 mask;
+
+       DPRINTF("Entered: allocate_buf\n");
+       ssize = size + bytes_align;
+       buf->paddr = malloc(ssize);
+       if (!buf->paddr)
+               return -1;
+
+       memset(buf->paddr, 0, ssize);
+       mask = bytes_align - 1;
+       offset = (u32)buf->paddr & mask;
+       if (offset) {
+               buf->offset = bytes_align - offset;
+               buf->paddr = (unsigned char *) ((u32)buf->paddr + offset);
+       } else
+               buf->offset = 0;
+       return 0;
+}
+
+int fsl_diu_display_bmp(unsigned char *bmp,
+                       int xoffset,
+                       int yoffset,
+                       int transpar)
+{
+       struct fb_info *info = &fsl_fb_info;
+       unsigned char r, g, b;
+       unsigned int *fb_t, val;
+       unsigned char *bitmap;
+       unsigned int palette[256];
+       int width, height, bpp, ncolors, raster, offset, x, y, i, k, cpp;
+
+       if (!bmp) {
+               printf("Must supply a bitmap address\n");
+               return 0;
+       }
+
+       raster = bmp[10] + (bmp[11] << 8) + (bmp[12] << 16) + (bmp[13] << 24);
+       width  = (bmp[21] << 24) | (bmp[20] << 16) | (bmp[19] << 8) | bmp[18];
+       height = (bmp[25] << 24) | (bmp[24] << 16) | (bmp[23] << 8) | bmp[22];
+       bpp  = (bmp[29] <<  8) | (bmp[28]);
+       ncolors = bmp[46] + (bmp[47] << 8) + (bmp[48] << 16) + (bmp[49] << 24);
+       bitmap   = bmp + raster;
+       cpp = info->var.bits_per_pixel / 8;
+
+       DPRINTF("bmp = 0x%08x\n", (unsigned int)bmp);
+       DPRINTF("bitmap = 0x%08x\n", (unsigned int)bitmap);
+       DPRINTF("width = %d\n", width);
+       DPRINTF("height = %d\n", height);
+       DPRINTF("bpp = %d\n", bpp);
+       DPRINTF("ncolors = %d\n", ncolors);
+
+       DPRINTF("xres = %d\n", info->var.xres);
+       DPRINTF("yres = %d\n", info->var.yres);
+       DPRINTF("Screen_base = 0x%x\n", (unsigned int)info->screen_base);
+
+       if (((width+xoffset) > info->var.xres) ||
+           ((height+yoffset) > info->var.yres)) {
+               printf("bitmap is out of range, image too large or too much offset\n");
+               return 0;
+       }
+       if (bpp < 24) {
+               for (i = 0, offset = 54; i < ncolors; i++, offset += 4)
+                       palette[i] = (bmp[offset+2] << 16)
+                               + (bmp[offset+1] << 8) + bmp[offset];
+       }
+
+       switch (bpp) {
+       case 1:
+               for (y = height - 1; y >= 0; y--) {
+                       fb_t = (unsigned int *) ((unsigned int)info->screen_base + (((y+yoffset) * info->var.xres) + xoffset)*cpp);
+                       for (x = 0; x < width; x += 8) {
+                               b = *bitmap++;
+                               for (k = 0; k < 8; k++) {
+                                       if (b & 0x80)
+                                               *fb_t = palette[1];
+                                       else
+                                               *fb_t = palette[0];
+                                       b = b << 1;
+                               }
+                       }
+                       for (i = (width / 2) % 4; i > 0; i--)
+                               bitmap++;
+               }
+               break;
+       case 4:
+               for (y = height - 1; y >= 0; y--) {
+                       fb_t = (unsigned int *) ((unsigned int)info->screen_base + (((y+yoffset) * info->var.xres) + xoffset)*cpp);
+                       for (x = 0; x < width; x += 2) {
+                               b = *bitmap++;
+                               r = (b >> 4) & 0x0F;
+                               g =  b & 0x0F;
+                               *fb_t++ = palette[r];
+                               *fb_t++ = palette[g];
+                       }
+                       for (i = (width / 2) % 4; i > 0; i--)
+                               bitmap++;
+               }
+               break;
+       case 8:
+               for (y = height - 1; y >= 0; y--) {
+                       fb_t = (unsigned int *) ((unsigned int)info->screen_base + (((y+yoffset) * info->var.xres) + xoffset)*cpp);
+                       for (x = 0; x < width; x++) {
+                               *fb_t++ = palette[ *bitmap++ ];
+                       }
+                       for (i = (width / 2) % 4; i > 0; i--)
+                               bitmap++;
+               }
+               break;
+       case 24:
+               for (y = height - 1; y >= 0; y--) {
+                       fb_t = (unsigned int *) ((unsigned int)info->screen_base + (((y+yoffset) * info->var.xres) + xoffset)*cpp);
+                       for (x = 0; x < width; x++) {
+                               b = *bitmap++;
+                               g = *bitmap++;
+                               r = *bitmap++;
+                               val = (r << 16) + (g << 8) + b;
+                               *fb_t++ = val;
+                       }
+                       for (; (x % 4) != 0; x++)       /* 4-byte alignment */
+                               bitmap++;
+               }
+               break;
+       }
+
+       return height;
+}
+
+void fsl_diu_clear_screen(void)
+{
+       struct fb_info *info = &fsl_fb_info;
+
+       memset(info->screen_base, 0, info->smem_len);
+}
+#endif /* CONFIG_FSL_DIU_FB */
diff --git a/board/freescale/common/fsl_diu_fb.h b/board/freescale/common/fsl_diu_fb.h
new file mode 100644 (file)
index 0000000..6deba32
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ * York Sun <yorksun@freescale.com>
+ *
+ * FSL DIU Framebuffer driver
+ *
+ * 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
+ */
+
+struct fb_var_screeninfo {
+       unsigned int xres;              /* visible resolution           */
+       unsigned int yres;
+
+       unsigned int bits_per_pixel;    /* guess what                   */
+
+       /* Timing: All values in pixclocks, except pixclock (of course) */
+       unsigned int pixclock;          /* pixel clock in ps (pico seconds) */
+       unsigned int left_margin;       /* time from sync to picture    */
+       unsigned int right_margin;      /* time from picture to sync    */
+       unsigned int upper_margin;      /* time from sync to picture    */
+       unsigned int lower_margin;
+       unsigned int hsync_len;         /* length of horizontal sync    */
+       unsigned int vsync_len;         /* length of vertical sync      */
+       unsigned int sync;              /* see FB_SYNC_*                */
+       unsigned int vmode;             /* see FB_VMODE_*               */
+       unsigned int rotate;            /* angle we rotate counter clockwise */
+};
+
+struct fb_info {
+       struct fb_var_screeninfo var;   /* Current var */
+       unsigned long smem_start;       /* Start of frame buffer mem */
+                                       /* (physical address) */
+       unsigned int smem_len;          /* Length of frame buffer mem */
+       unsigned int type;              /* see FB_TYPE_*                */
+       unsigned int line_length;       /* length of a line in bytes    */
+
+       char *screen_base;
+       unsigned long screen_size;
+       int logo_height;
+       unsigned int logo_size;
+};
+
+
+extern char *fsl_fb_open(struct fb_info **info);
+extern int fsl_diu_init(int xres,
+                       unsigned int pixel_format,
+                       int gamma_fix,
+                       unsigned char *splash_bmp);
+extern void fsl_diu_clear_screen(void);
+extern int fsl_diu_display_bmp(unsigned char *bmp,
+                              int xoffset,
+                              int yoffset,
+                              int transpar);
diff --git a/board/freescale/common/fsl_logo_bmp.c b/board/freescale/common/fsl_logo_bmp.c
new file mode 100644 (file)
index 0000000..956dbee
--- /dev/null
@@ -0,0 +1,878 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ * York Sun <yorksun@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
+ */
+
+/*---------------------------------------------------------------------------
+ * FSL_Logo_BMP --
+ *
+ * A 340x128x4bpp BMP logo.
+ *---------------------------------------------------------------------------
+ */
+unsigned int FSL_Logo_BMP[] = {
+0x424d765c,
+0x00000000,0x00007600,0x00002800,0x00006c01,0x00008000,0x00000100,0x04000000,
+0x0000005c,0x0000130b,0x0000130b,0x00001000,0x00000000,0x00000402,0x04000d91,
+0xbc000b51,0x67001536,0x9a000f2a,0x4b005050,0x50009090,0x90000c70,0x92002e2f,
+0x2e00cfcf,0xcf007c82,0x7c00fbfd,0xfb006f70,0x6f00b0b0,0xb00004bd,0xfa000542,
+0xf9000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xa9996500,0x0000a999,
+0xa80000aa,0x400006a0,0x00086500,0x86500008,0x699da800,0x0000c999,0x68000056,
+0x5000006a,0x00000a99,0x9a0c6800,0x08699685,0xa5000086,0x99dc4000,0x05999800,
+0x08699dc0,0x0000a600,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0000008b,0xbb99bbd4,0x004bbb99,0xbba0009b,0x50000bb4,0x0008b900,
+0x5b90005b,0xbb99bbc0,0x0009bb99,0xbb60005b,0xd00000bb,0x0004bbbb,0xbbb9ba00,
+0x4bbbbbbd,0xbd000cbb,0xb9bbb500,0x0cbbba00,0x5bbb9bbb,0x5000db50,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000006b,0x980006bd,
+0x006b9800,0x89ba006b,0x600009b5,0x0000bb00,0x4bb000bb,0xd00059bc,0x006b9800,
+0x89bd008b,0xb00000db,0x5006bb50,0x089bbd00,0x5bbc086b,0xb9000bb6,0x00059b50,
+0x0cbd0000,0xbb6000c9,0xb500dba0,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000009b,0xa00008bb,0x80bb5000,0x00bb805b,0xd00006ba,
+0x00009b50,0x09b405bb,0x000008bb,0x409bc000,0x049bc009,0xb000006b,0xa009b600,
+0x0009b900,0x5b900005,0xbb005bb0,0x00005bb0,0x08b90005,0xbb00000c,0xb900cbd0,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000005c,
+0x800008bb,0x80bb8000,0x0088008b,0x90000cbd,0x0000dbc0,0x0db505b9,0x0000006d,
+0x50bb8000,0x005b9009,0xb50000cb,0xd00bb500,0x0008bb00,0x8b900000,0x9b50cb90,
+0x000006d5,0x00bb000c,0xbd000000,0x9bc08b90,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00ca9bbb,0x00bb5585,0x8558500b,
+0xb00008b9,0x0000cbd0,0x06ba05bb,0x00000000,0x00bb5000,0x000bb806,0xba00008b,
+0x9009b500,0x00009b50,0x0bb00000,0xdbc05b90,0x00000000,0x009b500c,0xb9000000,
+0xcb900bb0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0xdbbbbb68,0x009bbbbb,0xbbbbb009,0xb50000bb,0x00008b90,0x05b900bb,
+0x40000000,0x009bc000,0x0009bc0c,0xbd00000b,0xb009ba00,0x00006bc0,0x09b50000,
+0xcb608bb0,0x00000000,0x00dbc008,0xbb000000,0x8bb009b8,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000005,0xbb9c8000,0x00cb9555,
+0xc55bb406,0xba00009b,0x50000bb0,0x08bb009b,0xc0000000,0x00abd000,0x000dbc08,
+0xbb00000d,0xb50cb900,0x0000abd0,0x0dbc0000,0x8b9009b5,0x00000000,0x00cbd000,
+0xbb500000,0x8bb006b6,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0000000c,0xbd000059,0xa08bb800,0x008bb00c,0xb90000db,0xa00009b8,
+0x009b40cb,0x90000089,0x900bb800,0x0009bc00,0xbb50000d,0xbc00bb50,0x0000db90,
+0x0cb60000,0x0bb00cb9,0x00000899,0x008b9000,0xab900000,0x8bb00cbb,0x80000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000008,0xb90000ab,
+0x900ab940,0x00ab9008,0xbb60009b,0xbc000bb8,0x009b5009,0xbd00006b,0xb00cbb80,
+0x005bb800,0xdb950009,0xba00cbb5,0x0005bbb0,0x08b90000,0x09b8009b,0xd00006b9,
+0x000bb000,0x09bd0000,0xdb9005bb,0x9c880000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0xdb96cdbb,0xc000db96,0xcdbbc000,0xbbb999bb,
+0x6b9dbbb4,0x006bc000,0x9b96cdbb,0xc0006bb6,0xc69bd000,0x6bbb9dbb,0xb50006bb,
+0x96db9bb8,0x00bb0000,0x0dbc0049,0xb9acdbbc,0x069bb995,0x089b9aad,0xbb5000bb,
+0xdbbb0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x059bbb9c,0x00000c9b,0xbbbc0000,0xd98dbbb6,0x059bbb50,0x00596000,0x0c9bbb9c,
+0x0000089b,0xbbb60000,0xc96c9bbb,0x6000005d,0xbbb9cdbc,0x00998000,0x0c960000,
+0xa9bbb9c0,0x0a9bbb9a,0x000a9bbb,0x950000d9,0x8c9b5000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00008400,0x00000000,0x84000000,
+0x00004800,0x00048000,0x00000000,0x00048800,0x00000000,0x88000000,0x00000880,
+0x00000000,0x08800cb6,0x00000000,0x00000000,0x00488000,0x000ab600,0x00000488,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x000005b9,0x00000000,
+0x00000000,0x00000000,0x0005b900,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x000000bb,0x00000000,0x00000000,0x00000000,0x0000bb00,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x000a9c00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000009b,
+0x80000000,0x00000000,0x00000000,0x0000cc00,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x000cbd00,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x000000db,0x50000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0004c500,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0000005c,0x50000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x008a66d6,0x6a580000,0x00000000,0x00000000,0x000008c6,
+0xd6d6a580,0x00000000,0x00000000,0x000008ca,0x6d6d6a58,0x00000000,0x00000000,
+0x00000004,0x5a6d6da5,0x80000000,0x00000000,0x00008c6d,0x66c50000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x005cad6d,0x6a580000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00033400,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000009,
+0x99d9999d,0x50000000,0x00a999d9,0x99960000,0x00000000,0x00000008,0xdbbbbbbb,
+0xbbbb9650,0x00000000,0x00000000,0x008dbbbb,0xbbbbbbb9,0x65000000,0x00000000,
+0x005dbbbb,0xbbbbbbbb,0x96800000,0x00000000,0x00000c9b,0xbbbbbbbb,0xb9640000,
+0x00000000,0x00c9bbbb,0xbbbbbd80,0x00c999d9,0x99980000,0x06999d99,0x99600000,
+0x00000008,0x6bbbbbbb,0xbbbb9d50,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x04ffff30,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000009,0xbbbbbbbb,0xd0000000,0x00cbbbbb,
+0xbbbb0000,0x00000000,0x000004db,0xbbbbbbbb,0xbbbbbbb9,0x50000000,0x00000000,
+0x06bbbbbb,0xbbbbbbbb,0xbb950000,0x00000000,0x59bbbbbb,0xbbbbbbbb,0xbbb95000,
+0x00000000,0x00059bbb,0xbbbbbbbb,0xbbbb6800,0x00000000,0x89bbbbbb,0xbbbbbbb9,
+0x806bbbbb,0xbbb40000,0x0abbbbbb,0xbbb00000,0x0000006b,0xbbbbbbbb,0xbbbbbbb9,
+0x50000000,0x00000000,0x00000000,0x00000000,0x00000004,0xffffffff,0x40000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0000000d,0xbbbbbbbb,0x90000000,0x005bbbbb,0xbbbb8000,0x00000000,0x000089bb,
+0xbbbbbbbb,0xbbbbbbbb,0xbd800000,0x00000008,0x9bbbbbbb,0xbbbbbbbb,0xbbbb9800,
+0x0000000d,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbd00,0x00000000,0x00cbbbbb,0xbbbbbbbb,
+0xbbbbbbc0,0x00000000,0xdbbbbbbb,0xbbbbbbbb,0xba6bbbbb,0xbbb80000,0x05bbbbbb,
+0xbbb40000,0x000009bb,0xbbbbbbbb,0xbbbbbbbb,0xb9800000,0x00000000,0x00000000,
+0x00000000,0x000004ff,0xffffffff,0xf3400000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x0000000a,0xbbbbbbbb,0xb0000000,
+0x008bbbbb,0xbbbbc000,0x00000000,0x0000bbbb,0xbbbbbbbb,0xbbbbbbbb,0xbb950000,
+0x00000009,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbc0,0x0000089b,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbb98,0x00000000,0x0abbbbbb,0xbbbbbbbb,0xbbbbbbbd,0x4000000c,0xbbbbbbbb,
+0xbbbbbbbb,0xbb9bbbbb,0xbbb80000,0x08bbbbbb,0xbbb50000,0x00049bbb,0xbbbbbbbb,
+0xbbbbbbbb,0xbbbc0000,0x00000000,0x00000000,0x00000000,0x0004ffff,0xffffffff,
+0xfff30000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000005,0xbbbbbbbb,0xb8000000,0x0009bbbb,0xbbbb6000,0x00000000,
+0x0009bbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbc000,0x000000db,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbbb6,0x000089bb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0x80000000,0x8bbbbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0x95000009,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbb50000,
+0x00bbbbbb,0xbbb60000,0x0006bbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbba000,0x00000000,
+0x00000000,0x00000000,0x043fffff,0xffffffff,0xfffff400,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xbbbbbbbb,
+0xbc000000,0x000dbbbb,0xbbbb9000,0x00000000,0x005bbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbc00,0x000008bb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0x60009bbb,0xbbbbbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0x90000000,0x9bbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbb80000b,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbc0000,0x009bbbbb,0xbbbd0000,0x008bbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbbd00,0x00000000,0x00000000,0x00000000,0x003fffff,
+0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0xbbbbbbbb,0xb6000000,0x000abbbb,0xbbbbb000,
+0x00000000,0x009bbbbb,0xbbbbbb65,0x5569bbbb,0xbbbbbbc0,0x00000dbb,0xbbbbbbbb,
+0xb6c5569b,0xbbbbbbbb,0xba08bbbb,0xbbbbbbbb,0x96c55c6b,0xbbbbbbbb,0xb6000005,
+0xbbbbbbbb,0xbbbbbddd,0x9bbbbbbb,0xbbb8004b,0xbbbbbbbb,0xb9655cdb,0xbbbbbbbb,
+0xbbbd0000,0x006bbbbb,0xbbbb0000,0x00dbbbbb,0xbbbbbbdc,0x8c69bbbb,0xbbbbbbc0,
+0x00000000,0x00000000,0x00000000,0x0004ffff,0xffffffff,0xffffffff,0x30000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0xdbbbbbbb,0xb9000000,0x0005bbbb,0xbbbbb800,0x00000000,0x00bbbbbb,0xbbbbd000,
+0x0000cbbb,0xbbbbbbb8,0x00000bbb,0xbbbbbbb9,0x0000000c,0xbbbbbbbb,0xbb5006bb,
+0xbbbbbbd8,0x00000000,0x6bbbbbbb,0xbb400006,0xbbbbbbbb,0xbbb50000,0x08dbbbbb,
+0xbbb9000b,0xbbbbbbbb,0x94000008,0xdbbbbbbb,0xbbb90000,0x00cbbbbb,0xbbbb4000,
+0x00bbbbbb,0xbbbbd400,0x0000cbbb,0xbbbbbbb5,0x00000000,0x00000000,0x00000000,
+0x000004ff,0xffffffff,0xffffffff,0xff400000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x6bbbbbbb,0xbb000000,0x0008bbbb,
+0xbbbbb500,0x00000000,0x0cbbbbbb,0xbbb90000,0x000008bb,0xbbbbbb95,0x00008bbb,
+0xbbbbbb98,0x00000000,0x49bbbbbb,0xbbc0008d,0xbbbbb500,0x00000000,0x0dbbbbbb,
+0xbbc0000b,0xbbbbbbbb,0xbb800000,0x0005bbbb,0xbb98000b,0xbbbbbbbb,0xc0000000,
+0x06bbbbbb,0xbbbb0000,0x008bbbbb,0xbbbb5000,0x08bbbbbb,0xbbb98000,0x0000089b,
+0xbbbbbbbc,0x00000000,0x00000000,0x00000000,0x00000043,0xffffffff,0xffffffff,
+0xfff34000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x5bbbbbbb,0xbb800000,0x0000bbbb,0xbbbbb600,0x00000000,0x0abbbbbb,
+0xbbb50000,0x00000009,0xbbbbbc00,0x0000cbbb,0xbbbbbbc0,0x00000000,0x089bbbbb,
+0xa0000000,0xc9bb8000,0x00000000,0x05bbbbbb,0xbb90000b,0xbbbbbbbb,0xbc000000,
+0x00005bbb,0x95000009,0xbbbbbbbb,0x50000000,0x009bbbbb,0xbbbb5000,0x000bbbbb,
+0xbbbba000,0x0cbbbbbb,0xbbbc0000,0x00000049,0xbbbbba00,0x00000000,0x00000000,
+0x00000000,0x00000000,0x4fffffff,0xffffffff,0xfffff300,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x8bbbbbbb,0xbb500000,
+0x0000dbbb,0xbbbbb900,0x00000000,0x06bbbbbb,0xbbb00000,0x00000004,0xbbbc0000,
+0x0000abbb,0xbbbbbb40,0x00000000,0x0089bba0,0x00000000,0x00680000,0x00000000,
+0x0abbbbbb,0xbbb0008b,0xbbbbbbbb,0xb8000000,0x00000695,0x0000000c,0xbbbbbbbb,
+0xd0000000,0x008bbbbb,0xbbbbc000,0x0009bbbb,0xbbbbd000,0x0cbbbbbb,0xbbb40000,
+0x00000008,0x9bb60000,0x00000000,0x00000000,0x00000000,0x00000000,0x003fffff,
+0xffffffff,0xffff3400,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0bbbbbbb,0xbb600000,0x00006bbb,0xbbbbb900,0x00000000,
+0x0dbbbbbb,0xbb900000,0x00000000,0x8c000000,0x00006bbb,0xbbbbbb00,0x00000000,
+0x0008a400,0x00000000,0x00000000,0x00000008,0x6bbbbbbb,0xbbb5005b,0xbbbbbbbb,
+0x90000000,0x00000000,0x00000008,0xbbbbbbbb,0xb8000000,0x000dbbbb,0xbbbb6000,
+0x000dbbbb,0xbbbb9000,0x0abbbbbb,0xbbb00000,0x00000000,0x06000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00003fff,0xffffffff,0xfff40000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0dbbbbbb,
+0xbbd00000,0x00005bbb,0xbbbbbb80,0x00000000,0x06bbbbbb,0xbb900000,0x00000000,
+0x00000000,0x0000abbb,0xbbbbbb00,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0005ad9b,0xbbbbbbbb,0xbbb5008b,0xbbbbbbbb,0x90000000,0x00000000,0x00000000,
+0xdbbbbbbb,0xb9500000,0x000cbbbb,0xbbbb9000,0x000cbbbb,0xbbbbb400,0x0cbbbbbb,
+0xbbb00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x000004ff,0xffffffff,0xf4000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x06bbbbbb,0xbbb00000,0x00008bbb,0xbbbbbb50,
+0x00000000,0x06bbbbbb,0xbbb00000,0x00000000,0x00000000,0x0000cbbb,0xbbbbbb00,
+0x00000000,0x00000000,0x00000000,0x00000045,0xd9bbbbbb,0xbbbbbbbb,0xbbb5008b,
+0xbbbbbbbb,0x90000000,0x00000000,0x00000000,0x0bbbbbbb,0xbbb95400,0x0004bbbb,
+0xbbbbb000,0x0008bbbb,0xbbbbb800,0x0cbbbbbb,0xbbb00000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0xfffffff4,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0cbbbbbb,0xbbb80000,0x00000bbb,0xbbbbbb60,0x00000000,0x0cbbbbbb,0xbbbddddd,
+0xdddddddd,0xdddddddd,0xd8005bbb,0xbbbbbbdd,0xdddddddd,0xdddddddd,0xdddd8000,
+0x00008dbb,0xbbbbbbbb,0xbbbbbbbb,0xbbb4000b,0xbbbbbbbb,0x90000000,0x00000000,
+0x00000000,0x05bbbbbb,0xbbbbbb96,0x5000bbbb,0xbbbbb800,0x0000bbbb,0xbbbbba00,
+0x05bbbbbb,0xbbb9dddd,0xdddddddd,0xdddddddd,0xd8000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x43fff400,0x00000000,0x0007e140,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x08bbbbbb,0xbbb50000,0x000009bb,
+0xbbbbbbd0,0x00000000,0x08bbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xb8004bbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbc000,0x0006bbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbd0000b,0xbbbbbbbb,0xb0000000,0x00000000,0x00000000,0x00cbbbbb,0xbbbbbbbb,
+0xbb9c9bbb,0xbbbbbc00,0x00009bbb,0xbbbbbd00,0x00bbbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbbbb,0xbc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00440000,
+0x00000000,0x07eeeee2,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00bbbbbb,0xbbba0000,0x000006bb,0xbbbbbbb0,0x00000000,0x00bbbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbc000bbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbb6000,0x00dbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xb980000d,0xbbbbbbbb,0xb0000000,
+0x00000000,0x00000000,0x00089bbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbb600,0x0000dbbb,
+0xbbbbb900,0x00bbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xb6000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,0xeeeeeeee,0x12000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x009bbbbb,0xbbbd0000,
+0x00000cbb,0xbbbbbbb0,0x00000000,0x009bbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xb6000dbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbb6000,0x0cbbbbbb,0xbbbbbbbb,
+0xbbbbbbbb,0x94000006,0xbbbbbbbb,0xbc000000,0x00000000,0x00000000,0x00000cbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbb900,0x0000cbbb,0xbbbbbb00,0x006bbbbb,0xbbbbbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0xb6000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x000002ee,0xeeeeeeee,0xee140000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x006bbbbb,0xbbb90000,0x000008bb,0xbbbbbbb5,0x00000000,
+0x00abbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xb60005bb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbbbb,0xbbbb9000,0x09bbbbbb,0xbbbbbbbb,0xbbbbbb9c,0x00000008,0xbbbbbbbb,
+0xbd000000,0x00000000,0x00000000,0x00000005,0x9bbbbbbb,0xbbbbbbbb,0xbbbbbb00,
+0x00005bbb,0xbbbbbb80,0x00cbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xb9000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0002eeee,0xeeeeeeee,
+0xeeee7000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00cbbbbb,
+0xbbbb8000,0x000000bb,0xbbbbbbb6,0x00000000,0x008bbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbbbb,0xb60008bb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbd000,0x0bbbbbbb,
+0xbbbbbbbb,0xbbb96800,0x00000000,0xbbbbbbbb,0xbb000000,0x00000000,0x00000000,
+0x00000000,0x00cd9bbb,0xbbbbbbbb,0xbbbbbb80,0x00000bbb,0xbbbbbbc0,0x000bbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0xbd000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x001eeeee,0xeeeeeeee,0xeeeeee40,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x008bbbbb,0xbbbb5000,0x0000009b,0xbbbbbbbb,
+0x00000000,0x0009bbbb,0xbbbb5888,0x88888888,0xcbbbbbbb,0xbd0000db,0xbbbbbbbc,
+0x88888888,0x8885bbbb,0xbbbb9000,0x0bbbbbbb,0xbbbbbb96,0xc8000000,0x00000000,
+0x6bbbbbbb,0xbbc00000,0x00000000,0x00000000,0x00000000,0x0000045c,0x69bbbbbb,
+0xbbbbbbc0,0x000009bb,0xbbbbbb60,0x000dbbbb,0xbbbbc888,0x88888888,0x5bbbbbbb,
+0xb9000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0047eeee,
+0xeeeeeeee,0xeeeeeee1,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x000bbbbb,0xbbbba000,0x000000db,0xbbbbbbbb,0xd0000000,0x000cbbbb,0xbbbb6000,
+0x00000000,0x8bbbbbbb,0xb600005b,0xbbbbbbbd,0x00000000,0x0008bbbb,0xbbbbd000,
+0x0bbbbbbb,0xbbb9c000,0x00000000,0x00000000,0x8bbbbbbb,0xbb900000,0x0000000d,
+0x50000000,0x00000000,0x00000000,0x00008dbb,0xbbbbbb60,0x00000dbb,0xbbbbbb90,
+0x0005bbbb,0xbbbbd000,0x00000000,0x8bbbbbbb,0xbd000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x000041ee,0xeeeeeeee,0xeeeeeeee,0xe2000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x0009bbbb,0xbbbbd000,0x000000cb,
+0xbbbbbbbb,0xb9500000,0x00009bbb,0xbbbbb800,0x00000000,0x5bbbbbbb,0xb6000009,
+0xbbbbbbbb,0x50000000,0x0008bbbb,0xbbbbd000,0x0dbbbbbb,0xbb980000,0x00000000,
+0x00000000,0x06bbbbbb,0xbbbd0000,0x0000004b,0xb9800000,0x00000000,0x00000000,
+0x00000cbb,0xbbbbbbd0,0x00000abb,0xbbbbbbb0,0x00009bbb,0xbbbbb500,0x00000000,
+0x8bbbbbbb,0xbd000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00043000,
+0x0000002e,0xeeeeeeee,0xeeeeeeee,0xee120000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x000dbbbb,0xbbbb9000,0x0000008b,0xbbbbbbbb,0xbbb9da58,0x0000cbbb,
+0xbbbbb980,0x00000000,0xdbbbbbbb,0xbc000005,0xbbbbbbbb,0xb0000000,0x0006bbbb,
+0xbbbba000,0x0cbbbbbb,0xbbd00000,0x000000cb,0x50000000,0x08bbbbbb,0xbbbb5000,
+0x0000006b,0xbbb60000,0x0006bbbb,0xbbbb6000,0x000008bb,0xbbbbbbb0,0x000005bb,
+0xbbbbbbb8,0x00005bbb,0xbbbbb980,0x00000000,0x6bbbbbbb,0xba000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x043fff30,0x00000000,0x1eeeeeee,0xeeeeeeee,
+0xeeee1400,0x00000000,0x00000000,0x00000000,0x00000000,0x000cbbbb,0xbbbbb000,
+0x0000000b,0xbbbbbbbb,0xbbbbbbbb,0xb50009bb,0xbbbbbb98,0x00000005,0xbbbbbbbb,
+0xb8000000,0xdbbbbbbb,0xbb800000,0x005bbbbb,0xbbbb5000,0x04bbbbbb,0xbbb00000,
+0x000006bb,0xbd800000,0x00cbbbbb,0xbbbbb600,0x00000cbb,0xbbbbb500,0x0005bbbb,
+0xbbbbb400,0x000000bb,0xbbbbbbb4,0x000004bb,0xbbbbbbbc,0x00000dbb,0xbbbbbb95,
+0x00000008,0xbbbbbbbb,0xb5000000,0x00000000,0x00000000,0x00000000,0x00000004,
+0x3fffffff,0x40000000,0x04eeeeee,0xeeeeeeee,0xeeeeee40,0x00000000,0x00000000,
+0x00000000,0x00000008,0x888cbbbb,0xbbbbbc88,0x88800009,0xbbbbbbbb,0xbbbbbbbb,
+0xba0008bb,0xbbbbbbbb,0x680008ab,0xbbbbbbbb,0x90000000,0x89bbbbbb,0xbbb68000,
+0x0cbbbbbb,0xbbbb0000,0x006bbbbb,0xbbb95000,0x0056bbbb,0xbbb60000,0x0009bbbb,
+0xbbbbbbb6,0x588c9bbb,0xbbbbbb90,0x0000bbbb,0xbbbbbd00,0x000005bb,0xbbbbbbb8,
+0x0000009b,0xbbbbbbb6,0x000000bb,0xbbbbbbbb,0x680000cb,0xbbbbbbbb,0xb0000000,
+0x00000000,0x00000000,0x00000000,0x0000043f,0xffffffff,0xf3000000,0x0002eeee,
+0xeeeeeeee,0xeeee7000,0x00000000,0x00000000,0x00000000,0x0000000b,0xbbbbbbbb,
+0xbbbbbbbb,0xbbb5000d,0xbbbbbbbb,0xbbbbbbbb,0xbd0000cb,0xbbbbbbbb,0xbb999bbb,
+0xbbbbbbbb,0x60000000,0x05bbbbbb,0xbbbbbb99,0xbbbbbbbb,0xbbbd0000,0x008bbbbb,
+0xbbbbbb99,0xbbbbbbbb,0xbbbb9c00,0x00009bbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbb90,
+0x0000cbbb,0xbbbbbb98,0x000089bb,0xbbbbbbb8,0x0000009b,0xbbbbbbb9,0x0000005b,
+0xbbbbbbbb,0xbbb99bbb,0xbbbbbbbb,0xd0000000,0x00000000,0x00000000,0x00000000,
+0x00003fff,0xffffffff,0xfff30000,0x000001ee,0xeeeeeeee,0xee140000,0x00000000,
+0x00000000,0x00000000,0x00000009,0xbbbbbbbb,0xbbbbbbbb,0xbbbc000a,0xbbbbbbbb,
+0xbbbbbbbb,0xb9000006,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,0x40000000,0x00abbbbb,
+0xbbbbbbbb,0xbbbbbbbb,0xbbb80000,0x0005bbbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbd0,
+0x00008bbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbb50,0x000009bb,0xbbbbbbbb,0x9d99bbbb,
+0xbbbbbbb0,0x0000006b,0xbbbbbbbb,0x00000005,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbbbb,
+0x80000000,0x00000000,0x00000000,0x00000000,0x003fffff,0xffffffff,0xfffff400,
+0x00000041,0xeeeeeeee,0x14000000,0x00000000,0x00000000,0x00000000,0x00000006,
+0xbbbbbbbb,0xbbbbbbbb,0xbbb60008,0xbbbbbbbb,0xbbbbbbbb,0xbb000000,0x6bbbbbbb,
+0xbbbbbbbb,0xbbbbbbbc,0x00000000,0x000abbbb,0xbbbbbbbb,0xbbbbbbbb,0xbb600000,
+0x00005bbb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbb50,0x0000049b,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbbbd00,0x000008bb,0xbbbbbbbb,0xbbbbbbbb,0xbbbbbb90,0x0000005b,0xbbbbbbbb,
+0x80000000,0x5bbbbbbb,0xbbbbbbbb,0xbbbbbbb6,0x00005050,0x50500000,0x00000000,
+0x00000000,0x04ffffff,0xffffffff,0xffffff30,0x00000000,0x2eeeee14,0x00000000,
+0x00004400,0x00000000,0x00000000,0x0000000c,0xbbbbbbbb,0xbbbbbbbb,0xbbb90000,
+0xbbbbbbbb,0xbdbbbbbb,0xbb500000,0x05bbbbbb,0xbbbbbbbb,0xbbbbbb90,0x00000000,
+0x00005bbb,0xbbbbbbbb,0xbbbbbbbb,0xb9000000,0x000005bb,0xbbbbbbbb,0xbbbbbbbb,
+0xbbbb9000,0x0000000d,0xbbbbbbbb,0xbbbbbbbb,0xbbbb9000,0x0000005b,0xbbbbbbbb,
+0xbbbbbbbb,0xbbbbbb50,0x0000008b,0xbbbbbbbb,0x50000000,0x05bbbbbb,0xbbbbbbbb,
+0xbbbbbb90,0x0008c068,0x98d00000,0x00000000,0x00000000,0x0004ffff,0xffffffff,
+0xffffffff,0x30000000,0x047e1400,0x00000000,0x0043ff34,0x00000000,0x00000000,
+0x00000008,0xbbbbbbbb,0xbbbbbbbb,0xbbbb0000,0x9bbbbbbb,0xb60a9bbb,0xbbc00000,
+0x008dbbbb,0xbbbbbbbb,0xbbbbbd00,0x00000000,0x000000db,0xbbbbbbbb,0xbbbbbbbb,
+0xd8000000,0x0000008d,0xbbbbbbbb,0xbbbbbbbb,0xbb950000,0x00000000,0x59bbbbbb,
+0xbbbbbbbb,0xbbbd0000,0x00000004,0xdbbbbbbb,0xbbbbbbbb,0xbbbbbc00,0x00000009,
+0xbbbbbbbb,0x60000000,0x000dbbbb,0xbbbbbbbb,0xbbbbbd00,0x0008a06a,0xccd00000,
+0x00000000,0x00000000,0x000003ff,0xffffffff,0xffffffff,0xff400000,0x00040000,
+0x00000000,0x03ffffff,0x30000000,0x00000000,0x00000000,0xdddddbbb,0xbbbbbb9d,
+0xdddd8000,0xdbbbbbbb,0xb90005db,0xbb600000,0x00005dbb,0xbbbbbbbb,0xbbb95000,
+0x00000000,0x00000008,0xdbbbbbbb,0xbbbbbb9c,0x00000000,0x00000000,0x59bbbbbb,
+0xbbbbbbbb,0x95000000,0x00000000,0x00c9bbbb,0xbbbbbbbb,0xb9500000,0x00000000,
+0x059bbbbb,0xbbbbbbbb,0xbbb95000,0x00000009,0xbbbbbbbb,0xd0000000,0x00008dbb,
+0xbbbbbbbb,0xbbb9a000,0x0008a0dd,0x06d00000,0x00000000,0x00000000,0x00000043,
+0xffffffff,0xffffffff,0xfff34000,0x00000000,0x00000043,0xffffffff,0xff400000,
+0x00000000,0x00000000,0x000009bb,0xbbbbbbd0,0x00000000,0x8c5555c5,0x55000000,
+0x85500000,0x0000008c,0xd9bbbbbb,0x9d500000,0x00000000,0x00000000,0x00cd9bbb,
+0xbbb9d500,0x00000000,0x00000000,0x004cd9bb,0xbbbb9dc0,0x00000000,0x00000000,
+0x00005cdb,0xbbbbbb9a,0x50000000,0x00000000,0x0008cdbb,0xbbbbbbb9,0xda800000,
+0x00000006,0xbbbbbbbb,0xb0000000,0x0000000c,0xd9bbbbbb,0x9dc00000,0x0086dc6c,
+0x0cd00000,0x00000000,0x00000000,0x00000000,0x4fffffff,0xffffffff,0xfffff300,
+0x00000000,0x000003ff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000dbb,
+0xbbbbbb90,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00008840,
+0x00000000,0x00000000,0x00000000,0x00000008,0x84000000,0x00000000,0x00000000,
+0x00000000,0x88400000,0x00000000,0x00000000,0x00000000,0x08880000,0x00000000,
+0x00000000,0x00000000,0x08888000,0x00000000,0x0000000c,0xbbbbbbbb,0xb8000000,
+0x00000000,0x00008880,0x00000000,0x00888480,0x00800000,0x00000000,0x00000000,
+0x00000000,0x003fffff,0xffffffff,0xfffff400,0x00000000,0x0003ffff,0xffffffff,
+0xfffff300,0x00000000,0x00000000,0x00000abb,0xbbbbbbb8,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000008,0xbbbbbbbb,0xb5000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00043fff,0xffffffff,
+0xfff30000,0x00000000,0x003fffff,0xffffffff,0xfffffff4,0x00000000,0x00000000,
+0x000005bb,0xbbbbbbbb,0x58040000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xbbbbbbbb,
+0xba000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x000004ff,0xffffffff,0xf3000000,0x00000000,0x00003fff,
+0xffffffff,0xffffffff,0x30000000,0x00000000,0x000000bb,0xbbbbbbbb,0xbbbbb500,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0xdbbbbbbb,0xbd000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000003,
+0xfffffff3,0x00000000,0x00000000,0x000004ff,0xffffffff,0xffffffff,0xff300000,
+0x00000000,0x000000db,0xbbbbbbbb,0xbbbbba00,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x6bbbbbbb,0xb9000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x43fff340,0x00000000,0x00021100,
+0x00000003,0xffffffff,0xffffffff,0xffff4000,0x00000000,0x0000008b,0xbbbbbbbb,
+0xbbbbbd00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0xcbbbbbbb,0xbb800000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00430000,0x00000000,0x021eeee2,0x00000000,0x03ffffff,0xffffffff,
+0xfffff300,0x00000000,0x0000000d,0xbbbbbbbb,0xbbbbb900,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x8bbbbbbb,0xbb500000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,
+0x1eeeeeee,0x14000000,0x004fffff,0xffffffff,0xffffff30,0x00000000,0x00000000,
+0x9bbbbbbb,0xbbbbbb00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0bbbbbbb,0xbba00000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0000041e,0xeeeeeeee,0xee100000,0x00003fff,
+0xffffffff,0xffff3000,0x00000000,0x00000000,0x0dbbbbbb,0xbbbbbb50,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x09bbbbbb,0xbbd00000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00047eee,0xeeeeeeee,0xeeee2000,0x0000003f,0xffffffff,0xff300000,0x00000000,
+0x00000000,0x0059bbbb,0xbbbbbbc0,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x06bbbbbb,
+0xbb900000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x007eeeee,0xeeeeeeee,0xeeeee140,
+0x00000004,0xffffffff,0x30000000,0x00000000,0x00000000,0x00004c66,0xd66a5800,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00808480,0x84800000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0041eeee,0xeeeeeeee,0xeeeeeee7,0x00000000,0x03ffff34,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00002eee,0xeeeeeeee,
+0xeeeeeeee,0xe2000000,0x004f3400,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000007e,0xeeeeeeee,0xeeeeeeee,0xee140000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,
+0x1eeeeeee,0xeeeeeeee,0xeeee7000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x02eeeeee,0xeeeeeeee,0xeeeeee40,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0007eeee,0xeeeeeeee,0xeeeee400,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x000041ee,0xeeeeeeee,
+0xeee20000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000002e,0xeeeeeeee,0xe2000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x7eeeeee2,0x00000000,0x00000400,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x041ee700,0x00000000,0x0003ff30,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00040000,0x00000000,0x04ffffff,0x40000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,
+0xffffffff,0xff400000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x000004ff,0xffffffff,0xfff30000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0004ffff,0xffffffff,0xfffff400,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x004fffff,0xffffffff,0xfffffff4,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00043fff,0xffffffff,0xffffffff,0x30000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x000004ff,0xffffffff,
+0xffffffff,0xff400000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00047700,0x00000003,0xffffffff,0xffffffff,0xffff4000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x001eeee4,0x00000000,
+0x4fffffff,0xffffffff,0xfffff300,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x7eeeeeee,0x14000000,0x004fffff,0xffffffff,0xffffff30,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000007e,0xeeeeeeee,
+0xee200000,0x00003fff,0xffffffff,0xffff3400,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00002eee,0xeeeeeeee,0xeeee4000,0x000004ff,0xffffffff,
+0xfff40000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x002eeeee,
+0xeeeeeeee,0xeeeee140,0x00000004,0xffffffff,0xf4000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0041eeee,0xeeeeeeee,0xeeeeeee7,0x00000000,
+0x43fffff4,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00002eee,0xeeeeeeee,0xeeeeeeee,0x12000000,0x004ff400,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00004000,0x0000007e,0xeeeeeeee,0xeeeeeeee,
+0xee100000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x004fff40,0x00000004,0x1eeeeeee,0xeeeeeeee,0xeeee7000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x4ffffff3,0x00000000,0x02eeeeee,
+0xeeeeeeee,0xeeeeee40,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000043,0xffffffff,0xf3000000,0x0001eeee,0xeeeeeeee,0xeeeee200,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x000043ff,0xffffffff,0xfff40000,
+0x00004eee,0xeeeeeeee,0xeee70000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0043ffff,0xffffffff,0xffff3400,0x0000002e,0xeeeeeeee,0xe7400000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00ffffff,0xffffffff,
+0xffffff30,0x00000000,0x1eeeeee7,0x40000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0003ffff,0xffffffff,0xffffffff,0x40000000,0x04eee140,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x000003ff,
+0xffffffff,0xffffffff,0xf3000000,0x00024000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0000004f,0xffffffff,0xffffffff,0xfff30000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x3fffffff,0xffffffff,0xfffff400,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00ffffff,0xffffffff,
+0xfffff300,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0004ffff,0xffffffff,0xffff3000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x000003ff,
+0xffffffff,0xff400000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0000004f,0xffffffff,0x30000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x4fffff30,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x003f3000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x0000babe
+};
index 8ffd32607a97576f52f7c65408e2c7bda5cc0d6a..c13dd207deebc8dca51998c87cc983a36a48b2ca 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index a803b1cbadca730106175efcbec1a32a8ec66878..4f47323e44494ce98c62a62946bd9c3b5f22fc3d 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index e2fd0708d587de06471181aef853ebe0423614c0..ef2858389ae71b1d442b4c4294bac328307eaa00 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 9b994a09db82bb46d139487ff119db5be914e301..e48d1bcbad53ea3e839d03ac2cfed13e9e655fa3 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index bda68e4f8240a71593d51356fe9ea39cb28a9812..d76bc73c33de04f2563cc22c7d1c666f6aa6b888 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 861c143df5771dd0b8943119fa69d2310f56d2e4..42019fb80cbdcec56fa5fdc32e3be764c688b97d 100644 (file)
@@ -23,9 +23,7 @@
  */
 
 #include <common.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
 #endif
 #include <pci.h>
@@ -103,16 +101,6 @@ void pci_init_board(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
index e7386130098aa4343efcdbde2baa1f41f33061e4..2fc4fd6cbeab4d4b8dd5accafab6b2c2f5fe0a76 100644 (file)
@@ -184,16 +184,6 @@ void pci_init_board(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
index 6ba25d4644c2eaeeeb3ab66e12e311ba72517d22..6adf7e7b74b6246d0db368c93546da0407a4cd71 100644 (file)
@@ -27,9 +27,7 @@
 #else
 #include <asm/mmu.h>
 #endif
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
 #endif
 #if defined(CONFIG_PQ_MDS_PIB)
@@ -169,16 +167,6 @@ int checkboard(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
index 7818a2e1ee9c709d7c486f76a93949766dc81755..b0304229d2d81fe856bf8ca369b773bc552389db 100644 (file)
 #include <common.h>
 #include <pci.h>
 #include <i2c.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 
 #include <asm/fsl_i2c.h>
@@ -262,37 +261,26 @@ void pci_init_board(void)
 #endif                         /* CONFIG_PCISLAVE */
 
 #if defined(CONFIG_OF_LIBFDT)
-void
-ft_pci_setup(void *blob, bd_t *bd)
+void ft_pci_setup(void *blob, bd_t *bd)
 {
        int nodeoffset;
-       int err;
        int tmp[2];
+       const char *path;
 
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
+       nodeoffset = fdt_path_offset(blob, "/aliases");
        if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(hose[0].first_busno);
-               tmp[1] = cpu_to_be32(hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
-}
-#elif defined(CONFIG_OF_FLAT_TREE)
-void
-ft_pci_setup(void *blob, bd_t *bd)
-{
-       u32 *p;
-       int len;
-
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
-       if (p != NULL) {
-               p[0] = hose[0].first_busno;
-               p[1] = hose[0].last_busno;
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
        }
 }
-#endif                         /* CONFIG_OF_FLAT_TREE */
+#endif                         /* CONFIG_OF_LIBFDT */
 #endif                         /* CONFIG_PCI */
index 39c09162760eb3dcbc95ed487ec0fbd6ab92a81a..3d72eb7d894d7c723a9c89304e004103e97e13a7 100644 (file)
@@ -32,9 +32,7 @@
 #if defined(CONFIG_SPD_EEPROM)
 #include <spd_sdram.h>
 #endif
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
 #endif
 
@@ -256,16 +254,6 @@ void sdram_init(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
index 7bcdccbcc6780094cd3b219bbe00ca670a7d76c8..564e436f8d4ec4a9c512d795bb00f39d6af11a2d 100644 (file)
 #include <pci.h>
 #include <asm/mpc8349_pci.h>
 #include <i2c.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 
 
@@ -389,58 +388,39 @@ pci_init_board(void)
 }
 
 #if defined(CONFIG_OF_LIBFDT)
-void
-ft_pci_setup(void *blob, bd_t *bd)
+void ft_pci_setup(void *blob, bd_t *bd)
 {
        int nodeoffset;
-       int err;
        int tmp[2];
+       const char *path;
 
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
+       nodeoffset = fdt_path_offset(blob, "/aliases");
        if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
 #ifdef CONFIG_MPC83XX_PCI2
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8600");
-       if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[1].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[1].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
+               path = fdt_getprop(blob, nodeoffset, "pci1", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
 #endif
-}
-#elif defined(CONFIG_OF_FLAT_TREE)
-void
-ft_pci_setup(void *blob, bd_t *bd)
-{
-               u32 *p;
-               int len;
-
-               p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
-               if (p != NULL) {
-               p[0] = pci_hose[0].first_busno;
-               p[1] = pci_hose[0].last_busno;
-               }
-
-#ifdef CONFIG_MPC83XX_PCI2
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8600/bus-range", &len);
-       if (p != NULL) {
-               p[0] = pci_hose[1].first_busno;
-               p[1] = pci_hose[1].last_busno;
        }
-#endif
 }
-#endif /* CONFIG_OF_FLAT_TREE */
+#endif /* CONFIG_OF_LIBFDT */
 #endif /* CONFIG_PCI */
index c82f7847a225cd7e6cad3115789dd20c76e51d8b..8c19ad6c994f56259696a04fe5963d0756feae2f 100644 (file)
@@ -37,9 +37,7 @@
 #else
 #include <asm/mmu.h>
 #endif
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
 #endif
 
@@ -389,16 +387,6 @@ int misc_init_r(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
index a764a61867a58f4ca6f8e9a13552dbc8db1884f1..d33edf367b37c1140ffaa774d23395e39af65ff4 100644 (file)
 #include <pci.h>
 #include <asm/mpc8349_pci.h>
 #include <i2c.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -335,58 +334,39 @@ void pci_init_board(void)
 }
 
 #if defined(CONFIG_OF_LIBFDT)
-void
-ft_pci_setup(void *blob, bd_t *bd)
+void ft_pci_setup(void *blob, bd_t *bd)
 {
        int nodeoffset;
-       int err;
        int tmp[2];
+       const char *path;
 
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
+       nodeoffset = fdt_path_offset(blob, "/aliases");
        if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
 #ifdef CONFIG_MPC83XX_PCI2
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
-       if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[1].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[1].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
+               path = fdt_getprop(blob, nodeoffset, "pci1", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
 #endif
-}
-#elif defined(CONFIG_OF_FLAT_TREE)
-void
-ft_pci_setup(void *blob, bd_t *bd)
-{
-               u32 *p;
-               int len;
-
-               p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
-               if (p != NULL) {
-               p[0] = pci_hose[0].first_busno;
-               p[1] = pci_hose[0].last_busno;
-               }
-
-#ifdef CONFIG_MPC83XX_PCI2
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8600/bus-range", &len);
-       if (p != NULL) {
-               p[0] = pci_hose[1].first_busno;
-               p[1] = pci_hose[1].last_busno;
        }
-#endif
 }
-#endif /* CONFIG_OF_FLAT_TREE */
+#endif /* CONFIG_OF_LIBFDT */
 #endif /* CONFIG_PCI */
index e050cd4395ab28fcc6c59539825421a755617e9f..2fcef8b4df8ee6129546f3c6e5305adfab679f83 100644 (file)
@@ -25,9 +25,7 @@
 #else
 #include <asm/mmu.h>
 #endif
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
 #endif
 #if defined(CONFIG_PQ_MDS_PIB)
@@ -87,6 +85,11 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
        {0,  1, 3, 0, 2}, /* MDIO */
        {0,  2, 1, 0, 1}, /* MDC */
 
+       {5,  0, 1, 0, 2}, /* UART2_SOUT */
+       {5,  1, 2, 0, 3}, /* UART2_CTS */
+       {5,  2, 1, 0, 1}, /* UART2_RTS */
+       {5,  3, 2, 0, 2}, /* UART2_SIN */
+
        {0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
 };
 
@@ -106,6 +109,9 @@ int board_early_init_f(void)
            immr->sysconf.spridr == SPR_8360E_REV21)
                bcsr[0xe] = 0x30;
 
+       /* Enable second UART */
+       bcsr[0x9] &= ~0x01;
+
        return 0;
 }
 
@@ -295,19 +301,48 @@ void sdram_init(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
-#if defined(CONFIG_OF_FLAT_TREE)
-       u32 *p;
-       int len;
-
-       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
+       const immap_t *immr = (immap_t *)CFG_IMMR;
+
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
 #endif
+       /*
+        * mpc8360ea pb mds errata 2: RGMII timing
+        * if on mpc8360ea rev. 2.1,
+        * change both ucc phy-connection-types from rgmii-id to rgmii-rxid
+        */
+       if (immr->sysconf.spridr == SPR_8360_REV21 ||
+           immr->sysconf.spridr == SPR_8360E_REV21) {
+               int nodeoffset;
+               const char *prop;
+               const char *path;
+
+               nodeoffset = fdt_path_offset(fdt, "/aliases");
+               if (nodeoffset >= 0) {
+#if defined(CONFIG_HAS_ETH0)
+                       /* fixup UCC 1 if using rgmii-id mode */
+                       path = fdt_getprop(blob, nodeoffset, "ethernet0", NULL);
+                       if (path) {
+                               prop = fdt_getprop(blob, nodeoffset,
+                                                       "phy-connection-type", 0);
+                               if (prop && (strcmp(prop, "rgmii-id") == 0))
+                                       fdt_setprop(blob, nodeoffset, "phy-connection-type",
+                                                   "rgmii-rxid", sizeof("rgmii-rxid"));
+                       }
+#endif
+#if defined(CONFIG_HAS_ETH1)
+                       /* fixup UCC 2 if using rgmii-id mode */
+                       path = fdt_getprop(blob, nodeoffset, "ethernet1", NULL);
+                       if (path) {
+                               prop = fdt_getprop(blob, nodeoffset,
+                                                       "phy-connection-type", 0);
+                               if (prop && (strcmp(prop, "rgmii-id") == 0))
+                                       fdt_setprop(blob, nodeoffset, "phy-connection-type",
+                                                   "rgmii-rxid", sizeof("rgmii-rxid"));
+                       }
+#endif
+               }
+       }
 }
 #endif
index f18e532ef5fcdd38968592083245bc72b9422085..4a0d460fadc29376129d41a5f0851050d7d13504 100644 (file)
 #include <common.h>
 #include <pci.h>
 #include <i2c.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
+#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 
 #include <asm/fsl_i2c.h>
@@ -262,37 +261,26 @@ void pci_init_board(void)
 #endif                         /* CONFIG_PCISLAVE */
 
 #if defined(CONFIG_OF_LIBFDT)
-void
-ft_pci_setup(void *blob, bd_t *bd)
+void ft_pci_setup(void *blob, bd_t *bd)
 {
        int nodeoffset;
-       int err;
        int tmp[2];
+       const char *path;
 
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
+       nodeoffset = fdt_path_offset(blob, "/aliases");
        if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(hose[0].first_busno);
-               tmp[1] = cpu_to_be32(hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
-}
-#elif defined(CONFIG_OF_FLAT_TREE)
-void
-ft_pci_setup(void *blob, bd_t *bd)
-{
-       u32 *p;
-       int len;
-
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
-       if (p != NULL) {
-               p[0] = hose[0].first_busno;
-               p[1] = hose[0].last_busno;
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
        }
 }
-#endif                         /* CONFIG_OF_FLAT_TREE */
+#endif                         /* CONFIG_OF_LIBFDT */
 #endif                         /* CONFIG_PCI */
diff --git a/board/freescale/mpc8360erdk/Makefile b/board/freescale/mpc8360erdk/Makefile
new file mode 100644 (file)
index 0000000..acc9544
--- /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
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
similarity index 89%
rename from post/board/lwmon5/Makefile
rename to board/freescale/mpc8360erdk/config.mk
index c3f54e37b8c29b202632081e4e9d01d76ab4d227..87dd746a600eacf4551fce3afc47d407b8a7480e 100644 (file)
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2002-2007
+# (C) Copyright 2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
@@ -21,9 +21,8 @@
 # MA 02111-1307 USA
 #
 
+#
+# MPC8360ERDK
+#
 
-LIB    = libpostlwmon5.a
-
-COBJS  = ecc.o
-
-include $(TOPDIR)/post/rules.mk
+TEXT_BASE = 0xFF800000
diff --git a/board/freescale/mpc8360erdk/mpc8360erdk.c b/board/freescale/mpc8360erdk/mpc8360erdk.c
new file mode 100644 (file)
index 0000000..98ec6ab
--- /dev/null
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2006 Freescale Semiconductor, Inc.
+ *                    Dave Liu <daveliu@freescale.com>
+ *
+ * Copyright (C) 2007 Logic Product Development, Inc.
+ *                    Peter Barada <peterb@logicpd.com>
+ *
+ * Copyright (C) 2007 MontaVista Software, Inc.
+ *                    Anton Vorontsov <avorontsov@ru.mvista.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.
+ */
+
+#include <common.h>
+#include <ioports.h>
+#include <mpc83xx.h>
+#include <i2c.h>
+#include <spd.h>
+#include <miiphy.h>
+#include <asm/io.h>
+#include <asm/mmu.h>
+#include <pci.h>
+#include <libfdt.h>
+
+const qe_iop_conf_t qe_iop_conf_tab[] = {
+       /* MDIO */
+       {0,  1, 3, 0, 2}, /* MDIO */
+       {0,  2, 1, 0, 1}, /* MDC */
+
+       /* UCC1 - UEC (Gigabit) */
+       {0,  3, 1, 0, 1}, /* TxD0 */
+       {0,  4, 1, 0, 1}, /* TxD1 */
+       {0,  5, 1, 0, 1}, /* TxD2 */
+       {0,  6, 1, 0, 1}, /* TxD3 */
+       {0,  9, 2, 0, 1}, /* RxD0 */
+       {0, 10, 2, 0, 1}, /* RxD1 */
+       {0, 11, 2, 0, 1}, /* RxD2 */
+       {0, 12, 2, 0, 1}, /* RxD3 */
+       {0,  7, 1, 0, 1}, /* TX_EN */
+       {0,  8, 1, 0, 1}, /* TX_ER */
+       {0, 15, 2, 0, 1}, /* RX_DV */
+       {0,  0, 2, 0, 1}, /* RX_CLK */
+       {2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
+       {2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+
+       /* UCC2 - UEC (Gigabit) */
+       {0, 17, 1, 0, 1}, /* TxD0 */
+       {0, 18, 1, 0, 1}, /* TxD1 */
+       {0, 19, 1, 0, 1}, /* TxD2 */
+       {0, 20, 1, 0, 1}, /* TxD3 */
+       {0, 23, 2, 0, 1}, /* RxD0 */
+       {0, 24, 2, 0, 1}, /* RxD1 */
+       {0, 25, 2, 0, 1}, /* RxD2 */
+       {0, 26, 2, 0, 1}, /* RxD3 */
+       {0, 21, 1, 0, 1}, /* TX_EN */
+       {0, 22, 1, 0, 1}, /* TX_ER */
+       {0, 29, 2, 0, 1}, /* RX_DV */
+       {0, 31, 2, 0, 1}, /* RX_CLK */
+       {2,  2, 1, 0, 2}, /* GTX_CLK - CLK10 */
+       {2,  3, 2, 0, 1}, /* GTX125 - CLK4 */
+
+       /* UCC7 - UEC */
+       {4,  0, 1, 0, 1}, /* TxD0 */
+       {4,  1, 1, 0, 1}, /* TxD1 */
+       {4,  2, 1, 0, 1}, /* TxD2 */
+       {4,  3, 1, 0, 1}, /* TxD3 */
+       {4,  6, 2, 0, 1}, /* RxD0 */
+       {4,  7, 2, 0, 1}, /* RxD1 */
+       {4,  8, 2, 0, 1}, /* RxD2 */
+       {4,  9, 2, 0, 1}, /* RxD3 */
+       {4,  4, 1, 0, 1}, /* TX_EN */
+       {4,  5, 1, 0, 1}, /* TX_ER */
+       {4, 12, 2, 0, 1}, /* RX_DV */
+       {4, 13, 2, 0, 1}, /* RX_ER */
+       {4, 10, 2, 0, 1}, /* COL */
+       {4, 11, 2, 0, 1}, /* CRS */
+       {2, 18, 2, 0, 1}, /* TX_CLK - CLK19 */
+       {2, 19, 2, 0, 1}, /* RX_CLK - CLK20 */
+
+       /* UCC4 - UEC */
+       {1, 14, 1, 0, 1}, /* TxD0 */
+       {1, 15, 1, 0, 1}, /* TxD1 */
+       {1, 16, 1, 0, 1}, /* TxD2 */
+       {1, 17, 1, 0, 1}, /* TxD3 */
+       {1, 20, 2, 0, 1}, /* RxD0 */
+       {1, 21, 2, 0, 1}, /* RxD1 */
+       {1, 22, 2, 0, 1}, /* RxD2 */
+       {1, 23, 2, 0, 1}, /* RxD3 */
+       {1, 18, 1, 0, 1}, /* TX_EN */
+       {1, 19, 1, 0, 2}, /* TX_ER */
+       {1, 26, 2, 0, 1}, /* RX_DV */
+       {1, 27, 2, 0, 1}, /* RX_ER */
+       {1, 24, 2, 0, 1}, /* COL */
+       {1, 25, 2, 0, 1}, /* CRS */
+       {2,  6, 2, 0, 1}, /* TX_CLK - CLK7 */
+       {2,  7, 2, 0, 1}, /* RX_CLK - CLK8 */
+
+       /* PCI1 */
+       {5,  4, 2, 0, 3}, /* PCI_M66EN */
+       {5,  5, 1, 0, 3}, /* PCI_INTA */
+       {5,  6, 1, 0, 3}, /* PCI_RSTO */
+       {5,  7, 3, 0, 3}, /* PCI_C_BE0 */
+       {5,  8, 3, 0, 3}, /* PCI_C_BE1 */
+       {5,  9, 3, 0, 3}, /* PCI_C_BE2 */
+       {5, 10, 3, 0, 3}, /* PCI_C_BE3 */
+       {5, 11, 3, 0, 3}, /* PCI_PAR */
+       {5, 12, 3, 0, 3}, /* PCI_FRAME */
+       {5, 13, 3, 0, 3}, /* PCI_TRDY */
+       {5, 14, 3, 0, 3}, /* PCI_IRDY */
+       {5, 15, 3, 0, 3}, /* PCI_STOP */
+       {5, 16, 3, 0, 3}, /* PCI_DEVSEL */
+       {5, 17, 0, 0, 0}, /* PCI_IDSEL */
+       {5, 18, 3, 0, 3}, /* PCI_SERR */
+       {5, 19, 3, 0, 3}, /* PCI_PERR */
+       {5, 20, 3, 0, 3}, /* PCI_REQ0 */
+       {5, 21, 2, 0, 3}, /* PCI_REQ1 */
+       {5, 22, 2, 0, 3}, /* PCI_GNT2 */
+       {5, 23, 3, 0, 3}, /* PCI_GNT0 */
+       {5, 24, 1, 0, 3}, /* PCI_GNT1 */
+       {5, 25, 1, 0, 3}, /* PCI_GNT2 */
+       {5, 26, 0, 0, 0}, /* PCI_CLK0 */
+       {5, 27, 0, 0, 0}, /* PCI_CLK1 */
+       {5, 28, 0, 0, 0}, /* PCI_CLK2 */
+       {5, 29, 0, 0, 3}, /* PCI_SYNC_OUT */
+       {6,  0, 3, 0, 3}, /* PCI_AD0 */
+       {6,  1, 3, 0, 3}, /* PCI_AD1 */
+       {6,  2, 3, 0, 3}, /* PCI_AD2 */
+       {6,  3, 3, 0, 3}, /* PCI_AD3 */
+       {6,  4, 3, 0, 3}, /* PCI_AD4 */
+       {6,  5, 3, 0, 3}, /* PCI_AD5 */
+       {6,  6, 3, 0, 3}, /* PCI_AD6 */
+       {6,  7, 3, 0, 3}, /* PCI_AD7 */
+       {6,  8, 3, 0, 3}, /* PCI_AD8 */
+       {6,  9, 3, 0, 3}, /* PCI_AD9 */
+       {6, 10, 3, 0, 3}, /* PCI_AD10 */
+       {6, 11, 3, 0, 3}, /* PCI_AD11 */
+       {6, 12, 3, 0, 3}, /* PCI_AD12 */
+       {6, 13, 3, 0, 3}, /* PCI_AD13 */
+       {6, 14, 3, 0, 3}, /* PCI_AD14 */
+       {6, 15, 3, 0, 3}, /* PCI_AD15 */
+       {6, 16, 3, 0, 3}, /* PCI_AD16 */
+       {6, 17, 3, 0, 3}, /* PCI_AD17 */
+       {6, 18, 3, 0, 3}, /* PCI_AD18 */
+       {6, 19, 3, 0, 3}, /* PCI_AD19 */
+       {6, 20, 3, 0, 3}, /* PCI_AD20 */
+       {6, 21, 3, 0, 3}, /* PCI_AD21 */
+       {6, 22, 3, 0, 3}, /* PCI_AD22 */
+       {6, 23, 3, 0, 3}, /* PCI_AD23 */
+       {6, 24, 3, 0, 3}, /* PCI_AD24 */
+       {6, 25, 3, 0, 3}, /* PCI_AD25 */
+       {6, 26, 3, 0, 3}, /* PCI_AD26 */
+       {6, 27, 3, 0, 3}, /* PCI_AD27 */
+       {6, 28, 3, 0, 3}, /* PCI_AD28 */
+       {6, 29, 3, 0, 3}, /* PCI_AD29 */
+       {6, 30, 3, 0, 3}, /* PCI_AD30 */
+       {6, 31, 3, 0, 3}, /* PCI_AD31 */
+
+       /* NAND */
+       {4, 18, 2, 0, 0}, /* NAND_RYnBY */
+
+       /* DUART - UART2 */
+       {5,  0, 1, 0, 2}, /* UART2_SOUT */
+       {5,  2, 1, 0, 1}, /* UART2_RTS */
+       {5,  3, 2, 0, 2}, /* UART2_SIN */
+       {5,  1, 2, 0, 3}, /* UART2_CTS */
+
+       /* UCC5 - UART3 */
+       {3,  0, 1, 0, 1}, /* UART3_TX */
+       {3,  4, 1, 0, 1}, /* UART3_RTS */
+       {3,  6, 2, 0, 1}, /* UART3_RX */
+       {3, 12, 2, 0, 0}, /* UART3_CTS */
+       {3, 13, 2, 0, 0}, /* UCC5_CD */
+
+       /* UCC6 - UART4 */
+       {3, 14, 1, 0, 1}, /* UART4_TX */
+       {3, 18, 1, 0, 1}, /* UART4_RTS */
+       {3, 20, 2, 0, 1}, /* UART4_RX */
+       {3, 26, 2, 0, 0}, /* UART4_CTS */
+       {3, 27, 2, 0, 0}, /* UCC6_CD */
+
+       /* Fujitsu MB86277 (MINT) graphics controller */
+       {0, 30, 1, 0, 0}, /* nSRESET_GRAPHICS */
+       {1,  5, 1, 0, 0}, /* nXRST_GRAPHICS */
+       {1,  7, 1, 0, 0}, /* LVDS_BKLT_CTR */
+       {2, 16, 1, 0, 0}, /* LVDS_BKLT_EN */
+
+       /* END of table */
+       {0,  0, 0, 0, QE_IOP_TAB_END},
+};
+
+int board_early_init_f(void)
+{
+       return 0;
+}
+
+int board_early_init_r(void)
+{
+       void *reg = (void *)(CFG_IMMR + 0x14a8);
+       u32 val;
+
+       /*
+        * Because of errata in the UCCs, we have to write to the reserved
+        * registers to slow the clocks down.
+        */
+       val = in_be32(reg);
+       /* UCC1 */
+       val |= 0x00003000;
+       /* UCC2 */
+       val |= 0x0c000000;
+       out_be32(reg, val);
+
+       return 0;
+}
+
+int fixed_sdram(void)
+{
+       volatile immap_t *im = (immap_t *)CFG_IMMR;
+       u32 msize = 0;
+       u32 ddr_size;
+       u32 ddr_size_log2;
+
+       msize = CFG_DDR_SIZE;
+       for (ddr_size = msize << 20, ddr_size_log2 = 0;
+            (ddr_size > 1); ddr_size = ddr_size >> 1, ddr_size_log2++) {
+               if (ddr_size & 1)
+                       return -1;
+       }
+
+       im->sysconf.ddrlaw[0].ar =
+           LAWAR_EN | ((ddr_size_log2 - 1) & LAWAR_SIZE);
+
+       im->ddr.csbnds[0].csbnds = CFG_DDR_CS0_BNDS;
+       im->ddr.cs_config[0] = CFG_DDR_CS0_CONFIG;
+       im->ddr.timing_cfg_0 = CFG_DDR_TIMING_0;
+       im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1;
+       im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2;
+       im->ddr.timing_cfg_3 = CFG_DDR_TIMING_3;
+       im->ddr.sdram_cfg = CFG_DDR_SDRAM_CFG;
+       im->ddr.sdram_cfg2 = CFG_DDR_SDRAM_CFG2;
+       im->ddr.sdram_mode = CFG_DDR_MODE;
+       im->ddr.sdram_mode2 = CFG_DDR_MODE2;
+       im->ddr.sdram_interval = CFG_DDR_INTERVAL;
+       im->ddr.sdram_clk_cntl = CFG_DDR_CLK_CNTL;
+       udelay(200);
+       im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN;
+
+       return msize;
+}
+
+long int initdram(int board_type)
+{
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRC)
+       extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+       volatile immap_t *im = (immap_t *)CFG_IMMR;
+       u32 msize = 0;
+
+       if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32)im)
+               return -1;
+
+       /* DDR SDRAM - Main SODIMM */
+       im->sysconf.ddrlaw[0].bar = CFG_DDR_BASE & LAWBAR_BAR;
+       msize = fixed_sdram();
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRC)
+       /*
+        * Initialize DDR ECC byte
+        */
+       ddr_enable_ecc(msize * 1024 * 1024);
+#endif
+
+       /* return total bus SDRAM size(bytes)  -- DDR */
+       return (msize * 1024 * 1024);
+}
+
+int checkboard(void)
+{
+       puts("Board: Freescale/Logic MPC8360ERDK\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, };
+
+#if defined(PCI_33M)
+       clk->occr = OCCR_PCICOE0 | OCCR_PCICOE1 | OCCR_PCICOE2 |
+                   OCCR_PCICD0 | OCCR_PCICD1 | OCCR_PCICD2 | OCCR_PCICR;
+       printf("PCI clock is 33MHz\n");
+#else
+       clk->occr = OCCR_PCICOE0 | OCCR_PCICOE1 | OCCR_PCICOE2;
+       printf("PCI clock is 66MHz\n");
+#endif
+
+       udelay(2000);
+
+       /* 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;
+
+       mpc83xx_pci_init(1, reg, 0);
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+       ft_pci_setup(blob, bd);
+}
+#endif
diff --git a/board/freescale/mpc837xemds/Makefile b/board/freescale/mpc837xemds/Makefile
new file mode 100644 (file)
index 0000000..5ec7a87
--- /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 pci.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/mpc837xemds/config.mk b/board/freescale/mpc837xemds/config.mk
new file mode 100644 (file)
index 0000000..63c5fc3
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# (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
+#
+
+#
+# MPC837xEMDS
+#
+
+TEXT_BASE = 0xFE000000
diff --git a/board/freescale/mpc837xemds/mpc837xemds.c b/board/freescale/mpc837xemds/mpc837xemds.c
new file mode 100644 (file)
index 0000000..6925d23
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2007 Freescale Semiconductor, Inc.
+ * Dave Liu <daveliu@freescale.com>
+ *
+ * CREDITS: Kim Phillips contribute to LIBFDT code
+ *
+ * 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.
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <spd.h>
+#if defined(CONFIG_SPD_EEPROM)
+#include <spd_sdram.h>
+#endif
+#if defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#endif
+#if defined(CONFIG_PQ_MDS_PIB)
+#include "../common/pq-mds-pib.h"
+#endif
+
+int board_early_init_f(void)
+{
+       u8 *bcsr = (u8 *)CFG_BCSR;
+
+       /* Enable flash write */
+       bcsr[0x9] &= ~0x04;
+       /* Clear all of the interrupt of BCSR */
+       bcsr[0xe] = 0xff;
+
+       return 0;
+}
+
+int board_early_init_r(void)
+{
+#ifdef CONFIG_PQ_MDS_PIB
+       pib_init();
+#endif
+       return 0;
+}
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRC)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+int fixed_sdram(void);
+
+long int initdram(int board_type)
+{
+       volatile immap_t *im = (immap_t *) CFG_IMMR;
+       u32 msize = 0;
+
+       if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32) im)
+               return -1;
+
+#if defined(CONFIG_SPD_EEPROM)
+       msize = spd_sdram();
+#else
+       msize = fixed_sdram();
+#endif
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRC)
+       /* Initialize DDR ECC byte */
+       ddr_enable_ecc(msize * 1024 * 1024);
+#endif
+
+       /* return total bus DDR size(bytes) */
+       return (msize * 1024 * 1024);
+}
+
+#if !defined(CONFIG_SPD_EEPROM)
+/*************************************************************************
+ *  fixed sdram init -- doesn't use serial presence detect.
+ ************************************************************************/
+int fixed_sdram(void)
+{
+       volatile immap_t *im = (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);
+
+#if (CFG_DDR_SIZE != 512)
+#warning Currenly any ddr size other than 512 is not supported
+#endif
+       im->sysconf.ddrcdr = CFG_DDRCDR_VALUE;
+       udelay(50000);
+
+       im->ddr.sdram_clk_cntl = CFG_DDR_SDRAM_CLK_CNTL;
+       udelay(1000);
+
+       im->ddr.csbnds[0].csbnds = CFG_DDR_CS0_BNDS;
+       im->ddr.cs_config[0] = CFG_DDR_CS0_CONFIG;
+       udelay(1000);
+
+       im->ddr.timing_cfg_0 = CFG_DDR_TIMING_0;
+       im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1;
+       im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2;
+       im->ddr.timing_cfg_3 = CFG_DDR_TIMING_3;
+       im->ddr.sdram_cfg = CFG_DDR_SDRAM_CFG;
+       im->ddr.sdram_cfg2 = CFG_DDR_SDRAM_CFG2;
+       im->ddr.sdram_mode = CFG_DDR_MODE;
+       im->ddr.sdram_mode2 = CFG_DDR_MODE2;
+       im->ddr.sdram_interval = CFG_DDR_INTERVAL;
+       __asm__ __volatile__("sync");
+       udelay(1000);
+
+       im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN;
+       udelay(2000);
+       return CFG_DDR_SIZE;
+}
+#endif /*!CFG_SPD_EEPROM */
+
+int checkboard(void)
+{
+       puts("Board: Freescale MPC837xEMDS\n");
+       return 0;
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+#ifdef CONFIG_PCI
+       ft_pci_setup(blob, bd);
+#endif
+}
+#endif /* CONFIG_OF_BOARD_SETUP */
diff --git a/board/freescale/mpc837xemds/pci.c b/board/freescale/mpc837xemds/pci.c
new file mode 100644 (file)
index 0000000..ab90979
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 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.
+ */
+
+#include <asm/mmu.h>
+#include <asm/io.h>
+#include <common.h>
+#include <mpc83xx.h>
+#include <pci.h>
+#include <i2c.h>
+#include <asm/fsl_i2c.h>
+
+#if defined(CONFIG_PCI)
+static struct pci_region pci_regions[] = {
+       {
+               bus_start: CFG_PCI_MEM_BASE,
+               phys_start: CFG_PCI_MEM_PHYS,
+               size: CFG_PCI_MEM_SIZE,
+               flags: PCI_REGION_MEM | PCI_REGION_PREFETCH
+       },
+       {
+               bus_start: CFG_PCI_MMIO_BASE,
+               phys_start: CFG_PCI_MMIO_PHYS,
+               size: CFG_PCI_MMIO_SIZE,
+               flags: PCI_REGION_MEM
+       },
+       {
+               bus_start: CFG_PCI_IO_BASE,
+               phys_start: CFG_PCI_IO_PHYS,
+               size: CFG_PCI_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 };
+
+       /* Enable all 5 PCI_CLK_OUTPUTS */
+       clk->occr |= 0xf8000000;
+       udelay(2000);
+
+       /* Configure PCI Local Access Windows */
+       pci_law[0].bar = CFG_PCI_MEM_PHYS & LAWBAR_BAR;
+       pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB;
+
+       pci_law[1].bar = CFG_PCI_IO_PHYS & LAWBAR_BAR;
+       pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB;
+
+       udelay(2000);
+
+       mpc83xx_pci_init(1, reg, 0);
+}
+#endif /* CONFIG_PCI */
index 544fde94c43461370fccd2083fc71fedee65acf3..74d71c632a99534cbd4029049317ac029ed03205 100644 (file)
@@ -43,7 +43,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -75,10 +75,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -94,112 +94,99 @@ tlb1_entry:
         * 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)
-
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4*1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8*1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12*1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 0:       16M     Non-cacheable, guarded
         * 0xff000000   16M     FLASH
         * Out of reset this entry is only 4K.
         */
-       .long TLB1_MAS0(1, 0, 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       16K     Non-cacheable, guarded
         * 0xf8000000   16K     BCSR registers
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_BCSR), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_BCSR), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
+       .long FSL_BOOKE_MAS2(CFG_BCSR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BCSR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
        /*
@@ -211,17 +198,15 @@ tlb1_entry:
         * Likely it needs to be increased by two for these entries.
         */
 #error("Update the number of table entries in tlb1_entry")
-       .long TLB1_MAS0(1, 8, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1, 9, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 8, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1, 9, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
        entry_end
index a7c68b36485ada521cc7d767720a7dbab2bb5da3..bc0db5514185456249e208c08fd4194e8c8297f9 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 978bda5e4dc20d76312b4f97fee557f7299b70f5..8c8c087c4a37712bddafe0eab5cdd22d8afe2578 100644 (file)
@@ -42,7 +42,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -74,10 +74,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -93,33 +93,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -127,50 +119,46 @@ tlb1_entry:
         * 0xff000000   16M     FLASH
         * 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), 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xa0000000   256M    PCI2 MEM First half
         */
-       .long 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 FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xb0000000   256M    PCI2 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
@@ -178,28 +166,28 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       1M      Non-cacheable, guarded
         * 0xf8000000   1M      CADMUS registers
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .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)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CADMUS_BASE_ADDR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CADMUS_BASE_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        entry_end
 
index 4360d677ecce1b9c0a91372f598e9fdb0c5a95f5..1e490d04a7e6261a7535e9ea388dbea95cb2d6e8 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 084d4b80d94a63421707a1cae2a3534225e60e62..544dc07c8dc4cf9424f00f2c9a7a096a9ab63dea 100644 (file)
@@ -40,7 +40,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -71,10 +71,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB0         16K     Cacheable, guarded
@@ -87,33 +87,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -121,68 +113,63 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_BOOT_BLOCK, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BOOT_BLOCK, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       1G      Non-cacheable, guarded
         * 0x80000000   1G      PCIE  8,9,a,b
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long FSL_BOOKE_MAS2(CFG_PCIE_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCIE_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe100_0000  255M    PCI IO range
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #ifdef CFG_LBC_CACHE_BASE
        /*
         * TLB 5:       64M     Cacheable, non-guarded
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_CACHE_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_CACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
        /*
         * TLB 6:       64M     Non-cacheable, guarded
         * 0xf8000000   64M     PIXIS 0xF8000000 - 0xFBFFFFFF
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_NONCACHE_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_LBC_NONCACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 2:
        entry_end
 
index 1a8aaa9057c94b3893ae42a345bfcb71a7026075..66bd4b6dfce1264c89e78b5da953c402f76ce2f1 100644 (file)
@@ -136,7 +136,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a83a0952c32fe3d733f37e380f4061f358537d3f..ed0fc44939de36fb5ecea22065a631cfbf12b706 100644 (file)
@@ -41,7 +41,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -74,10 +74,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -93,33 +93,25 @@ tlb1_entry:
         * 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, (MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -127,39 +119,36 @@ tlb1_entry:
         * 0xff000000   16M     FLASH
         * 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_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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_BOOT_BLOCK, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BOOT_BLOCK, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       1G      Non-cacheable, guarded
         * 0x80000000   1G      PCI1/PCIE  8,9,a,b
         */
-       .long TLB1_MAS0(1, 1, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #ifdef CFG_RIO_MEM_PHYS
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         */
-       .long TLB1_MAS0(1, 2, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_PHYS),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_PHYS), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_PHYS, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_PHYS,  0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_PHYS + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_PHYS + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_PHYS + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_PHYS + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
        /*
         * TLB 5:       64M     Non-cacheable, guarded
@@ -168,28 +157,28 @@ tlb1_entry:
         * 0xe210_0000  1M      PCI2 IO
         * 0xe300_0000  1M      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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long TLB1_MAS0(1, 6, 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_CACHE_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_CACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       64M     Non-cacheable, guarded
         * 0xf8000000   64M     CADMUS registers, relocated L2SRAM
         */
-       .long TLB1_MAS0(1, 7, 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)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_NONCACHE_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_LBC_NONCACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 2:
        entry_end
index ee772d3ae2e935a183a6a5dc87aa9423ff462ec4..acf25e344bf36d03e05b7348694ecdb1053870b2 100644 (file)
@@ -137,7 +137,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 978bda5e4dc20d76312b4f97fee557f7299b70f5..8c8c087c4a37712bddafe0eab5cdd22d8afe2578 100644 (file)
@@ -42,7 +42,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -74,10 +74,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -93,33 +93,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -127,50 +119,46 @@ tlb1_entry:
         * 0xff000000   16M     FLASH
         * 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), 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xa0000000   256M    PCI2 MEM First half
         */
-       .long 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 FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xb0000000   256M    PCI2 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
@@ -178,28 +166,28 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       1M      Non-cacheable, guarded
         * 0xf8000000   1M      CADMUS registers
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .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)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CADMUS_BASE_ADDR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CADMUS_BASE_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        entry_end
 
index df21ea86e634ba6b77a0b582597102328f9c61e8..e9fa51ea69af58e5376d03a4fd614fc8f8a046c4 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 544fde94c43461370fccd2083fc71fedee65acf3..37fd0c6f488552c3fbeea5883b59169f814a1185 100644 (file)
@@ -43,7 +43,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -75,10 +75,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -94,33 +94,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -128,78 +120,74 @@ tlb1_entry:
         * 0xff000000   16M     FLASH
         * 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), 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       16K     Non-cacheable, guarded
         * 0xf8000000   16K     BCSR registers
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_BCSR), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_BCSR), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
+       .long FSL_BOOKE_MAS2(CFG_BCSR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BCSR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
        /*
@@ -211,17 +199,15 @@ tlb1_entry:
         * Likely it needs to be increased by two for these entries.
         */
 #error("Update the number of table entries in tlb1_entry")
-       .long TLB1_MAS0(1, 8, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1, 9, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 8, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1, 9, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
        entry_end
index c2cba617eabb00b517e54cf23e37bf46c191f215..96af2b1571a31f37a47da71f93471cdde45ad216 100644 (file)
@@ -141,7 +141,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index aae0f98e038f83d51437bb9264e54f06718051cc..791a50fc9256991581479ba61cfc0e880b76677a 100644 (file)
@@ -21,6 +21,8 @@
  */
 
 #include <common.h>
+#include <asm/io.h>
+
 #include "bcsr.h"
 
 void enable_8568mds_duart()
@@ -54,3 +56,22 @@ void enable_8568mds_qe_mdio()
 
        bcsr[7] |= 0x01;
 }
+
+#if defined(CONFIG_UEC_ETH1) || defined(CONFIG_UEC_ETH2)
+void reset_8568mds_uccs(void)
+{
+       volatile u8 *bcsr = (u8 *)(CFG_BCSR);
+
+       /* Turn off UCC1 & UCC2 */
+       out_8(&bcsr[8], in_8(&bcsr[8]) & ~BCSR_UCC1_GETH_EN);
+       out_8(&bcsr[9], in_8(&bcsr[9]) & ~BCSR_UCC2_GETH_EN);
+
+       /* Mode is RGMII, all bits clear */
+       out_8(&bcsr[11], in_8(&bcsr[11]) & ~(BCSR_UCC1_MODE_MSK |
+                                            BCSR_UCC2_MODE_MSK));
+
+       /* Turn UCC1 & UCC2 on */
+       out_8(&bcsr[8], in_8(&bcsr[8]) | BCSR_UCC1_GETH_EN);
+       out_8(&bcsr[9], in_8(&bcsr[9]) | BCSR_UCC2_GETH_EN);
+}
+#endif
index aefd9bf54d388b94d869b71f1839f27b8c8419d2..f7f70bcfa149d9ef7cb40dba7761e539aa34e57e 100644 (file)
        7       Flash write protect
 */
 
+#define BCSR_UCC1_GETH_EN      (0x1 << 7)
+#define BCSR_UCC2_GETH_EN      (0x1 << 7)
+#define BCSR_UCC1_MODE_MSK     (0x3 << 4)
+#define BCSR_UCC2_MODE_MSK     (0x3 << 0)
+
 /*BCSR Utils functions*/
 
 void enable_8568mds_duart(void);
@@ -97,4 +102,8 @@ void enable_8568mds_flash_write(void);
 void disable_8568mds_flash_write(void);
 void enable_8568mds_qe_mdio(void);
 
+#if defined(CONFIG_UEC_ETH1) || defined(CONFIG_UEC_ETH2)
+void reset_8568mds_uccs(void);
+#endif
+
 #endif /* __BCSR_H_ */
index e36036daf0de2015f2ff4cc785cf148bd4793387..2748c51f3bbd9fd0435afe437f784d3a573e7120 100644 (file)
@@ -41,7 +41,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 #define        entry_start \
@@ -73,10 +73,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -93,31 +93,25 @@ tlb1_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_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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /* TLB 1 Initializations */
        /*
@@ -125,31 +119,29 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE + 0x1000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE + 0x1000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLBe 1:      16M     Non-cacheable, guarded
         * 0xfe000000   16M     FLASH (lower half)
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLBe 2:      1G      Non-cacheable, guarded
         * 0x80000000   512M    PCI1 MEM
         * 0xa0000000   512M    PCIe MEM
         */
-       .long TLB1_MAS0(1, 2, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLBe 3:      64M     Non-cacheable, guarded
@@ -157,19 +149,19 @@ tlb1_entry:
         * 0xe200_0000  8M      PCI1 IO
         * 0xe280_0000  8M      PCIe IO
         */
-       .long TLB1_MAS0(1, 3, 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)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLBe 4:      64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long TLB1_MAS0(1, 4, 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)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLBe 5:      256K    Non-cacheable, guarded
@@ -177,10 +169,10 @@ tlb1_entry:
         * 0xf8008000   32K PIB (CS4)
         * 0xf8010000   32K PIB (CS5)
         */
-       .long TLB1_MAS0(1, 5, 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256K)
+       .long FSL_BOOKE_MAS2(CFG_BCSR_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BCSR_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 2:
        entry_end
index 460cb1b2753be8e26b104ec5172ab424201c2817..3c3726b49cc4d0b7acd2ece1f8f8d683fbf68b24 100644 (file)
@@ -87,6 +87,13 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
        {1, 31, 2, 0, 3}, /* GTX125 */
        {4,  6, 3, 0, 2}, /* MDIO */
        {4,  5, 1, 0, 2}, /* MDC */
+
+       /* UART1 */
+       {2, 0, 1, 0, 2}, /* UART_SOUT1 */
+       {2, 1, 1, 0, 2}, /* UART_RTS1 */
+       {2, 2, 2, 0, 2}, /* UART_CTS1 */
+       {2, 3, 2, 0, 2}, /* UART_SIN1 */
+
        {0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
 };
 
@@ -109,6 +116,9 @@ int board_early_init_f (void)
 
        enable_8568mds_duart();
        enable_8568mds_flash_write();
+#if defined(CONFIG_UEC_ETH1) || defined(CONFIG_UEC_ETH2)
+       reset_8568mds_uccs();
+#endif
 #if defined(CONFIG_QE) && !defined(CONFIG_eTSEC_MDIO_BUS)
        enable_8568mds_qe_mdio();
 #endif
index 4682041ad7609354f18410ee711795c2fb03b639..7917409c16c1cc3d7f69e9b3247c5863f7187a1c 100644 (file)
@@ -140,7 +140,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/freescale/mpc8610hpcd/Makefile b/board/freescale/mpc8610hpcd/Makefile
new file mode 100644 (file)
index 0000000..76087c1
--- /dev/null
@@ -0,0 +1,59 @@
+# 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 $(TOPDIR)/config.mk
+
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o \
+       ../common/sys_eeprom.o \
+       ../common/pixis.o \
+       mpc8610hpcd_diu.o \
+       ../common/fsl_diu_fb.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)
+
+.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/freescale/mpc8610hpcd/config.mk b/board/freescale/mpc8610hpcd/config.mk
new file mode 100644 (file)
index 0000000..64ac4dc
--- /dev/null
@@ -0,0 +1,25 @@
+# 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
+#
+
+TEXT_BASE = 0xfff00000
+
+PLATFORM_CPPFLAGS += -DCONFIG_MPC86xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8610=1 -maltivec -mabi=altivec -msoft-float -O2
diff --git a/board/freescale/mpc8610hpcd/init.S b/board/freescale/mpc8610hpcd/init.S
new file mode 100644 (file)
index 0000000..4d811e1
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * 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
+ * Version 2 as published by the Free Software Foundation.
+ */
+
+#include <config.h>
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
+#include <mpc86xx.h>
+
+#define LAWAR_TRGT_PCI1                0x00000000
+#define LAWAR_TRGT_PCIE1       0x00200000
+#define LAWAR_TRGT_PCIE2       0x00100000
+#define LAWAR_TRGT_LBC         0x00400000
+#define LAWAR_TRGT_DDR         0x00f00000
+
+#if !defined(CONFIG_SPD_EEPROM)
+#define LAWBAR1 ((CFG_DDR_SDRAM_BASE>>12) & 0xffffff)
+#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M))
+#else
+#define LAWBAR1 0
+#define LAWAR1 ((LAWAR_TRGT_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M)) & ~LAWAR_EN)
+#endif
+
+#define LAWBAR2 ((CFG_PCIE1_MEM_BASE>>12) & 0xffffff)
+#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+#define LAWBAR3 ((CFG_PCIE2_MEM_BASE>>12) & 0xffffff)
+#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+#define LAWBAR4 ((PIXIS_BASE>>12) & 0xffffff)
+#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_LBC | (LAWAR_SIZE & LAWAR_SIZE_2M))
+
+#define LAWBAR5 ((CFG_PCIE1_IO_PHYS>>12) & 0xffffff)
+#define LAWAR5 (LAWAR_EN | LAWAR_TRGT_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_1M))
+
+#define LAWBAR6 ((CFG_PCIE2_IO_PHYS>>12) & 0xffffff)
+#define LAWAR6 (LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_1M))
+
+#define LAWBAR7 ((CFG_FLASH_BASE >>12) & 0xffffff)
+#define LAWAR7 (LAWAR_EN | LAWAR_TRGT_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+#define LAWBAR8 ((CFG_PCI1_MEM_PHYS>>12) & 0xffffff)
+#define LAWAR8 (LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+#define LAWBAR9 ((CFG_PCI1_IO_PHYS>>12) & 0xffffff)
+#define LAWAR9 (LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M))
+
+
+       .section .bootpg, "ax"
+       .globl  law_entry
+law_entry:
+       lis     r7,CFG_CCSRBAR@h
+       ori     r7,r7,CFG_CCSRBAR@l
+
+       addi    r4,r7,0
+       addi    r5,r7,0
+
+       /* Skip LAWAR0, start at LAWAR1 */
+       lis     r6,LAWBAR1@h
+       ori     r6,r6,LAWBAR1@l
+       stwu    r6, 0xc28(r4)
+
+       lis     r6,LAWAR1@h
+       ori     r6,r6,LAWAR1@l
+       stwu    r6, 0xc30(r5)
+
+       /* LAWBAR2, LAWAR2 */
+       lis     r6,LAWBAR2@h
+       ori     r6,r6,LAWBAR2@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR2@h
+       ori     r6,r6,LAWAR2@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR3, LAWAR3 */
+       lis     r6,LAWBAR3@h
+       ori     r6,r6,LAWBAR3@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR3@h
+       ori     r6,r6,LAWAR3@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR4, LAWAR4 */
+       lis     r6,LAWBAR4@h
+       ori     r6,r6,LAWBAR4@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR4@h
+       ori     r6,r6,LAWAR4@l
+       stwu    r6, 0x20(r5)
+       /* LAWBAR5, LAWAR5 */
+       lis     r6,LAWBAR5@h
+       ori     r6,r6,LAWBAR5@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR5@h
+       ori     r6,r6,LAWAR5@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR6, LAWAR6 */
+       lis     r6,LAWBAR6@h
+       ori     r6,r6,LAWBAR6@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR6@h
+       ori     r6,r6,LAWAR6@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR7, LAWAR7 */
+       lis     r6,LAWBAR7@h
+       ori     r6,r6,LAWBAR7@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR7@h
+       ori     r6,r6,LAWAR7@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR8, LAWAR8 */
+       lis     r6,LAWBAR8@h
+       ori     r6,r6,LAWBAR8@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR8@h
+       ori     r6,r6,LAWAR8@l
+       stwu    r6, 0x20(r5)
+
+       /* LAWBAR9, LAWAR9 */
+       lis     r6,LAWBAR9@h
+       ori     r6,r6,LAWBAR9@l
+       stwu    r6, 0x20(r4)
+
+       lis     r6,LAWAR9@h
+       ori     r6,r6,LAWAR9@l
+       stwu    r6, 0x20(r5)
+
+       blr
diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd.c b/board/freescale/mpc8610hpcd/mpc8610hpcd.c
new file mode 100644 (file)
index 0000000..264e959
--- /dev/null
@@ -0,0 +1,556 @@
+/*
+ * 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 <pci.h>
+#include <asm/processor.h>
+#include <asm/immap_86xx.h>
+#include <asm/immap_fsl_pci.h>
+#include <i2c.h>
+#include <spd.h>
+#include <asm/io.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+
+#include "../common/pixis.h"
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+#if defined(CONFIG_SPD_EEPROM)
+#include "spd_sdram.h"
+#endif
+
+void sdram_init(void);
+long int fixed_sdram(void);
+void mpc8610hpcd_diu_init(void);
+
+
+/* called before any console output */
+int board_early_init_f(void)
+{
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
+
+       gur->gpiocr |= 0x88aa5500; /* DIU16, IR1, UART0, UART2 */
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+       u8 tmp_val, version;
+
+       /*Do not use 8259PIC*/
+       tmp_val = in8(PIXIS_BASE + PIXIS_BRDCFG0);
+       out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val | 0x80);
+
+       /*For FPGA V7 or higher, set the IRQMAPSEL to 0 to use MAP0 interrupt*/
+       version = in8(PIXIS_BASE + PIXIS_PVER);
+       if(version >= 0x07) {
+               tmp_val = in8(PIXIS_BASE + PIXIS_BRDCFG0);
+               out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val & 0xbf);
+       }
+
+       /* Using this for DIU init before the driver in linux takes over
+        *  Enable the TFP410 Encoder (I2C address 0x38)
+        */
+
+       tmp_val = 0xBF;
+       i2c_write(0x38, 0x08, 1, &tmp_val, sizeof(tmp_val));
+       /* Verify if enabled */
+       tmp_val = 0;
+       i2c_read(0x38, 0x08, 1, &tmp_val, sizeof(tmp_val));
+       debug("DVI Encoder Read: 0x%02lx\n",tmp_val);
+
+       tmp_val = 0x10;
+       i2c_write(0x38, 0x0A, 1, &tmp_val, sizeof(tmp_val));
+       /* Verify if enabled */
+       tmp_val = 0;
+       i2c_read(0x38, 0x0A, 1, &tmp_val, sizeof(tmp_val));
+       debug("DVI Encoder Read: 0x%02lx\n",tmp_val);
+
+#ifdef CONFIG_FSL_DIU_FB
+       mpc8610hpcd_diu_init();
+#endif
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_local_mcm_t *mcm = &immap->im_local_mcm;
+
+       puts("Board: MPC8610HPCD\n");
+
+       mcm->abcr |= 0x00010000; /* 0 */
+       mcm->hpmr3 = 0x80000008; /* 4c */
+       mcm->hpmr0 = 0;
+       mcm->hpmr1 = 0;
+       mcm->hpmr2 = 0;
+       mcm->hpmr4 = 0;
+       mcm->hpmr5 = 0;
+
+       return 0;
+}
+
+
+long int
+initdram(int board_type)
+{
+       long dram_size = 0;
+
+#if defined(CONFIG_SPD_EEPROM)
+       dram_size = spd_sdram();
+#else
+       dram_size = fixed_sdram();
+#endif
+
+#if defined(CFG_RAMBOOT)
+       puts(" DDR: ");
+       return dram_size;
+#endif
+
+#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;
+
+       puts("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;
+               }
+       }
+
+       puts("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;
+               }
+       }
+
+       puts("SDRAM test passed.\n");
+       return 0;
+}
+#endif
+
+
+#if !defined(CONFIG_SPD_EEPROM)
+/*
+ * Fixed sdram init -- doesn't use serial presence detect.
+ */
+
+long int fixed_sdram(void)
+{
+#if !defined(CFG_RAMBOOT)
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_ddr_t *ddr = &immap->im_ddr1;
+       uint d_init;
+
+       ddr->cs0_bnds = 0x0000001f;
+       ddr->cs0_config = 0x80010202;
+
+       ddr->ext_refrec = 0x00000000;
+       ddr->timing_cfg_0 = 0x00260802;
+       ddr->timing_cfg_1 = 0x3935d322;
+       ddr->timing_cfg_2 = 0x14904cc8;
+       ddr->sdram_mode_1 = 0x00480432;
+       ddr->sdram_mode_2 = 0x00000000;
+       ddr->sdram_interval = 0x06180fff; /* 0x06180100; */
+       ddr->sdram_data_init = 0xDEADBEEF;
+       ddr->sdram_clk_cntl = 0x03800000;
+       ddr->sdram_cfg_2 = 0x04400010;
+
+#if defined(CONFIG_DDR_ECC)
+       ddr->err_int_en = 0x0000000d;
+       ddr->err_disable = 0x00000000;
+       ddr->err_sbe = 0x00010000;
+#endif
+       asm("sync;isync");
+
+       udelay(500);
+
+       ddr->sdram_cfg_1 = 0xc3000000; /* 0xe3008000;*/
+
+
+#if defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       d_init = 1;
+       debug("DDR - 1st controller: memory initializing\n");
+       /*
+        * Poll until memory is initialized.
+        * 512 Meg at 400 might hit this 200 times or so.
+        */
+       while ((ddr->sdram_cfg_2 & (d_init << 4)) != 0)
+               udelay(1000);
+
+       debug("DDR: memory initialized\n\n");
+       asm("sync; isync");
+       udelay(500);
+#endif
+
+       return 512 * 1024 * 1024;
+#endif
+       return CFG_SDRAM_SIZE * 1024 * 1024;
+}
+
+#endif
+
+#if defined(CONFIG_PCI)
+/*
+ * Initialize PCI Devices, report devices found.
+ */
+
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_fsl86xxads_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 pci1_hose = {
+#ifndef CONFIG_PCI_PNP
+config_table:pci_mpc86xxcts_config_table
+#endif
+};
+#endif /* CONFIG_PCI */
+
+#ifdef CONFIG_PCIE1
+static struct pci_controller pcie1_hose;
+#endif
+
+#ifdef CONFIG_PCIE2
+static struct pci_controller pcie2_hose;
+#endif
+
+int first_free_busno = 0;
+
+void pci_init_board(void)
+{
+       volatile immap_t *immap = (immap_t *) CFG_CCSRBAR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
+       uint devdisr = gur->devdisr;
+       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+
+       printf( " pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
+               devdisr, io_sel, host_agent);
+
+
+#ifdef CONFIG_PCIE1
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie1_hose;
+       int pcie_configured = (io_sel == 1) || (io_sel == 4);
+       int pcie_ep = (host_agent == 0) || (host_agent == 2) ||
+               (host_agent == 5);
+
+       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE1)) {
+               printf(" PCIe 1 connected to Uli as %s (base address %x)\n",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det)
+                       pci->pme_msg_det = 0xffffffff;
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                        CFG_PCI_MEMORY_BUS,
+                        CFG_PCI_MEMORY_PHYS,
+                        CFG_PCI_MEMORY_SIZE,
+                        PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                        CFG_PCIE1_MEM_BASE,
+                        CFG_PCIE1_MEM_PHYS,
+                        CFG_PCIE1_MEM_SIZE,
+                        PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                        CFG_PCIE1_IO_BASE,
+                        CFG_PCIE1_IO_PHYS,
+                        CFG_PCIE1_IO_SIZE,
+                        PCI_REGION_IO);
+
+               hose->region_count = 3;
+
+               hose->first_busno = first_free_busno;
+               pci_setup_indirect(hose, (int)&pci->cfg_addr,
+                                (int)&pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno = hose->last_busno + 1;
+               printf(" PCI-Express 1 on bus %02x - %02x\n",
+                       hose->first_busno, hose->last_busno);
+
+       } else
+               puts(" PCI-Express 1: Disabled\n");
+ }
+#else
+       puts("PCI-Express 1: Disabled\n");
+#endif /* CONFIG_PCIE1 */
+
+
+#ifdef CONFIG_PCIE2
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE2_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie2_hose;
+
+       int pcie_configured = (io_sel == 0) || (io_sel == 4);
+       int pcie_ep = (host_agent == 0) || (host_agent == 1) ||
+               (host_agent == 4);
+
+       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE2)) {
+               printf(" PCI-Express 2 connected to slot as %s" \
+                       " (base address %x)\n",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+               if (pci->pme_msg_det)
+                       pci->pme_msg_det = 0xffffffff;
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                        CFG_PCI_MEMORY_BUS,
+                        CFG_PCI_MEMORY_PHYS,
+                        CFG_PCI_MEMORY_SIZE,
+                        PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                        CFG_PCIE2_MEM_BASE,
+                        CFG_PCIE2_MEM_PHYS,
+                        CFG_PCIE2_MEM_SIZE,
+                        PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                        CFG_PCIE2_IO_BASE,
+                        CFG_PCIE2_IO_PHYS,
+                        CFG_PCIE2_IO_SIZE,
+                        PCI_REGION_IO);
+
+               hose->region_count = 3;
+
+               hose->first_busno = first_free_busno;
+               pci_setup_indirect(hose, (int)&pci->cfg_addr,
+                                (int)&pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno = hose->last_busno + 1;
+               printf(" PCI-Express 2 on bus %02x - %02x\n",
+                       hose->first_busno, hose->last_busno);
+       } else
+               puts(" PCI-Express 2: Disabled\n");
+ }
+#else
+       puts("PCI-Express 2: Disabled\n");
+#endif /* CONFIG_PCIE2 */
+
+
+#ifdef CONFIG_PCI1
+ {
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCI1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pci1_hose;
+       int pci_agent = (host_agent >= 4) && (host_agent <= 6);
+
+       if ( !(devdisr & MPC86xx_DEVDISR_PCI1)) {
+               printf(" PCI connected to PCI slots as %s" \
+                       " (base address %x)\n",
+                       pci_agent ? "Agent" : "Host",
+                       (uint)pci);
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                        CFG_PCI_MEMORY_BUS,
+                        CFG_PCI_MEMORY_PHYS,
+                        CFG_PCI_MEMORY_SIZE,
+                        PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                        CFG_PCI1_MEM_BASE,
+                        CFG_PCI1_MEM_PHYS,
+                        CFG_PCI1_MEM_SIZE,
+                        PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                        CFG_PCI1_IO_BASE,
+                        CFG_PCI1_IO_PHYS,
+                        CFG_PCI1_IO_SIZE,
+                        PCI_REGION_IO);
+
+               hose->region_count = 3;
+
+               hose->first_busno = first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr,
+                                (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+
+               first_free_busno = hose->last_busno + 1;
+               printf(" PCI on bus %02x - %02x\n",
+                       hose->first_busno, hose->last_busno);
+
+
+       } else
+               puts(" PCI: Disabled\n");
+ }
+#endif /* CONFIG_PCI1 */
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       int node, tmp[2];
+       const char *path;
+
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "timebase-frequency", bd->bi_busfreq / 4, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "clock-frequency", bd->bi_intfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
+                            "bus-frequency", bd->bi_busfreq, 1);
+
+       do_fixup_by_compat_u32(blob, "ns16550",
+                              "clock-frequency", bd->bi_busfreq, 1);
+
+       fdt_fixup_memory(blob, bd->bi_memstart, bd->bi_memsize);
+
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
+
+#ifdef CONFIG_PCI1
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+
+#endif
+#ifdef CONFIG_PCIE1
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pcie1_hose.last_busno
+                               - pcie1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+       }
+#endif
+#ifdef CONFIG_PCIE2
+               path = fdt_getprop(blob, node, "pci2", NULL);
+               if (path) {
+                       tmp[1] = pcie2_hose.last_busno
+                               - pcie2_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+       }
+}
+#endif
+
+/*
+ * get_board_sys_clk
+ * Reads the FPGA on board for CONFIG_SYS_CLK_FREQ
+ */
+
+unsigned long
+get_board_sys_clk(ulong dummy)
+{
+       u8 i;
+       ulong val = 0;
+       ulong a;
+
+       a = PIXIS_BASE + PIXIS_SPD;
+       i = in8(a);
+       i &= 0x07;
+
+       switch (i) {
+       case 0:
+               val = 33333000;
+               break;
+       case 1:
+               val = 39999600;
+               break;
+       case 2:
+               val = 49999500;
+               break;
+       case 3:
+               val = 66666000;
+               break;
+       case 4:
+               val = 83332500;
+               break;
+       case 5:
+               val = 99999000;
+               break;
+       case 6:
+               val = 133332000;
+               break;
+       case 7:
+               val = 166665000;
+               break;
+       }
+
+       return val;
+}
diff --git a/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c b/board/freescale/mpc8610hpcd/mpc8610hpcd_diu.c
new file mode 100644 (file)
index 0000000..b70637f
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ * York Sun <yorksun@freescale.com>
+ *
+ * FSL DIU Framebuffer driver
+ *
+ * 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/io.h>
+
+#ifdef CONFIG_FSL_DIU_FB
+
+#include "../common/pixis.h"
+#include "../common/fsl_diu_fb.h"
+
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+#include <devices.h>
+#include <video_fb.h>
+#endif
+
+extern unsigned int FSL_Logo_BMP[];
+
+static int xres, yres;
+
+
+void mpc8610hpcd_diu_init(void)
+{
+       char *monitor_port;
+       int gamma_fix;
+       unsigned int pixel_format;
+       unsigned char tmp_val;
+       unsigned char pixis_arch;
+
+       tmp_val = in8(PIXIS_BASE + PIXIS_BRDCFG0);
+       pixis_arch = in8(PIXIS_BASE + PIXIS_VER);
+
+       monitor_port = getenv("monitor");
+       if (!strncmp(monitor_port, "0", 1)) {   /* 0 - DVI */
+               xres = 1280;
+               yres = 1024;
+               if (pixis_arch == 0x01)
+                       pixel_format = 0x88882317;
+               else
+                       pixel_format = 0x88883316;
+               gamma_fix = 0;
+               out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val | 0x08);
+
+       } else if (!strncmp(monitor_port, "1", 1)) { /* 1 - Single link LVDS */
+               xres = 1024;
+               yres = 768;
+               pixel_format = 0x88883316;
+               gamma_fix = 0;
+               out8(PIXIS_BASE + PIXIS_BRDCFG0, (tmp_val & 0xf7) | 0x10);
+
+       } else if (!strncmp(monitor_port, "2", 1)) { /* 2 - Double link LVDS */
+               xres = 1280;
+               yres = 1024;
+               pixel_format = 0x88883316;
+               gamma_fix = 1;
+               out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val & 0xe7);
+
+       } else {        /* DVI */
+               xres = 1280;
+               yres = 1024;
+               pixel_format = 0x88882317;
+               gamma_fix = 0;
+               out8(PIXIS_BASE + PIXIS_BRDCFG0, tmp_val | 0x08);
+       }
+
+       fsl_diu_init(xres, pixel_format, gamma_fix,
+                    (unsigned char *)FSL_Logo_BMP);
+}
+
+int mpc8610diu_init_show_bmp(cmd_tbl_t *cmdtp,
+                            int flag, int argc, char *argv[])
+{
+       unsigned int addr;
+
+       if (argc < 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       if (!strncmp(argv[1],"init",4)) {
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+               fsl_diu_clear_screen();
+               drv_video_init();
+#else
+               mpc8610hpcd_diu_init();
+#endif
+       } else {
+               addr = simple_strtoul(argv[1], NULL, 16);
+               fsl_diu_clear_screen();
+               fsl_diu_display_bmp((unsigned char *)addr, 0, 0, 0);
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(
+       diufb, CFG_MAXARGS, 1, mpc8610diu_init_show_bmp,
+       "diufb init | addr - Init or Display BMP file\n",
+       "init\n    - initialize DIU\n"
+       "addr\n    - display bmp at address 'addr'\n"
+       );
+
+
+#if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE)
+
+/*
+ * The Graphic Device
+ */
+GraphicDevice ctfb;
+void *video_hw_init(void)
+{
+       GraphicDevice *pGD = (GraphicDevice *) &ctfb;
+       struct fb_info *info;
+
+       mpc8610hpcd_diu_init();
+
+       /* fill in Graphic device struct */
+       sprintf(pGD->modeIdent,
+               "%dx%dx%d %ldkHz %ldHz",
+               xres, yres, 32, 64, 60);
+
+       pGD->frameAdrs = (unsigned int)fsl_fb_open(&info);
+       pGD->winSizeX = xres;
+       pGD->winSizeY = yres - info->logo_height;
+       pGD->plnSizeX = pGD->winSizeX;
+       pGD->plnSizeY = pGD->winSizeY;
+
+       pGD->gdfBytesPP = 4;
+       pGD->gdfIndex = GDF_32BIT_X888RGB;
+
+       pGD->isaBase = 0;
+       pGD->pciBase = 0;
+       pGD->memSize = info->screen_size - info->logo_size;
+
+       /* Cursor Start Address */
+       pGD->dprBase = 0;
+       pGD->vprBase = 0;
+       pGD->cprBase = 0;
+
+       return (void *)pGD;
+}
+
+void video_set_lut (unsigned int index,        /* color number */
+                   unsigned char r,    /* red */
+                   unsigned char g,    /* green */
+                   unsigned char b     /* blue */
+                   )
+{
+       return;
+}
+
+#endif /* defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) */
+
+#endif /* CONFIG_FSL_DIU_FB */
diff --git a/board/freescale/mpc8610hpcd/u-boot.lds b/board/freescale/mpc8610hpcd/u-boot.lds
new file mode 100644 (file)
index 0000000..37838ec
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * 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)
+
+SECTIONS
+{
+
+  /* Read-only sections, merged into text segment: */
+  .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/mpc86xx/start.o        (.text)
+    board/freescale/mpc8610hpcd/init.o (.bootpg)
+    cpu/mpc86xx/traps.o (.text)
+    cpu/mpc86xx/interrupts.o (.text)
+    cpu/mpc86xx/cpu_init.o (.text)
+    cpu/mpc86xx/cpu.o (.text)
+    cpu/mpc86xx/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 (NOLOAD)             :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 931be9f375e946f5db416db438ece824f8bd6bbc..827878939d2f6f0f3bb2025ca485993dc4157381 100644 (file)
 #include <asm/immap_fsl_pci.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 <libfdt.h>
+#include <fdt_support.h>
 
 #include "../common/pixis.h"
 
@@ -324,36 +321,47 @@ void pci_init_board(void)
 
 }
 
-#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+#if defined(CONFIG_OF_BOARD_SETUP)
 void
 ft_board_setup(void *blob, bd_t *bd)
 {
-       u32 *p;
-       int len;
+       int node, tmp[2];
+       const char *path;
 
-       ft_cpu_setup(blob, bd);
+       fdt_fixup_ethernet(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);
-       }
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "timebase-frequency", bd->bi_busfreq / 4, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+                            "clock-frequency", bd->bi_intfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
+                            "bus-frequency", bd->bi_busfreq, 1);
+
+       do_fixup_by_compat_u32(blob, "ns16550",
+                              "clock-frequency", bd->bi_busfreq, 1);
+
+       fdt_fixup_memory(blob, bd->bi_memstart, bd->bi_memsize);
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
 #ifdef CONFIG_PCI1
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pcie@8000/bus-range", &len);
-       if (p != NULL) {
-               p[0] = 0;
-               p[1] = pci1_hose.last_busno - pci1_hose.first_busno;
-               debug("PCI@8000 first_busno=%d last_busno=%d\n",p[0],p[1]);
-       }
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
 #endif
 #ifdef CONFIG_PCI2
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pcie@9000/bus-range", &len);
-       if (p != NULL) {
-               p[0] = 0;
-               p[1] = pci2_hose.last_busno - pci2_hose.first_busno;
-               debug("PCI@9000 first_busno=%d last_busno=%d\n",p[0],p[1]);
-       }
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pci2_hose.last_busno - pci2_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
 #endif
+       }
 }
 #endif
 
index fd163622a82918f0041ff8ba21c979250922cd35..99006709f064bc6ed1a594d2c0e895821495d8fe 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 43f776579ef780a00497dc67bc4f6b9759373bc8..3f230507af16e68f6888b890a4df918c8e208654 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -139,7 +139,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9900a57c0a05f6bbe90a98a214bcd1b0ea07b52b..5ab680181a753d24c465e4a10dc0b9be0f22b05f 100644 (file)
@@ -53,6 +53,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 2ba7e0e4207b92a8997b5b463fead7ff4f7fa62b..3816e52eed73a377835704de17ec2901ad7e88cf 100644 (file)
@@ -34,7 +34,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if (CONFIG_FPGA)
+#if defined(CONFIG_FPGA)
 
 #if 0
 #define GEN860T_FPGA_DEBUG
index d448f9fa33dc92540a04fb47d6b20eed2fc3f4d0..73cc16d479276e0c014b97929ac332b129680240 100644 (file)
@@ -254,7 +254,7 @@ int misc_init_r (void)
        mii_init ();
 #endif
 
-#if (CONFIG_FPGA)
+#if defined(CONFIG_FPGA)
        gen860t_init_fpga ();
 #endif
        return 0;
index 7926a2e09d72eee84bba9c1fc911bd739e005370..668aa0d872185a56a01777c13b3f74263767c18b 100644 (file)
@@ -120,7 +120,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1df481751c5a08b1b998eb824c4786bbf8bd6675..6dc1cdcadfcf7d462dda037385ebc8279f40b8d0 100644 (file)
@@ -121,7 +121,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f48b9ad2a15170bea4933426c4be42022da42078..5eb8076abec41c78eb748e1f28505745324eccbf 100644 (file)
@@ -128,7 +128,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8ac4bdad0761832c962c01c0a10724d104925faa..9978f40301048b406c9f65f25162b8bb75c1aae2 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index ce53d9ddbb78755ca51719deb4491aa732fe45bc..8265130ff97851736fa15a14275c412606906279 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index ef53ab7a0a8d7248f30457359ae4eb0e9853e044..f3e3cf0b414d58f9ad35bb08d74d1f64bbb51d3b 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 337a3954d2de2a0f10692f76f4e0524bf8028c68..2c15c3fa10767beb8f0f5fabe981a9f33390a582 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 4bc50c50cb540486f9e9954440c586d7a6551e85..17f7b84f0dad17440549c45c6066c8ad89ae242d 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 69f31793adfa63d944857be14321e08504e821da..235ec42b547992a4d3f0638631010792cd7aafe1 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 1122d7521c43ed8247912246da5b541f63e20482..4a89cebaaa9f50fc2846b73809984246c0abf8d0 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 861873272b6196a71a7ab4685cf2d0e83126ed61..1e1c5590d77a6fed6185fbe0cb514b24f0e6d3cf 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index 8aa7e7c8e4aa539bb183e114541a89ae13ef68a5..ddfd2ef8afe023bfe5c017ead825bff259cf59fb 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o
+COBJS  := $(BOARD).o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/inka4x0/flash.c b/board/inka4x0/flash.c
deleted file mode 100644 (file)
index b138655..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * (C) Copyright 2003-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * (C) Copyright 2004
- * Martin Krause, TQ-Systems GmbH, martin.krause@tqs.de
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-
-flash_info_t   flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
-
-/*
- * CPU to flash interface is 8-bit, so make declaration accordingly
- */
-typedef unsigned char FLASH_PORT_WIDTH;
-typedef volatile unsigned char FLASH_PORT_WIDTHV;
-
-#define FPW    FLASH_PORT_WIDTH
-#define FPWV   FLASH_PORT_WIDTHV
-
-#define FLASH_CYCLE1   0x0555
-#define FLASH_CYCLE2   0x02aa
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static ulong flash_get_size(FPWV *addr, flash_info_t *info);
-static void flash_reset(flash_info_t *info);
-static int write_word_amd(flash_info_t *info, FPWV *dest, FPW data);
-static flash_info_t *flash_get_info(ulong base);
-
-/*-----------------------------------------------------------------------
- * flash_init()
- *
- * sets up flash_info and returns size of FLASH (bytes)
- */
-unsigned long flash_init (void)
-{
-       unsigned long size = 0;
-       extern void flash_preinit(void);
-       ulong flashbase = CFG_FLASH_BASE;
-
-       flash_preinit();
-
-       /* Init: no FLASHes known */
-       memset(&flash_info[0], 0, sizeof(flash_info_t));
-
-       flash_info[0].size =
-               flash_get_size((FPW *)flashbase, &flash_info[0]);
-
-       size = flash_info[0].size;
-
-#if CFG_MONITOR_BASE >= CFG_FLASH_BASE
-       /* monitor protection ON by default */
-       flash_protect(FLAG_PROTECT_SET,
-                     CFG_MONITOR_BASE,
-                     CFG_MONITOR_BASE+monitor_flash_len-1,
-                     flash_get_info(CFG_MONITOR_BASE));
-#endif
-
-#ifdef CFG_ENV_IS_IN_FLASH
-       /* ENV protection ON by default */
-       flash_protect(FLAG_PROTECT_SET,
-                     CFG_ENV_ADDR,
-                     CFG_ENV_ADDR+CFG_ENV_SIZE-1,
-                     flash_get_info(CFG_ENV_ADDR));
-#endif
-
-       return size ? size : 1;
-}
-
-/*-----------------------------------------------------------------------
- */
-static void flash_reset(flash_info_t *info)
-{
-       FPWV *base = (FPWV *)(info->start[0]);
-
-       /* Put FLASH back in read mode */
-       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL)
-               *base = (FPW)0x00FF00FF;        /* Intel Read Mode */
-       else if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_AMD)
-               *base = (FPW)0x00F000F0;        /* AMD Read Mode */
-}
-
-/*-----------------------------------------------------------------------
- */
-
-static flash_info_t *flash_get_info(ulong base)
-{
-       int i;
-       flash_info_t * info;
-
-       for (i = 0; i < CFG_MAX_FLASH_BANKS; i ++) {
-               info = & flash_info[i];
-               if (info->size && info->start[0] <= base &&
-                   base <= info->start[0] + info->size - 1)
-                       break;
-       }
-
-       return i == CFG_MAX_FLASH_BANKS ? 0 : info;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-void flash_print_info (flash_info_t *info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_AMD:     printf ("AMD ");                break;
-       case FLASH_MAN_BM:      printf ("BRIGHT MICRO ");       break;
-       case FLASH_MAN_FUJ:     printf ("FUJITSU ");            break;
-       case FLASH_MAN_SST:     printf ("SST ");                break;
-       case FLASH_MAN_STM:     printf ("STM ");                break;
-       case FLASH_MAN_INTEL:   printf ("INTEL ");              break;
-       default:                printf ("Unknown Vendor ");     break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_AM116DB:
-               printf ("AM29LV116DB (16Mbit, bottom boot sect)\n");
-               break;
-       case FLASH_AMLV128U:
-               printf ("AM29LV128ML (128Mbit, uniform sector size)\n");
-               break;
-       case FLASH_AM160B:
-               printf ("AM29LV160B (16 Mbit, bottom boot sect)\n");
-               break;
-       default:
-               printf ("Unknown Chip Type\n");
-               break;
-       }
-
-       printf ("  Size: %ld MB in %d Sectors\n",
-               info->size >> 20,
-               info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-
-       for (i=0; i<info->sector_count; ++i) {
-               if ((i % 5) == 0) {
-                       printf ("\n   ");
-               }
-               printf (" %08lX%s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : "     ");
-       }
-       printf ("\n");
-       return;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-/*
- * The following code cannot be run from FLASH!
- */
-
-ulong flash_get_size (FPWV *addr, flash_info_t *info)
-{
-       int i;
-       ulong base = (ulong)addr;
-
-       /* Write auto select command: read Manufacturer ID */
-       /* Write auto select command sequence and test FLASH answer */
-       addr[FLASH_CYCLE1] = (FPW)0x00AA00AA;   /* for AMD, Intel ignores this */
-       addr[FLASH_CYCLE2] = (FPW)0x00550055;   /* for AMD, Intel ignores this */
-       addr[FLASH_CYCLE1] = (FPW)0x00900090;   /* selects Intel or AMD */
-
-       /* The manufacturer codes are only 1 byte, so just use 1 byte.
-        * This works for any bus width and any FLASH device width.
-        */
-       udelay(100);
-       switch (addr[0] & 0xff) {
-
-       case (uchar)AMD_MANUFACT:
-               debug ("Manufacturer: AMD (Spansion)\n");
-               info->flash_id = FLASH_MAN_AMD;
-               break;
-
-       case (uchar)INTEL_MANUFACT:
-               debug ("Manufacturer: Intel (not supported yet)\n");
-               info->flash_id = FLASH_MAN_INTEL;
-               break;
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               info->sector_count = 0;
-               info->size = 0;
-               break;
-       }
-
-       /* Check 16 bits or 32 bits of ID so work on 32 or 16 bit bus. */
-       if (info->flash_id != FLASH_UNKNOWN) switch ((FPW)addr[1]) {
-
-       case (uchar)AMD_ID_LV116DB:
-               debug ("Chip: AM29LV116DB\n");
-               info->flash_id += FLASH_AM116DB;
-               info->sector_count = 35;
-               info->size = 0x00200000;
-               /*
-                * The first 4 sectors are 16 kB, 8 kB, 8 kB and 32 kB, all
-                * the other ones are 64 kB
-                */
-               info->start[0] = base + 0x00000000;
-               info->start[1] = base + 0x00004000;
-               info->start[2] = base + 0x00006000;
-               info->start[3] = base + 0x00008000;
-               for( i = 4; i < info->sector_count; i++ )
-                       info->start[i] =
-                               base + (i * (64 << 10)) - 0x00030000;
-               break;          /* => 2 MB */
-
-       case (FPW)AMD_ID_LV160B:
-               debug ("Chip: AM29LV160MB\n");
-               info->flash_id += FLASH_AM160B;
-               info->sector_count = 35;
-               info->size = 0x00400000;
-               /*
-                * The first 4 sectors are 16 kB, 8 kB, 8 kB and 32 kB, all
-                * the other ones are 64 kB
-                */
-               info->start[0] = base + 0x00000000;
-               info->start[1] = base + 0x00008000;
-               info->start[2] = base + 0x0000C000;
-               info->start[3] = base + 0x00010000;
-               for( i = 4; i < info->sector_count; i++ )
-                       info->start[i] =
-                               base + (i * 2 * (64 << 10)) - 0x00060000;
-               break;          /* => 4 MB */
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               info->sector_count = 0;
-               info->size = 0;
-       }
-
-       /* Put FLASH back in read mode */
-       flash_reset(info);
-
-       return (info->size);
-}
-
-/*-----------------------------------------------------------------------
- */
-
-int    flash_erase (flash_info_t *info, int s_first, int s_last)
-{
-       FPWV *addr = (FPWV*)(info->start[0]);
-       int flag, prot, sect, l_sect;
-       ulong start, now, last;
-
-       debug ("flash_erase: first: %d last: %d\n", s_first, s_last);
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               if (info->flash_id == FLASH_UNKNOWN) {
-                       printf ("- missing\n");
-               } else {
-                       printf ("- no sectors to erase\n");
-               }
-               return 1;
-       }
-
-       if ((info->flash_id == FLASH_UNKNOWN) ||
-           (info->flash_id > FLASH_AMD_COMP)) {
-               printf ("Can't erase unknown flash type %08lx - aborted\n",
-                       info->flash_id);
-               return 1;
-       }
-
-       prot = 0;
-       for (sect=s_first; sect<=s_last; ++sect) {
-               if (info->protect[sect]) {
-                       prot++;
-               }
-       }
-
-       if (prot) {
-               printf ("- Warning: %d protected sectors will not be erased!\n",
-                       prot);
-       } else {
-               printf ("\n");
-       }
-
-       l_sect = -1;
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       addr[0x0555] = (FPW)0x00AA00AA;
-       addr[0x02AA] = (FPW)0x00550055;
-       addr[0x0555] = (FPW)0x00800080;
-       addr[0x0555] = (FPW)0x00AA00AA;
-       addr[0x02AA] = (FPW)0x00550055;
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect<=s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
-                       addr = (FPWV*)(info->start[sect]);
-                       addr[0] = (FPW)0x00300030;
-                       l_sect = sect;
-               }
-       }
-
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts();
-
-       /* wait at least 80us - let's wait 1 ms */
-       udelay (1000);
-
-       /*
-        * We wait for the last triggered sector
-        */
-       if (l_sect < 0)
-               goto DONE;
-
-       start = get_timer (0);
-       last  = start;
-       addr = (FPWV*)(info->start[l_sect]);
-       while ((addr[0] & (FPW)0x00800080) != (FPW)0x00800080) {
-               if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
-                       printf ("Timeout\n");
-                       return 1;
-               }
-               /* show that we're waiting */
-               if ((now - last) > 1000) {      /* every second */
-                       putc ('.');
-                       last = now;
-               }
-       }
-
-DONE:
-       /* reset to read mode */
-       addr = (FPWV*)info->start[0];
-       addr[0] = (FPW)0x00F000F0;      /* reset bank */
-
-       printf (" done\n");
-       return 0;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       int i, rc = 0;
-
-       for (i = 0; i < cnt; i++)
-               if ((rc = write_word_amd(info, (FPW *)(addr+i), src[i])) != 0) {
-                       return (rc);
-               }
-
-       return rc;
-}
-
-/*-----------------------------------------------------------------------
- * Write a word to Flash for AMD FLASH
- * A word is 16 or 32 bits, whichever the bus width of the flash bank
- * (not an individual chip) is.
- *
- * returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-static int write_word_amd (flash_info_t *info, FPWV *dest, FPW data)
-{
-       ulong start;
-       int flag;
-       FPWV *base;             /* first address in flash bank  */
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*dest & data) != data) {
-               return (2);
-       }
-
-       base = (FPWV *)(info->start[0]);
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       base[FLASH_CYCLE1] = (FPW)0x00AA00AA;   /* unlock */
-       base[FLASH_CYCLE2] = (FPW)0x00550055;   /* unlock */
-       base[FLASH_CYCLE1] = (FPW)0x00A000A0;   /* selects program mode */
-
-       *dest = data;           /* start programming the data   */
-
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts();
-
-       start = get_timer (0);
-
-       /* data polling for D7 */
-       while ((*dest & (FPW)0x00800080) != (data & (FPW)0x00800080)) {
-               if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
-                       *dest = (FPW)0x00F000F0;        /* reset bank */
-                       return (1);
-               }
-       }
-       return (0);
-}
diff --git a/board/inka4x0/hyb25d512160bf-5.h b/board/inka4x0/hyb25d512160bf-5.h
new file mode 100644 (file)
index 0000000..7eb1f50
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Semihalf
+ * Written by Marian Balakowicz <m8@semihalf.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
+ */
+
+#define SDRAM_DDR      1               /* is DDR */
+
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x714F0F00
+#define SDRAM_CONFIG1  0x73711930
+#define SDRAM_CONFIG2  0x46770000
+#define SDRAM_TAPDELAY 0x10000000
index 478a331b408e01007078c2a66ded3f4ed6cfc7ce..5157f7d81dec188f89f3d439a62cbb1ac37ab152 100644 (file)
 #include <mpc5xxx.h>
 #include <pci.h>
 
-#if defined(CONFIG_MPC5200_DDR)
+#if defined(CONFIG_DDR_MT46V16M16)
 #include "mt46v16m16-75.h"
-#else
+#elif defined(CONFIG_SDR_MT48LC16M16A2)
 #include "mt48lc16m16a2-75.h"
+#elif defined(CONFIG_DDR_MT46V32M16)
+#include "mt46v32m16.h"
+#elif defined(CONFIG_DDR_HYB25D512160BF)
+#include "hyb25d512160bf.h"
+#elif defined(CONFIG_DDR_K4H511638C)
+#include "k4h511638c.h"
+#else
+#error "INKA4x0 SDRAM: invalid chip type specified!"
 #endif
 
 #ifndef CFG_RAMBOOT
@@ -88,7 +96,7 @@ long int initdram (int board_type)
 {
        ulong dramsize = 0;
 #ifndef CFG_RAMBOOT
-       ulong test1, test2;
+       long test1, test2;
 
        /* setup SDRAM chip selects */
        *(vu_long *)MPC5XXX_SDRAM_CS0CFG = 0x0000001c; /* 512MB at 0x0 */
@@ -108,9 +116,9 @@ long int initdram (int board_type)
 
        /* find RAM size using SDRAM CS0 only */
        sdram_start(0);
-       test1 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x20000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x20000000);
        sdram_start(1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x20000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x20000000);
        if (test1 > test2) {
                sdram_start(0);
                dramsize = test1;
@@ -175,7 +183,7 @@ void flash_preinit(void)
 
 int misc_init_f (void)
 {
-       uchar tmp[10];
+       char tmp[10];
        int i, br;
 
        i = getenv_r("brightness", tmp, sizeof(tmp));
diff --git a/board/inka4x0/k4h511638c.h b/board/inka4x0/k4h511638c.h
new file mode 100644 (file)
index 0000000..70cc405
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Semihalf
+ * Written by Marian Balakowicz <m8@semihalf.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
+ */
+
+#define SDRAM_DDR      1               /* is DDR */
+
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x714F0F00
+#define SDRAM_CONFIG1  0x73722930
+#define SDRAM_CONFIG2  0x46770000
+#define SDRAM_TAPDELAY 0x10000000
index f650faaa109f376a0fcde3b9bdef009011d0ce61..a78e50e7c602588443180ca59723c927bbfedd5b 100644 (file)
 
 #define SDRAM_DDR      1               /* is DDR */
 
-#if defined(CONFIG_MPC5200)
 /* Settings for XLB = 132 MHz */
 #define SDRAM_MODE     0x018D0000
 #define SDRAM_EMODE    0x40090000
-#define SDRAM_CONTROL  0x714f0f00
+#define SDRAM_CONTROL  0x714F0F00
 #define SDRAM_CONFIG1  0x73722930
 #define SDRAM_CONFIG2  0x47770000
 #define SDRAM_TAPDELAY 0x10000000
-
-#else
-#error CONFIG_MPC5200 not defined
-#endif
diff --git a/board/inka4x0/mt46v32m16-75.h b/board/inka4x0/mt46v32m16-75.h
new file mode 100644 (file)
index 0000000..7eb1f50
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 Semihalf
+ * Written by Marian Balakowicz <m8@semihalf.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
+ */
+
+#define SDRAM_DDR      1               /* is DDR */
+
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x714F0F00
+#define SDRAM_CONFIG1  0x73711930
+#define SDRAM_CONFIG2  0x46770000
+#define SDRAM_TAPDELAY 0x10000000
index 13a97ac4624221f84f8ede97a0d6d9457977f1d1..15477259cae4ae1ef2b4eafb571a76d6eb67a43d 100644 (file)
  * MA 02111-1307 USA
  */
 
-#define SDRAM_DDR      1               /* is SDR */
+#define SDRAM_DDR      0               /* is SDR */
 
-#if defined(CONFIG_MPC5200)
 /* Settings for XLB = 132 MHz */
 #define SDRAM_MODE     0x00CD0000
-/* #define SDRAM_MODE  0x008D0000 */ /* CAS latency 2 */
 #define SDRAM_CONTROL  0x504F0000
 #define SDRAM_CONFIG1  0xD2322800
-/* #define SDRAM_CONFIG1       0xD2222800 */ /* CAS latency 2 */
-/*#define SDRAM_CONFIG1        0xD7322800 */ /* SDRAM controller bug workaround */
 #define SDRAM_CONFIG2  0x8AD70000
-/*#define SDRAM_CONFIG2        0xDDD70000 */ /* SDRAM controller bug workaround */
-
-#elif defined(CONFIG_MGT5100)
-/* Settings for XLB = 66 MHz */
-#define SDRAM_MODE     0x008D0000
-#define SDRAM_CONTROL  0x504F0000
-#define SDRAM_CONFIG1  0xC2222600
-#define SDRAM_CONFIG2  0x88B70004
-#define SDRAM_ADDRSEL  0x02000000
-
-#else
-#error Neither CONFIG_MPC5200 or CONFIG_MGT5100 defined
-#endif
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 53b0d1e340ed05b05b6e2450166a40c4b03927dc..4b94d8ff8c4c97aa029278690de6bee38117c8a9 100755 (executable)
@@ -14,7 +14,7 @@ echo  " 1 /* Integrator/AP     */"            >> tmp.fil
 cpu="arm_intcm"
 variant="unknown core module"
 
-if [ "$1" == "" ]
+if [ "$1" = "" ]
 then
        echo "$0:: No parameters - using arm_intcm"
 else
@@ -84,7 +84,7 @@ else
        esac
 fi
 
-if [ "$cpu" == "arm_intcm" ]
+if [ "$cpu" = "arm_intcm" ]
 then
        echo "/* Core module undefined/not ported */"   >> tmp.fil
        echo "#define CONFIG_ARM_INTCM 1"               >> tmp.fil
index 37ae517fc0f37941361281cf4ebc8df047845868..79a6a9d55d59652460e50926706cc9579859d866 100755 (executable)
@@ -12,7 +12,7 @@ echo     " 1 /* Integrator/CP   */"           >> tmp.fil
 cpu="arm_intcm"
 variant="unknown core module"
 
-if [ "$1" == "" ]
+if [ "$1" = "" ]
 then
        echo "$0:: No parameters - using arm_intcm"
 else
@@ -79,7 +79,7 @@ else
 
 fi
 
-if [ "$cpu" == "arm_intcm" ]
+if [ "$cpu" = "arm_intcm" ]
 then
        echo "/* Core module undefined/not ported */"   >> tmp.fil
        echo "#define CONFIG_ARM_INTCM 1"               >> tmp.fil
index 8cb250443571690bbf4c497b858294bd21fe640d..1a8dc9751653c2618a8ad7e1577fc61565215b97 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index fdeabc59e79005bd6acaa53434099b23c6cf610c..2fd5c87b38c82ebd90a161bdbe3f6331a52c6f88 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index e2ceac7227cbc320e87375020205585a5fdc539a..58393d0af5c9ad210826cbc659f1cacabe974d24 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 60c111539d47c7956714cb9b1132145d1e8934b5..4bd94185234032dfcd28e83453c2ef5c7128dccf 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..3b797767240ee8f95bf6f052d9da5795ef92e7e7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
diff --git a/board/korat/Makefile b/board/korat/Makefile
new file mode 100644 (file)
index 0000000..fa19e6f
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2002-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o
+SOBJS  = init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/korat/config.mk b/board/korat/config.mk
new file mode 100644 (file)
index 0000000..39966e0
--- /dev/null
@@ -0,0 +1,37 @@
+#
+# (C) Copyright 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Korat (PPC440EPx) board
+#
+
+TEXT_BASE = 0xFFFA0000
+
+PLATFORM_CPPFLAGS += -DCONFIG_440=1
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
+
+ifeq ($(dbcr),1)
+PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000
+endif
diff --git a/board/korat/init.S b/board/korat/init.S
new file mode 100644 (file)
index 0000000..bd0e8b4
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <asm-ppc/mmu.h>
+#include <config.h>
+
+/**************************************************************************
+ * TLB TABLE
+ *
+ * This table is used by the cpu boot code to setup the initial tlb
+ * entries. Rather than make broad assumptions in the cpu source tree,
+ * this table lets each board set things up however they like.
+ *
+ *  Pointer to the table is returned in r1
+ *
+ *************************************************************************/
+    .section .bootpg,"ax"
+    .globl tlbtab
+
+tlbtab:
+       tlbtab_start
+
+       /*
+        * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the
+        * speed up boot process. It is patched after relocation to enable SA_I
+        */
+       tlbentry( CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 1, AC_R|AC_W|AC_X|SA_G )
+
+       /*
+        * TLB entries for SDRAM are not needed on this platform.  They are
+        * generated dynamically in the SPD DDR2 detection routine.
+        */
+
+#ifdef CFG_INIT_RAM_DCACHE
+       /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */
+       tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G )
+#endif
+
+       /* TLB-entry for PCI Memory */
+       tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entry for EBC */
+       tlbentry( CFG_CPLD_BASE, SZ_1K, CFG_CPLD_BASE, 1, AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entry for Internal Registers & OCM */
+       /* I wonder why this must be executable -- lrj@acm.org 2007-10-08 */
+       tlbentry( 0xE0000000, SZ_16M, 0xE0000000, 0,  AC_R|AC_W|AC_X|SA_I )
+
+       /*TLB-entry PCI registers*/
+       tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1,  AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entry for peripherals */
+       tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_R|AC_W|SA_G|SA_I)
+
+       /* TLB-entry PCI IO Space - from sr@denx.de */
+       tlbentry(0xE8000000, SZ_64K, 0xE8000000, 1, AC_R|AC_W|SA_G|SA_I)
+
+       tlbtab_end
diff --git a/board/korat/korat.c b/board/korat/korat.c
new file mode 100644 (file)
index 0000000..199c1ff
--- /dev/null
@@ -0,0 +1,662 @@
+/*
+ * (C) Copyright 2007-2008
+ * Larry Johnson, lrj@acm.org
+ *
+ * (C) Copyright 2006
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2006
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Alain Saurel,           AMCC/IBM, alain.saurel@fr.ibm.com
+ *
+ * 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/gpio.h>
+#include <asm/processor.h>
+#include <asm-ppc/io.h>
+#include <i2c.h>
+#include <ppc440.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];   /* info for FLASH chips    */
+
+ulong flash_get_size(ulong base, int banknum);
+
+int board_early_init_f(void)
+{
+       u32 sdr0_pfc1, sdr0_pfc2;
+       u32 reg;
+       int eth;
+
+       mtdcr(ebccfga, xbcfg);
+       mtdcr(ebccfgd, 0xb8400000);
+
+       /*--------------------------------------------------------------------
+        * Setup the interrupt controller polarities, triggers, etc.
+        *-------------------------------------------------------------------*/
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
+       mtdcr(uic0pr, 0xfffff7ff);      /* per ref-board manual */
+       mtdcr(uic0tr, 0x00000000);      /* per ref-board manual */
+       mtdcr(uic0vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+       mtdcr(uic1er, 0x00000000);      /* disable all */
+       mtdcr(uic1cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic1pr, 0xffffffff);      /* per ref-board manual */
+       mtdcr(uic1tr, 0x00000000);      /* per ref-board manual */
+       mtdcr(uic1vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+       mtdcr(uic2er, 0x00000000);      /* disable all */
+       mtdcr(uic2cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic2pr, 0xffffffff);      /* per ref-board manual */
+       mtdcr(uic2tr, 0x00000000);      /* per ref-board manual */
+       mtdcr(uic2vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+
+       /* take sim card reader and CF controller out of reset */
+       out_8((u8 *) CFG_CPLD_BASE + 0x04, 0x80);
+
+       /* Configure the two Ethernet PHYs.  For each PHY, configure for fiber
+        * if the SFP module is present, and for copper if it is not present.
+        */
+       for (eth = 0; eth < 2; ++eth) {
+               if (gpio_read_in_bit(CFG_GPIO_SFP0_PRESENT_ + eth)) {
+                       /* SFP module not present: configure PHY for copper. */
+                       /* Set PHY to autonegotate 10 MB, 100MB, or 1 GB */
+                       out_8((u8 *) CFG_CPLD_BASE + 0x06,
+                             in_8((u8 *) CFG_CPLD_BASE + 0x06) |
+                             0x06 << (4 * eth));
+               } else {
+                       /* SFP module present: configure PHY for fiber and
+                          enable output */
+                       gpio_write_bit(CFG_GPIO_PHY0_FIBER_SEL + eth, 1);
+                       gpio_write_bit(CFG_GPIO_SFP0_TX_EN_ + eth, 0);
+               }
+       }
+       /* enable Ethernet: set GPIO45 and GPIO46 to 1 */
+       gpio_write_bit(CFG_GPIO_PHY0_EN, 1);
+       gpio_write_bit(CFG_GPIO_PHY1_EN, 1);
+
+       /* select Ethernet pins */
+       mfsdr(SDR0_PFC1, sdr0_pfc1);
+       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) |
+           SDR0_PFC1_SELECT_CONFIG_4;
+       mfsdr(SDR0_PFC2, sdr0_pfc2);
+       sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) |
+           SDR0_PFC2_SELECT_CONFIG_4;
+       mtsdr(SDR0_PFC2, sdr0_pfc2);
+       mtsdr(SDR0_PFC1, sdr0_pfc1);
+
+       /* PCI arbiter enabled */
+       mfsdr(sdr_pci0, reg);
+       mtsdr(sdr_pci0, 0x80000000 | reg);
+
+       return 0;
+}
+
+static int man_data_read(unsigned int addr)
+{
+       /*
+        * Read an octet of data from address "addr" in the manufacturer's
+        * information serial EEPROM, or -1 on error.
+        */
+       u8 data[2];
+
+       if (0 != i2c_probe(MAN_DATA_EEPROM_ADDR) ||
+           0 != i2c_read(MAN_DATA_EEPROM_ADDR, addr, 1, data, 1)) {
+               debug("man_data_read(0x%02X) failed\n", addr);
+               return -1;
+       }
+       debug("man_info_read(0x%02X) returned 0x%02X\n", addr, data[0]);
+       return data[0];
+}
+
+static unsigned int man_data_field_addr(unsigned int const field)
+{
+       /*
+        * The manufacturer's information serial EEPROM contains a sequence of
+        * zero-delimited fields.  Return the starting address of field "field",
+        * or 0 on error.
+        */
+       unsigned addr, i;
+
+       if (0 == field || 'A' != man_data_read(0) || '\0' != man_data_read(1))
+               /* Only format "A" is currently supported */
+               return 0;
+
+       for (addr = 2, i = 1; i < field && addr < 256; ++addr) {
+               if ('\0' == man_data_read(addr))
+                       ++i;
+       }
+       return (addr < 256) ? addr : 0;
+}
+
+static char *man_data_read_field(char s[], unsigned const field,
+                                unsigned const length)
+{
+       /*
+        * Place the null-terminated contents of field "field" of length
+        * "length" from the manufacturer's information serial EEPROM into
+        * string "s[length + 1]" and return a pointer to s, or return 0 on
+        * error. In either case the original contents of s[] is not preserved.
+        */
+       unsigned addr, i;
+
+       addr = man_data_field_addr(field);
+       if (0 == addr || addr + length >= 255)
+               return 0;
+
+       for (i = 0; i < length; ++i) {
+               int const c = man_data_read(addr++);
+
+               if (c <= 0)
+                       return 0;
+
+               s[i] = (char)c;
+       }
+       if (0 != man_data_read(addr))
+               return 0;
+
+       s[i] = '\0';
+       return s;
+}
+
+static void set_serial_number(void)
+{
+       /*
+        * If the environmental variable "serial#" is not set, try to set it
+        * from the manufacturer's information serial EEPROM.
+        */
+       char s[MAN_SERIAL_NO_LENGTH + 1];
+
+       if (0 == getenv("serial#") &&
+           0 != man_data_read_field(s, MAN_SERIAL_NO_FIELD,
+                                    MAN_SERIAL_NO_LENGTH))
+               setenv("serial#", s);
+}
+
+static void set_mac_addresses(void)
+{
+       /*
+        * If the environmental variables "ethaddr" and/or "eth1addr" are not
+        * set, try to set them from the manufacturer's information serial
+        * EEPROM.
+        */
+       char s[MAN_MAC_ADDR_LENGTH + 1];
+
+       if (0 != getenv("ethaddr") && 0 != getenv("eth1addr"))
+               return;
+
+       if (0 == man_data_read_field(s, MAN_MAC_ADDR_FIELD,
+                                    MAN_MAC_ADDR_LENGTH))
+               return;
+
+       if (0 == getenv("ethaddr"))
+               setenv("ethaddr", s);
+
+       if (0 == getenv("eth1addr")) {
+               ++s[MAN_MAC_ADDR_LENGTH - 1];
+               setenv("eth1addr", s);
+       }
+}
+
+/*---------------------------------------------------------------------------+
+  | misc_init_r.
+  +---------------------------------------------------------------------------*/
+int misc_init_r(void)
+{
+       uint pbcr;
+       int size_val = 0;
+       u32 reg;
+       unsigned long usb2d0cr = 0;
+       unsigned long usb2phy0cr, usb2h0cr = 0;
+       unsigned long sdr0_pfc1;
+       char *act = getenv("usbact");
+
+       /*
+        * FLASH stuff...
+        */
+
+       /* Re-do sizing to get full correct info */
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       mtdcr(ebccfga, pb0cr);
+       pbcr = mfdcr(ebccfgd);
+       switch (gd->bd->bi_flashsize) {
+       case 1 << 20:
+               size_val = 0;
+               break;
+       case 2 << 20:
+               size_val = 1;
+               break;
+       case 4 << 20:
+               size_val = 2;
+               break;
+       case 8 << 20:
+               size_val = 3;
+               break;
+       case 16 << 20:
+               size_val = 4;
+               break;
+       case 32 << 20:
+               size_val = 5;
+               break;
+       case 64 << 20:
+               size_val = 6;
+               break;
+       case 128 << 20:
+               size_val = 7;
+               break;
+       }
+       pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
+       mtdcr(ebccfga, pb0cr);
+       mtdcr(ebccfgd, pbcr);
+
+       /*
+        * Re-check to get correct base address
+        */
+       flash_get_size(gd->bd->bi_flashstart, 0);
+
+       /* Monitor protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET, -CFG_MONITOR_LEN, 0xffffffff,
+                           &flash_info[0]);
+
+       /* Env protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           CFG_ENV_ADDR_REDUND,
+                           CFG_ENV_ADDR_REDUND + 2 * CFG_ENV_SECT_SIZE - 1,
+                           &flash_info[0]);
+
+       /*
+        * USB suff...
+        */
+       if (act == NULL || strcmp(act, "hostdev") == 0) {
+               /* SDR Setting */
+               mfsdr(SDR0_PFC1, sdr0_pfc1);
+               mfsdr(SDR0_USB2D0CR, usb2d0cr);
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mfsdr(SDR0_USB2H0CR, usb2h0cr);
+
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;    /*1 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;  /*1 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;  /*1 */
+
+               /* An 8-bit/60MHz interface is the only possible alternative
+                  when connecting the Device to the PHY */
+               usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;  /*1 */
+
+               /* To enable the USB 2.0 Device function through the UTMI interface */
+               usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION;  /*1 */
+
+               sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK;
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL;        /*0 */
+
+               mtsdr(SDR0_PFC1, sdr0_pfc1);
+               mtsdr(SDR0_USB2D0CR, usb2d0cr);
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mtsdr(SDR0_USB2H0CR, usb2h0cr);
+
+               /*clear resets */
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x00000000);
+               udelay(1000);
+               mtsdr(SDR0_SRST0, 0x00000000);
+
+               printf("USB:   Host(int phy) Device(ext phy)\n");
+
+       } else if (strcmp(act, "dev") == 0) {
+               /*-------------------PATCH-------------------------------*/
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;  /*1 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;  /*1 */
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x672c6000);
+
+               udelay(1000);
+               mtsdr(SDR0_SRST0, 0x00000080);
+
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x60206000);
+
+               *(unsigned int *)(0xe0000350) = 0x00000001;
+
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x60306000);
+               /*-------------------PATCH-------------------------------*/
+
+               /* SDR Setting */
+               mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mfsdr(SDR0_USB2H0CR, usb2h0cr);
+               mfsdr(SDR0_USB2D0CR, usb2d0cr);
+               mfsdr(SDR0_PFC1, sdr0_pfc1);
+
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;     /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;  /*1 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;   /*0 */
+               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;   /*0 */
+
+               usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;   /*0 */
+
+               usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION;      /*0 */
+
+               sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK;
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;        /*1 */
+
+               mtsdr(SDR0_USB2H0CR, usb2h0cr);
+               mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+               mtsdr(SDR0_USB2D0CR, usb2d0cr);
+               mtsdr(SDR0_PFC1, sdr0_pfc1);
+
+               /*clear resets */
+               udelay(1000);
+               mtsdr(SDR0_SRST1, 0x00000000);
+               udelay(1000);
+               mtsdr(SDR0_SRST0, 0x00000000);
+
+               printf("USB:   Device(int phy)\n");
+       }
+
+       mfsdr(SDR0_SRST1, reg); /* enable security/kasumi engines */
+       reg &= ~(SDR0_SRST1_CRYP0 | SDR0_SRST1_KASU0);
+       mtsdr(SDR0_SRST1, reg);
+
+       /*
+        * Clear PLB4A0_ACR[WRP]
+        * This fix will make the MAL burst disabling patch for the Linux
+        * EMAC driver obsolete.
+        */
+       reg = mfdcr(plb4_acr) & ~PLB4_ACR_WRP;
+       mtdcr(plb4_acr, reg);
+
+       set_serial_number();
+       set_mac_addresses();
+       return 0;
+}
+
+int checkboard(void)
+{
+       char const *const s = getenv("serial#");
+       u8 const rev = in_8((u8 *) CFG_CPLD_BASE + 0);
+
+       printf("Board: Korat, Rev. %X", rev);
+       if (s != NULL)
+               printf(", serial# %s", s);
+
+       printf(", Ethernet PHY 0: ");
+       if (gpio_read_out_bit(CFG_GPIO_PHY0_FIBER_SEL))
+               printf("fiber");
+       else
+               printf("copper");
+
+       printf(", PHY 1: ");
+       if (gpio_read_out_bit(CFG_GPIO_PHY1_FIBER_SEL))
+               printf("fiber");
+       else
+               printf("copper");
+
+       printf(".\n");
+       return (0);
+}
+
+#if defined(CFG_DRAM_TEST)
+int testdram(void)
+{
+       unsigned long *mem = (unsigned long *)0;
+       const unsigned long kend = (1024 / sizeof(unsigned long));
+       unsigned long k, n;
+
+       mtmsr(0);
+
+       /* TODO: find correct size of SDRAM */
+       for (k = 0; k < CFG_MBYTES_SDRAM;
+            ++k, mem += (1024 / sizeof(unsigned long))) {
+               if ((k & 1023) == 0)
+                       printf("%3d MB\r", k / 1024);
+
+               memset(mem, 0xaaaaaaaa, 1024);
+               for (n = 0; n < kend; ++n) {
+                       if (mem[n] != 0xaaaaaaaa) {
+                               printf("SDRAM test fails at: %08x\n",
+                                      (uint) & mem[n]);
+                               return 1;
+                       }
+               }
+
+               memset(mem, 0x55555555, 1024);
+               for (n = 0; n < kend; ++n) {
+                       if (mem[n] != 0x55555555) {
+                               printf("SDRAM test fails at: %08x\n",
+                                      (uint) & mem[n]);
+                               return 1;
+                       }
+               }
+       }
+       printf("SDRAM test passes\n");
+       return 0;
+}
+#endif /* defined(CFG_DRAM_TEST) */
+
+/*************************************************************************
+ *  pci_pre_init
+ *
+ *  This routine is called just prior to registering the hose and gives
+ *  the board the opportunity to check things. Returning a value of zero
+ *  indicates that things are bad & PCI initialization should be aborted.
+ *
+ *     Different boards may wish to customize the pci controller structure
+ *     (add regions, override default access routines, etc) or perform
+ *     certain pre-initialization actions.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int pci_pre_init(struct pci_controller *hose)
+{
+       unsigned long addr;
+
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB3 devices to 0.
+         | Set PLB3 arbiter to fair mode.
+         +-------------------------------------------------------------------------*/
+       mfsdr(sdr_amp1, addr);
+       mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb3_acr);
+       mtdcr(plb3_acr, addr | 0x80000000);
+
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB4 devices to 0.
+         +-------------------------------------------------------------------------*/
+       mfsdr(sdr_amp0, addr);
+       mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
+       mtdcr(plb4_acr, addr);
+
+       /*-------------------------------------------------------------------------+
+         | Set Nebula PLB4 arbiter to fair mode.
+         +-------------------------------------------------------------------------*/
+       /* Segment0 */
+       addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
+       addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
+       addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
+       addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
+       mtdcr(plb0_acr, addr);
+
+       /* Segment1 */
+       addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
+       addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
+       addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
+       addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
+       mtdcr(plb1_acr, addr);
+
+       return 1;
+}
+#endif /* defined(CONFIG_PCI) */
+
+/*************************************************************************
+ *  pci_target_init
+ *
+ *     The bootstrap configuration provides default settings for the pci
+ *     inbound map (PIM). But the bootstrap config choices are limited and
+ *     may not be sufficient for a given board.
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
+void pci_target_init(struct pci_controller *hose)
+{
+       /*--------------------------------------------------------------------------+
+        * Set up Direct MMIO registers
+        *--------------------------------------------------------------------------*/
+       /*--------------------------------------------------------------------------+
+         | PowerPC440EPX PCI Master configuration.
+         | Map one 1Gig range of PLB/processor addresses to PCI memory space.
+         |   PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
+         |   Use byte reversed out routines to handle endianess.
+         | Make this region non-prefetchable.
+         +--------------------------------------------------------------------------*/
+       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+       out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
+       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE);       /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM0PCIHA, 0x00000000);    /* PMM0 PCI High Address */
+       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+
+       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+       out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
+       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2);      /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM1PCIHA, 0x00000000);    /* PMM0 PCI High Address */
+       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+
+       out32r(PCIX0_PTM1MS, 0x00000001);       /* Memory Size/Attribute */
+       out32r(PCIX0_PTM1LA, 0);        /* Local Addr. Reg */
+       out32r(PCIX0_PTM2MS, 0);        /* Memory Size/Attribute */
+       out32r(PCIX0_PTM2LA, 0);        /* Local Addr. Reg */
+
+       /*--------------------------------------------------------------------------+
+        * Set up Configuration registers
+        *--------------------------------------------------------------------------*/
+
+       /* Program the board's subsystem id/vendor id */
+       pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
+                             CFG_PCI_SUBSYS_VENDORID);
+       pci_write_config_word(0, PCI_SUBSYSTEM_ID, CFG_PCI_SUBSYS_ID);
+
+       /* Configure command register as bus master */
+       pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
+
+       /* 240nS PCI clock */
+       pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
+
+       /* No error reporting */
+       pci_write_config_word(0, PCI_ERREN, 0);
+
+       pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
+
+       /*--------------------------------------------------------------------------+
+        * Set up Configuration registers for on-board NEC uPD720101 USB controller
+        *--------------------------------------------------------------------------*/
+       pci_write_config_dword(PCI_BDF(0x0, 0xC, 0x0), 0xE4, 0x00000020);
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+
+/*************************************************************************
+ *  pci_master_init
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
+void pci_master_init(struct pci_controller *hose)
+{
+       unsigned short temp_short;
+
+       /*--------------------------------------------------------------------------+
+         | Write the PowerPC440 EP PCI Configuration regs.
+         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
+         +--------------------------------------------------------------------------*/
+       pci_read_config_word(0, PCI_COMMAND, &temp_short);
+       pci_write_config_word(0, PCI_COMMAND,
+                             temp_short | PCI_COMMAND_MASTER |
+                             PCI_COMMAND_MEMORY);
+}
+#endif
+
+/*************************************************************************
+ *  is_pci_host
+ *
+ *     This routine is called to determine if a pci scan should be
+ *     performed. With various hardware environments (especially cPCI and
+ *     PPMC) it's insufficient to depend on the state of the arbiter enable
+ *     bit in the strap register, or generic host/adapter assumptions.
+ *
+ *     Rather than hard-code a bad assumption in the general 440 code, the
+ *     440 pci code requires the board to decide at runtime.
+ *
+ *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ *
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int is_pci_host(struct pci_controller *hose)
+{
+       /* Korat is always configured as host. */
+       return (1);
+}
+#endif
+
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;               /* No hotkeys supported */
+}
+#endif
diff --git a/board/korat/u-boot.lds b/board/korat/u-boot.lds
new file mode 100644 (file)
index 0000000..e140737
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(powerpc)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+SECTIONS
+{
+  .resetvec 0xFFFFFFFC :
+  {
+    *(.resetvec)
+  } = 0xffff
+
+  .bootpg 0xFFFFF000 :
+  {
+    cpu/ppc4xx/start.o (.bootpg)
+  } = 0xffff
+
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.o (.text)
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+
+  ppcenv_assert = ASSERT(. < 0xFFFF8000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified.");
+
+  _end = . ;
+  PROVIDE (end = .);
+}
index 8625999df40b9d75b7706e4822f711d0be30030c..5f6e269dc9f002f7774b2278403b9115f787d718 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8625999df40b9d75b7706e4822f711d0be30030c..5f6e269dc9f002f7774b2278403b9115f787d718 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 29ecabd9b31615d260086c677d992b1990375fa5..a1b869da6f16cb3ed19b8df7eec694bfdb85f057 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 258bece23cf59813a511d23556e4da02ff940c25..6bd06270a4f99f020b77e16b5753126bce03e59f 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 64d946c439210f6a58ece41c2838bea70d3a6498..418101ff866d410432b3f4aed294522ae70ca169 100644 (file)
@@ -50,6 +50,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 156b871e57bc854e0d17ae47ae422787ba7670e1..b5f8ff919f21b79e2d6cb8a2cf773a5a25dcbd9a 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 6505d45561988ebeed27d0315782eaf8141a40d9..77bf8185f39c603d273fbc3e688b8294924b2667 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 6798e80985d63a4b1e70d6b48a2a0be09130506e..5aade72b52f302bab4415b8615f11d97207912fa 100644 (file)
@@ -57,7 +57,7 @@ tlbtab:
 
 #ifdef CFG_INIT_RAM_DCACHE
        /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */
-       tlbentry(CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G)
+       tlbentry(CFG_INIT_RAM_ADDR, SZ_4K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G)
 #endif
 
        /* TLB-entry for PCI Memory */
index 9b24a7e55e52f9fb3e19866cabb1169bc62a4357..815c01f4e4827973a58aa3bd71f76fb674b719d4 100644 (file)
@@ -233,78 +233,6 @@ int misc_init_r(void)
        reg = mfdcr(plb4_acr) & ~PLB4_ACR_WRP;
        mtdcr(plb4_acr, reg);
 
-       /*
-        * Reset Lime controller
-        */
-       gpio_write_bit(CFG_GPIO_LIME_S, 1);
-       udelay(500);
-       gpio_write_bit(CFG_GPIO_LIME_RST, 1);
-
-       /* Lime memory clock adjusted to 100MHz */
-       out_be32((void *)CFG_LIME_SDRAM_CLOCK, CFG_LIME_CLOCK_100MHZ);
-       /* Wait untill time expired. Because of requirements in lime manual */
-       udelay(300);
-       /* Write lime controller memory parameters */
-       out_be32((void *)CFG_LIME_MMR, CFG_LIME_MMR_VALUE);
-
-       /*
-        * Init display controller
-        */
-       /* Setup dot clock (internal PLL, division rate 1/16) */
-       out_be32((void *)0xc1fd0100, 0x00000f00);
-
-       /* Lime L0 init (16 bpp, 640x480) */
-       out_be32((void *)0xc1fd0020, 0x801401df);
-       out_be32((void *)0xc1fd0024, 0x0);
-       out_be32((void *)0xc1fd0028, 0x0);
-       out_be32((void *)0xc1fd002c, 0x0);
-       out_be32((void *)0xc1fd0110, 0x0);
-       out_be32((void *)0xc1fd0114, 0x0);
-       out_be32((void *)0xc1fd0118, 0x01df0280);
-
-       /* Display timing init */
-       out_be32((void *)0xc1fd0004, 0x031f0000);
-       out_be32((void *)0xc1fd0008, 0x027f027f);
-       out_be32((void *)0xc1fd000c, 0x015f028f);
-       out_be32((void *)0xc1fd0010, 0x020c0000);
-       out_be32((void *)0xc1fd0014, 0x01df01ea);
-       out_be32((void *)0xc1fd0018, 0x0);
-       out_be32((void *)0xc1fd001c, 0x01e00280);
-
-#if 1
-       /*
-        * Clear framebuffer using Lime's drawing engine
-        * (draw blue rect. with white border around it)
-        */
-       /* Setup mode and fbbase, xres, fg, bg */
-       out_be32((void *)0xc1ff0420, 0x8300);
-       out_be32((void *)0xc1ff0440, 0x0000);
-       out_be32((void *)0xc1ff0444, 0x0280);
-       out_be32((void *)0xc1ff0480, 0x7fff);
-       out_be32((void *)0xc1ff0484, 0x0000);
-       /* Reset clipping rectangle */
-       out_be32((void *)0xc1ff0454, 0x0000);
-       out_be32((void *)0xc1ff0458, 0x0280);
-       out_be32((void *)0xc1ff045c, 0x0000);
-       out_be32((void *)0xc1ff0460, 0x01e0);
-       /* Draw white rect. */
-       out_be32((void *)0xc1ff04a0, 0x09410000);
-       out_be32((void *)0xc1ff04a0, 0x00000000);
-       out_be32((void *)0xc1ff04a0, 0x01e00280);
-       udelay(2000);
-       /* Draw blue rect. */
-       out_be32((void *)0xc1ff0480, 0x001f);
-       out_be32((void *)0xc1ff04a0, 0x09410000);
-       out_be32((void *)0xc1ff04a0, 0x00010001);
-       out_be32((void *)0xc1ff04a0, 0x01de027e);
-#endif
-       /* Display enable, L0 layer */
-       out_be32((void *)0xc1fd0100, 0x80010f00);
-
-       /* TFT-LCD enable - PWM duty, lamp on */
-       out_be32((void *)0xc4000024, 0x64);
-       out_be32((void *)0xc4000020, 0x701);
-
        /*
         * Init matrix keyboard
         */
@@ -562,3 +490,88 @@ U_BOOT_CMD(
        "eepromwp- eeprom write protect off/on\n",
        "<on|off> - enable (on) or disable (off) I2C EEPROM write protect\n"
 );
+
+#if defined(CONFIG_VIDEO)
+#include <video_fb.h>
+#include <mb862xx.h>
+
+extern GraphicDevice mb862xx;
+
+static const gdc_regs init_regs [] =
+{
+       {0x0100, 0x00000f00},
+       {0x0020, 0x801401df},
+       {0x0024, 0x00000000},
+       {0x0028, 0x00000000},
+       {0x002c, 0x00000000},
+       {0x0110, 0x00000000},
+       {0x0114, 0x00000000},
+       {0x0118, 0x01df0280},
+       {0x0004, 0x031f0000},
+       {0x0008, 0x027f027f},
+       {0x000c, 0x015f028f},
+       {0x0010, 0x020c0000},
+       {0x0014, 0x01df01ea},
+       {0x0018, 0x00000000},
+       {0x001c, 0x01e00280},
+       {0x0100, 0x80010f00},
+       {0x0, 0x0}
+};
+
+const gdc_regs *board_get_regs (void)
+{
+       return init_regs;
+}
+
+/* Returns Lime base address */
+unsigned int board_video_init (void)
+{
+       /*
+        * Reset Lime controller
+        */
+       gpio_write_bit(CFG_GPIO_LIME_S, 1);
+       udelay(500);
+       gpio_write_bit(CFG_GPIO_LIME_RST, 1);
+
+       /* Lime memory clock adjusted to 100MHz */
+       out_be32((void *)CFG_LIME_SDRAM_CLOCK, CFG_LIME_CLOCK_100MHZ);
+       /* Wait untill time expired. Because of requirements in lime manual */
+       udelay(300);
+       /* Write lime controller memory parameters */
+       out_be32((void *)CFG_LIME_MMR, CFG_LIME_MMR_VALUE);
+
+       mb862xx.winSizeX = 640;
+       mb862xx.winSizeY = 480;
+       mb862xx.gdfBytesPP = 2;
+       mb862xx.gdfIndex = GDF_15BIT_555RGB;
+
+       return CFG_LIME_BASE_0;
+}
+
+void board_backlight_switch (int flag)
+{
+       if (flag) {
+               /* pwm duty, lamp on */
+               out_be32((void *)(CFG_FPGA_BASE_0 + 0x00000024), 0x64);
+               out_be32((void *)(CFG_FPGA_BASE_0 + 0x00000020), 0x701);
+       } else {
+               /* lamp off */
+               out_be32((void *)(CFG_FPGA_BASE_0 + 0x00000024), 0x00);
+               out_be32((void *)(CFG_FPGA_BASE_0 + 0x00000020), 0x00);
+       }
+}
+
+#if defined(CONFIG_CONSOLE_EXTRA_INFO)
+/*
+ * Return text to be printed besides the logo.
+ */
+void video_get_info_str (int line_number, char *info)
+{
+       if (line_number == 1) {
+               strcpy (info, " Board: Lwmon5 (Liebherr Elektronik GmbH)");
+       } else {
+               info [0] = '\0';
+       }
+}
+#endif
+#endif /* CONFIG_VIDEO */
index d4547e24cf1abed9f2b068a1b2ad86b79944201c..affaeff1ae47f978aad928d9a05817750c554832 100644 (file)
@@ -36,8 +36,6 @@
 #include <asm/io.h>
 #include <ppc440.h>
 
-#include "sdram.h"
-
 /*
  * This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
  * region. Right now the cache should still be disabled in U-Boot because of the
 #define MY_TLB_WORD2_I_ENABLE  TLB_WORD2_I_ENABLE      /* disable caching on SDRAM */
 #endif
 
-void dcbz_area(u32 start_address, u32 num_bytes);
-void dflush(void);
+/*-----------------------------------------------------------------------------+
+ * Prototypes
+ *-----------------------------------------------------------------------------*/
+extern int denali_wait_for_dlllock(void);
+extern void denali_core_search_data_eye(void);
+extern void dcbz_area(u32 start_address, u32 num_bytes);
+extern void dflush(void);
 
 static u32 is_ecc_enabled(void)
 {
@@ -71,7 +74,7 @@ static u32 is_ecc_enabled(void)
 
 void board_add_ram_info(int use_default)
 {
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
        u32 val;
 
        if (is_ecc_enabled())
@@ -87,330 +90,6 @@ void board_add_ram_info(int use_default)
        printf(", CL%d)", val);
 }
 
-static int wait_for_dlllock(void)
-{
-       u32 val;
-       int wait = 0;
-
-       /*
-        * Wait for the DCC master delay line to finish calibration
-        */
-       mtdcr(ddrcfga, DDR0_17);
-       val = DDR0_17_DLLLOCKREG_UNLOCKED;
-
-       while (wait != 0xffff) {
-               val = mfdcr(ddrcfgd);
-               if ((val & DDR0_17_DLLLOCKREG_MASK) == DDR0_17_DLLLOCKREG_LOCKED)
-                       /* dlllockreg bit on */
-                       return 0;
-               else
-                       wait++;
-       }
-       debug("0x%04x: DDR0_17 Value (dlllockreg bit): 0x%08x\n", wait, val);
-       debug("Waiting for dlllockreg bit to raise\n");
-
-       return -1;
-}
-
-#if defined(CONFIG_DDR_DATA_EYE)
-int wait_for_dram_init_complete(void)
-{
-       u32 val;
-       int wait = 0;
-
-       /*
-        * Wait for 'DRAM initialization complete' bit in status register
-        */
-       mtdcr(ddrcfga, DDR0_00);
-
-       while (wait != 0xffff) {
-               val = mfdcr(ddrcfgd);
-               if ((val & DDR0_00_INT_STATUS_BIT6) == DDR0_00_INT_STATUS_BIT6)
-                       /* 'DRAM initialization complete' bit */
-                       return 0;
-               else
-                       wait++;
-       }
-
-       debug("DRAM initialization complete bit in status register did not rise\n");
-
-       return -1;
-}
-
-#define NUM_TRIES 64
-#define NUM_READS 10
-
-void denali_core_search_data_eye(u32 start_addr, u32 memory_size)
-{
-       int k, j;
-       u32 val;
-       u32 wr_dqs_shift, dqs_out_shift, dll_dqs_delay_X;
-       u32 max_passing_cases = 0, wr_dqs_shift_with_max_passing_cases = 0;
-       u32 passing_cases = 0, dll_dqs_delay_X_sw_val = 0;
-       u32 dll_dqs_delay_X_start_window = 0, dll_dqs_delay_X_end_window = 0;
-       volatile u32 *ram_pointer;
-       u32 test[NUM_TRIES] = {
-               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
-               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
-               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
-               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
-               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
-               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
-               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
-               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
-               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
-               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
-               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
-               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
-               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
-               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
-               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55,
-               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55 };
-
-       ram_pointer = (volatile u32 *)start_addr;
-
-       for (wr_dqs_shift = 64; wr_dqs_shift < 96; wr_dqs_shift++) {
-               /*for (wr_dqs_shift=1; wr_dqs_shift<96; wr_dqs_shift++) {*/
-
-               /*
-                * De-assert 'start' parameter.
-                */
-               mtdcr(ddrcfga, DDR0_02);
-               val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-               mtdcr(ddrcfgd, val);
-
-               /*
-                * Set 'wr_dqs_shift'
-                */
-               mtdcr(ddrcfga, DDR0_09);
-               val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK)
-                       | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
-               mtdcr(ddrcfgd, val);
-
-               /*
-                * Set 'dqs_out_shift' = wr_dqs_shift + 32
-                */
-               dqs_out_shift = wr_dqs_shift + 32;
-               mtdcr(ddrcfga, DDR0_22);
-               val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK)
-                       | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
-               mtdcr(ddrcfgd, val);
-
-               passing_cases = 0;
-
-               for (dll_dqs_delay_X = 1; dll_dqs_delay_X < 64; dll_dqs_delay_X++) {
-                       /*for (dll_dqs_delay_X=1; dll_dqs_delay_X<128; dll_dqs_delay_X++) {*/
-                       /*
-                        * Set 'dll_dqs_delay_X'.
-                        */
-                       /* dll_dqs_delay_0 */
-                       mtdcr(ddrcfga, DDR0_17);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
-                               | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-                       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
-                       mtdcr(ddrcfga, DDR0_18);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
-                               | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
-                               | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-                       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
-                       mtdcr(ddrcfga, DDR0_19);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
-                               | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
-                               | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
-                       mtdcr(ddrcfgd, val);
-
-                       ppcMsync();
-                       ppcMbar();
-
-                       /*
-                        * Assert 'start' parameter.
-                        */
-                       mtdcr(ddrcfga, DDR0_02);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON;
-                       mtdcr(ddrcfgd, val);
-
-                       ppcMsync();
-                       ppcMbar();
-
-                       /*
-                        * Wait for the DCC master delay line to finish calibration
-                        */
-                       if (wait_for_dlllock() != 0) {
-                               printf("dlllock did not occur !!!\n");
-                               printf("denali_core_search_data_eye!!!\n");
-                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n",
-                                      wr_dqs_shift, dll_dqs_delay_X);
-                               hang();
-                       }
-                       ppcMsync();
-                       ppcMbar();
-
-                       if (wait_for_dram_init_complete() != 0) {
-                               printf("dram init complete did not occur !!!\n");
-                               printf("denali_core_search_data_eye!!!\n");
-                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = %d\n",
-                                      wr_dqs_shift, dll_dqs_delay_X);
-                               hang();
-                       }
-                       udelay(100);  /* wait 100us to ensure init is really completed !!! */
-
-                       /* write values */
-                       for (j=0; j<NUM_TRIES; j++) {
-                               ram_pointer[j] = test[j];
-
-                               /* clear any cache at ram location */
-                               __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
-                       }
-
-                       /* read values back */
-                       for (j=0; j<NUM_TRIES; j++) {
-                               for (k=0; k<NUM_READS; k++) {
-                                       /* clear any cache at ram location */
-                                       __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
-
-                                       if (ram_pointer[j] != test[j])
-                                               break;
-                               }
-
-                               /* read error */
-                               if (k != NUM_READS)
-                                       break;
-                       }
-
-                       /* See if the dll_dqs_delay_X value passed.*/
-                       if (j < NUM_TRIES) {
-                               /* Failed */
-                               passing_cases = 0;
-                               /* break; */
-                       } else {
-                               /* Passed */
-                               if (passing_cases == 0)
-                                       dll_dqs_delay_X_sw_val = dll_dqs_delay_X;
-                               passing_cases++;
-                               if (passing_cases >= max_passing_cases) {
-                                       max_passing_cases = passing_cases;
-                                       wr_dqs_shift_with_max_passing_cases = wr_dqs_shift;
-                                       dll_dqs_delay_X_start_window = dll_dqs_delay_X_sw_val;
-                                       dll_dqs_delay_X_end_window = dll_dqs_delay_X;
-                               }
-                       }
-
-                       /*
-                        * De-assert 'start' parameter.
-                        */
-                       mtdcr(ddrcfga, DDR0_02);
-                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-                       mtdcr(ddrcfgd, val);
-
-               } /* for (dll_dqs_delay_X=0; dll_dqs_delay_X<128; dll_dqs_delay_X++) */
-
-       } /* for (wr_dqs_shift=0; wr_dqs_shift<96; wr_dqs_shift++) */
-
-       /*
-        * Largest passing window is now detected.
-        */
-
-       /* Compute dll_dqs_delay_X value */
-       dll_dqs_delay_X = (dll_dqs_delay_X_end_window + dll_dqs_delay_X_start_window) / 2;
-       wr_dqs_shift = wr_dqs_shift_with_max_passing_cases;
-
-       debug("DQS calibration - Window detected:\n");
-       debug("max_passing_cases = %d\n", max_passing_cases);
-       debug("wr_dqs_shift      = %d\n", wr_dqs_shift);
-       debug("dll_dqs_delay_X   = %d\n", dll_dqs_delay_X);
-       debug("dll_dqs_delay_X window = %d - %d\n",
-             dll_dqs_delay_X_start_window, dll_dqs_delay_X_end_window);
-
-       /*
-        * De-assert 'start' parameter.
-        */
-       mtdcr(ddrcfga, DDR0_02);
-       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
-       mtdcr(ddrcfgd, val);
-
-       /*
-        * Set 'wr_dqs_shift'
-        */
-       mtdcr(ddrcfga, DDR0_09);
-       val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK)
-               | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_09=0x%08lx\n", val);
-
-       /*
-        * Set 'dqs_out_shift' = wr_dqs_shift + 32
-        */
-       dqs_out_shift = wr_dqs_shift + 32;
-       mtdcr(ddrcfga, DDR0_22);
-       val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK)
-               | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_22=0x%08lx\n", val);
-
-       /*
-        * Set 'dll_dqs_delay_X'.
-        */
-       /* dll_dqs_delay_0 */
-       mtdcr(ddrcfga, DDR0_17);
-       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
-               | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_17=0x%08lx\n", val);
-
-       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
-       mtdcr(ddrcfga, DDR0_18);
-       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
-               | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
-               | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_18=0x%08lx\n", val);
-
-       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
-       mtdcr(ddrcfga, DDR0_19);
-       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
-               | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
-               | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
-       mtdcr(ddrcfgd, val);
-       debug("DDR0_19=0x%08lx\n", val);
-
-       /*
-        * Assert 'start' parameter.
-        */
-       mtdcr(ddrcfga, DDR0_02);
-       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON;
-       mtdcr(ddrcfgd, val);
-
-       ppcMsync();
-       ppcMbar();
-
-       /*
-        * Wait for the DCC master delay line to finish calibration
-        */
-       if (wait_for_dlllock() != 0) {
-               printf("dlllock did not occur !!!\n");
-               hang();
-       }
-       ppcMsync();
-       ppcMbar();
-
-       if (wait_for_dram_init_complete() != 0) {
-               printf("dram init complete did not occur !!!\n");
-               hang();
-       }
-       udelay(100);  /* wait 100us to ensure init is really completed !!! */
-}
-#endif /* CONFIG_DDR_DATA_EYE */
-
 #ifdef CONFIG_DDR_ECC
 static void wait_ddr_idle(void)
 {
@@ -610,12 +289,23 @@ long int initdram (int board_type)
        mtsdram(DDR0_02, 0x00000001); /* Activate the denali core */
 #endif
 
-       wait_for_dlllock();
+       denali_wait_for_dlllock();
+
+#if defined(CONFIG_DDR_DATA_EYE)
+       /* -----------------------------------------------------------+
+        * Perform data eye search if requested.
+        * ----------------------------------------------------------*/
+       program_tlb(0, CFG_SDRAM_BASE, CFG_MBYTES_SDRAM << 20,
+                   TLB_WORD2_I_ENABLE);
+       denali_core_search_data_eye();
+       remove_tlb(CFG_SDRAM_BASE, CFG_MBYTES_SDRAM << 20);
+#endif
 
        /*
         * Program tlb entries for this size (dynamic)
         */
-       program_tlb(0, 0, CFG_MBYTES_SDRAM << 20, MY_TLB_WORD2_I_ENABLE);
+       program_tlb(0, CFG_SDRAM_BASE, CFG_MBYTES_SDRAM << 20,
+                   MY_TLB_WORD2_I_ENABLE);
 
        /*
         * Setup 2nd TLB with same physical address but different virtual address
@@ -623,13 +313,6 @@ long int initdram (int board_type)
         */
        program_tlb(0, CFG_DDR_CACHED_ADDR, CFG_MBYTES_SDRAM << 20, 0);
 
-#ifdef CONFIG_DDR_DATA_EYE
-       /*
-        * Perform data eye search if requested.
-        */
-       denali_core_search_data_eye(CFG_DDR_CACHED_ADDR, CFG_MBYTES_SDRAM << 20);
-#endif
-
 #ifdef CONFIG_DDR_ECC
        /*
         * If ECC is enabled, initialize the parity bits.
diff --git a/board/lwmon5/sdram.h b/board/lwmon5/sdram.h
deleted file mode 100644 (file)
index 7f847aa..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * (C) Copyright 2006
- * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
- * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
- * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com
- * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
- * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * 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 _SPD_SDRAM_DENALI_H_
-#define _SPD_SDRAM_DENALI_H_
-
-#define ppcMsync       sync
-#define ppcMbar                eieio
-
-/* General definitions */
-#define MAX_SPD_BYTE        128         /* highest SPD byte # to read */
-#define DENALI_REG_NUMBER   45          /* 45 Regs in PPC440EPx Denali Core */
-#define SUPPORTED_DIMMS_NB  7           /* Number of supported DIMM modules types */
-#define SDRAM_NONE          0           /* No DIMM detected in Slot */
-#define MAXRANKS            2           /* 2 ranks maximum */
-
-/* Supported PLB Frequencies */
-#define PLB_FREQ_133MHZ     133333333
-#define PLB_FREQ_152MHZ     152000000
-#define PLB_FREQ_160MHZ     160000000
-#define PLB_FREQ_166MHZ     166666666
-
-/* Denali Core Registers */
-#define SDRAM_DCR_BASE 0x10
-
-#define DDR_DCR_BASE 0x10
-#define ddrcfga  (DDR_DCR_BASE+0x0)   /* DDR configuration address reg */
-#define ddrcfgd  (DDR_DCR_BASE+0x1)   /* DDR configuration data reg    */
-
-/*-----------------------------------------------------------------------------+
-  | Values for ddrcfga register - indirect addressing of these regs
-  +-----------------------------------------------------------------------------*/
-
-#define DDR0_00                         0x00
-#define DDR0_00_INT_ACK_MASK              0x7F000000 /* Write only */
-#define DDR0_00_INT_ACK_ALL               0x7F000000
-#define DDR0_00_INT_ACK_ENCODE(n)           ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_00_INT_ACK_DECODE(n)           ((((unsigned long)(n))>>24)&0x7F)
-/* Status */
-#define DDR0_00_INT_STATUS_MASK           0x00FF0000 /* Read only */
-/* Bit0. A single access outside the defined PHYSICAL memory space detected. */
-#define DDR0_00_INT_STATUS_BIT0           0x00010000
-/* Bit1. Multiple accesses outside the defined PHYSICAL memory space detected. */
-#define DDR0_00_INT_STATUS_BIT1           0x00020000
-/* Bit2. Single correctable ECC event detected */
-#define DDR0_00_INT_STATUS_BIT2           0x00040000
-/* Bit3. Multiple correctable ECC events detected. */
-#define DDR0_00_INT_STATUS_BIT3           0x00080000
-/* Bit4. Single uncorrectable ECC event detected. */
-#define DDR0_00_INT_STATUS_BIT4           0x00100000
-/* Bit5. Multiple uncorrectable ECC events detected. */
-#define DDR0_00_INT_STATUS_BIT5           0x00200000
-/* Bit6. DRAM initialization complete. */
-#define DDR0_00_INT_STATUS_BIT6           0x00400000
-/* Bit7. Logical OR of all lower bits. */
-#define DDR0_00_INT_STATUS_BIT7           0x00800000
-
-#define DDR0_00_INT_STATUS_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_00_INT_STATUS_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_00_DLL_INCREMENT_MASK        0x00007F00
-#define DDR0_00_DLL_INCREMENT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_00_DLL_INCREMENT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_00_DLL_START_POINT_MASK      0x0000007F
-#define DDR0_00_DLL_START_POINT_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_00_DLL_START_POINT_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-
-#define DDR0_01                         0x01
-#define DDR0_01_PLB0_DB_CS_LOWER_MASK     0x1F000000
-#define DDR0_01_PLB0_DB_CS_LOWER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_01_PLB0_DB_CS_LOWER_DECODE(n)  ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_01_PLB0_DB_CS_UPPER_MASK     0x001F0000
-#define DDR0_01_PLB0_DB_CS_UPPER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<16)
-#define DDR0_01_PLB0_DB_CS_UPPER_DECODE(n)  ((((unsigned long)(n))>>16)&0x1F)
-#define DDR0_01_OUT_OF_RANGE_TYPE_MASK    0x00000700 /* Read only */
-#define DDR0_01_OUT_OF_RANGE_TYPE_ENCODE(n)               ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_01_OUT_OF_RANGE_TYPE_DECODE(n)               ((((unsigned long)(n))>>8)&0x7)
-#define DDR0_01_INT_MASK_MASK             0x000000FF
-#define DDR0_01_INT_MASK_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_01_INT_MASK_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
-#define DDR0_01_INT_MASK_ALL_ON           0x000000FF
-#define DDR0_01_INT_MASK_ALL_OFF          0x00000000
-
-#define DDR0_02                         0x02
-#define DDR0_02_MAX_CS_REG_MASK           0x02000000 /* Read only */
-#define DDR0_02_MAX_CS_REG_ENCODE(n)        ((((unsigned long)(n))&0x2)<<24)
-#define DDR0_02_MAX_CS_REG_DECODE(n)        ((((unsigned long)(n))>>24)&0x2)
-#define DDR0_02_MAX_COL_REG_MASK          0x000F0000 /* Read only */
-#define DDR0_02_MAX_COL_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<16)
-#define DDR0_02_MAX_COL_REG_DECODE(n)       ((((unsigned long)(n))>>16)&0xF)
-#define DDR0_02_MAX_ROW_REG_MASK          0x00000F00 /* Read only */
-#define DDR0_02_MAX_ROW_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_02_MAX_ROW_REG_DECODE(n)       ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_02_START_MASK                0x00000001
-#define DDR0_02_START_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_02_START_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
-#define DDR0_02_START_OFF                 0x00000000
-#define DDR0_02_START_ON                  0x00000001
-
-#define DDR0_03                         0x03
-#define DDR0_03_BSTLEN_MASK               0x07000000
-#define DDR0_03_BSTLEN_ENCODE(n)            ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_03_BSTLEN_DECODE(n)            ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_03_CASLAT_MASK               0x00070000
-#define DDR0_03_CASLAT_ENCODE(n)            ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_03_CASLAT_DECODE(n)            ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_03_CASLAT_LIN_MASK           0x00000F00
-#define DDR0_03_CASLAT_LIN_ENCODE(n)        ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_03_CASLAT_LIN_DECODE(n)        ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_03_INITAREF_MASK             0x0000000F
-#define DDR0_03_INITAREF_ENCODE(n)          ((((unsigned long)(n))&0xF)<<0)
-#define DDR0_03_INITAREF_DECODE(n)          ((((unsigned long)(n))>>0)&0xF)
-
-#define DDR0_04                         0x04
-#define DDR0_04_TRC_MASK                  0x1F000000
-#define DDR0_04_TRC_ENCODE(n)               ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_04_TRC_DECODE(n)               ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_04_TRRD_MASK                 0x00070000
-#define DDR0_04_TRRD_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_04_TRRD_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_04_TRTP_MASK                 0x00000700
-#define DDR0_04_TRTP_ENCODE(n)              ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_04_TRTP_DECODE(n)              ((((unsigned long)(n))>>8)&0x7)
-
-#define DDR0_05                         0x05
-#define DDR0_05_TMRD_MASK                 0x1F000000
-#define DDR0_05_TMRD_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_05_TMRD_DECODE(n)              ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_05_TEMRS_MASK                0x00070000
-#define DDR0_05_TEMRS_ENCODE(n)             ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_05_TEMRS_DECODE(n)             ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_05_TRP_MASK                  0x00000F00
-#define DDR0_05_TRP_ENCODE(n)               ((((unsigned long)(n))&0xF)<<8)
-#define DDR0_05_TRP_DECODE(n)               ((((unsigned long)(n))>>8)&0xF)
-#define DDR0_05_TRAS_MIN_MASK             0x000000FF
-#define DDR0_05_TRAS_MIN_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_05_TRAS_MIN_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
-
-#define DDR0_06                         0x06
-#define DDR0_06_WRITEINTERP_MASK          0x01000000
-#define DDR0_06_WRITEINTERP_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_06_WRITEINTERP_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_06_TWTR_MASK                 0x00070000
-#define DDR0_06_TWTR_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
-#define DDR0_06_TWTR_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
-#define DDR0_06_TDLL_MASK                 0x0000FF00
-#define DDR0_06_TDLL_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_06_TDLL_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
-#define DDR0_06_TRFC_MASK                 0x0000007F
-#define DDR0_06_TRFC_ENCODE(n)              ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_06_TRFC_DECODE(n)              ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_07                         0x07
-#define DDR0_07_NO_CMD_INIT_MASK          0x01000000
-#define DDR0_07_NO_CMD_INIT_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_07_NO_CMD_INIT_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_07_TFAW_MASK                 0x001F0000
-#define DDR0_07_TFAW_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<16)
-#define DDR0_07_TFAW_DECODE(n)              ((((unsigned long)(n))>>16)&0x1F)
-#define DDR0_07_AUTO_REFRESH_MODE_MASK    0x00000100
-#define DDR0_07_AUTO_REFRESH_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_07_AUTO_REFRESH_MODE_DECODE(n) ((((unsigned long)(n))>>8)&0x1)
-#define DDR0_07_AREFRESH_MASK             0x00000001
-#define DDR0_07_AREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_07_AREFRESH_DECODE(n)          ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_08                         0x08
-#define DDR0_08_WRLAT_MASK                0x07000000
-#define DDR0_08_WRLAT_ENCODE(n)             ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_08_WRLAT_DECODE(n)             ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_08_TCPD_MASK                 0x00FF0000
-#define DDR0_08_TCPD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_08_TCPD_DECODE(n)              ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_08_DQS_N_EN_MASK             0x00000100
-#define DDR0_08_DQS_N_EN_ENCODE(n)          ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_08_DQS_N_EN_DECODE(n)          ((((unsigned long)(n))>>8)&0x1)
-#define DDR0_08_DDRII_SDRAM_MODE_MASK     0x00000001
-#define DDR0_08_DDRII_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_08_DDRII_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_09                         0x09
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_MASK  0x1F000000
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24)
-#define DDR0_09_OCD_ADJUST_PDN_CS_0_DECODE(n) ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_09_RTT_0_MASK                0x00030000
-#define DDR0_09_RTT_0_ENCODE(n)             ((((unsigned long)(n))&0x3)<<16)
-#define DDR0_09_RTT_0_DECODE(n)             ((((unsigned long)(n))>>16)&0x3)
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_MASK  0x00007F00
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_09_WR_DQS_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_09_WR_DQS_SHIFT_MASK         0x0000007F
-#define DDR0_09_WR_DQS_SHIFT_ENCODE(n)      ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_09_WR_DQS_SHIFT_DECODE(n)      ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_10                         0x0A
-#define DDR0_10_WRITE_MODEREG_MASK        0x00010000 /* Write only */
-#define DDR0_10_WRITE_MODEREG_ENCODE(n)     ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_10_WRITE_MODEREG_DECODE(n)     ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_10_CS_MAP_MASK               0x00000300
-#define DDR0_10_CS_MAP_NO_MEM             0x00000000
-#define DDR0_10_CS_MAP_RANK0_INSTALLED    0x00000100
-#define DDR0_10_CS_MAP_RANK1_INSTALLED    0x00000200
-#define DDR0_10_CS_MAP_ENCODE(n)            ((((unsigned long)(n))&0x3)<<8)
-#define DDR0_10_CS_MAP_DECODE(n)            ((((unsigned long)(n))>>8)&0x3)
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_MASK  0x0000001F
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<0)
-#define DDR0_10_OCD_ADJUST_PUP_CS_0_DECODE(n) ((((unsigned long)(n))>>0)&0x1F)
-
-#define DDR0_11                         0x0B
-#define DDR0_11_SREFRESH_MASK             0x01000000
-#define DDR0_11_SREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_11_SREFRESH_DECODE(n)          ((((unsigned long)(n))>>24)&0x1F)
-#define DDR0_11_TXSNR_MASK                0x00FF0000
-#define DDR0_11_TXSNR_ENCODE(n)             ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_11_TXSNR_DECODE(n)             ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_11_TXSR_MASK                 0x0000FF00
-#define DDR0_11_TXSR_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_11_TXSR_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
-
-#define DDR0_12                         0x0C
-#define DDR0_12_TCKE_MASK                 0x0000007
-#define DDR0_12_TCKE_ENCODE(n)              ((((unsigned long)(n))&0x7)<<0)
-#define DDR0_12_TCKE_DECODE(n)              ((((unsigned long)(n))>>0)&0x7)
-
-#define DDR0_13                         0x0D
-
-#define DDR0_14                         0x0E
-#define DDR0_14_DLL_BYPASS_MODE_MASK      0x01000000
-#define DDR0_14_DLL_BYPASS_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<24)
-#define DDR0_14_DLL_BYPASS_MODE_DECODE(n)   ((((unsigned long)(n))>>24)&0x1)
-#define DDR0_14_REDUC_MASK                0x00010000
-#define DDR0_14_REDUC_64BITS              0x00000000
-#define DDR0_14_REDUC_32BITS              0x00010000
-#define DDR0_14_REDUC_ENCODE(n)             ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_14_REDUC_DECODE(n)             ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_14_REG_DIMM_ENABLE_MASK      0x00000100
-#define DDR0_14_REG_DIMM_ENABLE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<8)
-#define DDR0_14_REG_DIMM_ENABLE_DECODE(n)   ((((unsigned long)(n))>>8)&0x1)
-
-#define DDR0_15                         0x0F
-
-#define DDR0_16                         0x10
-
-#define DDR0_17                         0x11
-#define DDR0_17_DLL_DQS_DELAY_0_MASK      0x7F000000
-#define DDR0_17_DLL_DQS_DELAY_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_17_DLL_DQS_DELAY_0_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_17_DLLLOCKREG_MASK           0x00010000 /* Read only */
-#define DDR0_17_DLLLOCKREG_LOCKED         0x00010000
-#define DDR0_17_DLLLOCKREG_UNLOCKED       0x00000000
-#define DDR0_17_DLLLOCKREG_ENCODE(n)        ((((unsigned long)(n))&0x1)<<16)
-#define DDR0_17_DLLLOCKREG_DECODE(n)        ((((unsigned long)(n))>>16)&0x1)
-#define DDR0_17_DLL_LOCK_MASK             0x00007F00 /* Read only */
-#define DDR0_17_DLL_LOCK_ENCODE(n)          ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_17_DLL_LOCK_DECODE(n)          ((((unsigned long)(n))>>8)&0x7F)
-
-#define DDR0_18                         0x12
-#define DDR0_18_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
-#define DDR0_18_DLL_DQS_DELAY_4_MASK      0x7F000000
-#define DDR0_18_DLL_DQS_DELAY_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_18_DLL_DQS_DELAY_4_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_3_MASK      0x007F0000
-#define DDR0_18_DLL_DQS_DELAY_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_18_DLL_DQS_DELAY_3_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_2_MASK      0x00007F00
-#define DDR0_18_DLL_DQS_DELAY_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_18_DLL_DQS_DELAY_2_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_18_DLL_DQS_DELAY_1_MASK      0x0000007F
-#define DDR0_18_DLL_DQS_DELAY_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_18_DLL_DQS_DELAY_1_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_19                         0x13
-#define DDR0_19_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
-#define DDR0_19_DLL_DQS_DELAY_8_MASK      0x7F000000
-#define DDR0_19_DLL_DQS_DELAY_8_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_19_DLL_DQS_DELAY_8_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_7_MASK      0x007F0000
-#define DDR0_19_DLL_DQS_DELAY_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_19_DLL_DQS_DELAY_7_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_6_MASK      0x00007F00
-#define DDR0_19_DLL_DQS_DELAY_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_19_DLL_DQS_DELAY_6_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_19_DLL_DQS_DELAY_5_MASK      0x0000007F
-#define DDR0_19_DLL_DQS_DELAY_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_19_DLL_DQS_DELAY_5_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_20                         0x14
-#define DDR0_20_DLL_DQS_BYPASS_3_MASK      0x7F000000
-#define DDR0_20_DLL_DQS_BYPASS_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_20_DLL_DQS_BYPASS_3_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_2_MASK      0x007F0000
-#define DDR0_20_DLL_DQS_BYPASS_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_20_DLL_DQS_BYPASS_2_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_1_MASK      0x00007F00
-#define DDR0_20_DLL_DQS_BYPASS_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_20_DLL_DQS_BYPASS_1_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_20_DLL_DQS_BYPASS_0_MASK      0x0000007F
-#define DDR0_20_DLL_DQS_BYPASS_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_20_DLL_DQS_BYPASS_0_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_21                         0x15
-#define DDR0_21_DLL_DQS_BYPASS_7_MASK      0x7F000000
-#define DDR0_21_DLL_DQS_BYPASS_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
-#define DDR0_21_DLL_DQS_BYPASS_7_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_6_MASK      0x007F0000
-#define DDR0_21_DLL_DQS_BYPASS_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_21_DLL_DQS_BYPASS_6_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_5_MASK      0x00007F00
-#define DDR0_21_DLL_DQS_BYPASS_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_21_DLL_DQS_BYPASS_5_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_21_DLL_DQS_BYPASS_4_MASK      0x0000007F
-#define DDR0_21_DLL_DQS_BYPASS_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_21_DLL_DQS_BYPASS_4_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
-
-#define DDR0_22                         0x16
-/* ECC */
-#define DDR0_22_CTRL_RAW_MASK             0x03000000
-#define DDR0_22_CTRL_RAW_ECC_DISABLE      0x00000000 /* ECC not being used */
-#define DDR0_22_CTRL_RAW_ECC_CHECK_ONLY   0x01000000 /* ECC checking is on, but no attempts to correct*/
-#define DDR0_22_CTRL_RAW_NO_ECC_RAM       0x02000000 /* No ECC RAM storage available */
-#define DDR0_22_CTRL_RAW_ECC_ENABLE       0x03000000 /* ECC checking and correcting on */
-#define DDR0_22_CTRL_RAW_ENCODE(n)          ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_22_CTRL_RAW_DECODE(n)          ((((unsigned long)(n))>>24)&0x3)
-
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_MASK 0x007F0000
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16)
-#define DDR0_22_DQS_OUT_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>16)&0x7F)
-#define DDR0_22_DQS_OUT_SHIFT_MASK        0x00007F00
-#define DDR0_22_DQS_OUT_SHIFT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
-#define DDR0_22_DQS_OUT_SHIFT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
-#define DDR0_22_DLL_DQS_BYPASS_8_MASK     0x0000007F
-#define DDR0_22_DLL_DQS_BYPASS_8_ENCODE(n)  ((((unsigned long)(n))&0x7F)<<0)
-#define DDR0_22_DLL_DQS_BYPASS_8_DECODE(n)  ((((unsigned long)(n))>>0)&0x7F)
-
-
-#define DDR0_23                         0x17
-#define DDR0_23_ODT_RD_MAP_CS0_MASK       0x03000000
-#define DDR0_23_ODT_RD_MAP_CS0_ENCODE(n)   ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_23_ODT_RD_MAP_CS0_DECODE(n)   ((((unsigned long)(n))>>24)&0x3)
-#define DDR0_23_ECC_C_SYND_MASK           0x00FF0000 /* Read only */
-#define DDR0_23_ECC_C_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
-#define DDR0_23_ECC_C_SYND_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
-#define DDR0_23_ECC_U_SYND_MASK           0x0000FF00 /* Read only */
-#define DDR0_23_ECC_U_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<8)
-#define DDR0_23_ECC_U_SYND_DECODE(n)        ((((unsigned long)(n))>>8)&0xFF)
-#define DDR0_23_FWC_MASK                  0x00000001 /* Write only */
-#define DDR0_23_FWC_ENCODE(n)               ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_23_FWC_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_24                         0x18
-#define DDR0_24_RTT_PAD_TERMINATION_MASK  0x03000000
-#define DDR0_24_RTT_PAD_TERMINATION_ENCODE(n) ((((unsigned long)(n))&0x3)<<24)
-#define DDR0_24_RTT_PAD_TERMINATION_DECODE(n) ((((unsigned long)(n))>>24)&0x3)
-#define DDR0_24_ODT_WR_MAP_CS1_MASK       0x00030000
-#define DDR0_24_ODT_WR_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<16)
-#define DDR0_24_ODT_WR_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>16)&0x3)
-#define DDR0_24_ODT_RD_MAP_CS1_MASK       0x00000300
-#define DDR0_24_ODT_RD_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<8)
-#define DDR0_24_ODT_RD_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>8)&0x3)
-#define DDR0_24_ODT_WR_MAP_CS0_MASK       0x00000003
-#define DDR0_24_ODT_WR_MAP_CS0_ENCODE(n)    ((((unsigned long)(n))&0x3)<<0)
-#define DDR0_24_ODT_WR_MAP_CS0_DECODE(n)    ((((unsigned long)(n))>>0)&0x3)
-
-#define DDR0_25                         0x19
-#define DDR0_25_VERSION_MASK              0xFFFF0000 /* Read only */
-#define DDR0_25_VERSION_ENCODE(n)           ((((unsigned long)(n))&0xFFFF)<<16)
-#define DDR0_25_VERSION_DECODE(n)           ((((unsigned long)(n))>>16)&0xFFFF)
-#define DDR0_25_OUT_OF_RANGE_LENGTH_MASK  0x000003FF /* Read only */
-#define DDR0_25_OUT_OF_RANGE_LENGTH_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0)
-#define DDR0_25_OUT_OF_RANGE_LENGTH_DECODE(n) ((((unsigned long)(n))>>0)&0x3FF)
-
-#define DDR0_26                         0x1A
-#define DDR0_26_TRAS_MAX_MASK             0xFFFF0000
-#define DDR0_26_TRAS_MAX_ENCODE(n)          ((((unsigned long)(n))&0xFFFF)<<16)
-#define DDR0_26_TRAS_MAX_DECODE(n)          ((((unsigned long)(n))>>16)&0xFFFF)
-#define DDR0_26_TREF_MASK                 0x00003FFF
-#define DDR0_26_TREF_ENCODE(n)              ((((unsigned long)(n))&0x3FF)<<0)
-#define DDR0_26_TREF_DECODE(n)              ((((unsigned long)(n))>>0)&0x3FF)
-
-#define DDR0_27                         0x1B
-#define DDR0_27_EMRS_DATA_MASK            0x3FFF0000
-#define DDR0_27_EMRS_DATA_ENCODE(n)         ((((unsigned long)(n))&0x3FFF)<<16)
-#define DDR0_27_EMRS_DATA_DECODE(n)         ((((unsigned long)(n))>>16)&0x3FFF)
-#define DDR0_27_TINIT_MASK                0x0000FFFF
-#define DDR0_27_TINIT_ENCODE(n)             ((((unsigned long)(n))&0xFFFF)<<0)
-#define DDR0_27_TINIT_DECODE(n)             ((((unsigned long)(n))>>0)&0xFFFF)
-
-#define DDR0_28                         0x1C
-#define DDR0_28_EMRS3_DATA_MASK           0x3FFF0000
-#define DDR0_28_EMRS3_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<16)
-#define DDR0_28_EMRS3_DATA_DECODE(n)        ((((unsigned long)(n))>>16)&0x3FFF)
-#define DDR0_28_EMRS2_DATA_MASK           0x00003FFF
-#define DDR0_28_EMRS2_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<0)
-#define DDR0_28_EMRS2_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0x3FFF)
-
-#define DDR0_29                         0x1D
-
-#define DDR0_30                         0x1E
-
-#define DDR0_31                         0x1F
-#define DDR0_31_XOR_CHECK_BITS_MASK       0x0000FFFF
-#define DDR0_31_XOR_CHECK_BITS_ENCODE(n)    ((((unsigned long)(n))&0xFFFF)<<0)
-#define DDR0_31_XOR_CHECK_BITS_DECODE(n)    ((((unsigned long)(n))>>0)&0xFFFF)
-
-#define DDR0_32                         0x20
-#define DDR0_32_OUT_OF_RANGE_ADDR_MASK    0xFFFFFFFF /* Read only */
-#define DDR0_32_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_32_OUT_OF_RANGE_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_33                         0x21
-#define DDR0_33_OUT_OF_RANGE_ADDR_MASK    0x00000001 /* Read only */
-#define DDR0_33_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_33_OUT_OF_RANGE_ADDR_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_34                         0x22
-#define DDR0_34_ECC_U_ADDR_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_34_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_34_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_35                         0x23
-#define DDR0_35_ECC_U_ADDR_MASK           0x00000001 /* Read only */
-#define DDR0_35_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_35_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_36                         0x24
-#define DDR0_36_ECC_U_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_36_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_36_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_37                         0x25
-#define DDR0_37_ECC_U_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_37_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_37_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_38                         0x26
-#define DDR0_38_ECC_C_ADDR_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_38_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_38_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_39                         0x27
-#define DDR0_39_ECC_C_ADDR_MASK           0x00000001 /* Read only */
-#define DDR0_39_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_39_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_40                         0x28
-#define DDR0_40_ECC_C_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_40_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_40_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_41                         0x29
-#define DDR0_41_ECC_C_DATA_MASK           0xFFFFFFFF /* Read only */
-#define DDR0_41_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
-#define DDR0_41_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
-
-#define DDR0_42                         0x2A
-#define DDR0_42_ADDR_PINS_MASK            0x07000000
-#define DDR0_42_ADDR_PINS_ENCODE(n)         ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_42_ADDR_PINS_DECODE(n)         ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_42_CASLAT_LIN_GATE_MASK      0x0000000F
-#define DDR0_42_CASLAT_LIN_GATE_ENCODE(n)   ((((unsigned long)(n))&0xF)<<0)
-#define DDR0_42_CASLAT_LIN_GATE_DECODE(n)   ((((unsigned long)(n))>>0)&0xF)
-
-#define DDR0_43                         0x2B
-#define DDR0_43_TWR_MASK                  0x07000000
-#define DDR0_43_TWR_ENCODE(n)               ((((unsigned long)(n))&0x7)<<24)
-#define DDR0_43_TWR_DECODE(n)               ((((unsigned long)(n))>>24)&0x7)
-#define DDR0_43_APREBIT_MASK              0x000F0000
-#define DDR0_43_APREBIT_ENCODE(n)           ((((unsigned long)(n))&0xF)<<16)
-#define DDR0_43_APREBIT_DECODE(n)           ((((unsigned long)(n))>>16)&0xF)
-#define DDR0_43_COLUMN_SIZE_MASK          0x00000700
-#define DDR0_43_COLUMN_SIZE_ENCODE(n)       ((((unsigned long)(n))&0x7)<<8)
-#define DDR0_43_COLUMN_SIZE_DECODE(n)       ((((unsigned long)(n))>>8)&0x7)
-#define DDR0_43_EIGHT_BANK_MODE_MASK      0x00000001
-#define DDR0_43_EIGHT_BANK_MODE_8_BANKS     0x00000001
-#define DDR0_43_EIGHT_BANK_MODE_4_BANKS     0x00000000
-#define DDR0_43_EIGHT_BANK_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<0)
-#define DDR0_43_EIGHT_BANK_MODE_DECODE(n)   ((((unsigned long)(n))>>0)&0x1)
-
-#define DDR0_44                         0x2C
-#define DDR0_44_TRCD_MASK                 0x000000FF
-#define DDR0_44_TRCD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<0)
-#define DDR0_44_TRCD_DECODE(n)              ((((unsigned long)(n))>>0)&0xFF)
-
-#endif /* _SPD_SDRAM_DENALI_H_ */
index a423f982858327f4056d253674057020abbd6cf9..e1407373739ef1cffd3c58634cebc1751b83421c 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 69f31793adfa63d944857be14321e08504e821da..235ec42b547992a4d3f0638631010792cd7aafe1 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index f7dc0709040af5dca7a1ae029497bca26d768c36..29fe58941b4b2ccebbde0467e8cef7819628a389 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index c461d20e51817d053c2ae842f7dc46dc8b209a82..95425985be70a01317b95eafa9a797f522dfa621 100644 (file)
@@ -128,7 +128,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 1400cea157e02241cc31ffc3049fecf539ffd14e..1d98973a52323e682487b754e06ea1723296b916 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
diff --git a/board/mgcoge/Makefile b/board/mgcoge/Makefile
new file mode 100644 (file)
index 0000000..1a14244
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2001-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/mgcoge/config.mk b/board/mgcoge/config.mk
new file mode 100644 (file)
index 0000000..143bc9f
--- /dev/null
@@ -0,0 +1,24 @@
+#
+# (C) Copyright 2007
+# Heiko Schocher, DENX Software Engineering, hs@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
+#
+
+TEXT_BASE = 0xFE000000
diff --git a/board/mgcoge/mgcoge.c b/board/mgcoge/mgcoge.c
new file mode 100644 (file)
index 0000000..0207a3a
--- /dev/null
@@ -0,0 +1,345 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <mpc8260.h>
+#include <ioports.h>
+
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#endif
+
+/*
+ * 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 */
+    {  /*            conf      ppar psor pdir podr pdat */
+       /* PA31 */ { 0,          0,   0,   0,   0,   0 }, /* PA31            */
+       /* PA30 */ { 0,          0,   0,   0,   0,   0 }, /* PA30            */
+       /* PA29 */ { 0,          0,   0,   0,   0,   0 }, /* PA29            */
+       /* PA28 */ { 0,          0,   0,   0,   0,   0 }, /* PA28            */
+       /* PA27 */ { 0,          0,   0,   0,   0,   0 }, /* PA27            */
+       /* PA26 */ { 0,          0,   0,   0,   0,   0 }, /* PA26            */
+       /* PA25 */ { 0,          0,   0,   0,   0,   0 }, /* PA25            */
+       /* PA24 */ { 0,          0,   0,   0,   0,   0 }, /* PA24            */
+       /* PA23 */ { 0,          0,   0,   0,   0,   0 }, /* PA23            */
+       /* PA22 */ { 0,          0,   0,   0,   0,   0 }, /* PA22            */
+       /* PA21 */ { 0,          0,   0,   0,   0,   0 }, /* PA21            */
+       /* PA20 */ { 0,          0,   0,   0,   0,   0 }, /* PA20            */
+       /* PA19 */ { 0,          0,   0,   0,   0,   0 }, /* PA19            */
+       /* PA18 */ { 0,          0,   0,   0,   0,   0 }, /* PA18            */
+       /* PA17 */ { 0,          0,   0,   0,   0,   0 }, /* PA17            */
+       /* PA16 */ { 0,          0,   0,   0,   0,   0 }, /* PA16            */
+       /* PA15 */ { 0,          0,   0,   0,   0,   0 }, /* PA15            */
+       /* PA14 */ { 0,          0,   0,   0,   0,   0 }, /* PA14            */
+       /* PA13 */ { 0,          0,   0,   0,   0,   0 }, /* PA13            */
+       /* PA12 */ { 0,          0,   0,   0,   0,   0 }, /* PA12            */
+       /* PA11 */ { 0,          0,   0,   0,   0,   0 }, /* PA11            */
+       /* PA10 */ { 0,          0,   0,   0,   0,   0 }, /* PA10            */
+       /* PA9  */ { 1,          1,   0,   1,   0,   0 }, /* SMC2 TxD        */
+       /* PA8  */ { 1,          1,   0,   0,   0,   0 }, /* SMC2 RxD        */
+       /* PA7  */ { 0,          0,   0,   0,   0,   0 }, /* PA7             */
+       /* PA6  */ { 0,          0,   0,   0,   0,   0 }, /* PA6             */
+       /* PA5  */ { 0,          0,   0,   0,   0,   0 }, /* PA5             */
+       /* PA4  */ { 0,          0,   0,   0,   0,   0 }, /* PA4             */
+       /* PA3  */ { 0,          0,   0,   0,   0,   0 }, /* PA3             */
+       /* PA2  */ { 0,          0,   0,   0,   0,   0 }, /* PA2             */
+       /* PA1  */ { 0,          0,   0,   0,   0,   0 }, /* PA1             */
+       /* PA0  */ { 0,          0,   0,   0,   0,   0 }  /* PA0             */
+    },
+
+    /* Port B */
+    {   /*           conf      ppar psor pdir podr pdat */
+       /* PB31 */ { 0,          0,   0,   0,   0,   0 }, /* PB31            */
+       /* PB30 */ { 0,          0,   0,   0,   0,   0 }, /* PB30            */
+       /* PB29 */ { 0,          0,   0,   0,   0,   0 }, /* PB29            */
+       /* PB28 */ { 0,          0,   0,   0,   0,   0 }, /* PB28            */
+       /* PB27 */ { 0,          0,   0,   0,   0,   0 }, /* PB27            */
+       /* PB26 */ { 0,          0,   0,   0,   0,   0 }, /* PB26            */
+       /* PB25 */ { 0,          0,   0,   0,   0,   0 }, /* PB25            */
+       /* PB24 */ { 0,          0,   0,   0,   0,   0 }, /* PB24            */
+       /* PB23 */ { 0,          0,   0,   0,   0,   0 }, /* PB23            */
+       /* PB22 */ { 0,          0,   0,   0,   0,   0 }, /* PB22            */
+       /* PB21 */ { 0,          0,   0,   0,   0,   0 }, /* PB21            */
+       /* PB20 */ { 0,          0,   0,   0,   0,   0 }, /* PB20            */
+       /* PB19 */ { 0,          0,   0,   0,   0,   0 }, /* PB19            */
+       /* PB18 */ { 0,          0,   0,   0,   0,   0 }, /* PB18            */
+       /* PB17 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB16 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB15 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB14 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB13 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB12 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB11 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB10 */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB9  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB8  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB7  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB6  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB5  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB4  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB3  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB2  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB1  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PB0  */ { 0,          0,   0,   0,   0,   0 }  /* non-existent    */
+    },
+
+    /* Port C */
+    {   /*           conf      ppar psor pdir podr pdat */
+       /* PC31 */ { 0,          0,   0,   0,   0,   0 }, /* PC31            */
+       /* PC30 */ { 0,          0,   0,   0,   0,   0 }, /* PC30            */
+       /* PC29 */ { 0,          0,   0,   0,   0,   0 }, /* PC29            */
+       /* PC28 */ { 0,          0,   0,   0,   0,   0 }, /* PC28            */
+       /* PC27 */ { 0,          0,   0,   0,   0,   0 }, /* PC27            */
+       /* PC26 */ { 0,          0,   0,   0,   0,   0 }, /* PC26            */
+       /* PC25 */ { 1,          1,   0,   0,   0,   0 }, /* SCC4 RxClk      */
+       /* PC24 */ { 1,          1,   0,   0,   0,   0 }, /* SCC4 TxClk      */
+       /* PC23 */ { 0,          0,   0,   0,   0,   0 }, /* PC23            */
+       /* PC22 */ { 0,          0,   0,   0,   0,   0 }, /* PC22            */
+       /* PC21 */ { 0,          0,   0,   0,   0,   0 }, /* PC21            */
+       /* PC20 */ { 0,          0,   0,   0,   0,   0 }, /* PC20            */
+       /* PC19 */ { 0,          0,   0,   0,   0,   0 }, /* PC19            */
+       /* PC18 */ { 0,          0,   0,   0,   0,   0 }, /* PC18            */
+       /* PC17 */ { 0,          0,   0,   0,   0,   0 }, /* PC17            */
+       /* PC16 */ { 0,          0,   0,   0,   0,   0 }, /* PC16            */
+       /* PC15 */ { 0,          0,   0,   0,   0,   0 }, /* PC15            */
+       /* PC14 */ { 0,          0,   0,   0,   0,   0 }, /* PC14            */
+       /* PC13 */ { 0,          0,   0,   0,   0,   0 }, /* PC13            */
+       /* PC12 */ { 0,          0,   0,   0,   0,   0 }, /* PC12            */
+       /* PC11 */ { 0,          0,   0,   0,   0,   0 }, /* PC11            */
+       /* PC10 */ { 0,          0,   0,   0,   0,   0 }, /* PC10            */
+       /* PC9  */ { 1,          1,   0,   0,   0,   0 }, /* SCC4: CTS       */
+       /* PC8  */ { 1,          1,   0,   0,   0,   0 }, /* SCC4: CD        */
+       /* PC7  */ { 0,          0,   0,   0,   0,   0 }, /* PC7             */
+       /* PC6  */ { 0,          0,   0,   0,   0,   0 }, /* PC6             */
+       /* PC5  */ { 0,          0,   0,   0,   0,   0 }, /* PC5             */
+       /* PC4  */ { 0,          0,   0,   0,   0,   0 }, /* PC4             */
+       /* PC3  */ { 0,          0,   0,   0,   0,   0 }, /* PC3             */
+       /* PC2  */ { 0,          0,   0,   0,   0,   0 }, /* PC2             */
+       /* PC1  */ { 0,          0,   0,   0,   0,   0 }, /* PC1             */
+       /* PC0  */ { 0,          0,   0,   0,   0,   0 }, /* PC0             */
+    },
+
+    /* Port D */
+    {   /*           conf      ppar psor pdir podr pdat */
+       /* PD31 */ { 0,          0,   0,   0,   0,   0 }, /* PD31            */
+       /* PD30 */ { 0,          0,   0,   0,   0,   0 }, /* PD30            */
+       /* PD29 */ { 0,          0,   0,   0,   0,   0 }, /* PD29            */
+       /* PD28 */ { 0,          0,   0,   0,   0,   0 }, /* PD28            */
+       /* PD27 */ { 0,          0,   0,   0,   0,   0 }, /* PD27            */
+       /* PD26 */ { 0,          0,   0,   0,   0,   0 }, /* PD26            */
+       /* PD25 */ { 0,          0,   0,   0,   0,   0 }, /* PD25            */
+       /* PD24 */ { 0,          0,   0,   0,   0,   0 }, /* PD24            */
+       /* PD23 */ { 0,          0,   0,   0,   0,   0 }, /* PD23            */
+       /* PD22 */ { 1,          1,   0,   0,   0,   0 }, /* SCC4: RXD       */
+       /* PD21 */ { 1,          1,   0,   1,   0,   0 }, /* SCC4: TXD       */
+       /* PD20 */ { 1,          1,   0,   1,   0,   0 }, /* SCC4: RTS       */
+       /* PD19 */ { 0,          0,   0,   0,   0,   0 }, /* PD19            */
+       /* PD18 */ { 0,          0,   0,   0,   0,   0 }, /* PD18            */
+       /* PD17 */ { 0,          0,   0,   0,   0,   0 }, /* PD17            */
+       /* PD16 */ { 0,          0,   0,   0,   0,   0 }, /* PD16            */
+       /* PD15 */ { 0,          0,   0,   0,   0,   0 }, /* PD15            */
+       /* PD14 */ { 0,          0,   0,   0,   0,   0 }, /* PD14            */
+       /* 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,          0,   0,   0,   0,   0 }, /* PD9             */
+       /* PD8  */ { 0,          0,   0,   0,   0,   0 }, /* PD8             */
+       /* PD7  */ { 0,          0,   0,   0,   0,   0 }, /* PD7             */
+       /* PD6  */ { 0,          0,   0,   0,   0,   0 }, /* PD6             */
+       /* PD5  */ { 0,          0,   0,   0,   0,   0 }, /* PD5             */
+       /* PD4  */ { 0,          0,   0,   0,   0,   0 }, /* PD4             */
+       /* PD3  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PD2  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PD1  */ { 0,          0,   0,   0,   0,   0 }, /* non-existent    */
+       /* PD0  */ { 0,          0,   0,   0,   0,   0 }  /* non-existent    */
+    }
+};
+
+/* Try SDRAM initialization with P/LSDMR=sdmr and ORx=orx
+ *
+ * This routine performs standard 8260 initialization sequence
+ * and calculates the available memory size. It may be called
+ * several times to try different SDRAM configurations on both
+ * 60x and local buses.
+ */
+static long int try_init (volatile memctl8260_t * memctl, ulong sdmr,
+                                                 ulong orx, volatile uchar * base)
+{
+       volatile uchar c = 0xff;
+       volatile uint *sdmr_ptr;
+       volatile uint *orx_ptr;
+       ulong maxsize, size;
+       int i;
+
+       /* We must be able to test a location outsize the maximum legal size
+        * to find out THAT we are outside; but this address still has to be
+        * mapped by the controller. That means, that the initial mapping has
+        * to be (at least) twice as large as the maximum expected size.
+        */
+       maxsize = (1 + (~orx | 0x7fff))/* / 2*/;
+
+       sdmr_ptr = &memctl->memc_psdmr;
+       orx_ptr = &memctl->memc_or1;
+
+       *orx_ptr = orx;
+
+       /*
+        * Quote from 8260 UM (10.4.2 SDRAM Power-On Initialization, 10-35):
+        *
+        * "At system reset, initialization software must set up the
+        *  programmable parameters in the memory controller banks registers
+        *  (ORx, BRx, P/LSDMR). After all memory parameters are configured,
+        *  system software should execute the following initialization sequence
+        *  for each SDRAM device.
+        *
+        *  1. Issue a PRECHARGE-ALL-BANKS command
+        *  2. Issue eight CBR REFRESH commands
+        *  3. Issue a MODE-SET command to initialize the mode register
+        *
+        *  The initial commands are executed by setting P/LSDMR[OP] and
+        *  accessing the SDRAM with a single-byte transaction."
+        *
+        * The appropriate BRx/ORx registers have already been set when we
+        * get here. The SDRAM can be accessed at the address CFG_SDRAM_BASE.
+        */
+
+       *sdmr_ptr = sdmr | PSDMR_OP_PREA;
+       *base = c;
+
+       *sdmr_ptr = sdmr | PSDMR_OP_CBRR;
+       for (i = 0; i < 8; i++)
+               *base = c;
+
+       *sdmr_ptr = sdmr | PSDMR_OP_MRW;
+       *(base + CFG_MRS_OFFS) = c;     /* setting MR on address lines */
+
+       *sdmr_ptr = sdmr | PSDMR_OP_NORM | PSDMR_RFEN;
+       *base = c;
+
+       size = get_ram_size((long *)base, maxsize);
+       *orx_ptr = orx | ~(size - 1);
+
+       return (size);
+}
+
+long int initdram(int board_type)
+{
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
+       volatile memctl8260_t *memctl = &immap->im_memctl;
+
+       long psize;
+
+       memctl->memc_psrt = CFG_PSRT;
+       memctl->memc_mptpr = CFG_MPTPR;
+
+#ifndef CFG_RAMBOOT
+       /* 60x SDRAM setup:
+        */
+       psize = try_init (memctl, CFG_PSDMR, CFG_OR1,
+                                                 (uchar *) CFG_SDRAM_BASE);
+#endif /* CFG_RAMBOOT */
+
+       icache_enable ();
+
+       return (psize);
+}
+
+int checkboard(void)
+{
+       puts("Board: mgcoge\n");
+
+       return 0;
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+/*
+ * update "memory" property in the blob
+ */
+void ft_blob_update(void *blob, bd_t *bd)
+{
+       int ret, nodeoffset = 0;
+       ulong memory_data[2] = {0};
+       ulong flash_data[4] = {0};
+
+       memory_data[0] = cpu_to_be32(bd->bi_memstart);
+       memory_data[1] = cpu_to_be32(bd->bi_memsize);
+
+       nodeoffset = fdt_path_offset (blob, "/memory");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "reg", memory_data,
+                                       sizeof(memory_data));
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /memory/reg "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /memory node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+       /* update Flash size */
+       flash_data[2] = cpu_to_be32(bd->bi_flashstart);
+       flash_data[3] = cpu_to_be32(bd->bi_flashsize);
+       nodeoffset = fdt_path_offset (blob, "/localbus");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "ranges", flash_data,
+                                       sizeof(flash_data));
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /localbus/ranges "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /localbus node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+       /* MAC Adresse */
+       nodeoffset = fdt_path_offset (blob, "/soc/cpm/ethernet");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "mac-address", bd->bi_enetaddr,
+                                       sizeof(uchar) * 6);
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /soc/cpm/ethernet/mac-address "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /localbus node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup( blob, bd);
+       ft_blob_update(blob, bd);
+}
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
diff --git a/board/mgsuvd/Makefile b/board/mgsuvd/Makefile
new file mode 100644 (file)
index 0000000..af0d400
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2007
+# Heiko Schocher, DENX Software Engineering, hs@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/mgsuvd/config.mk b/board/mgsuvd/config.mk
new file mode 100644 (file)
index 0000000..8625cea
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# (C) Copyright 2007
+# Heiko Schocher, DENX Software Engineering, hs@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
+#
+
+#
+# mgsvud boards
+#
+
+TEXT_BASE = 0xf0000000
diff --git a/board/mgsuvd/mgsuvd.c b/board/mgsuvd/mgsuvd.c
new file mode 100644 (file)
index 0000000..dd7d823
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@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
+ */
+
+#if 0
+#define DEBUG
+#endif
+
+#include <common.h>
+#include <mpc8xx.h>
+
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+const uint sdram_table[] =
+{
+       0x0f07fc04, 0x0ffffc04, 0x00bdfc04, 0x0ff77c00,
+       0x1ffffc05, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+       /* 0x08 Burst Read */
+       0x0f07fc04, 0x0ffffc04, 0x00bdfc04, 0x00fffc00,
+       0x00fffc00, 0x00fffc00, 0x0ff77c00, 0x1ffffc05,
+       /* 0x10 Load mode register */
+       0x0ffffc34, 0x0ff57c04, 0x0ffffc04, 0x1ffffc05,
+       0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+       /* 0x18 Single Write */
+       0x0f07fc04, 0x0ffffc00, 0x00bd7c04, 0x0ffffc04,
+       0x0ff77c04, 0x1ffffc05, 0xfffffc04, 0xfffffc04,
+       /* 0x20 Burst Write */
+       0x0f07fc04, 0x0ffffc00, 0x00bd7c00, 0x00fffc00,
+       0x00fffc00, 0x00fffc04, 0x0ffffc04, 0x0ff77c04,
+       0x1ffffc05, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+       0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+       /* 0x30 Precharge all and Refresh */
+       0x0ff77c04, 0x0ffffc04, 0x0ff5fc84, 0x0ffffc04,
+       0x0ffffc04, 0x0ffffc84, 0x1ffffc05, 0xfffffc04,
+       0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+       /* 0x3C Exception */
+       0x7ffffc04, 0xfffffc07, 0xfffffc04, 0xfffffc04,
+};
+
+int checkboard (void)
+{
+       puts ("Board: Keymile mgsuvd\n");
+       return (0);
+}
+
+long int initdram (int board_type)
+{
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
+       volatile memctl8xx_t *memctl = &immap->im_memctl;
+       long int size;
+
+       upmconfig (UPMB, (uint *) sdram_table,
+                          sizeof (sdram_table) / sizeof (uint));
+
+       /*
+        * Preliminary prescaler for refresh (depends on number of
+        * banks): This value is selected for four cycles every 62.4 us
+        * with two SDRAM banks or four cycles every 31.2 us with one
+        * bank. It will be adjusted after memory sizing.
+        */
+       memctl->memc_mptpr = CFG_MPTPR;
+
+       /*
+        * The following value is used as an address (i.e. opcode) for
+        * the LOAD MODE REGISTER COMMAND during SDRAM initialisation. If
+        * the port size is 32bit the SDRAM does NOT "see" the lower two
+        * address lines, i.e. mar=0x00000088 -> opcode=0x00000022 for
+        * MICRON SDRAMs:
+        * ->    0 00 010 0 010
+        *       |  |   | |   +- Burst Length = 4
+        *       |  |   | +----- Burst Type   = Sequential
+        *       |  |   +------- CAS Latency  = 2
+        *       |  +----------- Operating Mode = Standard
+        *       +-------------- Write Burst Mode = Programmed Burst Length
+        */
+       memctl->memc_mar = CFG_MAR;
+
+       /*
+        * Map controller banks 1 to the SDRAM banks 1 at
+        * preliminary addresses - these have to be modified after the
+        * SDRAM size has been determined.
+        */
+       memctl->memc_or1 = CFG_OR1_PRELIM;
+       memctl->memc_br1 = CFG_BR1_PRELIM;
+
+       memctl->memc_mbmr = CFG_MBMR & (~(MBMR_PTBE));  /* no refresh yet */
+
+       udelay (200);
+
+       /* perform SDRAM initializsation sequence */
+
+       memctl->memc_mcr = 0x80802830;  /* SDRAM bank 0 */
+       udelay (1);
+       memctl->memc_mcr = 0x80802110;  /* SDRAM bank 0 - execute twice */
+       udelay (1);
+
+       memctl->memc_mbmr |= MBMR_PTBE; /* enable refresh */
+
+       udelay (1000);
+
+       /*
+        * Check Bank 0 Memory Size for re-configuration
+        *
+        */
+       size =  get_ram_size(SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
+
+       udelay (1000);
+
+       debug ("SDRAM Bank 0: %ld MB\n", size >> 20);
+
+       return (size);
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+/*
+ * update "memory" property in the blob
+ */
+void ft_blob_update(void *blob, bd_t *bd)
+{
+       int ret, nodeoffset = 0;
+       ulong brg_data[1] = {0};
+       ulong memory_data[2] = {0};
+       ulong flash_data[4] = {0};
+
+       memory_data[0] = cpu_to_be32(bd->bi_memstart);
+       memory_data[1] = cpu_to_be32(bd->bi_memsize);
+
+               nodeoffset = fdt_path_offset (blob, "/memory");
+               if (nodeoffset >= 0) {
+                       ret = fdt_setprop(blob, nodeoffset, "reg", memory_data,
+                                               sizeof(memory_data));
+               if (ret < 0)
+                       printf("ft_blob_update): cannot set /memory/reg "
+                               "property err:%s\n", fdt_strerror(ret));
+               }
+               else {
+                       /* memory node is required in dts */
+                       printf("ft_blob_update(): cannot find /memory node "
+                       "err:%s\n", fdt_strerror(nodeoffset));
+       }
+
+       flash_data[2] = cpu_to_be32(bd->bi_flashstart);
+       flash_data[3] = cpu_to_be32(bd->bi_flashsize);
+       nodeoffset = fdt_path_offset (blob, "/localbus");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "ranges", flash_data,
+                                       sizeof(flash_data));
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /localbus/ranges "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /localbus node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+       /* BRG */
+       brg_data[0] = cpu_to_be32(bd->bi_busfreq);
+       nodeoffset = fdt_path_offset (blob, "/soc866/cpm");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "brg-frequency", brg_data,
+                                       sizeof(brg_data));
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /soc866/cpm/brg-frequency "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /localbus node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+       /* MAC Adresse */
+       nodeoffset = fdt_path_offset (blob, "/soc866/cpm/scc");
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop(blob, nodeoffset, "mac-address", bd->bi_enetaddr,
+                                       sizeof(uchar) * 6);
+       if (ret < 0)
+               printf("ft_blob_update): cannot set /soc866/cpm/scc/mac-address "
+                       "property err:%s\n", fdt_strerror(ret));
+       }
+       else {
+               /* memory node is required in dts */
+               printf("ft_blob_update(): cannot find /localbus node "
+               "err:%s\n", fdt_strerror(nodeoffset));
+       }
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup( blob, bd);
+       ft_blob_update(blob, bd);
+}
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
similarity index 85%
rename from board/amcc/yucca/u-boot.lds.debug
rename to board/mgsuvd/u-boot.lds
index 474f922161ac9756b51ad662994e6660f184a48b..bb9fcab8eb102a8a18b12e1ac1dabe7efb7a4c91 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2002-2004
+ * (C) Copyright 2000
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
@@ -34,11 +34,11 @@ SECTIONS
   .dynsym        : { *(.dynsym)                }
   .dynstr        : { *(.dynstr)                }
   .rel.text      : { *(.rel.text)      }
-  .rela.text     : { *(.rela.text)     }
+  .rela.text     : { *(.rela.text)     }
   .rel.data      : { *(.rel.data)      }
-  .rela.data     : { *(.rela.data)     }
-  .rel.rodata    : { *(.rel.rodata)    }
-  .rela.rodata   : { *(.rela.rodata)   }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
   .rel.got       : { *(.rel.got)       }
   .rela.got      : { *(.rela.got)      }
   .rel.ctors     : { *(.rel.ctors)     }
@@ -56,20 +56,18 @@ SECTIONS
     /* WARNING - the following is hand-optimized to fit within */
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
-    cpu/ppc4xx/start.o         (.text)
-    board/amcc/yucca/init.o    (.text)
-    cpu/ppc4xx/kgdb.o          (.text)
-    cpu/ppc4xx/traps.o         (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o                (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o         (.text)
+    cpu/mpc8xx/start.o         (.text)
+    cpu/mpc8xx/traps.o         (.text)
     common/dlmalloc.o          (.text)
+    lib_ppc/ppcstring.o                (.text)
+    lib_generic/vsprintf.o     (.text)
     lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o          (.text)
     lib_generic/zlib.o         (.text)
+    lib_ppc/cache.o            (.text)
+    lib_ppc/time.o             (.text)
 
-/*    common/environment.o(.text) */
+    . = DEFINED(env_offset) ? env_offset : .;
+    common/environment.o       (.ppcenv)
 
     *(.text)
     *(.fixup)
@@ -89,7 +87,7 @@ SECTIONS
   .dtors     : { *(.dtors)   }
 
   /* Read-write section, merged into data segment: */
-  . = (. + 0x0FFF) & 0xFFFFF000;
+  . = (. + 0x00FF) & 0xFFFFFF00;
   _erotext = .;
   PROVIDE (erotext = .);
   .reloc   :
@@ -134,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f8e9e33748a5bedd92c57d26988920fba7456d74..6b3addf2e4838e59ac8a8ed5e6923dc87ca215e7 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -136,7 +136,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5b70a40aab6f6267d375a42e330cd3a5724e54dc..b3c2bf95015ec27203ce173e16edff4d211180fc 100644 (file)
@@ -51,7 +51,7 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
                                  /* Stabs debugging sections.    */
        .stab 0 : { *(.stab) }
index 57358b8a49dcb69640e30cf2a47be7ccc7e40078..fb24399cac1b81c111938c23cf00a4da9c332531 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..3b797767240ee8f95bf6f052d9da5795ef92e7e7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 8f24213fc345017ad18035d68a8b01c6d200edf1..05f0269f40c27fbcd70617e0b0b5861299b22326 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8c2ca65a91cc81f90280e9d237a4b14f8eb689b4..a8ac3fb8c7e2b5b15d8fc6c2254eaf5edfba6f61 100644 (file)
@@ -46,93 +46,93 @@ tlb1_entry:
 
        .long 0x0a      /* the following data table uses a few of 16 TLB entries */
 
-       .long TLB1_MAS0(1,1,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,1,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
   #if defined(CFG_FLASH_PORT_WIDTH_16)
-       .long TLB1_MAS0(1,2,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
-       .long TLB1_MAS2(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,3,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
-       .long TLB1_MAS2((((CFG_FLASH_BASE+0x400000)>>12)&0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3((((CFG_FLASH_BASE+0x400000)>>12)&0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,2,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,3,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE+0x400000,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE+0x400000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #else
-       .long TLB1_MAS0(1,2,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16M)
-       .long TLB1_MAS2(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,3,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,2,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,3,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #endif
 
   #if !defined(CONFIG_SPD_EEPROM)
-       .long TLB1_MAS0(1,4,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,5,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2((((CFG_DDR_SDRAM_BASE+0x4000000)>>12) & 0xfffff),0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3((((CFG_DDR_SDRAM_BASE+0x4000000)>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,4,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE,0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,5,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x4000000,0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x4000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #else
-       .long TLB1_MAS0(1,4,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,5,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,4,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,5,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #endif
 
-       .long TLB1_MAS0(1,6,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS0(1,6,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
   #if defined(CONFIG_RAM_AS_FLASH)
-       .long TLB1_MAS2(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE,(MAS2_I|MAS2_G))
   #else
-       .long TLB1_MAS2(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,0,0,0)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE,0)
   #endif
-       .long TLB1_MAS3(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long TLB1_MAS0(1,7,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
+       .long FSL_BOOKE_MAS0(1,7,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
   #ifdef CONFIG_L2_INIT_RAM
-       .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,1,0,0,0,0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0,0,0,1,0,0,0,0)
   #else
-       .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,0,0,0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0)
   #endif
-       .long TLB1_MAS3(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long TLB1_MAS0(1,8,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(((CFG_PCI_MEM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_PCI_MEM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,8,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI_MEM_BASE,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_MEM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long TLB1_MAS0(1,9,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
-       .long TLB1_MAS2(((CFG_BCSR>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_BCSR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,9,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
+       .long FSL_BOOKE_MAS2(CFG_BCSR,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_BCSR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
   #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       .long TLB1_MAS0(1,15,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,15,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #else
-       .long TLB1_MAS0(1,15,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,15,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
   #endif
        entry_end
 
index 0755d0166b8defaa6cde6887bfd9e9505d5d509e..4b342c7fb2964ad90032cf8fcb352eeb66494470 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 278ad5c34880621bcad9f9450ca04a00a70e0a38..8d4cbe852e95e526f8051099e57290c3fce3692a 100644 (file)
 
 #ifdef CONFIG_PIP405
 #include "../pip405/pip405.h"
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #endif
 #ifdef CONFIG_MIP405
 #include "../mip405/mip405.h"
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #endif
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -587,7 +587,7 @@ extern int get_boot_mode(void);
 void video_get_info_str (int line_number, char *info)
 {
        /* init video info strings for graphic console */
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
        char rev;
        int i,boot;
        unsigned long pvr;
index fd430083e2fd63ddb39e554dde17eb6bdd32427d..6f53192ac752ff57073e0468fe68431816945a63 100644 (file)
@@ -47,7 +47,7 @@
 #if defined(CONFIG_PIP405)
 #include "../pip405/pip405.h"
 #endif
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #else /* defined(CONFIG_PATI) */
 #include <mpc5xx.h>
 #endif
index ad5f2739ca6cff9a6af56043d628fda400849059..8460abe46c0f099ec84c518b33cc4077b7df8d92 100644 (file)
@@ -70,7 +70,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -145,7 +145,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 11819a4fcb219a57e518810a454d10b97bb3e674..ed65830d5e3130449a2198337e02f0847013f75b 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -140,7 +140,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f4fbf969c3cf6445dd210053c319e591440dc3ae..14cd22800bb7a1023e6d597b413fe63768f9e2a9 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 692bc62918e48f2ab0088697e1ea127d426e0f48..88b4f5c45face33a0bd64a500ffd9a41be244072 100644 (file)
@@ -94,7 +94,7 @@ SECTIONS
 
        PROVIDE (bss_start = .);
        PROVIDE (__bss_start = .);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
                . = ALIGN(4);
index 692bc62918e48f2ab0088697e1ea127d426e0f48..88b4f5c45face33a0bd64a500ffd9a41be244072 100644 (file)
@@ -94,7 +94,7 @@ SECTIONS
 
        PROVIDE (bss_start = .);
        PROVIDE (__bss_start = .);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
                . = ALIGN(4);
diff --git a/board/munices/Makefile b/board/munices/Makefile
new file mode 100644 (file)
index 0000000..09c63c3
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2003-2008
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/munices/config.mk b/board/munices/config.mk
new file mode 100644 (file)
index 0000000..d226244
--- /dev/null
@@ -0,0 +1,38 @@
+#
+# (C) Copyright 2007
+# Heiko Schocher, DENX Software Engineering, hs@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
+#
+
+#
+# MUNICes board:
+#
+#      Valid values for TEXT_BASE are:
+#
+#      0xFFF00000   boot high (standard configuration)
+#
+
+sinclude $(TOPDIR)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+TEXT_BASE = 0xFFF00000
+endif
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board
diff --git a/board/munices/mt48lc16m16a2-75.h b/board/munices/mt48lc16m16a2-75.h
new file mode 100644 (file)
index 0000000..ffdf039
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * (C) Copyright 2004
+ * Mark Jonas, Freescale Semiconductor, mark.jonas@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
+ */
+
+#define SDRAM_DDR      0               /* is SDR */
+
+#if defined(CONFIG_MPC5200)
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x00CD0000
+#define SDRAM_CONTROL  0x504F0000
+#define SDRAM_CONFIG1  0xD2322800
+#define SDRAM_CONFIG2  0x8AD70000
+
+#elif defined(CONFIG_MGT5100)
+/* Settings for XLB = 66 MHz */
+#define SDRAM_MODE     0x008D0000
+#define SDRAM_CONTROL  0x504F0000
+#define SDRAM_CONFIG1  0xC2222600
+#define SDRAM_CONFIG2  0x88B70004
+#define SDRAM_ADDRSEL  0x02000000
+
+#else
+#error Neither CONFIG_MPC5200 or CONFIG_MGT5100 defined
+#endif
diff --git a/board/munices/munices.c b/board/munices/munices.c
new file mode 100644 (file)
index 0000000..395909d
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <mpc5xxx.h>
+#include <pci.h>
+
+#include "mt48lc16m16a2-75.h"
+
+#ifndef CFG_RAMBOOT
+static void sdram_start (int hi_addr)
+{
+       long hi_addr_bit = hi_addr ? 0x01000000 : 0;
+
+       /* unlock mode register */
+       *(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000000 | hi_addr_bit;
+       __asm__ volatile ("sync");
+
+       /* precharge all banks */
+       *(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000002 | hi_addr_bit;
+       __asm__ volatile ("sync");
+
+#if SDRAM_DDR
+       /* set mode register: extended mode */
+       *(vu_long *)MPC5XXX_SDRAM_MODE = SDRAM_EMODE;
+       __asm__ volatile ("sync");
+
+       /* set mode register: reset DLL */
+       *(vu_long *)MPC5XXX_SDRAM_MODE = SDRAM_MODE | 0x04000000;
+       __asm__ volatile ("sync");
+#endif
+
+       /* precharge all banks */
+       *(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000002 | hi_addr_bit;
+       __asm__ volatile ("sync");
+
+       /* auto refresh */
+       *(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | 0x80000004 | hi_addr_bit;
+       __asm__ volatile ("sync");
+
+       /* set mode register */
+       *(vu_long *)MPC5XXX_SDRAM_MODE = SDRAM_MODE;
+       __asm__ volatile ("sync");
+
+       /* normal operation */
+       *(vu_long *)MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | hi_addr_bit;
+       __asm__ volatile ("sync");
+}
+#endif
+
+/*
+ * ATTENTION: Although partially referenced initdram does NOT make real use
+ *            use of CFG_SDRAM_BASE. The code does not work if CFG_SDRAM_BASE
+ *            is something else than 0x00000000.
+ */
+
+long int initdram (int board_type)
+{
+       ulong dramsize = 0;
+       ulong dramsize2 = 0;
+#ifndef CFG_RAMBOOT
+       ulong test1, test2;
+
+       /* setup SDRAM chip selects */
+       *(vu_long *)MPC5XXX_SDRAM_CS0CFG = 0x0000001b;/* 256MB at 0x0 */
+       *(vu_long *)MPC5XXX_SDRAM_CS1CFG = 0x10000000;/* disabled */
+       __asm__ volatile ("sync");
+
+       /* setup config registers */
+       *(vu_long *)MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
+       *(vu_long *)MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
+       __asm__ volatile ("sync");
+
+#if SDRAM_DDR && SDRAM_TAPDELAY
+       /* set tap delay */
+       *(vu_long *)MPC5XXX_CDM_PORCFG = SDRAM_TAPDELAY;
+       __asm__ volatile ("sync");
+#endif
+
+       /* find RAM size using SDRAM CS0 only */
+       sdram_start(0);
+       test1 = (ulong )get_ram_size((long *)CFG_SDRAM_BASE, 0x10000000);
+       sdram_start(1);
+       test2 = (ulong )get_ram_size((long *)CFG_SDRAM_BASE, 0x10000000);
+       if (test1 > test2) {
+               sdram_start(0);
+               dramsize = test1;
+       } else {
+               dramsize = test2;
+       }
+
+       /* memory smaller than 1MB is impossible */
+       if (dramsize < (1 << 20)) {
+               dramsize = 0;
+       }
+
+       /* set SDRAM CS0 size according to the amount of RAM found */
+       if (dramsize > 0) {
+               *(vu_long *)MPC5XXX_SDRAM_CS0CFG = 0x13 + __builtin_ffs(dramsize >> 20) - 1;
+       } else {
+               *(vu_long *)MPC5XXX_SDRAM_CS0CFG = 0; /* disabled */
+       }
+
+#else /* CFG_RAMBOOT */
+
+       /* retrieve size of memory connected to SDRAM CS0 */
+       dramsize = *(vu_long *)MPC5XXX_SDRAM_CS0CFG & 0xFF;
+       if (dramsize >= 0x13) {
+               dramsize = (1 << (dramsize - 0x13)) << 20;
+       } else {
+               dramsize = 0;
+       }
+
+       /* retrieve size of memory connected to SDRAM CS1 */
+       dramsize2 = *(vu_long *)MPC5XXX_SDRAM_CS1CFG & 0xFF;
+       if (dramsize2 >= 0x13) {
+               dramsize2 = (1 << (dramsize2 - 0x13)) << 20;
+       } else {
+               dramsize2 = 0;
+       }
+
+#endif /* CFG_RAMBOOT */
+
+       return dramsize + dramsize2;
+}
+
+int checkboard (void)
+{
+       puts ("Board: MUNICes\n");
+       return 0;
+}
+
+#ifdef CONFIG_PCI
+static struct pci_controller hose;
+
+extern void pci_mpc5xxx_init(struct pci_controller *);
+
+void pci_init_board(void)
+{
+       pci_mpc5xxx_init(&hose);
+}
+#endif
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+}
+#endif
diff --git a/board/munices/u-boot.lds b/board/munices/u-boot.lds
new file mode 100644 (file)
index 0000000..20d000c
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(powerpc)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+SECTIONS
+{
+  /* 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/mpc5xxx/start.o        (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+    . = ALIGN(16);
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .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 (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index a04de3d85b1169040a03af79a13a28c70eb69915..85eadbee66504d677126487640bc902f0344804a 100644 (file)
@@ -133,7 +133,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8438f99f78b039286f979a3a0af5ef3fc620f371..f2f8afca18900e372ef8be16977806ebf17f3f6f 100644 (file)
@@ -53,6 +53,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 1d1669cdea0b7e910744eaddf74e24f6c1d56b25..46ed451ee7ae7ecd8a8daf065a511725603cbaa0 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index ca449181eba55d1a3e2562de635d34e5942a20dc..856204652cfe1df436682fe3144c4368fd5ea339 100644 (file)
@@ -117,7 +117,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b..9584c3358a3625cd338a5b0b623e0e388a258efe 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index b6e28f839d351399b82ec3a24328b5e813c8f1aa..e7f2863b73c5032113d1f23c9b8d1beffe7dd017 100644 (file)
@@ -128,7 +128,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9ee9ab599b638624895e619bcd6f16387642b208..cbb2839cc0298ab8335c50b2b34c9221e79ab92f 100644 (file)
@@ -72,7 +72,7 @@ void program_tlb(u32 phys_addr, u32 virt_addr, u32 size, u32 tlb_word2_i_value);
 
 void board_add_ram_info(int use_default)
 {
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
        u32 val;
        mfsdram(DDR0_22, val);
        val &= DDR0_22_CTRL_RAW_MASK;
index 6d255a94eaf24c3cb301ca199cad8b6a7b06f8ee..c517f7b556f3d1c5e5e3c446900e73efb6c2e0cc 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 317550dbad02a915592c18d3ea418fb9badace66..89b0a8209cc6b2ac4733419bb6e21b7bf8619206 100644 (file)
@@ -46,6 +46,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 8317f72d06d8a53a179fda2bcae721c18752907d..39646e6e85b3c6e0db710459a080a368d884d4b6 100644 (file)
@@ -50,6 +50,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b..9584c3358a3625cd338a5b0b623e0e388a258efe 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b..9584c3358a3625cd338a5b0b623e0e388a258efe 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index dc69db6ad0cb40c947ea59161fbbf2ac39d34122..6c7e68d67f54b83ce220f9e4347d88e8777891b0 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8ebb6519fffc35241ecee27a0ddc4629416ced07..a3de6ac61ab10f20c6e7997f08233eb31c291baf 100644 (file)
@@ -53,7 +53,7 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = . ;
 
 }
index 7099fc40de6fe2d54e167a363011f38bba0791c5..b055c90857993a1160c0f7b942668c9d0573949c 100644 (file)
@@ -119,7 +119,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index b6d16190fcd7de1921375c319d48d7b8a90d4456..e0c7920df36fd306b7aeebcbde7ceaf889230e41 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 710b2a2d6e60df7b2ed55352a92a537654f4863e..a4fcd1a9bb4916f6755ee71cf24fcb3071347fdf 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 1460adcdd802ba6c0cb965ca437b1242a2588e0e..aae716cb2d415f4bc7e756ae726047bd23fe1579 100644 (file)
@@ -54,6 +54,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 142450cdd5f5cc0617ab887bbd0ba7f822561269..9a34e46ee04eebb8ef6eaf7c75845cc713bc27e9 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 710b2a2d6e60df7b2ed55352a92a537654f4863e..a4fcd1a9bb4916f6755ee71cf24fcb3071347fdf 100644 (file)
@@ -47,6 +47,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 861873272b6196a71a7ab4685cf2d0e83126ed61..1e1c5590d77a6fed6185fbe0cb514b24f0e6d3cf 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index 5c8cd5a882b6aa7d41e500598418c545c55c4ed0..63cf6481dc0fcc6e31bff526ad00b2c165a67619 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 6506ccdcf36a72c1f8387e47d04e7f2232d40206..a4d1bdbad1d5390e72763a42a027b7125b4a4129 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index ade5d6e5b61b1919475efd66b06a2bdd8ebf611f..0a403abb1b2a1269889b426a07dfbcdd5fa73c57 100644 (file)
@@ -43,7 +43,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -75,10 +75,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -94,33 +94,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -128,69 +120,65 @@ tlb1_entry:
         * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
         * 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(0xfc000000), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(0xfc000000), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(0xfc000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(0xfc000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
        /*
@@ -201,10 +189,10 @@ tlb1_entry:
         * Likely it needs to be increased by two for these entries.
         */
 
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
        entry_end
index fbfc65a1e82257843c3ab9f59a5d0927f92c290a..9feaf55cd1a04e76d221740e34e2668ad0be1f9e 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index ade5d6e5b61b1919475efd66b06a2bdd8ebf611f..0a403abb1b2a1269889b426a07dfbcdd5fa73c57 100644 (file)
@@ -43,7 +43,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -75,10 +75,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -94,33 +94,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -128,69 +120,65 @@ tlb1_entry:
         * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
         * 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(0xfc000000), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(0xfc000000), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(0xfc000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(0xfc000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
        /*
@@ -201,10 +189,10 @@ tlb1_entry:
         * Likely it needs to be increased by two for these entries.
         */
 
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
        entry_end
index e946a8e512e224b0152193759f0176b2ce79133a..c68f05a3fc02d8b3107eaa4a6a9aa473f25edf40 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 0dfa8c000549340ad410323b11575f1557f162ca..23cb2734c465f262d6623faa9de7fef4bac5105b 100644 (file)
@@ -123,7 +123,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 4f04089c9450f5c581ef2d18cc87ad7460fd981a..0ad5c53a22255a7d006a13190fb16e1b262544a6 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/prodrive/alpr/init.o (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d89eb6cff2025c9af51772e660e593cfd215ec67..0f9a157fb1176662834caa17be73b75ab6704717 100644 (file)
@@ -126,7 +126,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 92bb740e453c3fe486e2239f2ace48abc49d60c5..7d1099eed1bedb27d7321f1f795e45090f837893 100644 (file)
@@ -68,19 +68,6 @@ SECTIONS
 
     cpu/ppc4xx/start.o (.text)
     board/prodrive/p3p440/init.o       (.text)
-    cpu/ppc4xx/kgdb.o  (.text)
-    cpu/ppc4xx/traps.o (.text)
-    cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
-    cpu/ppc4xx/cpu_init.o      (.text)
-    cpu/ppc4xx/speed.o (.text)
-    common/dlmalloc.o  (.text)
-    lib_generic/crc32.o                (.text)
-    lib_ppc/extable.o  (.text)
-    lib_generic/zlib.o         (.text)
-
-/*    . = env_offset;*/
-/*    common/environment.o(.text)*/
 
     *(.text)
     *(.fixup)
@@ -145,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f05f09344c2aaf5b704f374a6d7e9cf79da1b18e..638edbeeeff646bfedc7f4e6aff34edfb5d48e16 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 8f9cd8fa598f255a55a328f6302c20525756d168..d3b7c31ae95657023d10aa5b6215716e5ab3fe75 100644 (file)
@@ -88,7 +88,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -96,7 +96,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index 8f9cd8fa598f255a55a328f6302c20525756d168..d3b7c31ae95657023d10aa5b6215716e5ab3fe75 100644 (file)
@@ -88,7 +88,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -96,7 +96,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index 50e7f848e913913fe1759cf86a59d6f0880d1786..972e6e7207c9291aa053dbb1d4137c3debc40795 100644 (file)
@@ -74,7 +74,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index 2facd832e9b56dc33d04d845f4b6c6c54c484415..381b6b74635913583f16625abddfa885848475be 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 049f9901f71c51a853dc6e83957b069073630196..618a10c9a3cd837a79355a669a8c3e9363c1df8d 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8b06af78e47a91a0858ff7a04bd2b572dbda8596..aaec71827e261e2b6ea909640a70e19ffd1d2b63 100644 (file)
@@ -127,7 +127,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f7dc0709040af5dca7a1ae029497bca26d768c36..29fe58941b4b2ccebbde0467e8cef7819628a389 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    _sbss = .;
    *(.sbss) *(.scommon)
index 68ca85644ea60da218a81ec381b745f5f701abd6..d207b805ec2a81ae1079ff0d3de94ec01b90052d 100644 (file)
@@ -128,7 +128,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 049f9901f71c51a853dc6e83957b069073630196..618a10c9a3cd837a79355a669a8c3e9363c1df8d 100644 (file)
@@ -130,7 +130,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 70fc3a5d2799034dbc00711a89a4fb91fe9c70bc..5bcb112fb49518c98115a8470de50641381f893c 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9e9e99045ff5f51c9d440c624a81b74d709ee443..7776ec9f984a9e36b4589fe99e81df76ac84aadf 100644 (file)
@@ -72,7 +72,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -147,7 +147,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 47d80fae1b6bcfa5e0ea7541a46ac46745c54776..b934c8909f33cffc0d825f2c4a6f08fb15a6abff 100644 (file)
@@ -62,7 +62,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
index a17401af92546b32297474fd0c17d23acee74c97..c64c523c2a5c3959c7d7211a394eb396876fbf42 100644 (file)
@@ -72,7 +72,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -147,7 +147,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index fef4c4220cbc69c5be396f5ac9c69e69ea7db987..914ff9cd713b8af495fd474eb0c02628ccb5dbe6 100644 (file)
@@ -62,7 +62,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..3b797767240ee8f95bf6f052d9da5795ef92e7e7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 39fba61684ad513c0c7c5ce6a705769de8088666..642495a5c3a83ffb00e1f2f133babaaec5994ed6 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index eadf230983dc41dd5d655ac026995c7d69017643..527f7e4341269396e0546aee9dbc550ecbbf2c6f 100644 (file)
 #include <pci.h>
 #include <asm/mpc8349_pci.h>
 #include <i2c.h>
+#if defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#include <fdt_support.h>
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -323,26 +327,40 @@ pci_init_board(void)
 
 }
 
-#ifdef CONFIG_OF_FLAT_TREE
-void
-ft_pci_setup(void *blob, bd_t *bd)
+#if defined(CONFIG_OF_LIBFDT)
+void ft_pci_setup(void *blob, bd_t *bd)
 {
-               u32 *p;
-               int len;
-
-               p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
-               if (p != NULL) {
-                       p[0] = pci_hose[0].first_busno;
-                       p[1] = pci_hose[0].last_busno;
+       int nodeoffset;
+       int tmp[2];
+       const char *path;
+
+       nodeoffset = fdt_path_offset(blob, "/aliases");
+       if (nodeoffset >= 0) {
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
                }
-
 #ifdef CONFIG_MPC83XX_PCI2
-       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8600/bus-range", &len);
-       if (p != NULL) {
-               p[0] = pci_hose[1].first_busno;
-               p[1] = pci_hose[1].last_busno;
-       }
+               path = fdt_getprop(blob, nodeoffset, "pci1", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
 #endif
+       }
 }
-#endif /* CONFIG_OF_FLAT_TREE */
+#endif /* CONFIG_OF_LIBFDT */
 #endif /* CONFIG_PCI */
index 86166ea4439b6bb6e060a10018f82fddfc8f3ffc..5446c205e10656fbeac83a5efd0e2a0e4d873fb0 100644 (file)
 #include <i2c.h>
 #include <spd.h>
 #include <miiphy.h>
-#include <command.h>
 #if defined(CONFIG_SPD_EEPROM)
 #include <spd_sdram.h>
 #endif
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
+#if defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
 #endif
 
 int fixed_sdram(void);
@@ -235,348 +234,12 @@ void sdram_init(void)
 }
 #endif
 
-#if defined(CONFIG_DDR_ECC) && defined(CONFIG_DDR_ECC_CMD)
-/*
- * ECC user commands
- */
-void ecc_print_status(void)
-{
-       volatile immap_t *immap = (immap_t *)CFG_IMMR;
-       volatile ddr83xx_t *ddr = &immap->ddr;
-
-       printf("\nECC mode: %s\n\n", (ddr->sdram_cfg & SDRAM_CFG_ECC_EN) ? "ON" : "OFF");
-
-       /* Interrupts */
-       printf("Memory Error Interrupt Enable:\n");
-       printf("  Multiple-Bit Error Interrupt Enable: %d\n",
-                       (ddr->err_int_en & ECC_ERR_INT_EN_MBEE) ? 1 : 0);
-       printf("  Single-Bit Error Interrupt Enable: %d\n",
-                       (ddr->err_int_en & ECC_ERR_INT_EN_SBEE) ? 1 : 0);
-       printf("  Memory Select Error Interrupt Enable: %d\n\n",
-                       (ddr->err_int_en & ECC_ERR_INT_EN_MSEE) ? 1 : 0);
-
-       /* Error disable */
-       printf("Memory Error Disable:\n");
-       printf("  Multiple-Bit Error Disable: %d\n",
-                       (ddr->err_disable & ECC_ERROR_DISABLE_MBED) ? 1 : 0);
-       printf("  Sinle-Bit Error Disable: %d\n",
-                       (ddr->err_disable & ECC_ERROR_DISABLE_SBED) ? 1 : 0);
-       printf("  Memory Select Error Disable: %d\n\n",
-                       (ddr->err_disable & ECC_ERROR_DISABLE_MSED) ? 1 : 0);
-
-       /* Error injection */
-       printf("Memory Data Path Error Injection Mask High/Low: %08lx %08lx\n",
-                       ddr->data_err_inject_hi, ddr->data_err_inject_lo);
-
-       printf("Memory Data Path Error Injection Mask ECC:\n");
-       printf("  ECC Mirror Byte: %d\n",
-                       (ddr->ecc_err_inject & ECC_ERR_INJECT_EMB) ? 1 : 0);
-       printf("  ECC Injection Enable: %d\n",
-                       (ddr->ecc_err_inject & ECC_ERR_INJECT_EIEN) ? 1 : 0);
-       printf("  ECC Error Injection Mask: 0x%02x\n\n",
-                       ddr->ecc_err_inject & ECC_ERR_INJECT_EEIM);
-
-       /* SBE counter/threshold */
-       printf("Memory Single-Bit Error Management (0..255):\n");
-       printf("  Single-Bit Error Threshold: %d\n",
-                       (ddr->err_sbe & ECC_ERROR_MAN_SBET) >> ECC_ERROR_MAN_SBET_SHIFT);
-       printf("  Single-Bit Error Counter: %d\n\n",
-                       (ddr->err_sbe & ECC_ERROR_MAN_SBEC) >> ECC_ERROR_MAN_SBEC_SHIFT);
-
-       /* Error detect */
-       printf("Memory Error Detect:\n");
-       printf("  Multiple Memory Errors: %d\n",
-                       (ddr->err_detect & ECC_ERROR_DETECT_MME) ? 1 : 0);
-       printf("  Multiple-Bit Error: %d\n",
-                       (ddr->err_detect & ECC_ERROR_DETECT_MBE) ? 1 : 0);
-       printf("  Single-Bit Error: %d\n",
-                       (ddr->err_detect & ECC_ERROR_DETECT_SBE) ? 1 : 0);
-       printf("  Memory Select Error: %d\n\n",
-                       (ddr->err_detect & ECC_ERROR_DETECT_MSE) ? 1 : 0);
-
-       /* Capture data */
-       printf("Memory Error Address Capture: 0x%08lx\n", ddr->capture_address);
-       printf("Memory Data Path Read Capture High/Low: %08lx %08lx\n",
-                       ddr->capture_data_hi, ddr->capture_data_lo);
-       printf("Memory Data Path Read Capture ECC: 0x%02x\n\n",
-               ddr->capture_ecc & CAPTURE_ECC_ECE);
-
-       printf("Memory Error Attributes Capture:\n");
-       printf("  Data Beat Number: %d\n",
-                       (ddr->capture_attributes & ECC_CAPT_ATTR_BNUM) >> ECC_CAPT_ATTR_BNUM_SHIFT);
-       printf("  Transaction Size: %d\n",
-                       (ddr->capture_attributes & ECC_CAPT_ATTR_TSIZ) >> ECC_CAPT_ATTR_TSIZ_SHIFT);
-       printf("  Transaction Source: %d\n",
-                       (ddr->capture_attributes & ECC_CAPT_ATTR_TSRC) >> ECC_CAPT_ATTR_TSRC_SHIFT);
-       printf("  Transaction Type: %d\n",
-                       (ddr->capture_attributes & ECC_CAPT_ATTR_TTYP) >> ECC_CAPT_ATTR_TTYP_SHIFT);
-       printf("  Error Information Valid: %d\n\n",
-                       ddr->capture_attributes & ECC_CAPT_ATTR_VLD);
-}
-
-int do_ecc ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
 {
-       volatile immap_t *immap = (immap_t *)CFG_IMMR;
-       volatile ddr83xx_t *ddr = &immap->ddr;
-       volatile u32 val;
-       u64 *addr, count, val64;
-       register u64 *i;
-
-       if (argc > 4) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
-
-       if (argc == 2) {
-               if (strcmp(argv[1], "status") == 0) {
-                       ecc_print_status();
-                       return 0;
-               } else if (strcmp(argv[1], "captureclear") == 0) {
-                       ddr->capture_address = 0;
-                       ddr->capture_data_hi = 0;
-                       ddr->capture_data_lo = 0;
-                       ddr->capture_ecc = 0;
-                       ddr->capture_attributes = 0;
-                       return 0;
-               }
-       }
-
-       if (argc == 3) {
-               if (strcmp(argv[1], "sbecnt") == 0) {
-                       val = simple_strtoul(argv[2], NULL, 10);
-                       if (val > 255) {
-                               printf("Incorrect Counter value, should be 0..255\n");
-                               return 1;
-                       }
-
-                       val = (val << ECC_ERROR_MAN_SBEC_SHIFT);
-                       val |= (ddr->err_sbe & ECC_ERROR_MAN_SBET);
-
-                       ddr->err_sbe = val;
-                       return 0;
-               } else if (strcmp(argv[1], "sbethr") == 0) {
-                       val = simple_strtoul(argv[2], NULL, 10);
-                       if (val > 255) {
-                               printf("Incorrect Counter value, should be 0..255\n");
-                               return 1;
-                       }
-
-                       val = (val << ECC_ERROR_MAN_SBET_SHIFT);
-                       val |= (ddr->err_sbe & ECC_ERROR_MAN_SBEC);
-
-                       ddr->err_sbe = val;
-                       return 0;
-               } else if (strcmp(argv[1], "errdisable") == 0) {
-                       val = ddr->err_disable;
-
-                       if (strcmp(argv[2], "+sbe") == 0) {
-                               val |= ECC_ERROR_DISABLE_SBED;
-                       } else if (strcmp(argv[2], "+mbe") == 0) {
-                               val |= ECC_ERROR_DISABLE_MBED;
-                       } else if (strcmp(argv[2], "+mse") == 0) {
-                               val |= ECC_ERROR_DISABLE_MSED;
-                       } else if (strcmp(argv[2], "+all") == 0) {
-                               val |= (ECC_ERROR_DISABLE_SBED |
-                                       ECC_ERROR_DISABLE_MBED |
-                                       ECC_ERROR_DISABLE_MSED);
-                       } else if (strcmp(argv[2], "-sbe") == 0) {
-                               val &= ~ECC_ERROR_DISABLE_SBED;
-                       } else if (strcmp(argv[2], "-mbe") == 0) {
-                               val &= ~ECC_ERROR_DISABLE_MBED;
-                       } else if (strcmp(argv[2], "-mse") == 0) {
-                               val &= ~ECC_ERROR_DISABLE_MSED;
-                       } else if (strcmp(argv[2], "-all") == 0) {
-                               val &= ~(ECC_ERROR_DISABLE_SBED |
-                                       ECC_ERROR_DISABLE_MBED |
-                                       ECC_ERROR_DISABLE_MSED);
-                       } else {
-                               printf("Incorrect err_disable field\n");
-                               return 1;
-                       }
-
-                       ddr->err_disable = val;
-                       __asm__ __volatile__ ("sync");
-                       __asm__ __volatile__ ("isync");
-                       return 0;
-               } else if (strcmp(argv[1], "errdetectclr") == 0) {
-                       val = ddr->err_detect;
-
-                       if (strcmp(argv[2], "mme") == 0) {
-                               val |= ECC_ERROR_DETECT_MME;
-                       } else if (strcmp(argv[2], "sbe") == 0) {
-                               val |= ECC_ERROR_DETECT_SBE;
-                       } else if (strcmp(argv[2], "mbe") == 0) {
-                               val |= ECC_ERROR_DETECT_MBE;
-                       } else if (strcmp(argv[2], "mse") == 0) {
-                               val |= ECC_ERROR_DETECT_MSE;
-                       } else if (strcmp(argv[2], "all") == 0) {
-                               val |= (ECC_ERROR_DETECT_MME |
-                                       ECC_ERROR_DETECT_MBE |
-                                       ECC_ERROR_DETECT_SBE |
-                                       ECC_ERROR_DETECT_MSE);
-                       } else {
-                               printf("Incorrect err_detect field\n");
-                               return 1;
-                       }
-
-                       ddr->err_detect = val;
-                       return 0;
-               } else if (strcmp(argv[1], "injectdatahi") == 0) {
-                       val = simple_strtoul(argv[2], NULL, 16);
-
-                       ddr->data_err_inject_hi = val;
-                       return 0;
-               } else if (strcmp(argv[1], "injectdatalo") == 0) {
-                       val = simple_strtoul(argv[2], NULL, 16);
-
-                       ddr->data_err_inject_lo = val;
-                       return 0;
-               } else if (strcmp(argv[1], "injectecc") == 0) {
-                       val = simple_strtoul(argv[2], NULL, 16);
-                       if (val > 0xff) {
-                               printf("Incorrect ECC inject mask, should be 0x00..0xff\n");
-                               return 1;
-                       }
-                       val |= (ddr->ecc_err_inject & ~ECC_ERR_INJECT_EEIM);
-
-                       ddr->ecc_err_inject = val;
-                       return 0;
-               } else if (strcmp(argv[1], "inject") == 0) {
-                       val = ddr->ecc_err_inject;
-
-                       if (strcmp(argv[2], "en") == 0)
-                               val |= ECC_ERR_INJECT_EIEN;
-                       else if (strcmp(argv[2], "dis") == 0)
-                               val &= ~ECC_ERR_INJECT_EIEN;
-                       else
-                               printf("Incorrect command\n");
-
-                       ddr->ecc_err_inject = val;
-                       __asm__ __volatile__ ("sync");
-                       __asm__ __volatile__ ("isync");
-                       return 0;
-               } else if (strcmp(argv[1], "mirror") == 0) {
-                       val = ddr->ecc_err_inject;
-
-                       if (strcmp(argv[2], "en") == 0)
-                               val |= ECC_ERR_INJECT_EMB;
-                       else if (strcmp(argv[2], "dis") == 0)
-                               val &= ~ECC_ERR_INJECT_EMB;
-                       else
-                               printf("Incorrect command\n");
-
-                       ddr->ecc_err_inject = val;
-                       return 0;
-               }
-       }
-
-       if (argc == 4) {
-               if (strcmp(argv[1], "test") == 0) {
-                       addr = (u64 *)simple_strtoul(argv[2], NULL, 16);
-                       count = simple_strtoul(argv[3], NULL, 16);
-
-                       if ((u32)addr % 8) {
-                               printf("Address not alligned on double word boundary\n");
-                               return 1;
-                       }
-
-                       disable_interrupts();
-                       icache_disable();
-
-                       for (i = addr; i < addr + count; i++) {
-                               /* enable injects */
-                               ddr->ecc_err_inject |= ECC_ERR_INJECT_EIEN;
-                               __asm__ __volatile__ ("sync");
-                               __asm__ __volatile__ ("isync");
-
-                               /* write memory location injecting errors */
-                               *i = 0x1122334455667788ULL;
-                               __asm__ __volatile__ ("sync");
-
-                               /* disable injects */
-                               ddr->ecc_err_inject &= ~ECC_ERR_INJECT_EIEN;
-                               __asm__ __volatile__ ("sync");
-                               __asm__ __volatile__ ("isync");
-
-                               /* read data, this generates ECC error */
-                               val64 = *i;
-                               __asm__ __volatile__ ("sync");
-
-                               /* disable errors for ECC */
-                               ddr->err_disable |= ~ECC_ERROR_ENABLE;
-                               __asm__ __volatile__ ("sync");
-                               __asm__ __volatile__ ("isync");
-
-                               /* re-initialize memory, write the location again
-                                * NOT injecting errors this time */
-                               *i = 0xcafecafecafecafeULL;
-                               __asm__ __volatile__ ("sync");
-
-                               /* enable errors for ECC */
-                               ddr->err_disable &= ECC_ERROR_ENABLE;
-                               __asm__ __volatile__ ("sync");
-                               __asm__ __volatile__ ("isync");
-                       }
-
-                       icache_enable();
-                       enable_interrupts();
-
-                       return 0;
-               }
-       }
-
-       printf ("Usage:\n%s\n", cmdtp->usage);
-       return 1;
-}
-
-U_BOOT_CMD(
-       ecc,     4,     0,      do_ecc,
-       "ecc     - support for DDR ECC features\n",
-       "status              - print out status info\n"
-       "ecc captureclear        - clear capture regs data\n"
-       "ecc sbecnt <val>        - set Single-Bit Error counter\n"
-       "ecc sbethr <val>        - set Single-Bit Threshold\n"
-       "ecc errdisable <flag>   - clear/set disable Memory Error Disable, flag:\n"
-       "  [-|+]sbe - Single-Bit Error\n"
-       "  [-|+]mbe - Multiple-Bit Error\n"
-       "  [-|+]mse - Memory Select Error\n"
-       "  [-|+]all - all errors\n"
-       "ecc errdetectclr <flag> - clear Memory Error Detect, flag:\n"
-       "  mme - Multiple Memory Errors\n"
-       "  sbe - Single-Bit Error\n"
-       "  mbe - Multiple-Bit Error\n"
-       "  mse - Memory Select Error\n"
-       "  all - all errors\n"
-       "ecc injectdatahi <hi>  - set Memory Data Path Error Injection Mask High\n"
-       "ecc injectdatalo <lo>  - set Memory Data Path Error Injection Mask Low\n"
-       "ecc injectecc <ecc>    - set ECC Error Injection Mask\n"
-       "ecc inject <en|dis>    - enable/disable error injection\n"
-       "ecc mirror <en|dis>    - enable/disable mirror byte\n"
-       "ecc test <addr> <cnt>  - test mem region:\n"
-       "  - enables injects\n"
-       "  - writes pattern injecting errors\n"
-       "  - disables injects\n"
-       "  - reads pattern back, generates error\n"
-       "  - re-inits memory"
-);
-#endif /* if defined(CONFIG_DDR_ECC) && defined(CONFIG_DDR_ECC_CMD) */
-
-#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);
 #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
diff --git a/board/sbc8548/Makefile b/board/sbc8548/Makefile
new file mode 100644 (file)
index 0000000..1596525
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# (C) Copyright 2004-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# (C) Copyright 2004 Wind River Systems Inc <www.windriver.com>.
+# Added support for Wind River SBC8560 board
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o
+SOBJS  := init.o
+#SOBJS :=
+
+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/sbc8548/config.mk b/board/sbc8548/config.mk
new file mode 100644 (file)
index 0000000..c9fa3ad
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# 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
+#
+
+#
+# sbc8548 board
+#
+ifndef TEXT_BASE
+TEXT_BASE = 0xfff80000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8548=1
diff --git a/board/sbc8548/init.S b/board/sbc8548/init.S
new file mode 100644 (file)
index 0000000..cafa214
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2007 Wind River Systemes, Inc. <www.windriver.com>
+ * Copyright 2007 Embedded Specialties, Inc.
+ *
+ * Copyright 2004 Freescale Semiconductor.
+ * Copyright 2002,2003, Motorola Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
+#include <config.h>
+#include <mpc85xx.h>
+
+
+/*
+ * TLB0 and TLB1 Entries
+ *
+ * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
+ * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
+ * these TLB entries are established.
+ *
+ * The TLB entries for DDR are dynamically setup in spd_sdram()
+ * and use TLB1 Entries 8 through 15 as needed according to the
+ * size of DDR memory.
+ *
+ * MAS0: tlbsel, esel, nv
+ * MAS1: valid, iprot, tid, ts, tsize
+ * MAS2: epn, x0, x1, w, i, m, g, e
+ * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
+ */
+
+#define        entry_start \
+       mflr    r1      ;       \
+       bl      0f      ;
+
+#define        entry_end \
+0:     mflr    r0      ;       \
+       mtlr    r1      ;       \
+       blr             ;
+
+       .section        .bootpg, "ax"
+       .globl  tlb1_entry
+
+tlb1_entry:
+       entry_start
+
+       /*
+        * Number of TLB0 and TLB1 entries in the following table
+        */
+       .long 13
+
+#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
+       /*
+        * TLB0         4K      Non-cacheable, guarded
+        * 0xff700000   4K      Initial CCSRBAR mapping
+        *
+        * This ends up at a TLB0 Index==0 entry, and must not collide
+        * with other TLB0 Entries.
+        */
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+#else
+#error("Update the number of table entries in tlb1_entry")
+#endif
+
+       /*
+        * TLB0         16K     Cacheable, non-guarded
+        * 0xe4010000   16K     Temporary Global data for initialization
+        *
+        * Use four 4K TLB0 entries.  These entries must be cacheable
+        * as they provide the bootstrap memory before the memory
+        * controler and real memory have been configured.
+        *
+        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
+        * and must not collide with other TLB0 entries.
+        */
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff800000   16M     TLB for 8MB FLASH
+        * Out of reset this entry is only 4K.
+        */
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 3:       256M Cacheable, non-guarded
+        * 0x0          256M DDR SDRAM
+        */
+       #if !defined(CONFIG_SPD_EEPROM)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+       #endif
+
+       /*
+        * TLB 4:       64M     Non-cacheable, guarded
+        * 0xe0000000   1M      CCSRBAR
+        * 0xe2000000   16M     PCI1 IO
+        */
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 5:       64M     Cacheable, non-guarded
+        * 0xf0000000   64M     LBC SDRAM
+        */
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       /*
+        * TLB 6:       16M     Cacheable, non-guarded
+        * 0xf8000000   1M      7-segment LED display
+        * 0xf8100000   1M      User switches
+        * 0xf8300000   1M      Board revision
+        * 0xf8b00000   1M      EEPROM
+        */
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_EPLD_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_EPLD_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       entry_end
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000 0x0fff_ffff     DDR                     256M
+ * 0x8000_0000 0x9fff_ffff     PCI1 MEM                512M
+ * 0xe000_0000 0xe000_ffff     CCSR                    1M
+ * 0xe200_0000 0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000 0xf7ff_ffff     SDRAM                   128M
+ * 0xf8b0_0000 0xf80f_ffff     EEPROM                  1M
+ * 0xfb80_0000 0xff7f_ffff     FLASH (2nd bank)        64M
+ * 0xff80_0000 0xffff_ffff     FLASH (boot bank)       8M
+ *
+ * Notes:
+ *     CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *     If flash is 8M at default position (last 8M), no LAW needed.
+ *
+ *     The defines below are 1-off of the actual LAWAR0 usage.
+ *     So LAWAR3 define uses the LAWAR4 register in the ECM.
+ */
+
+
+#if !defined(CONFIG_SPD_EEPROM)
+       #define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
+       #define LAWAR0  (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
+#else
+       #define LAWBAR0 0
+       #define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M)) & ~LAWAR_EN)
+#endif
+
+#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
+#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
+
+#define LAWBAR2 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
+#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M))
+
+/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+#define LAWBAR3 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
+#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+       .section .bootpg, "ax"
+       .globl  law_entry
+
+law_entry:
+       entry_start
+       .long 4
+       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
+       entry_end
diff --git a/board/sbc8548/sbc8548.c b/board/sbc8548/sbc8548.c
new file mode 100644 (file)
index 0000000..65052e6
--- /dev/null
@@ -0,0 +1,568 @@
+/*
+ * Copyright 2007 Wind River Systemes, Inc. <www.windriver.com>
+ * Copyright 2007 Embedded Specialties, Inc.
+ *
+ * Copyright 2004, 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 <asm/immap_fsl_pci.h>
+#include <spd.h>
+#include <miiphy.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern long int spd_sdram(void);
+
+void local_bus_init(void);
+void sdram_init(void);
+long int fixed_sdram (void);
+
+int board_early_init_f (void)
+{
+       return 0;
+}
+
+int checkboard (void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR);
+
+       printf ("Board: Wind River SBC8548 Rev. 0x%01x\n",
+                       (volatile)(*(u_char *)CFG_BD_REV) >> 4);
+
+       /*
+        * Initialize local bus.
+        */
+       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.
+        */
+       gur->tsec34ioovcr = 0xe7e0;     /*  1110 0111 1110 0xxx */
+
+       ecm->eedr = 0xffffffff;         /* clear ecm errors */
+       ecm->eeer = 0xffffffff;         /* enable ecm errors */
+       return 0;
+}
+
+long int
+initdram(int board_type)
+{
+       long dram_size = 0;
+
+       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 = (void *)(CFG_MPC85xx_GUTS_ADDR);
+
+               gur->ddrdllcr = 0x81000000;
+               asm("sync;isync;msync");
+               udelay(200);
+       }
+#endif
+
+#if defined(CONFIG_SPD_EEPROM)
+       dram_size = spd_sdram ();
+#else
+       dram_size = fixed_sdram ();
+#endif
+
+#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 ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+       volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
+
+       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");
+
+       lbc->ltesr = 0xffffffff;        /* Clear LBC error interrupts */
+       lbc->lteir = 0xffffffff;        /* Enable LBC error interrupts */
+}
+
+/*
+ * Initialize SDRAM memory on the Local Bus.
+ */
+void
+sdram_init(void)
+{
+#if defined(CFG_OR3_PRELIM) && defined(CFG_BR3_PRELIM)
+
+       uint idx;
+       volatile ccsr_lbc_t *lbc = (void *)(CFG_MPC85xx_LBC_ADDR);
+       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->or3 = CFG_OR3_PRELIM;
+       asm("msync");
+
+       lbc->br3 = CFG_BR3_PRELIM;
+       asm("msync");
+
+       lbc->lbcr = CFG_LBC_LBCR;
+       asm("msync");
+
+
+       lbc->lsrt = CFG_LBC_LSRT;
+       lbc->mrtpr = CFG_LBC_MRTPR;
+       asm("msync");
+
+       /*
+        * MPC8548 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_SPD_EEPROM)
+/*************************************************************************
+ *  fixed_sdram init -- doesn't use serial presence detect.
+ *  assumes 256MB DDR2 SDRAM SODIMM, without ECC, running at DDR400 speed.
+ ************************************************************************/
+long int fixed_sdram (void)
+{
+    #define CFG_DDR_CONTROL 0xc300c000
+
+       volatile ccsr_ddr_t *ddr = (void *)(CFG_MPC85xx_DDR_ADDR);
+
+       ddr->cs0_bnds           = 0x0000007f;
+       ddr->cs1_bnds           = 0x008000ff;
+       ddr->cs2_bnds           = 0x00000000;
+       ddr->cs3_bnds           = 0x00000000;
+       ddr->cs0_config         = 0x80010101;
+       ddr->cs1_config         = 0x80010101;
+       ddr->cs2_config         = 0x00000000;
+       ddr->cs3_config         = 0x00000000;
+       ddr->ext_refrec         = 0x00000000;
+       ddr->timing_cfg_0       = 0x00220802;
+       ddr->timing_cfg_1       = 0x38377322;
+       ddr->timing_cfg_2       = 0x0fa044C7;
+       ddr->sdram_cfg          = 0x4300C000;
+       ddr->sdram_cfg_2        = 0x24401000;
+       ddr->sdram_mode         = 0x23C00542;
+       ddr->sdram_mode_2       = 0x00000000;
+       ddr->sdram_interval     = 0x05080100;
+       ddr->sdram_md_cntl      = 0x00000000;
+       ddr->sdram_data_init    = 0x00000000;
+       ddr->sdram_clk_cntl     = 0x03800000;
+       asm("sync;isync;msync");
+       udelay(500);
+
+       #if defined (CONFIG_DDR_ECC)
+         /* Enable ECC checking */
+         ddr->sdram_cfg = (CFG_DDR_CONTROL | 0x20000000);
+       #else
+         ddr->sdram_cfg = CFG_DDR_CONTROL;
+       #endif
+
+       return CFG_SDRAM_SIZE * 1024 * 1024;
+}
+#endif
+
+#if defined(CONFIG_PCI) || defined(CONFIG_PCI1)
+/* For some reason the Tundra PCI bridge shows up on itself as a
+ * different device.  Work around that by refusing to configure it.
+ */
+void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_table *tab) { }
+
+static struct pci_config_table pci_sbc8548_config_table[] = {
+       {0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},
+       {0x1106, 0x0686, PCI_ANY_ID, 1, VIA_ID, 0, mpc85xx_config_via, {0,0,0}},
+       {0x1106, 0x0571, PCI_ANY_ID, 1, VIA_ID, 1,
+               mpc85xx_config_via_usbide, {0,0,0}},
+       {0x1105, 0x3038, PCI_ANY_ID, 1, VIA_ID, 2,
+               mpc85xx_config_via_usb, {0,0,0}},
+       {0x1106, 0x3038, PCI_ANY_ID, 1, VIA_ID, 3,
+               mpc85xx_config_via_usb2, {0,0,0}},
+       {0x1106, 0x3058, PCI_ANY_ID, 1, VIA_ID, 5,
+               mpc85xx_config_via_power, {0,0,0}},
+       {0x1106, 0x3068, PCI_ANY_ID, 1, VIA_ID, 6,
+               mpc85xx_config_via_ac97, {0,0,0}},
+       {},
+};
+
+static struct pci_controller pci1_hose = {
+       config_table: pci_sbc8548_config_table};
+#endif /* CONFIG_PCI */
+
+#ifdef CONFIG_PCI2
+static struct pci_controller pci2_hose;
+#endif /* CONFIG_PCI2 */
+
+#ifdef CONFIG_PCIE1
+static struct pci_controller pcie1_hose;
+#endif /* CONFIG_PCIE1 */
+
+int first_free_busno=0;
+
+void
+pci_init_board(void)
+{
+       volatile ccsr_gur_t *gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+
+#ifdef CONFIG_PCI1
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCI1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pci1_hose;
+       struct pci_config_table *table;
+
+       uint pci_32 = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;      /* PORDEVSR[15] */
+       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
+       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+
+       uint pci_agent = (host_agent == 3) || (host_agent == 4 ) || (host_agent == 6);
+
+       uint pci_speed = get_clock_freq ();     /* PCI PSPEED in [4:5] */
+
+       if (!(gur->devdisr & MPC85xx_DEVDISR_PCI1)) {
+               printf ("    PCI: %d bit, %s MHz, %s, %s, %s\n",
+                       (pci_32) ? 32 : 64,
+                       (pci_speed == 33333000) ? "33" :
+                       (pci_speed == 66666000) ? "66" : "unknown",
+                       pci_clk_sel ? "sync" : "async",
+                       pci_agent ? "agent" : "host",
+                       pci_arb ? "arbiter" : "external-arbiter"
+                       );
+
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCI1_MEM_BASE,
+                              CFG_PCI1_MEM_PHYS,
+                              CFG_PCI1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCI1_IO_BASE,
+                              CFG_PCI1_IO_PHYS,
+                              CFG_PCI1_IO_SIZE,
+                              PCI_REGION_IO);
+               hose->region_count = 3;
+
+               /* relocate config table pointers */
+               hose->config_table = \
+                       (struct pci_config_table *)((uint)hose->config_table + gd->reloc_off);
+               for (table = hose->config_table; table && table->vendor; table++)
+                       table->config_device += gd->reloc_off;
+
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               first_free_busno=hose->last_busno+1;
+               printf ("PCI on bus %02x - %02x\n",hose->first_busno,hose->last_busno);
+#ifdef CONFIG_PCIX_CHECK
+               if (!(gur->pordevsr & PORDEVSR_PCI)) {
+                       /* PCI-X init */
+                       if (CONFIG_SYS_CLK_FREQ < 66000000)
+                               printf("PCI-X will only work at 66 MHz\n");
+
+                       reg16 = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ
+                               | PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E;
+                       pci_hose_write_config_word(hose, bus, PCIX_COMMAND, reg16);
+               }
+#endif
+       } else {
+               printf ("    PCI: disabled\n");
+       }
+}
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+#endif
+
+#ifdef CONFIG_PCI2
+{
+       uint pci2_clk_sel = gur->porpllsr & 0x4000;     /* PORPLLSR[17] */
+       uint pci_dual = get_pci_dual ();        /* PCI DUAL in CM_PCI[3] */
+       if (pci_dual) {
+               printf ("    PCI2: 32 bit, 66 MHz, %s\n",
+                       pci2_clk_sel ? "sync" : "async");
+       } else {
+               printf ("    PCI2: disabled\n");
+       }
+}
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCI2; /* disable */
+#endif /* CONFIG_PCI2 */
+
+#ifdef CONFIG_PCIE1
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CFG_PCIE1_ADDR;
+       extern void fsl_pci_init(struct pci_controller *hose);
+       struct pci_controller *hose = &pcie1_hose;
+       int pcie_ep =  (host_agent == 0) || (host_agent == 2 ) || (host_agent == 3);
+
+       int pcie_configured  = io_sel >= 1;
+
+       if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){
+               printf ("\n    PCIE connected to slot as %s (base address %x)",
+                       pcie_ep ? "End Point" : "Root Complex",
+                       (uint)pci);
+
+               if (pci->pme_msg_det) {
+                       pci->pme_msg_det = 0xffffffff;
+                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
+               }
+               printf ("\n");
+
+               /* inbound */
+               pci_set_region(hose->regions + 0,
+                              CFG_PCI_MEMORY_BUS,
+                              CFG_PCI_MEMORY_PHYS,
+                              CFG_PCI_MEMORY_SIZE,
+                              PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+               /* outbound memory */
+               pci_set_region(hose->regions + 1,
+                              CFG_PCIE1_MEM_BASE,
+                              CFG_PCIE1_MEM_PHYS,
+                              CFG_PCIE1_MEM_SIZE,
+                              PCI_REGION_MEM);
+
+               /* outbound io */
+               pci_set_region(hose->regions + 2,
+                              CFG_PCIE1_IO_BASE,
+                              CFG_PCIE1_IO_PHYS,
+                              CFG_PCIE1_IO_SIZE,
+                              PCI_REGION_IO);
+
+               hose->region_count = 3;
+
+               hose->first_busno=first_free_busno;
+               pci_setup_indirect(hose, (int) &pci->cfg_addr, (int) &pci->cfg_data);
+
+               fsl_pci_init(hose);
+               printf ("PCIE on bus %d - %d\n",hose->first_busno,hose->last_busno);
+
+               first_free_busno=hose->last_busno+1;
+
+       } else {
+               printf ("    PCIE: disabled\n");
+       }
+ }
+#else
+       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+#endif
+
+}
+
+int last_stage_init(void)
+{
+       return 0;
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_pci_setup(void *blob, bd_t *bd)
+{
+       int node, tmp[2];
+       const char *path;
+
+       node = fdt_path_offset(blob, "/aliases");
+       tmp[0] = 0;
+       if (node >= 0) {
+#ifdef CONFIG_PCI1
+               path = fdt_getprop(blob, node, "pci0", NULL);
+               if (path) {
+                       tmp[1] = pci1_hose.last_busno - pci1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+#ifdef CONFIG_PCIE1
+               path = fdt_getprop(blob, node, "pci1", NULL);
+               if (path) {
+                       tmp[1] = pcie1_hose.last_busno - pcie1_hose.first_busno;
+                       do_fixup_by_path(blob, path, "bus-range", &tmp, 8, 1);
+               }
+#endif
+       }
+}
+#endif
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+#ifdef CONFIG_PCI
+       ft_pci_setup(blob, bd);
+#endif
+}
+#endif
diff --git a/board/sbc8548/u-boot.lds b/board/sbc8548/u-boot.lds
new file mode 100644 (file)
index 0000000..8e301d4
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * 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
+{
+  .resetvec 0xFFFFFFFC :
+  {
+    *(.resetvec)
+  } = 0xffff
+
+  .bootpg 0xFFFFF000 :
+  {
+    cpu/mpc85xx/start.o        (.bootpg)
+    board/sbc8548/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/sbc8548/init.o (.text)
+    cpu/mpc85xx/traps.o (.text)
+    cpu/mpc85xx/interrupts.o (.text)
+    cpu/mpc85xx/cpu_init.o (.text)
+    cpu/mpc85xx/cpu.o (.text)
+    drivers/net/tsec.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 (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 3d8d180d84992ea5dd9ef90171428a6886c4e98b..95cb85abf774108c50c805e3656501140bcafde4 100644 (file)
@@ -97,69 +97,69 @@ tlb1_entry:
 
 /* TLB for CCSRBAR (IMMR) */
 
-       .long TLB1_MAS0(1,1,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,1,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
 /* TLB for Local Bus stuff, just map the whole 512M */
 /* note that the LBC SDRAM is cache-inhibit and guarded, like everything else */
 
-       .long TLB1_MAS0(1,2,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(((0xe0000000>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((0xe0000000>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,2,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(0xe0000000,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(0xe0000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long TLB1_MAS0(1,3,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(((0xf0000000>>12)&0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((0xf0000000>>12)&0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,3,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(0xf0000000,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(0xf0000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
-       .long TLB1_MAS0(1,4,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,5,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2((((CFG_DDR_SDRAM_BASE+0x10000000)>>12) & 0xfffff),0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3((((CFG_DDR_SDRAM_BASE+0x10000000)>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,4,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE,0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,5,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x10000000,0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x10000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 #else
-       .long TLB1_MAS0(1,4,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1,5,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,4,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1,5,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
-       .long TLB1_MAS0(1,6,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
+       .long FSL_BOOKE_MAS0(1,6,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
 #ifdef CONFIG_L2_INIT_RAM
-       .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,1,0,0,0,0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0,0,0,1,0,0,0,0)
 #else
-       .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,0,0,0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0)
 #endif
-       .long TLB1_MAS3(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long TLB1_MAS0(1,7,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(((CFG_PCI_MEM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_PCI_MEM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,7,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI_MEM_BASE,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI_MEM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       .long TLB1_MAS0(1,15,0)
-       .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,15,0)
+       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT,(MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 #else
-       .long TLB1_MAS0(1,15,0)
-       .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1,15,0)
+       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
+       .long FSL_BOOKE_MAS2(0,0)
+       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
        entry_end
index 048ac26b4b75250a66c7b43e4de11012923e7079..449fed8f76402b121d58aa3440d185c86ddac77c 100644 (file)
@@ -144,7 +144,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index fd0f35039f748bd5e5da938971106ee6991feded..5de9b78f7bdb17f41cf2891fabfe655dc3b4548e 100644 (file)
@@ -123,7 +123,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 363a77d8a4e2ca92a99170b5d118aa9976556bc8..09407647ab1a0d8236b0e588f8e801403e8edcc0 100644 (file)
@@ -757,7 +757,7 @@ static struct pci_config_table pci_solidcard3_config_table[] =
 };
 
 /*-------------------------------------------------------------------------+
- | pci_init_board (Called from pci_init() in drivers/pci.c)
+ | pci_init_board (Called from pci_init() in drivers/pci/pci.c)
  |
  | Init the PCI part of the SolidCard III
  |
index dc255d283ec2a4b2189d074c2572188980952aec..a61e86265266414e01f3a37fa71c29003fbd01f3 100644 (file)
@@ -66,7 +66,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 72164a1c8e68eaba6f6ce5d1417183f7510d8104..12c850f4e419dee623b54696d241954c94aad0fe 100644 (file)
@@ -45,7 +45,7 @@ SECTIONS
 
        . = ALIGN(4);
        _i386boot_bss_start = ABSOLUTE(.);
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _i386boot_bss_size = SIZEOF(.bss);
 
 
index 127d707e6bf156389c26c77b2885f67972570713..887e0a0897b88e2ed1244dc7d9a2b415916e89bc 100644 (file)
@@ -46,7 +46,7 @@ SECTIONS
 
        . = ALIGN(4);
        _i386boot_bss_start = ABSOLUTE(.);
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _i386boot_bss_size = SIZEOF(.bss);
 
 
index 1d1669cdea0b7e910744eaddf74e24f6c1d56b25..46ed451ee7ae7ecd8a8daf065a511725603cbaa0 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 258bece23cf59813a511d23556e4da02ff940c25..6bd06270a4f99f020b77e16b5753126bce03e59f 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index cdf550f67b57f61612a53b23634c62db6a138554..7b8667040f94763092b990c4d14dce76e37308d3 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 42e1b83b95aa7992ca8f9a986fc6748b7c2b39a4..ce55b1c47fb4dff06dfb3655365c896a14ba21e7 100644 (file)
@@ -127,7 +127,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 64d946c439210f6a58ece41c2838bea70d3a6498..418101ff866d410432b3f4aed294522ae70ca169 100644 (file)
@@ -50,6 +50,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 6505d45561988ebeed27d0315782eaf8141a40d9..77bf8185f39c603d273fbc3e688b8294924b2667 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1513a8517d92dc7a4d13dde17ddc30a506cafd08..6af5a5c2bd80bc893b2b80b04a900e2f9c7f1ceb 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f4fbf969c3cf6445dd210053c319e591440dc3ae..14cd22800bb7a1023e6d597b413fe63768f9e2a9 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f4fbf969c3cf6445dd210053c319e591440dc3ae..14cd22800bb7a1023e6d597b413fe63768f9e2a9 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index cb3f456a0ef58f1bbf26a27160518180543a93e4..eb942792940a0065be9e6681cf2c7d6b2c0a7758 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index cb3f456a0ef58f1bbf26a27160518180543a93e4..eb942792940a0065be9e6681cf2c7d6b2c0a7758 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d526d1d07d3163413ee4157cc1a358ff5cddeb13..bb9fcab8eb102a8a18b12e1ac1dabe7efb7a4c91 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f9150ab3d1cd2a51e9236db01747372b85544d0f..2338f1004862c33cb917644591fa438a81c2f0fb 100644 (file)
@@ -118,7 +118,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 8b01f45e551017863c96ec0aed87580a57028629..be7795274d367026b80384133704e3188d8699cf 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
 
        __bss_start = .;
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
        }
index 713ed65568cdf088bd48dfe3e63d4e04233b4756..2208580faec53eacd45438a2647d7f7707b6df7d 100644 (file)
@@ -32,8 +32,8 @@
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  * !!!!!                                                !!!!!
  * !!!!! Next type definition was coming from original  !!!!!
- * !!!!! status LED driver drivers/status_led.c and     !!!!!
- * !!!!! should exported for using here.                !!!!!
+ * !!!!! status LED driver drivers/misc/status_led.c    !!!!!
+ * !!!!! and should be exported for using it here.      !!!!!
  * !!!!!                                                !!!!!
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
 
index d504289bb2041e50b611e276abb9bf76071871fb..f491a57cebb82ab978d9642cd770e87c4f2fbd2b 100644 (file)
@@ -49,7 +49,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -81,10 +81,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -100,33 +100,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -134,78 +126,74 @@ tlb1_entry:
         * 0xff000000   16M     FLASH
         * 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), 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000), \
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000), \
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Cacheable, non-guarded
         * 0xf000_0000  64M     LBC SDRAM
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7:       16K     Non-cacheable, guarded
         * 0xfc000000   16K     Configuration Latch register
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64K)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_LCLDEVS_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_LCLDEVS_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64K)
+       .long FSL_BOOKE_MAS2(CFG_LBC_LCLDEVS_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_LBC_LCLDEVS_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 #if !defined(CONFIG_SPD_EEPROM)
        /*
@@ -217,17 +205,15 @@ tlb1_entry:
         * Likely it needs to be increased by two for these entries.
         */
 #error("Update the number of table entries in tlb1_entry")
-       .long TLB1_MAS0(1, 8, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(1, 9, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE + 0x4000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 8, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(1, 9, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #endif
 
        entry_end
index 1bbf20ae29fb78e078a0497f6e366861cf3ba17b..3f9bc55b39de7e9543451a277a356fa55be59200 100644 (file)
@@ -146,7 +146,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index a1a8d9e0cbbf9473ee8f4f3ab13e846ff24c86b8..82dafb80b88a90e2171accf9988d1177588166d6 100644 (file)
@@ -49,7 +49,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -81,10 +81,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 #else
 #error("Update the number of table entries in tlb1_entry")
 #endif
@@ -100,33 +100,25 @@ tlb1_entry:
         * 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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 FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
-       .long 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -134,50 +126,46 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0xa0000000   256M    PCI2 MEM First half
         */
-       .long 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 FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xb0000000   256M    PCI2 MEM Second half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
@@ -185,10 +173,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       256M    Non-cacheable, guarded
@@ -196,10 +184,10 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_LBC_OPTION_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_LBC_OPTION_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
        entry_end
 
 /*
index 65e1bcfb122b03f07ed3203bb5f3e00d17df2351..a0ba12595583ab09ff9d4b384fdec3e72b288d20 100644 (file)
@@ -147,7 +147,7 @@ SECTIONS
 
   . = .;
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b..9584c3358a3625cd338a5b0b623e0e388a258efe 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d7f7dc13292458e2f1f7e0c17bea9889ed0cc6f3..b6c860167abace2144747e91750a296a826845bd 100644 (file)
@@ -133,7 +133,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index d28155f4cb83b31f36efcfa4b49973f40bdf6198..b608223a745c0bf15ee7eba06774613bb0797723 100644 (file)
@@ -52,6 +52,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index c629040a080575ff52d85ff2dd0c132d69cd4052..b18e6a6fc521da0012a2c2eef8118b0ebfd97b23 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
        num_got_entries = (__got_end - __got_start) >> 2;
 
        . = ALIGN(4);
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD)  : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
        uboot_end = .;
 }
index f33d17258ded641ee8c889be33acee964b603338..905a04338e70068f75b1325d648beca2fabdd415 100644 (file)
@@ -444,6 +444,7 @@ ulong post_word_load (void)
 #ifdef CONFIG_BOARD_EARLY_INIT_R
 int board_early_init_r (void)
 {
+
        extern int usb_cpu_init(void);
 
 #ifdef CONFIG_PS2MULT
index 1f610385e6df1073e8a7f018ce5b5b49dc4d0ef4..dcb9386c0060838bc3976160777f8868184865f2 100644 (file)
@@ -43,7 +43,7 @@
  *
  * MAS0: tlbsel, esel, nv
  * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
+ * MAS2: epn, x0, x1, w, i, m, g, e
  * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
  */
 
@@ -78,33 +78,25 @@ tlb1_entry:
         * 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)
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+
+       .long FSL_BOOKE_MAS0(0, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
+       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
+       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
 
        /*
@@ -112,64 +104,60 @@ tlb1_entry:
         * 0xf8000000   128M    FLASH
         * Out of reset this entry is only 4K.
         */
-       .long TLB1_MAS0(1, 1, 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)
-       .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+0x4000000), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE+0x4000000), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 1, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+       .long FSL_BOOKE_MAS0(1, 0, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE+0x4000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE+0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
         * 0x80000000   256M    PCI1 MEM First half
         */
-       .long 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)
+       .long FSL_BOOKE_MAS0(1, 2, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 3:       256M    Non-cacheable, guarded
         * 0x90000000   256M    PCI1 MEM Second half
         */
-       .long TLB1_MAS0(1, 3, 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)
+       .long FSL_BOOKE_MAS0(1, 3, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 4:       256M    Non-cacheable, guarded
         * 0xc0000000   256M    Rapid IO MEM First half
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 4, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 5:       256M    Non-cacheable, guarded
         * 0xd0000000   256M    Rapid IO MEM Second half
         */
-       .long TLB1_MAS0(1, 5, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_RIO_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 5, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 6:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
         * 0xe200_0000  16M     PCI1 IO
         */
-       .long TLB1_MAS0(1, 6, 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)
+       .long FSL_BOOKE_MAS0(1, 6, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        /*
         * TLB 7+8:     512M    DDR, cache disabled (needed for memory test)
@@ -178,14 +166,14 @@ tlb1_entry:
         * Make sure the TLB count at the top of this table is correct.
         * Likely it needs to be increased by two for these entries.
         */
-       .long TLB1_MAS0(1, 7, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
-       .long TLB1_MAS0(1, 8, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_DDR_SDRAM_BASE+0x10000000), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE+0x10000000), 0,0,0,0,0,1,0,1,0,1)
+       .long FSL_BOOKE_MAS0(1, 7, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
+       .long FSL_BOOKE_MAS0(1, 8, 0)
+       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x10000000, (MAS2_I|MAS2_G))
+       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
 
        entry_end
 
index 4cc825bcdb1c7529e2ad303ff61b437f68cb0663..a8ca3c89d16e82a9fbdebcb8f13bf01a501898dd 100644 (file)
@@ -138,7 +138,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss      :
+  .bss (NOLOAD)             :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index fcd941e0d2d274281f8bf163d72bb420217e8917..18bf2a83029c4afedf5a5cbbf5a96b85b4d3088f 100644 (file)
@@ -504,4 +504,51 @@ int misc_init_r (void)
 }
 #endif /* CONFIG_NSCU */
 
+/* ---------------------------------------------------------------------------- */
+/* TK885D specific initializaion                                               */
+/* ---------------------------------------------------------------------------- */
+#ifdef CONFIG_TK885D
+#include <miiphy.h>
+int last_stage_init(void)
+{
+       const unsigned char phy[] = {CONFIG_FEC1_PHY, CONFIG_FEC2_PHY};
+       unsigned short reg;
+       int ret, i = 100;
+       char *s;
+
+       mii_init();
+       /* Without this delay 0xff is read from the UART buffer later in
+        * abortboot() and autoboot is aborted */
+       udelay(10000);
+       while (tstc() && i--)
+               (void)getc();
+
+       /* Check if auto-negotiation is prohibited */
+       s = getenv("phy_auto_nego");
+
+       if (!s || !strcmp(s, "on"))
+               /* Nothing to do - autonegotiation by default */
+               return 0;
+
+       for (i = 0; i < 2; i++) {
+               ret = miiphy_read("FEC ETHERNET", phy[i], PHY_BMCR, &reg);
+               if (ret) {
+                       printf("Cannot read BMCR on PHY %d\n", phy[i]);
+                       return 0;
+               }
+               /* Auto-negotiation off, hard set full duplex, 100Mbps */
+               ret = miiphy_write("FEC ETHERNET", phy[i],
+                                  PHY_BMCR, (reg | PHY_BMCR_100MB |
+                                             PHY_BMCR_DPLX) & ~PHY_BMCR_AUTON);
+               if (ret) {
+                       printf("Cannot write BMCR on PHY %d\n", phy[i]);
+                       return 0;
+               }
+       }
+
+       return 0;
+}
+
+#endif
+
 /* ------------------------------------------------------------------------- */
index d526d1d07d3163413ee4157cc1a358ff5cddeb13..bb9fcab8eb102a8a18b12e1ac1dabe7efb7a4c91 100644 (file)
@@ -132,7 +132,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index e56cdd3cad4ab7851e3a3031c7a786b1df9b3ed1..043e01c9b3696187dd17277ea9dd5e2a7575151b 100644 (file)
@@ -60,6 +60,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index d7c798ebb686bc9fc7664520e06297d26291736e..3bf25f30bc9103007ba5289d4ee8e699d3adcfbf 100644 (file)
@@ -131,7 +131,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f9722dbb6bd369828f1bdff57001add17adb665b..e68ac0179bd54bd90d7db3d6660b8abea93cceda 100644 (file)
@@ -134,7 +134,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 25461c2c01ff1a74c324ef7dff308024ad068684..ccded7e8cfc88c75853ca5eda2feeeb9d8bff572 100755 (executable)
@@ -8,7 +8,7 @@
 
 mkdir -p ${obj}include
 variant=PB926EJ-S
-if [ "$1" == "" ]
+if [ "$1" = "" ]
 then
        echo "$0:: No parameters - using versatilepb_config"
        echo "#define CONFIG_ARCH_VERSATILE_PB" > ${obj}include/config.h
index cb6ee188b19fa7af559485e0eacb55e3c079fe64..82cb8e311aed222aafdd2d882befbb3c6e56fa31 100644 (file)
@@ -46,6 +46,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 317550dbad02a915592c18d3ea418fb9badace66..89b0a8209cc6b2ac4733419bb6e21b7bf8619206 100644 (file)
@@ -46,6 +46,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index f35a3ab024df282779607ce24b63477464080758..bce925bbffb0d30315983491df3d1077d07267c3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 7e3e15dc2eae8835a4381b7d85f6b84df553118b..a9c0536ee08b1e380c0f9dfcdd8f94b5030d0b85 100644 (file)
@@ -123,7 +123,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index cdf550f67b57f61612a53b23634c62db6a138554..7b8667040f94763092b990c4d14dce76e37308d3 100644 (file)
@@ -129,7 +129,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 60f0bc24e78a7dde6806a051a31300ac3c31a7d3..58bfac07166ffe6171c1f96882c52ca2f2c1e59a 100644 (file)
@@ -108,7 +108,7 @@ ulong
 get_PCI_freq(void)
 {
        ulong val;
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info(&sys_info);
        val = sys_info.freqPCI;
index b6d748e1d982acff974e543383b27ac54c599971..521078c4b7e5a3f564986d0853b97d19ca591a82 100644 (file)
@@ -62,7 +62,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     cpu/ppc4xx/4xx_enet.o      (.text)
@@ -137,7 +137,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index db8387520eb269e74e5de3d8f943aaae496446dd..bf42e9f3d23a08e9affa10285c42b250b160f6d7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 0f08637107be73edc2f43908adc3f00bc98a7ac9..6df5dfcbb1503c0d19e110e88f8625ba639d455c 100644 (file)
@@ -71,7 +71,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
@@ -145,7 +145,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 5066326927fdc18a0b0da234cb0c8353eba075dc..66317933b37ab53fb6a03950bce94dc6a90e27bf 100644 (file)
@@ -61,7 +61,7 @@ SECTIONS
     cpu/ppc4xx/kgdb.o  (.text)
     cpu/ppc4xx/traps.o (.text)
     cpu/ppc4xx/interrupts.o    (.text)
-    cpu/ppc4xx/serial.o        (.text)
+    cpu/ppc4xx/4xx_uart.o      (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
     common/dlmalloc.o  (.text)
index db8387520eb269e74e5de3d8f943aaae496446dd..bf42e9f3d23a08e9affa10285c42b250b160f6d7 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 73b83eba40eb93b11bd110745dcaab891c7bcbd8..195d91b712ee52bea8e1c353e29971bcc3e8cea5 100644 (file)
@@ -121,7 +121,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index f0102391b342fedb1fa7970324776aa828629a11..14d264a6861cdd98abb7d9f2cdc06730b86f0ae3 100644 (file)
@@ -51,6 +51,6 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .bss : { *(.bss) }
+       .bss (NOLOAD) : { *(.bss) }
        _end = .;
 }
index 2a421e2da9c44df38a7698fff482a29299546bed..76dc1664385b8ea9da322101adfa082706fc2762 100644 (file)
@@ -28,7 +28,7 @@
 #include <common.h>            /* core U-Boot definitions */
 #include <ACEX1K.h>            /* ACEX device family */
 
-#if (CONFIG_FPGA & (CFG_ALTERA | CFG_ACEX1K))
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ALTERA) && defined(CONFIG_FPGA_ACEX1K)
 
 /* Define FPGA_DEBUG to get debug printf's */
 #ifdef FPGA_DEBUG
@@ -363,4 +363,4 @@ static int ACEX1K_ps_reloc (Altera_desc * desc, ulong reloc_offset)
 
 }
 
-#endif /* (CONFIG_FPGA & (CFG_ALTERA | CFG_ACEX1K)) */
+#endif /* CONFIG_FPGA && CONFIG_FPGA_ALTERA && CONFIG_FPGA_ACEX1K */
index 7be89a41c6e0addc2519efad7336a72d2dd7e63e..fbfa536a30c07a4b56d79d069e39e1e296b688a4 100644 (file)
@@ -86,6 +86,7 @@ COBJS-$(CONFIG_CMD_REISER) += cmd_reiser.o
 COBJS-y += cmd_sata.o
 COBJS-$(CONFIG_CMD_SCSI) += cmd_scsi.o
 COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o
+COBJS-$(CONFIG_CMD_TERMINAL) += cmd_terminal.o
 COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o
 COBJS-$(CONFIG_CMD_USB) += cmd_usb.o
 COBJS-y += cmd_vfd.o
index 06e8a9501585a521dc4bba11a343cc02ab8423b0..0df7bae013e3cd93f4af1aac04a15ea7696a0469 100644 (file)
@@ -40,7 +40,7 @@
 #define PRINTF(fmt,args...)
 #endif
 
-#if (CONFIG_FPGA & CFG_FPGA_ALTERA)
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ALTERA)
 
 /* Local Static Functions */
 static int altera_validate (Altera_desc * desc, char *fn);
@@ -56,11 +56,11 @@ int altera_load( Altera_desc *desc, void *buf, size_t bsize )
                switch (desc->family) {
                case Altera_ACEX1K:
                case Altera_CYC2:
-#if (CONFIG_FPGA & CFG_ACEX1K)
+#if defined(CONFIG_FPGA_ACEX1K)
                        PRINTF ("%s: Launching the ACEX1K Loader...\n",
                                        __FUNCTION__);
                        ret_val = ACEX1K_load (desc, buf, bsize);
-#elif (CONFIG_FPGA & CFG_CYCLON2)
+#elif defined CONFIG_FPGA_CYCLON2
                        PRINTF ("%s: Launching the CYCLON II Loader...\n",
                                        __FUNCTION__);
                        ret_val = CYC2_load (desc, buf, bsize);
@@ -88,7 +88,7 @@ int altera_dump( Altera_desc *desc, void *buf, size_t bsize )
        } else {
                switch (desc->family) {
                case Altera_ACEX1K:
-#if (CONFIG_FPGA & CFG_ACEX)
+#if defined(CONFIG_FPGA_ACEX)
                        PRINTF ("%s: Launching the ACEX1K Reader...\n",
                                        __FUNCTION__);
                        ret_val = ACEX1K_dump (desc, buf, bsize);
@@ -156,9 +156,9 @@ int altera_info( Altera_desc *desc )
                        switch (desc->family) {
                        case Altera_ACEX1K:
                        case Altera_CYC2:
-#if (CONFIG_FPGA & CFG_ACEX1K)
+#if defined(CONFIG_FPGA_ACEX1K)
                                ACEX1K_info (desc);
-#elif (CONFIG_FPGA & CFG_CYCLON2)
+#elif defined(CONFIG_FPGA_CYCLON2)
                                CYC2_info (desc);
 #else
                                /* just in case */
@@ -192,7 +192,7 @@ int altera_reloc( Altera_desc *desc, ulong reloc_offset)
        } else {
                switch (desc->family) {
                case Altera_ACEX1K:
-#if (CONFIG_FPGA & CFG_ACEX1K)
+#if defined(CONFIG_FPGA_ACEX1K)
                        ret_val = ACEX1K_reloc (desc, reloc_offset);
 #else
                        printf ("%s: No support for ACEX devices.\n",
@@ -200,7 +200,7 @@ int altera_reloc( Altera_desc *desc, ulong reloc_offset)
 #endif
                        break;
                case Altera_CYC2:
-#if (CONFIG_FPGA & CFG_CYCLON2)
+#if defined(CONFIG_FPGA_CYCLON2)
                        ret_val = CYC2_reloc (desc, reloc_offset);
 #else
                        printf ("%s: No support for CYCLON II devices.\n",
@@ -249,4 +249,4 @@ static int altera_validate (Altera_desc * desc, char *fn)
 
 /* ------------------------------------------------------------------------- */
 
-#endif /* CONFIG_FPGA & CFG_FPGA_ALTERA */
+#endif /* CONFIG_FPGA & CONFIG_FPGA_ALTERA */
index d05998366b150e82f6200f249c017c2c989c052d..c28a155453099fda3e5d7ca4ab232f89a87527d3 100644 (file)
@@ -152,7 +152,9 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
+#if defined(CONFIG_CMD_NET)
        int i;
+#endif
        bd_t *bd = gd->bd;
 
        print_num ("mem start",         (ulong)bd->bi_memstart);
index 907f9a2db7e15da815fa5273e4cdb26f9428cd2b..197e5e871d2621a070575c3932aa3a88632c86fb 100644 (file)
@@ -36,6 +36,62 @@ static int bmp_display (ulong addr, int x, int y);
 
 int gunzip(void *, int, unsigned char *, unsigned long *);
 
+/*
+ * Allocate and decompress a BMP image using gunzip().
+ *
+ * Returns a pointer to the decompressed image data. Must be freed by
+ * the caller after use.
+ *
+ * Returns NULL if decompression failed, or if the decompressed data
+ * didn't contain a valid BMP signature.
+ */
+#ifdef CONFIG_VIDEO_BMP_GZIP
+static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp)
+{
+       void *dst;
+       unsigned long len;
+       bmp_image_t *bmp;
+
+       /*
+        * Decompress bmp image
+        */
+       len = CFG_VIDEO_LOGO_MAX_SIZE;
+       dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE);
+       if (dst == NULL) {
+               puts("Error: malloc in gunzip failed!\n");
+               return NULL;
+       }
+       if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)addr, &len) != 0) {
+               free(dst);
+               return NULL;
+       }
+       if (len == CFG_VIDEO_LOGO_MAX_SIZE)
+               puts("Image could be truncated"
+                               " (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n");
+
+       bmp = dst;
+
+       /*
+        * Check for bmp mark 'BM'
+        */
+       if (!((bmp->header.signature[0] == 'B') &&
+             (bmp->header.signature[1] == 'M'))) {
+               free(dst);
+               return NULL;
+       }
+
+       puts("Gzipped BMP image detected!\n");
+
+       return bmp;
+}
+#else
+static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp)
+{
+       return NULL;
+}
+#endif
+
+
 /*
  * Subroutine:  do_bmp
  *
@@ -101,63 +157,24 @@ U_BOOT_CMD(
 static int bmp_info(ulong addr)
 {
        bmp_image_t *bmp=(bmp_image_t *)addr;
-#ifdef CONFIG_VIDEO_BMP_GZIP
-       unsigned char *dst = NULL;
-       ulong len;
-#endif /* CONFIG_VIDEO_BMP_GZIP */
+       unsigned long len;
 
        if (!((bmp->header.signature[0]=='B') &&
-             (bmp->header.signature[1]=='M'))) {
+             (bmp->header.signature[1]=='M')))
+               bmp = gunzip_bmp(addr, &len);
 
-#ifdef CONFIG_VIDEO_BMP_GZIP
-               /*
-                * Decompress bmp image
-                */
-               len = CFG_VIDEO_LOGO_MAX_SIZE;
-               dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE);
-               if (dst == NULL) {
-                       printf("Error: malloc in gunzip failed!\n");
-                       return(1);
-               }
-               if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)addr, &len) != 0) {
-                       printf("There is no valid bmp file at the given address\n");
-                       return(1);
-               }
-               if (len == CFG_VIDEO_LOGO_MAX_SIZE) {
-                       printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n");
-               }
-
-               /*
-                * Set addr to decompressed image
-                */
-               bmp = (bmp_image_t *)dst;
-
-               /*
-                * Check for bmp mark 'BM'
-                */
-               if (!((bmp->header.signature[0] == 'B') &&
-                     (bmp->header.signature[1] == 'M'))) {
-                       printf("There is no valid bmp file at the given address\n");
-                       free(dst);
-                       return(1);
-               }
-
-               printf("Gzipped BMP image detected!\n");
-#else /* CONFIG_VIDEO_BMP_GZIP */
+       if (bmp == NULL) {
                printf("There is no valid bmp file at the given address\n");
-               return(1);
-#endif /* CONFIG_VIDEO_BMP_GZIP */
+               return 1;
        }
+
        printf("Image size    : %d x %d\n", le32_to_cpu(bmp->header.width),
               le32_to_cpu(bmp->header.height));
        printf("Bits per pixel: %d\n", le16_to_cpu(bmp->header.bit_count));
        printf("Compression   : %d\n", le32_to_cpu(bmp->header.compression));
 
-#ifdef CONFIG_VIDEO_BMP_GZIP
-       if (dst) {
-               free(dst);
-       }
-#endif /* CONFIG_VIDEO_BMP_GZIP */
+       if ((unsigned long)bmp != addr)
+               free(bmp);
 
        return(0);
 }
@@ -174,14 +191,33 @@ static int bmp_info(ulong addr)
  */
 static int bmp_display(ulong addr, int x, int y)
 {
+       int ret;
+       bmp_image_t *bmp = (bmp_image_t *)addr;
+       unsigned long len;
+
+       if (!((bmp->header.signature[0]=='B') &&
+             (bmp->header.signature[1]=='M')))
+               bmp = gunzip_bmp(addr, &len);
+
+       if (!bmp) {
+               printf("There is no valid bmp file at the given address\n");
+               return 1;
+       }
+
 #if defined(CONFIG_LCD)
        extern int lcd_display_bitmap (ulong, int, int);
 
-       return (lcd_display_bitmap (addr, x, y));
+       ret = lcd_display_bitmap ((unsigned long)bmp, x, y);
 #elif defined(CONFIG_VIDEO)
        extern int video_display_bitmap (ulong, int, int);
-       return (video_display_bitmap (addr, x, y));
+
+       ret = video_display_bitmap ((unsigned long)bmp, x, y);
 #else
 # error bmp_display() requires CONFIG_LCD or CONFIG_VIDEO
 #endif
+
+       if ((unsigned long)bmp != addr)
+               free(bmp);
+
+       return ret;
 }
index 4639126536bea5ad5c6eb24fb03eb18b0a26a887..9cd22ee94ae99b395742e73e44c0f98a92cbaab2 100644 (file)
@@ -184,23 +184,28 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        } else if (argv[1][0] == 's') {
                char *pathp;            /* path */
                char *prop;             /* property */
-               char *newval;           /* value from the user (as a string) */
                int  nodeoffset;        /* node offset from libfdt */
                static char data[SCRATCHPAD];   /* storage for the property */
                int  len;               /* new length of the property */
                int  ret;               /* return value */
 
                /*
-                * Parameters: Node path, property, value.
+                * Parameters: Node path, property, optional value.
                 */
-               if (argc < 5) {
+               if (argc < 4) {
                        printf ("Usage:\n%s\n", cmdtp->usage);
                        return 1;
                }
 
                pathp  = argv[2];
                prop   = argv[3];
-               newval = argv[4];
+               if (argc == 4) {
+                       len = 0;
+               } else {
+                       ret = fdt_parse_prop(pathp, prop, argv[4], data, &len);
+                       if (ret != 0)
+                               return ret;
+               }
 
                nodeoffset = fdt_path_offset (fdt, pathp);
                if (nodeoffset < 0) {
@@ -211,9 +216,6 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                                fdt_strerror(nodeoffset));
                        return 1;
                }
-               ret = fdt_parse_prop(pathp, prop, newval, data, &len);
-               if (ret != 0)
-                       return ret;
 
                ret = fdt_setprop(fdt, nodeoffset, prop, data, len);
                if (ret < 0) {
@@ -681,7 +683,7 @@ U_BOOT_CMD(
 #ifdef CONFIG_OF_BOARD_SETUP
        "fdt boardsetup                      - Do board-specific set up\n"
 #endif
-       "fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr>\n"
+       "fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active\n"
        "fdt print  <path> [<prop>]          - Recursive print starting at <path>\n"
        "fdt list   <path> [<prop>]          - Print one level starting at <path>\n"
        "fdt set    <path> <prop> [<val>]    - Set <property> [to <val>]\n"
@@ -694,10 +696,6 @@ U_BOOT_CMD(
 #ifdef CONFIG_OF_HAS_BD_T
        "fdt bd_t   - Add/replace the /bd_t branch in the tree\n"
 #endif
-       "Hints:\n"
-       " If the property you are setting/printing has a '#' character or spaces,\n"
-       "     you MUST escape it with a \\ character or quote it with \".\n"
-       "Examples: fdt print /               # print the whole tree\n"
-       "          fdt print /cpus \"#address-cells\"\n"
-       "          fdt set   /cpus \"#address-cells\" \"[00 00 00 01]\"\n"
+       "NOTE: If the path or property you are setting/printing has a '#' character\n"
+       "     or spaces, you MUST escape it with a \\ character or quote it with \".\n"
 );
index 377a692f7dc3b2810500e020df420f91aaee30ee..f55447ab1fed70790523817cbf697ba46a6fee2b 100644 (file)
@@ -58,14 +58,11 @@ static int fpga_get_op (char *opstr);
 /* Convert bitstream data and load into the fpga */
 int fpga_loadbitstream(unsigned long dev, char* fpgadata, size_t size)
 {
-#if (CONFIG_FPGA & CFG_FPGA_XILINX)
+#if defined(CONFIG_FPGA_XILINX)
        unsigned int length;
-       unsigned char* swapdata;
        unsigned int swapsize;
        char buffer[80];
-       unsigned char *ptr;
        unsigned char *dataptr;
-       unsigned char data;
        unsigned int i;
        int rc;
 
@@ -143,39 +140,7 @@ int fpga_loadbitstream(unsigned long dev, char* fpgadata, size_t size)
        dataptr+=4;
        printf("  bytes in bitstream = %d\n", swapsize);
 
-       /* check consistency of length obtained */
-       if (swapsize >= size) {
-               printf("%s: Could not find right length of data in bitstream\n",
-                       __FUNCTION__);
-               return FPGA_FAIL;
-       }
-
-       /* allocate memory */
-       swapdata = (unsigned char *)malloc(swapsize);
-       if (swapdata == NULL) {
-               printf("%s: Could not allocate %d bytes memory !\n",
-                       __FUNCTION__, swapsize);
-               return FPGA_FAIL;
-       }
-
-       /* read data into memory and swap bits */
-       ptr = swapdata;
-       for (i = 0; i < swapsize; i++) {
-               data = 0x00;
-               data |= (*dataptr & 0x01) << 7;
-               data |= (*dataptr & 0x02) << 5;
-               data |= (*dataptr & 0x04) << 3;
-               data |= (*dataptr & 0x08) << 1;
-               data |= (*dataptr & 0x10) >> 1;
-               data |= (*dataptr & 0x20) >> 3;
-               data |= (*dataptr & 0x40) >> 5;
-               data |= (*dataptr & 0x80) >> 7;
-               *ptr++ = data;
-               dataptr++;
-       }
-
-       rc = fpga_load(dev, swapdata, swapsize);
-       free(swapdata);
+       rc = fpga_load(dev, dataptr, swapsize);
        return rc;
 #else
        printf("Bitstream support only for Xilinx devices\n");
index 10cab4609a5da87c2d7a1fc67db302d40f4991b9..c60ec99dad9182245b932a1d488dbb81a57767f3 100644 (file)
@@ -655,28 +655,120 @@ int do_i2c_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  * (most?) embedded boards don't use SDRAM DIMMs.
  */
 #if defined(CONFIG_CMD_SDRAM)
+static void print_ddr2_tcyc (u_char const b)
+{
+       printf ("%d.", (b >> 4) & 0x0F);
+       switch (b & 0x0F) {
+       case 0x0:
+       case 0x1:
+       case 0x2:
+       case 0x3:
+       case 0x4:
+       case 0x5:
+       case 0x6:
+       case 0x7:
+       case 0x8:
+       case 0x9:
+               printf ("%d ns\n", b & 0x0F);
+               break;
+       case 0xA:
+               puts ("25 ns\n");
+               break;
+       case 0xB:
+               puts ("33 ns\n");
+               break;
+       case 0xC:
+               puts ("66 ns\n");
+               break;
+       case 0xD:
+               puts ("75 ns\n");
+               break;
+       default:
+               puts ("?? ns\n");
+               break;
+       }
+}
+
+static void decode_bits (u_char const b, char const *str[], int const do_once)
+{
+       u_char mask;
+
+       for (mask = 0x80; mask != 0x00; mask >>= 1, ++str) {
+               if (b & mask) {
+                       puts (*str);
+                       if (do_once)
+                               return;
+               }
+       }
+}
 
 /*
  * Syntax:
  *     sdram {i2c_chip}
  */
-int do_sdram  ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_sdram (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 {
+       enum { unknown, EDO, SDRAM, DDR2 } type;
+
        u_char  chip;
        u_char  data[128];
        u_char  cksum;
        int     j;
 
+       static const char *decode_CAS_DDR2[] = {
+               " TBD", " 6", " 5", " 4", " 3", " 2", " TBD", " TBD"
+       };
+
+       static const char *decode_CAS_default[] = {
+               " TBD", " 7", " 6", " 5", " 4", " 3", " 2", " 1"
+       };
+
+       static const char *decode_CS_WE_default[] = {
+               " TBD", " 6", " 5", " 4", " 3", " 2", " 1", " 0"
+       };
+
+       static const char *decode_byte21_default[] = {
+               "  TBD (bit 7)\n",
+               "  Redundant row address\n",
+               "  Differential clock input\n",
+               "  Registerd DQMB inputs\n",
+               "  Buffered DQMB inputs\n",
+               "  On-card PLL\n",
+               "  Registered address/control lines\n",
+               "  Buffered address/control lines\n"
+       };
+
+       static const char *decode_byte22_DDR2[] = {
+               "  TBD (bit 7)\n",
+               "  TBD (bit 6)\n",
+               "  TBD (bit 5)\n",
+               "  TBD (bit 4)\n",
+               "  TBD (bit 3)\n",
+               "  Supports partial array self refresh\n",
+               "  Supports 50 ohm ODT\n",
+               "  Supports weak driver\n"
+       };
+
+       static const char *decode_row_density_DDR2[] = {
+               "512 MiB", "256 MiB", "128 MiB", "16 GiB",
+               "8 GiB", "4 GiB", "2 GiB", "1 GiB"
+       };
+
+       static const char *decode_row_density_default[] = {
+               "512 MiB", "256 MiB", "128 MiB", "64 MiB",
+               "32 MiB", "16 MiB", "8 MiB", "4 MiB"
+       };
+
        if (argc < 2) {
                printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
        /*
         * Chip is always specified.
-        */
-       chip = simple_strtoul(argv[1], NULL, 16);
+        */
+       chip = simple_strtoul (argv[1], NULL, 16);
 
-       if (i2c_read(chip, 0, 1, data, sizeof(data)) != 0) {
+       if (i2c_read (chip, 0, 1, data, sizeof (data)) != 0) {
                puts ("No SDRAM Serial Presence Detect found.\n");
                return 1;
        }
@@ -687,80 +779,157 @@ int do_sdram  ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
        if (cksum != data[63]) {
                printf ("WARNING: Configuration data checksum failure:\n"
-                       "  is 0x%02x, calculated 0x%02x\n",
-                       data[63], cksum);
+                       "  is 0x%02x, calculated 0x%02x\n", data[63], cksum);
        }
-       printf("SPD data revision            %d.%d\n",
+       printf ("SPD data revision            %d.%d\n",
                (data[62] >> 4) & 0x0F, data[62] & 0x0F);
-       printf("Bytes used                   0x%02X\n", data[0]);
-       printf("Serial memory size           0x%02X\n", 1 << data[1]);
+       printf ("Bytes used                   0x%02X\n", data[0]);
+       printf ("Serial memory size           0x%02X\n", 1 << data[1]);
+
        puts ("Memory type                  ");
-       switch(data[2]) {
-               case 2:  puts ("EDO\n");        break;
-               case 4:  puts ("SDRAM\n");      break;
-               case 8:  puts ("DDR2\n");       break;
-               default: puts ("unknown\n");    break;
+       switch (data[2]) {
+       case 2:
+               type = EDO;
+               puts ("EDO\n");
+               break;
+       case 4:
+               type = SDRAM;
+               puts ("SDRAM\n");
+               break;
+       case 8:
+               type = DDR2;
+               puts ("DDR2\n");
+               break;
+       default:
+               type = unknown;
+               puts ("unknown\n");
+               break;
        }
+
        puts ("Row address bits             ");
        if ((data[3] & 0x00F0) == 0)
-               printf("%d\n", data[3] & 0x0F);
+               printf ("%d\n", data[3] & 0x0F);
        else
-               printf("%d/%d\n", data[3] & 0x0F, (data[3] >> 4) & 0x0F);
+               printf ("%d/%d\n", data[3] & 0x0F, (data[3] >> 4) & 0x0F);
+
        puts ("Column address bits          ");
        if ((data[4] & 0x00F0) == 0)
-               printf("%d\n", data[4] & 0x0F);
+               printf ("%d\n", data[4] & 0x0F);
        else
-               printf("%d/%d\n", data[4] & 0x0F, (data[4] >> 4) & 0x0F);
-       printf("Module rows                  %d\n", data[5]);
-       printf("Module data width            %d bits\n", (data[7] << 8) | data[6]);
+               printf ("%d/%d\n", data[4] & 0x0F, (data[4] >> 4) & 0x0F);
+
+       switch (type) {
+       case DDR2:
+               printf ("Number of ranks              %d\n",
+                       (data[5] & 0x07) + 1);
+               break;
+       default:
+               printf ("Module rows                  %d\n", data[5]);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("Module data width            %d bits\n", data[6]);
+               break;
+       default:
+               printf ("Module data width            %d bits\n",
+                       (data[7] << 8) | data[6]);
+               break;
+       }
+
        puts ("Interface signal levels      ");
        switch(data[8]) {
-               case 0:  puts ("5.0v/TTL\n");   break;
+               case 0:  puts ("TTL 5.0 V\n");  break;
                case 1:  puts ("LVTTL\n");      break;
-               case 2:  puts ("HSTL 1.5\n");   break;
-               case 3:  puts ("SSTL 3.3\n");   break;
-               case 4:  puts ("SSTL 2.5\n");   break;
-               case 5:  puts ("SSTL 1.8\n");   break;
+               case 2:  puts ("HSTL 1.5 V\n"); break;
+               case 3:  puts ("SSTL 3.3 V\n"); break;
+               case 4:  puts ("SSTL 2.5 V\n"); break;
+               case 5:  puts ("SSTL 1.8 V\n"); break;
                default: puts ("unknown\n");    break;
        }
-       printf("SDRAM cycle time             %d.%d nS\n",
-               (data[9] >> 4) & 0x0F, data[9] & 0x0F);
-       printf("SDRAM access time            %d.%d nS\n",
-               (data[10] >> 4) & 0x0F, data[10] & 0x0F);
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM cycle time             ");
+               print_ddr2_tcyc (data[9]);
+               break;
+       default:
+               printf ("SDRAM cycle time             %d.%d ns\n",
+                       (data[9] >> 4) & 0x0F, data[9] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM access time            0.%d%d ns\n",
+                       (data[10] >> 4) & 0x0F, data[10] & 0x0F);
+               break;
+       default:
+               printf ("SDRAM access time            %d.%d ns\n",
+                       (data[10] >> 4) & 0x0F, data[10] & 0x0F);
+               break;
+       }
+
        puts ("EDC configuration            ");
-       switch(data[11]) {
+       switch (data[11]) {
                case 0:  puts ("None\n");       break;
                case 1:  puts ("Parity\n");     break;
                case 2:  puts ("ECC\n");        break;
                default: puts ("unknown\n");    break;
        }
+
        if ((data[12] & 0x80) == 0)
                puts ("No self refresh, rate        ");
        else
                puts ("Self refresh, rate           ");
+
        switch(data[12] & 0x7F) {
-               case 0:  puts ("15.625uS\n");   break;
-               case 1:  puts ("3.9uS\n");      break;
-               case 2:  puts ("7.8uS\n");      break;
-               case 3:  puts ("31.3uS\n");     break;
-               case 4:  puts ("62.5uS\n");     break;
-               case 5:  puts ("125uS\n");      break;
+               case 0:  puts ("15.625 us\n");  break;
+               case 1:  puts ("3.9 us\n");     break;
+               case 2:  puts ("7.8 us\n");     break;
+               case 3:  puts ("31.3 us\n");    break;
+               case 4:  puts ("62.5 us\n");    break;
+               case 5:  puts ("125 us\n");     break;
                default: puts ("unknown\n");    break;
        }
-       printf("SDRAM width (primary)        %d\n", data[13] & 0x7F);
-       if ((data[13] & 0x80) != 0) {
-               printf("  (second bank)              %d\n",
-                       2 * (data[13] & 0x7F));
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM width (primary)        %d\n", data[13]);
+               break;
+       default:
+               printf ("SDRAM width (primary)        %d\n", data[13] & 0x7F);
+               if ((data[13] & 0x80) != 0) {
+                       printf ("  (second bank)              %d\n",
+                               2 * (data[13] & 0x7F));
+               }
+               break;
        }
-       if (data[14] != 0) {
-               printf("EDC width                    %d\n",
-                       data[14] & 0x7F);
-               if ((data[14] & 0x80) != 0)
-                       printf("  (second bank)              %d\n",
-                               2 * (data[14] & 0x7F));
+
+       switch (type) {
+       case DDR2:
+               if (data[14] != 0)
+                       printf ("EDC width                    %d\n", data[14]);
+               break;
+       default:
+               if (data[14] != 0) {
+                       printf ("EDC width                    %d\n",
+                               data[14] & 0x7F);
+
+                       if ((data[14] & 0x80) != 0) {
+                               printf ("  (second bank)              %d\n",
+                                       2 * (data[14] & 0x7F));
+                       }
+               }
+               break;
        }
-       printf("Min clock delay, back-to-back random column addresses %d\n",
-               data[15]);
+
+       if (DDR2 != type) {
+               printf ("Min clock delay, back-to-back random column addresses "
+                       "%d\n", data[15]);
+       }
+
        puts ("Burst length(s)             ");
        if (data[16] & 0x80) puts (" Page");
        if (data[16] & 0x08) puts (" 8");
@@ -768,110 +937,247 @@ int do_sdram  ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        if (data[16] & 0x02) puts (" 2");
        if (data[16] & 0x01) puts (" 1");
        putc ('\n');
-       printf("Number of banks              %d\n", data[17]);
-       puts ("CAS latency(s)              ");
-       if (data[18] & 0x80) puts (" TBD");
-       if (data[18] & 0x40) puts (" 7");
-       if (data[18] & 0x20) puts (" 6");
-       if (data[18] & 0x10) puts (" 5");
-       if (data[18] & 0x08) puts (" 4");
-       if (data[18] & 0x04) puts (" 3");
-       if (data[18] & 0x02) puts (" 2");
-       if (data[18] & 0x01) puts (" 1");
-       putc ('\n');
-       puts ("CS latency(s)               ");
-       if (data[19] & 0x80) puts (" TBD");
-       if (data[19] & 0x40) puts (" 6");
-       if (data[19] & 0x20) puts (" 5");
-       if (data[19] & 0x10) puts (" 4");
-       if (data[19] & 0x08) puts (" 3");
-       if (data[19] & 0x04) puts (" 2");
-       if (data[19] & 0x02) puts (" 1");
-       if (data[19] & 0x01) puts (" 0");
-       putc ('\n');
-       puts ("WE latency(s)               ");
-       if (data[20] & 0x80) puts (" TBD");
-       if (data[20] & 0x40) puts (" 6");
-       if (data[20] & 0x20) puts (" 5");
-       if (data[20] & 0x10) puts (" 4");
-       if (data[20] & 0x08) puts (" 3");
-       if (data[20] & 0x04) puts (" 2");
-       if (data[20] & 0x02) puts (" 1");
-       if (data[20] & 0x01) puts (" 0");
-       putc ('\n');
-       puts ("Module attributes:\n");
-       if (!data[21])       puts ("  (none)\n");
-       if (data[21] & 0x80) puts ("  TBD (bit 7)\n");
-       if (data[21] & 0x40) puts ("  Redundant row address\n");
-       if (data[21] & 0x20) puts ("  Differential clock input\n");
-       if (data[21] & 0x10) puts ("  Registerd DQMB inputs\n");
-       if (data[21] & 0x08) puts ("  Buffered DQMB inputs\n");
-       if (data[21] & 0x04) puts ("  On-card PLL\n");
-       if (data[21] & 0x02) puts ("  Registered address/control lines\n");
-       if (data[21] & 0x01) puts ("  Buffered address/control lines\n");
-       puts ("Device attributes:\n");
-       if (data[22] & 0x80) puts ("  TBD (bit 7)\n");
-       if (data[22] & 0x40) puts ("  TBD (bit 6)\n");
-       if (data[22] & 0x20) puts ("  Upper Vcc tolerance 5%\n");
-       else                 puts ("  Upper Vcc tolerance 10%\n");
-       if (data[22] & 0x10) puts ("  Lower Vcc tolerance 5%\n");
-       else                 puts ("  Lower Vcc tolerance 10%\n");
-       if (data[22] & 0x08) puts ("  Supports write1/read burst\n");
-       if (data[22] & 0x04) puts ("  Supports precharge all\n");
-       if (data[22] & 0x02) puts ("  Supports auto precharge\n");
-       if (data[22] & 0x01) puts ("  Supports early RAS# precharge\n");
-       printf("SDRAM cycle time (2nd highest CAS latency)        %d.%d nS\n",
-               (data[23] >> 4) & 0x0F, data[23] & 0x0F);
-       printf("SDRAM access from clock (2nd highest CAS latency) %d.%d nS\n",
-               (data[24] >> 4) & 0x0F, data[24] & 0x0F);
-       printf("SDRAM cycle time (3rd highest CAS latency)        %d.%d nS\n",
-               (data[25] >> 4) & 0x0F, data[25] & 0x0F);
-       printf("SDRAM access from clock (3rd highest CAS latency) %d.%d nS\n",
-               (data[26] >> 4) & 0x0F, data[26] & 0x0F);
-       printf("Minimum row precharge        %d nS\n", data[27]);
-       printf("Row active to row active min %d nS\n", data[28]);
-       printf("RAS to CAS delay min         %d nS\n", data[29]);
-       printf("Minimum RAS pulse width      %d nS\n", data[30]);
-       puts ("Density of each row         ");
-       if (data[31] & 0x80) puts (" 512");
-       if (data[31] & 0x40) puts (" 256");
-       if (data[31] & 0x20) puts (" 128");
-       if (data[31] & 0x10) puts (" 64");
-       if (data[31] & 0x08) puts (" 32");
-       if (data[31] & 0x04) puts (" 16");
-       if (data[31] & 0x02) puts (" 8");
-       if (data[31] & 0x01) puts (" 4");
-       puts ("MByte\n");
-       printf("Command and Address setup    %c%d.%d nS\n",
-               (data[32] & 0x80) ? '-' : '+',
-               (data[32] >> 4) & 0x07, data[32] & 0x0F);
-       printf("Command and Address hold     %c%d.%d nS\n",
-               (data[33] & 0x80) ? '-' : '+',
-               (data[33] >> 4) & 0x07, data[33] & 0x0F);
-       printf("Data signal input setup      %c%d.%d nS\n",
-               (data[34] & 0x80) ? '-' : '+',
-               (data[34] >> 4) & 0x07, data[34] & 0x0F);
-       printf("Data signal input hold       %c%d.%d nS\n",
-               (data[35] & 0x80) ? '-' : '+',
-               (data[35] >> 4) & 0x07, data[35] & 0x0F);
+       printf ("Number of banks              %d\n", data[17]);
+
+       switch (type) {
+       case DDR2:
+               puts ("CAS latency(s)              ");
+               decode_bits (data[18], decode_CAS_DDR2, 0);
+               putc ('\n');
+               break;
+       default:
+               puts ("CAS latency(s)              ");
+               decode_bits (data[18], decode_CAS_default, 0);
+               putc ('\n');
+               break;
+       }
+
+       if (DDR2 != type) {
+               puts ("CS latency(s)               ");
+               decode_bits (data[19], decode_CS_WE_default, 0);
+               putc ('\n');
+       }
+
+       if (DDR2 != type) {
+               puts ("WE latency(s)               ");
+               decode_bits (data[20], decode_CS_WE_default, 0);
+               putc ('\n');
+       }
+
+       switch (type) {
+       case DDR2:
+               puts ("Module attributes:\n");
+               if (data[21] & 0x80)
+                       puts ("  TBD (bit 7)\n");
+               if (data[21] & 0x40)
+                       puts ("  Analysis probe installed\n");
+               if (data[21] & 0x20)
+                       puts ("  TBD (bit 5)\n");
+               if (data[21] & 0x10)
+                       puts ("  FET switch external enable\n");
+               printf ("  %d PLLs on DIMM\n", (data[21] >> 2) & 0x03);
+               if (data[20] & 0x11) {
+                       printf ("  %d active registers on DIMM\n",
+                               (data[21] & 0x03) + 1);
+               }
+               break;
+       default:
+               puts ("Module attributes:\n");
+               if (!data[21])
+                       puts ("  (none)\n");
+               else
+                       decode_bits (data[21], decode_byte21_default, 0);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               decode_bits (data[22], decode_byte22_DDR2, 0);
+               break;
+       default:
+               puts ("Device attributes:\n");
+               if (data[22] & 0x80) puts ("  TBD (bit 7)\n");
+               if (data[22] & 0x40) puts ("  TBD (bit 6)\n");
+               if (data[22] & 0x20) puts ("  Upper Vcc tolerance 5%\n");
+               else                 puts ("  Upper Vcc tolerance 10%\n");
+               if (data[22] & 0x10) puts ("  Lower Vcc tolerance 5%\n");
+               else                 puts ("  Lower Vcc tolerance 10%\n");
+               if (data[22] & 0x08) puts ("  Supports write1/read burst\n");
+               if (data[22] & 0x04) puts ("  Supports precharge all\n");
+               if (data[22] & 0x02) puts ("  Supports auto precharge\n");
+               if (data[22] & 0x01) puts ("  Supports early RAS# precharge\n");
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM cycle time (2nd highest CAS latency)        ");
+               print_ddr2_tcyc (data[23]);
+               break;
+       default:
+               printf ("SDRAM cycle time (2nd highest CAS latency)        %d."
+                       "%d ns\n", (data[23] >> 4) & 0x0F, data[23] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM access from clock (2nd highest CAS latency) 0."
+                       "%d%d ns\n", (data[24] >> 4) & 0x0F, data[24] & 0x0F);
+               break;
+       default:
+               printf ("SDRAM access from clock (2nd highest CAS latency) %d."
+                       "%d ns\n", (data[24] >> 4) & 0x0F, data[24] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM cycle time (3rd highest CAS latency)        ");
+               print_ddr2_tcyc (data[25]);
+               break;
+       default:
+               printf ("SDRAM cycle time (3rd highest CAS latency)        %d."
+                       "%d ns\n", (data[25] >> 4) & 0x0F, data[25] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("SDRAM access from clock (3rd highest CAS latency) 0."
+                       "%d%d ns\n", (data[26] >> 4) & 0x0F, data[26] & 0x0F);
+               break;
+       default:
+               printf ("SDRAM access from clock (3rd highest CAS latency) %d."
+                       "%d ns\n", (data[26] >> 4) & 0x0F, data[26] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("Minimum row precharge        %d.%02d ns\n",
+                       (data[27] >> 2) & 0x3F, 25 * (data[27] & 0x03));
+               break;
+       default:
+               printf ("Minimum row precharge        %d ns\n", data[27]);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("Row active to row active min %d.%02d ns\n",
+                       (data[28] >> 2) & 0x3F, 25 * (data[28] & 0x03));
+               break;
+       default:
+               printf ("Row active to row active min %d ns\n", data[28]);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("RAS to CAS delay min         %d.%02d ns\n",
+                       (data[29] >> 2) & 0x3F, 25 * (data[29] & 0x03));
+               break;
+       default:
+               printf ("RAS to CAS delay min         %d ns\n", data[29]);
+               break;
+       }
+
+       printf ("Minimum RAS pulse width      %d ns\n", data[30]);
+
+       switch (type) {
+       case DDR2:
+               puts ("Density of each row          ");
+               decode_bits (data[31], decode_row_density_DDR2, 1);
+               putc ('\n');
+               break;
+       default:
+               puts ("Density of each row          ");
+               decode_bits (data[31], decode_row_density_default, 1);
+               putc ('\n');
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               puts ("Command and Address setup    ");
+               if (data[32] >= 0xA0) {
+                       printf ("1.%d%d ns\n",
+                               ((data[32] >> 4) & 0x0F) - 10, data[32] & 0x0F);
+               } else {
+                       printf ("0.%d%d ns\n",
+                               ((data[32] >> 4) & 0x0F), data[32] & 0x0F);
+               }
+               break;
+       default:
+               printf ("Command and Address setup    %c%d.%d ns\n",
+                       (data[32] & 0x80) ? '-' : '+',
+                       (data[32] >> 4) & 0x07, data[32] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               puts ("Command and Address hold     ");
+               if (data[33] >= 0xA0) {
+                       printf ("1.%d%d ns\n",
+                               ((data[33] >> 4) & 0x0F) - 10, data[33] & 0x0F);
+               } else {
+                       printf ("0.%d%d ns\n",
+                               ((data[33] >> 4) & 0x0F), data[33] & 0x0F);
+               }
+               break;
+       default:
+               printf ("Command and Address hold     %c%d.%d ns\n",
+                       (data[33] & 0x80) ? '-' : '+',
+                       (data[33] >> 4) & 0x07, data[33] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("Data signal input setup      0.%d%d ns\n",
+                       (data[34] >> 4) & 0x0F, data[34] & 0x0F);
+               break;
+       default:
+               printf ("Data signal input setup      %c%d.%d ns\n",
+                       (data[34] & 0x80) ? '-' : '+',
+                       (data[34] >> 4) & 0x07, data[34] & 0x0F);
+               break;
+       }
+
+       switch (type) {
+       case DDR2:
+               printf ("Data signal input hold       0.%d%d ns\n",
+                       (data[35] >> 4) & 0x0F, data[35] & 0x0F);
+               break;
+       default:
+               printf ("Data signal input hold       %c%d.%d ns\n",
+                       (data[35] & 0x80) ? '-' : '+',
+                       (data[35] >> 4) & 0x07, data[35] & 0x0F);
+               break;
+       }
+
        puts ("Manufacturer's JEDEC ID      ");
        for (j = 64; j <= 71; j++)
-               printf("%02X ", data[j]);
+               printf ("%02X ", data[j]);
        putc ('\n');
-       printf("Manufacturing Location       %02X\n", data[72]);
+       printf ("Manufacturing Location       %02X\n", data[72]);
        puts ("Manufacturer's Part Number   ");
        for (j = 73; j <= 90; j++)
-               printf("%02X ", data[j]);
+               printf ("%02X ", data[j]);
        putc ('\n');
-       printf("Revision Code                %02X %02X\n", data[91], data[92]);
-       printf("Manufacturing Date           %02X %02X\n", data[93], data[94]);
+       printf ("Revision Code                %02X %02X\n", data[91], data[92]);
+       printf ("Manufacturing Date           %02X %02X\n", data[93], data[94]);
        puts ("Assembly Serial Number       ");
        for (j = 95; j <= 98; j++)
-               printf("%02X ", data[j]);
+               printf ("%02X ", data[j]);
        putc ('\n');
-       printf("Speed rating                 PC%d\n",
-               data[126] == 0x66 ? 66 : data[126]);
 
+       if (DDR2 != type) {
+               printf ("Speed rating                 PC%d\n",
+                       data[126] == 0x66 ? 66 : data[126]);
+       }
        return 0;
 }
 #endif
index efe9eb7be4ca1b1b46e8122b306ec3124478295f..1b67e73f1119d03864b23afeaa197ed2533546f2 100644 (file)
@@ -167,10 +167,19 @@ struct list_head devices;
 static struct mtd_device *current_dev = NULL;
 static u8 current_partnum = 0;
 
+#if defined(CONFIG_CMD_CRAMFS)
 extern int cramfs_check (struct part_info *info);
 extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename);
 extern int cramfs_ls (struct part_info *info, char *filename);
 extern int cramfs_info (struct part_info *info);
+#else
+/* defining empty macros for function names is ugly but avoids ifdef clutter
+ * all over the code */
+#define cramfs_check(x)                (0)
+#define cramfs_load(x,y,z)     (-1)
+#define cramfs_ls(x,y)         (0)
+#define cramfs_info(x)         (0)
+#endif
 
 static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num);
 
index f530a38421e04b61169ee60e6804a027fa2a213b..31ac43db588849ebbedbed7f06537ac674cfd32c 100644 (file)
 #include <command.h>
 #include <miiphy.h>
 
-#ifdef CONFIG_TERSE_MII
-/*
- * Display values from last command.
- */
-uint last_op;
-uint last_addr;
-uint last_data;
-uint last_reg;
-
-/*
- * MII device/info/read/write
- *
- * Syntax:
- *  mii device {devname}
- *  mii info   {addr}
- *  mii read   {addr} {reg}
- *  mii write  {addr} {reg} {data}
- */
-int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-{
-       char            op;
-       unsigned char   addr, reg;
-       unsigned short  data;
-       int             rcode = 0;
-       char            *devname;
-
-       if (argc < 2) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
-
-#if defined(CONFIG_8xx) || defined(CONFIG_MCF52x2)
-       mii_init ();
-#endif
-
-       /*
-        * We use the last specified parameters, unless new ones are
-        * entered.
-        */
-       op   = last_op;
-       addr = last_addr;
-       data = last_data;
-       reg  = last_reg;
-
-       if ((flag & CMD_FLAG_REPEAT) == 0) {
-               op = argv[1][0];
-               if (argc >= 3)
-                       addr = simple_strtoul (argv[2], NULL, 16);
-               if (argc >= 4)
-                       reg  = simple_strtoul (argv[3], NULL, 16);
-               if (argc >= 5)
-                       data = simple_strtoul (argv[4], NULL, 16);
-       }
-
-       /* use current device */
-       devname = miiphy_get_current_dev();
-
-       /*
-        * check device/read/write/list.
-        */
-       if (op == 'i') {
-               unsigned char j, start, end;
-               unsigned int oui;
-               unsigned char model;
-               unsigned char rev;
-
-               /*
-                * Look for any and all PHYs.  Valid addresses are 0..31.
-                */
-               if (argc >= 3) {
-                       start = addr; end = addr + 1;
-               } else {
-                       start = 0; end = 31;
-               }
-
-               for (j = start; j < end; j++) {
-                       if (miiphy_info (devname, j, &oui, &model, &rev) == 0) {
-                               printf ("PHY 0x%02X: "
-                                       "OUI = 0x%04X, "
-                                       "Model = 0x%02X, "
-                                       "Rev = 0x%02X, "
-                                       "%3dbase%s, %s\n",
-                                       j, oui, model, rev,
-                                       miiphy_speed (devname, j),
-                                       miiphy_is_1000base_x (devname, j)
-                                               ? "X" : "T",
-                                       (miiphy_duplex (devname, j) == FULL)
-                                               ? "FDX" : "HDX");
-                       }
-               }
-       } else if (op == 'r') {
-               if (miiphy_read (devname, addr, reg, &data) != 0) {
-                       puts ("Error reading from the PHY\n");
-                       rcode = 1;
-               } else {
-                       printf ("%04X\n", data & 0x0000FFFF);
-               }
-       } else if (op == 'w') {
-               if (miiphy_write (devname, addr, reg, data) != 0) {
-                       puts ("Error writing to the PHY\n");
-                       rcode = 1;
-               }
-       } else if (op == 'd') {
-               if (argc == 2)
-                       miiphy_listdev ();
-               else
-                       miiphy_set_current_dev (argv[2]);
-       } else {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
-
-       /*
-        * Save the parameters for repeats.
-        */
-       last_op = op;
-       last_addr = addr;
-       last_data = data;
-       last_reg = reg;
-
-       return rcode;
-}
-
-/***************************************************/
-
-U_BOOT_CMD(
-       mii,    5,      1,      do_mii,
-       "mii     - MII utility commands\n",
-       "device                     - list available devices\n"
-       "mii device <devname>           - set current device\n"
-       "mii info   <addr>              - display MII PHY info\n"
-       "mii read   <addr> <reg>        - read  MII PHY <addr> register <reg>\n"
-       "mii write  <addr> <reg> <data> - write MII PHY <addr> register <reg>\n"
-);
-
-#else /* ! CONFIG_TERSE_MII ================================================= */
-
 typedef struct _MII_reg_desc_t {
        ushort regno;
        char * name;
@@ -438,6 +301,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        int             rcode = 0;
        char            *devname;
 
+       if (argc < 2) {
+               printf("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
 #if defined(CONFIG_8xx) || defined(CONFIG_MCF532x)
        mii_init ();
 #endif
@@ -594,5 +462,3 @@ U_BOOT_CMD(
        "mii dump   <addr> <reg>        - pretty-print <addr> <reg> (0-5 only)\n"
        "Addr and/or reg may be ranges, e.g. 2-7.\n"
 );
-
-#endif /* CONFIG_TERSE_MII */
index 1fdd7a67f60b7aa9962136652a84952e0f948c7c..b248a2cdb2c822f67c5c4e604669b4155bd96e5a 100644 (file)
@@ -347,6 +347,14 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                                opts.quiet      = quiet;
                                ret = nand_write_opts(nand, &opts);
                        }
+               } else if (s != NULL && !strcmp(s, ".oob")) {
+                       /* read out-of-band data */
+                       if (read)
+                               ret = nand->read_oob(nand, off, size, &size,
+                                                    (u_char *) addr);
+                       else
+                               ret = nand->write_oob(nand, off, size, &size,
+                                                     (u_char *) addr);
                } else {
                        if (read)
                                ret = nand_read(nand, off, &size, (u_char *)addr);
index 67704088104696424fffc97c20d16b6e238729a8..dd263b6666318b60db83de3de767e0ec8f0501fa 100644 (file)
@@ -81,8 +81,6 @@ extern void env_crc_update (void);
 /************************************************************************
 ************************************************************************/
 
-static int envmatch (uchar *, int);
-
 /*
  * Table with supported baudrates (defined in config_xyz.h)
  */
@@ -576,8 +574,7 @@ int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  * If the names match, return the index for the value2, else NULL.
  */
 
-static int
-envmatch (uchar *s1, int i2)
+int envmatch (uchar *s1, int i2)
 {
 
        while (*s1 == env_get_char(i2++))
diff --git a/common/cmd_terminal.c b/common/cmd_terminal.c
new file mode 100644 (file)
index 0000000..8871607
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * (C) Copyright 2007 OpenMoko, Inc.
+ * Written by Harald Welte <laforge@openmoko.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
+ */
+
+/*
+ * Boot support
+ */
+#include <common.h>
+#include <command.h>
+#include <devices.h>
+
+#if defined(CONFIG_CMD_TERMINAL)
+
+int do_terminal(cmd_tbl_t * cmd, int flag, int argc, char *argv[])
+{
+       int i, l;
+       int last_tilde = 0;
+       device_t *dev = NULL;
+
+       if (argc < 1)
+               return -1;
+
+       /* Scan for selected output/input device */
+       for (i = 1; i <= ListNumItems (devlist); i++) {
+               device_t *tmp = ListGetPtrToItem (devlist, i);
+               if (!strcmp(tmp->name, argv[1])) {
+                       dev = tmp;
+                       break;
+               }
+       }
+       if (!dev)
+               return -1;
+
+       serial_reinit_all();
+       printf("Entering terminal mode for port %s\n", dev->name);
+       puts("Use '~.' to leave the terminal and get back to u-boot\n");
+
+       while (1) {
+               int c;
+
+               /* read from console and display on serial port */
+               if (stdio_devices[0]->tstc()) {
+                       c = stdio_devices[0]->getc();
+                       if (last_tilde == 1) {
+                               if (c == '.') {
+                                       putc(c);
+                                       putc('\n');
+                                       break;
+                               } else {
+                                       last_tilde = 0;
+                                       /* write the delayed tilde */
+                                       dev->putc('~');
+                                       /* fall-through to print current
+                                        * character */
+                               }
+                       }
+                       if (c == '~') {
+                               last_tilde = 1;
+                               puts("[u-boot]");
+                               putc(c);
+                       }
+                       dev->putc(c);
+               }
+
+               /* read from serial port and display on console */
+               if (dev->tstc()) {
+                       c = dev->getc();
+                       putc(c);
+               }
+       }
+       return 0;
+}
+
+
+/***************************************************/
+
+U_BOOT_CMD(
+       terminal,       3,      1,      do_terminal,
+       "terminal - start terminal emulator\n",
+       ""
+);
+
+#endif /* CONFIG_CMD_TERMINAL */
index dce13b50d00032fe4d0f040710e24e680aba0c65..06f5e8aeaec5477ea6b8d191e23f2ef8538a5855 100644 (file)
@@ -27,7 +27,7 @@
 #include <altera.h>
 #include <ACEX1K.h>            /* ACEX device family */
 
-#if (CONFIG_FPGA & (CFG_ALTERA | CFG_CYCLON2))
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ALTERA) && defined(CONFIG_FPGA_CYCLON2)
 
 /* Define FPGA_DEBUG to get debug printf's */
 #ifdef FPGA_DEBUG
@@ -302,4 +302,4 @@ static int CYC2_ps_reloc (Altera_desc * desc, ulong reloc_offset)
        return ret_val;
 }
 
-#endif /* (CONFIG_FPGA & (CFG_ALTERA | CFG_CYCLON2)) */
+#endif /* CONFIG_FPGA && CONFIG_FPGA_ALTERA && CONFIG_FPGA_CYCLON2 */
index 38a07f8993f7ab1226044ed2497f05788ee9bfc5..ce0a2514db458f8bd7cac293ccd7ecdf21ea7d42 100644 (file)
@@ -57,7 +57,7 @@ int nand_legacy_rw (struct nand_chip* nand, int cmd,
            size_t start, size_t len,
            size_t * retlen, u_char * buf);
 
-/* info for NAND chips, defined in drivers/nand/nand.c */
+/* info for NAND chips, defined in drivers/mtd/nand/nand.c */
 extern nand_info_t nand_info[];
 
 /* references to names in env_common.c */
index 66107f91f17ff027c8b8d58f2ed6bcc23b7eca3c..5888f75d895ec43b71fc3596380d69b75616feff 100644 (file)
@@ -64,7 +64,7 @@ void env_relocate_spec(void)
        DECLARE_GLOBAL_DATA_PTR;
        unsigned long env_addr;
        int use_default = 0;
-       int retlen;
+       size_t retlen;
 
        env_addr = CFG_ENV_ADDR;
        env_addr -= (unsigned long)onenand_chip.base;
@@ -96,7 +96,7 @@ int saveenv(void)
 {
        unsigned long env_addr = CFG_ENV_ADDR;
        struct erase_info instr;
-       int retlen;
+       size_t retlen;
 
        instr.len = CFG_ENV_SIZE;
        instr.addr = env_addr;
index b5ee6e9601bf5322aa1216371f870af1f7e0bbd4..a13c140cff4ec6832e7601911accaafe8da655f8 100644 (file)
@@ -30,6 +30,9 @@
 #include <fdt_support.h>
 #include <exports.h>
 
+#ifdef CONFIG_QE
+#include "../drivers/qe/qe.h"
+#endif
 /*
  * Global data (for the gd->bd)
  */
@@ -111,6 +114,7 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)
        int   err;
        u32   tmp;              /* used to set 32 bit integer properties */
        char  *str;             /* used to set string properties */
+       const char *path;
 
        err = fdt_check_header(fdt);
        if (err < 0) {
@@ -148,14 +152,7 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)
        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 there is no "chosen" node in the blob, create it.
         */
        if (nodeoffset < 0) {
                /*
@@ -170,42 +167,55 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)
        }
 
        /*
-        * Update pre-existing properties, create them if non-existant.
+        * Create /chosen properites that don't exist in the fdt.
+        * If the property exists, update it only if the "force" parameter
+        * is true.
         */
        str = getenv("bootargs");
        if (str != NULL) {
-               err = fdt_setprop(fdt, nodeoffset,
-                       "bootargs", str, strlen(str)+1);
-               if (err < 0)
-                       printf("WARNING: could not set bootargs %s.\n",
-                               fdt_strerror(err));
+               path = fdt_getprop(fdt, nodeoffset, "bootargs", NULL);
+               if ((path == NULL) || force) {
+                       err = fdt_setprop(fdt, nodeoffset,
+                               "bootargs", str, strlen(str)+1);
+                       if (err < 0)
+                               printf("WARNING: could not set bootargs %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("WARNING: "
-                               "could not set linux,initrd-start %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("WARNING: could not set linux,initrd-end %s.\n",
-                               fdt_strerror(err));
+               path = fdt_getprop(fdt, nodeoffset, "linux,initrd-start", NULL);
+               if ((path == NULL) || force) {
+                       tmp = __cpu_to_be32(initrd_start);
+                       err = fdt_setprop(fdt, nodeoffset,
+                               "linux,initrd-start", &tmp, sizeof(tmp));
+                       if (err < 0)
+                               printf("WARNING: "
+                                       "could not set linux,initrd-start %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("WARNING: could not set linux,initrd-end %s.\n",
+                                       fdt_strerror(err));
+               }
        }
 
 #ifdef CONFIG_OF_STDOUT_VIA_ALIAS
-       err = fdt_fixup_stdout(fdt, nodeoffset);
+       path = fdt_getprop(fdt, nodeoffset, "linux,stdout-path", NULL);
+       if ((path == NULL) || force)
+               err = fdt_fixup_stdout(fdt, nodeoffset);
 #endif
 
 #ifdef OF_STDOUT_PATH
-       err = fdt_setprop(fdt, nodeoffset,
-               "linux,stdout-path", OF_STDOUT_PATH, strlen(OF_STDOUT_PATH)+1);
-       if (err < 0)
-               printf("WARNING: could not set linux,stdout-path %s.\n",
-                       fdt_strerror(err));
+       path = fdt_getprop(fdt, nodeoffset, "linux,stdout-path", NULL);
+       if ((path == NULL) || force) {
+               err = fdt_setprop(fdt, nodeoffset,
+                       "linux,stdout-path", OF_STDOUT_PATH, strlen(OF_STDOUT_PATH)+1);
+               if (err < 0)
+                       printf("WARNING: could not set linux,stdout-path %s.\n",
+                               fdt_strerror(err));
+       }
 #endif
 
        return err;
@@ -607,4 +617,49 @@ void fdt_fixup_ethernet(void *fdt, bd_t *bd)
 #endif
        }
 }
+
+#ifdef CONFIG_QE
+/*
+ * If a QE firmware has been uploaded, then add the 'firmware' node under
+ * the 'qe' node.
+ */
+void fdt_fixup_qe_firmware(void *fdt)
+{
+       struct qe_firmware_info *qe_fw_info;
+       int node, ret;
+
+       qe_fw_info = qe_get_firmware_info();
+       if (!qe_fw_info)
+               return;
+
+       node = fdt_path_offset(fdt, "/qe");
+       if (node < 0)
+               return;
+
+       /* We assume the node doesn't exist yet */
+       node = fdt_add_subnode(fdt, node, "firmware");
+       if (node < 0)
+               return;
+
+       ret = fdt_setprop(fdt, node, "extended-modes",
+               &qe_fw_info->extended_modes, sizeof(u64));
+       if (ret < 0)
+               goto error;
+
+       ret = fdt_setprop_string(fdt, node, "id", qe_fw_info->id);
+       if (ret < 0)
+               goto error;
+
+       ret = fdt_setprop(fdt, node, "virtual-traps", qe_fw_info->vtraps,
+               sizeof(qe_fw_info->vtraps));
+       if (ret < 0)
+               goto error;
+
+       return;
+
+error:
+       fdt_del_node(fdt, node);
+}
+#endif
+
 #endif
index 2eff239c47863bd59d44fb451c964ac8f47a19e3..d8b6ae354ab3852c22f528c261a58321866fd7d8 100644 (file)
@@ -67,14 +67,11 @@ static int fpga_dev_info( int devnum );
 static void fpga_no_sup( char *fn, char *msg )
 {
        if ( fn && msg ) {
-               printf( "%s: No support for %s.  CONFIG_FPGA defined as 0x%x.\n",
-                               fn, msg, CONFIG_FPGA );
+               printf( "%s: No support for %s.\n", fn, msg);
        } else if ( msg ) {
-               printf( "No support for %s. CONFIG_FPGA defined as 0x%x.\n",
-                               msg, CONFIG_FPGA );
+               printf( "No support for %s.\n", msg);
        } else {
-               printf( "No FPGA suport!  CONFIG_FPGA defined as 0x%x.\n",
-                               CONFIG_FPGA );
+               printf( "No FPGA suport!\n");
        }
 }
 
@@ -112,11 +109,6 @@ static __attribute__((__const__)) fpga_desc * __attribute__((__const__)) fpga_va
                printf( "%s: Null buffer.\n", fn );
                return (fpga_desc * const)NULL;
        }
-       if ( !bsize ) {
-               printf( "%s: Null buffer size.\n", fn );
-               return (fpga_desc * const)NULL;
-       }
-
        return desc;
 }
 
@@ -135,7 +127,7 @@ static int fpga_dev_info( int devnum )
 
                switch ( desc->devtype ) {
                case fpga_xilinx:
-#if CONFIG_FPGA & CFG_FPGA_XILINX
+#if defined(CONFIG_FPGA_XILINX)
                        printf( "Xilinx Device\nDescriptor @ 0x%p\n", desc );
                        ret_val = xilinx_info( desc->devdesc );
 #else
@@ -143,7 +135,7 @@ static int fpga_dev_info( int devnum )
 #endif
                        break;
                case fpga_altera:
-#if CONFIG_FPGA & CFG_FPGA_ALTERA
+#if defined(CONFIG_FPGA_ALTERA)
                        printf( "Altera Device\nDescriptor @ 0x%p\n", desc );
                        ret_val = altera_info( desc->devdesc );
 #else
@@ -175,14 +167,14 @@ int fpga_reloc( fpga_type devtype, void *desc, ulong reloc_off )
 
        switch ( devtype ) {
        case fpga_xilinx:
-#if CONFIG_FPGA & CFG_FPGA_XILINX
+#if defined(CONFIG_FPGA_XILINX)
                ret_val = xilinx_reloc( desc, reloc_off );
 #else
                fpga_no_sup( (char *)__FUNCTION__, "Xilinx devices" );
 #endif
                break;
        case fpga_altera:
-#if CONFIG_FPGA & CFG_FPGA_ALTERA
+#if defined(CONFIG_FPGA_ALTERA)
                ret_val = altera_reloc( desc, reloc_off );
 #else
                fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
@@ -268,14 +260,14 @@ int fpga_load( int devnum, void *buf, size_t bsize )
        if ( desc ) {
                switch ( desc->devtype ) {
                case fpga_xilinx:
-#if CONFIG_FPGA & CFG_FPGA_XILINX
+#if defined(CONFIG_FPGA_XILINX)
                        ret_val = xilinx_load( desc->devdesc, buf, bsize );
 #else
                        fpga_no_sup( (char *)__FUNCTION__, "Xilinx devices" );
 #endif
                        break;
                case fpga_altera:
-#if CONFIG_FPGA & CFG_FPGA_ALTERA
+#if defined(CONFIG_FPGA_ALTERA)
                        ret_val = altera_load( desc->devdesc, buf, bsize );
 #else
                        fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
@@ -301,14 +293,14 @@ int fpga_dump( int devnum, void *buf, size_t bsize )
        if ( desc ) {
                switch ( desc->devtype ) {
                case fpga_xilinx:
-#if CONFIG_FPGA & CFG_FPGA_XILINX
+#if defined(CONFIG_FPGA_XILINX)
                        ret_val = xilinx_dump( desc->devdesc, buf, bsize );
 #else
                        fpga_no_sup( (char *)__FUNCTION__, "Xilinx devices" );
 #endif
                        break;
                case fpga_altera:
-#if CONFIG_FPGA & CFG_FPGA_ALTERA
+#if defined(CONFIG_FPGA_ALTERA)
                        ret_val = altera_dump( desc->devdesc, buf, bsize );
 #else
                        fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
index 379695cc426b8c496c18b9b10295d0970c3a9690..163ba02e62b0df0ef4f37afa6172259abe6a4f70 100644 (file)
@@ -59,7 +59,6 @@ extern int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
 
 #define MAX_DELAY_STOP_STR 32
 
-static int parse_line (char *, char *[]);
 #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
 static int abortboot(int);
 #endif
@@ -696,7 +695,7 @@ static void cread_add_str(char *str, int strsize, int insert, unsigned long *num
        }
 }
 
-static int cread_line(char *buf, unsigned int *len)
+static int cread_line(const char *const prompt, char *buf, unsigned int *len)
 {
        unsigned long num = 0;
        unsigned long eol_num = 0;
@@ -710,6 +709,13 @@ static int cread_line(char *buf, unsigned int *len)
 
        while (1) {
                rlen = 1;
+#ifdef CONFIG_BOOT_RETRY_TIME
+               while (!tstc()) {       /* while no incoming data */
+                       if (retry_time >= 0 && get_ticks() > endtime)
+                               return (-2);    /* timed out */
+               }
+#endif
+
                ichar = getcmd_getch();
 
                if ((ichar == '\n') || (ichar == '\r')) {
@@ -818,6 +824,7 @@ static int cread_line(char *buf, unsigned int *len)
                        insert = !insert;
                        break;
                case CTL_CH('x'):
+               case CTL_CH('u'):
                        BEGINNING_OF_LINE();
                        ERASE_TO_EOL();
                        break;
@@ -867,6 +874,27 @@ static int cread_line(char *buf, unsigned int *len)
                        REFRESH_TO_EOL();
                        continue;
                }
+#ifdef CONFIG_AUTO_COMPLETE
+               case '\t': {
+                       int num2, col;
+
+                       /* do not autocomplete when in the middle */
+                       if (num < eol_num) {
+                               getcmd_cbeep();
+                               break;
+                       }
+
+                       buf[num] = '\0';
+                       col = strlen(prompt) + eol_num;
+                       num2 = num;
+                       if (cmd_auto_complete(prompt, buf, &num2, &col)) {
+                               col = num2 - num;
+                               num += col;
+                               eol_num += col;
+                       }
+                       break;
+               }
+#endif
                default:
                        cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
                        break;
@@ -896,8 +924,14 @@ static int cread_line(char *buf, unsigned int *len)
  */
 int readline (const char *const prompt)
 {
+       return readline_into_buffer(prompt, console_buffer);
+}
+
+
+int readline_into_buffer (const char *const prompt, char * buffer)
+{
+       char *p = buffer;
 #ifdef CONFIG_CMDLINE_EDITING
-       char *p = console_buffer;
        unsigned int len=MAX_CMDBUF_SIZE;
        int rc;
        static int initted = 0;
@@ -909,10 +943,10 @@ int readline (const char *const prompt)
 
        puts (prompt);
 
-       rc = cread_line(p, &len);
+       rc = cread_line(prompt, p, &len);
        return rc < 0 ? rc : len;
 #else
-       char   *p = console_buffer;
+       char * p_buf = p;
        int     n = 0;                          /* buffer index         */
        int     plen = 0;                       /* prompt length        */
        int     col;                            /* output column cnt    */
@@ -950,13 +984,13 @@ int readline (const char *const prompt)
                case '\n':
                        *p = '\0';
                        puts ("\r\n");
-                       return (p - console_buffer);
+                       return (p - p_buf);
 
                case '\0':                              /* nul                  */
                        continue;
 
                case 0x03:                              /* ^C - break           */
-                       console_buffer[0] = '\0';       /* discard input */
+                       p_buf[0] = '\0';        /* discard input */
                        return (-1);
 
                case 0x15:                              /* ^U - erase line      */
@@ -964,20 +998,20 @@ int readline (const char *const prompt)
                                puts (erase_seq);
                                --col;
                        }
-                       p = console_buffer;
+                       p = p_buf;
                        n = 0;
                        continue;
 
                case 0x17:                              /* ^W - erase word      */
-                       p=delete_char(console_buffer, p, &col, &n, plen);
+                       p=delete_char(p_buf, p, &col, &n, plen);
                        while ((n > 0) && (*p != ' ')) {
-                               p=delete_char(console_buffer, p, &col, &n, plen);
+                               p=delete_char(p_buf, p, &col, &n, plen);
                        }
                        continue;
 
                case 0x08:                              /* ^H  - backspace      */
                case 0x7F:                              /* DEL - backspace      */
-                       p=delete_char(console_buffer, p, &col, &n, plen);
+                       p=delete_char(p_buf, p, &col, &n, plen);
                        continue;
 
                default:
@@ -990,7 +1024,7 @@ int readline (const char *const prompt)
                                        /* if auto completion triggered just continue */
                                        *p = '\0';
                                        if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
-                                               p = console_buffer + n; /* reset */
+                                               p = p_buf + n;  /* reset */
                                                continue;
                                        }
 #endif
index dee1cc0ab9c6c77a08e34835bf1565d0e2bff0d5..56010807be599a529537d0a8df508140e9989561 100644 (file)
@@ -33,7 +33,7 @@ static struct serial_device *serial_devices = NULL;
 static struct serial_device *serial_current = NULL;
 
 #if !defined(CONFIG_LWMON) && !defined(CONFIG_PXA27X)
-struct serial_device *default_serial_console (void)
+struct serial_device *__default_serial_console (void)
 {
 #if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2)
        return &serial_smc_device;
@@ -41,7 +41,8 @@ struct serial_device *default_serial_console (void)
    || defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4)
        return &serial_scc_device;
 #elif defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) \
-   || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_MPC5xxx)
+   || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) \
+   || defined(CONFIG_MPC5xxx)
 #if defined(CONFIG_CONS_INDEX) && defined(CFG_NS16550_SERIAL)
 #if (CONFIG_CONS_INDEX==1)
        return &eserial1_device;
@@ -63,6 +64,8 @@ struct serial_device *default_serial_console (void)
 #error No default console
 #endif
 }
+
+struct serial_device *default_serial_console(void) __attribute__((weak, alias("__default_serial_console")));
 #endif
 
 int serial_register (struct serial_device *dev)
@@ -91,7 +94,8 @@ void serial_initialize (void)
 #endif
 
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) \
- || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_MPC5xxx)
+ || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) \
+ || defined(CONFIG_MPC5xxx)
        serial_register(&serial0_device);
        serial_register(&serial1_device);
 #endif
index 06550b9858cde121928d6b9beab8bffebb176f1c..2f1ea2c099e7be6025871f0b5a1f50e5c2ad7f31 100644 (file)
@@ -25,7 +25,7 @@
 #include <common.h>            /* core U-Boot definitions */
 #include <spartan2.h>          /* Spartan-II device family */
 
-#if (CONFIG_FPGA & (CFG_XILINX | CFG_SPARTAN2))
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_SPARTAN2)
 
 /* Define FPGA_DEBUG to get debug printf's */
 #ifdef FPGA_DEBUG
@@ -441,7 +441,7 @@ static int Spartan2_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)
        int ret_val = FPGA_FAIL;        /* assume the worst */
        Xilinx_Spartan2_Slave_Serial_fns *fn = desc->iface_fns;
        int i;
-       char  val;
+       unsigned char val;
 
        PRINTF ("%s: start with interface functions @ 0x%p\n",
                        __FUNCTION__, fn);
@@ -561,6 +561,13 @@ static int Spartan2_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)
                }
                putc ('\n');                    /* terminate the dotted line */
 
+               /*
+                * Run the post configuration function if there is one.
+                */
+               if (*fn->post) {
+                       (*fn->post) (cookie);
+               }
+
 #ifdef CFG_FPGA_PROG_FEEDBACK
                if (ret_val == FPGA_SUCCESS) {
                        puts ("Done.\n");
@@ -615,8 +622,10 @@ static int Spartan2_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)
                        PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,
                                        desc);
 
-                       addr = (ulong) (fn->pre) + reloc_offset;
-                       fn_r->pre = (Xilinx_pre_fn) addr;
+                       if (fn->pre) {
+                               addr = (ulong) (fn->pre) + reloc_offset;
+                               fn_r->pre = (Xilinx_pre_fn) addr;
+                       }
 
                        addr = (ulong) (fn->pgm) + reloc_offset;
                        fn_r->pgm = (Xilinx_pgm_fn) addr;
@@ -633,6 +642,11 @@ static int Spartan2_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)
                        addr = (ulong) (fn->wr) + reloc_offset;
                        fn_r->wr = (Xilinx_wr_fn) addr;
 
+                       if (fn->post) {
+                               addr = (ulong) (fn->post) + reloc_offset;
+                               fn_r->post = (Xilinx_post_fn) addr;
+                       }
+
                        fn_r->relocated = TRUE;
 
                } else {
index f7c4f8cf2b24aa9e70110d68440198449d8c01b8..d329e70cf736a5550cd7a1ee50b6aa0b52c14f90 100644 (file)
@@ -30,7 +30,7 @@
 #include <common.h>            /* core U-Boot definitions */
 #include <spartan3.h>          /* Spartan-II device family */
 
-#if (CONFIG_FPGA & (CFG_XILINX | CFG_SPARTAN3))
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_SPARTAN3)
 
 /* Define FPGA_DEBUG to get debug printf's */
 #ifdef FPGA_DEBUG
@@ -446,7 +446,7 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)
        int ret_val = FPGA_FAIL;        /* assume the worst */
        Xilinx_Spartan3_Slave_Serial_fns *fn = desc->iface_fns;
        int i;
-       char  val;
+       unsigned char val;
 
        PRINTF ("%s: start with interface functions @ 0x%p\n",
                        __FUNCTION__, fn);
@@ -566,6 +566,13 @@ static int Spartan3_ss_load (Xilinx_desc * desc, void *buf, size_t bsize)
                }
                putc ('\n');                    /* terminate the dotted line */
 
+               /*
+                * Run the post configuration function if there is one.
+                */
+               if (*fn->post) {
+                       (*fn->post) (cookie);
+               }
+
 #ifdef CFG_FPGA_PROG_FEEDBACK
                if (ret_val == FPGA_SUCCESS) {
                        puts ("Done.\n");
@@ -620,8 +627,10 @@ static int Spartan3_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)
                        PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,
                                        desc);
 
-                       addr = (ulong) (fn->pre) + reloc_offset;
-                       fn_r->pre = (Xilinx_pre_fn) addr;
+                       if (fn->pre) {
+                               addr = (ulong) (fn->pre) + reloc_offset;
+                               fn_r->pre = (Xilinx_pre_fn) addr;
+                       }
 
                        addr = (ulong) (fn->pgm) + reloc_offset;
                        fn_r->pgm = (Xilinx_pgm_fn) addr;
@@ -638,6 +647,11 @@ static int Spartan3_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)
                        addr = (ulong) (fn->wr) + reloc_offset;
                        fn_r->wr = (Xilinx_wr_fn) addr;
 
+                       if (fn->post) {
+                               addr = (ulong) (fn->post) + reloc_offset;
+                               fn_r->post = (Xilinx_post_fn) addr;
+                       }
+
                        fn_r->relocated = TRUE;
 
                } else {
index 933afa9e7bc32f8346fdad5b62732907887e82e0..4df01eabe513163eeb80475f9495b72ea504ac80 100644 (file)
@@ -53,7 +53,7 @@
 
 #include <usb.h>
 #ifdef CONFIG_4xx
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #endif
 
 #undef USB_DEBUG
index 7bdfcc0b903418018fefae26c40249f755fa9edb..1703b2339b86038eb22ff6fe553f1abc78b181ff 100644 (file)
@@ -84,6 +84,7 @@ int repeat_delay;
 static unsigned char num_lock = 0;
 static unsigned char caps_lock = 0;
 static unsigned char scroll_lock = 0;
+static unsigned char ctrl = 0;
 
 static unsigned char leds __attribute__ ((aligned (0x4)));
 
@@ -120,6 +121,9 @@ static void usb_kbd_put_queue(char data)
 /* test if a character is in the queue */
 static int usb_kbd_testc(void)
 {
+#ifdef CFG_USB_EVENT_POLL
+       usb_event_poll();
+#endif
        if(usb_in_pointer==usb_out_pointer)
                return(0); /* no data */
        else
@@ -274,6 +278,10 @@ static int usb_kbd_translate(unsigned char scancode,unsigned char modifier,int p
                else /* non shifted */
                        keycode=usb_kbd_numkey[scancode-0x1e];
        }
+
+       if (ctrl)
+               keycode = scancode - 0x3;
+
        if(pressed==1) {
                if(scancode==NUM_LOCK) {
                        num_lock=~num_lock;
@@ -306,6 +314,17 @@ static int usb_kbd_irq(struct usb_device *dev)
                return 1;
        }
        res=0;
+
+       switch (new[0]) {
+       case 0x0:       /* No combo key pressed */
+               ctrl = 0;
+               break;
+       case 0x01:      /* Left Ctrl pressed */
+       case 0x10:      /* Right Ctrl pressed */
+               ctrl = 1;
+               break;
+       }
+
        for (i = 2; i < 8; i++) {
                if (old[i] > 3 && memscan(&new[2], old[i], 6) == &new[8]) {
                        res|=usb_kbd_translate(old[i],new[0],0);
index b5dc366aad39c15de8f57e88c8c7699d26c1cc56..1283ff610d8b22865665951ac96bb4f69a8d1d59 100644 (file)
@@ -31,7 +31,7 @@
 #include <common.h>
 #include <virtex2.h>
 
-#if (CONFIG_FPGA & (CFG_XILINX | CFG_VIRTEX2))
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_VIRTEX2)
 
 #if 0
 #define FPGA_DEBUG
index e03e78cb28527403f1085c5dfdc955b0daf0e509..c898238682416a5bb77ef0b9ec0279405ffb1f61 100644 (file)
@@ -32,7 +32,7 @@
 #include <spartan2.h>
 #include <spartan3.h>
 
-#if (CONFIG_FPGA & CFG_FPGA_XILINX)
+#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_XILINX)
 
 #if 0
 #define FPGA_DEBUG
@@ -59,7 +59,7 @@ int xilinx_load (Xilinx_desc * desc, void *buf, size_t bsize)
        } else
                switch (desc->family) {
                case Xilinx_Spartan2:
-#if (CONFIG_FPGA & CFG_SPARTAN2)
+#if defined(CONFIG_FPGA_SPARTAN2)
                        PRINTF ("%s: Launching the Spartan-II Loader...\n",
                                        __FUNCTION__);
                        ret_val = Spartan2_load (desc, buf, bsize);
@@ -69,7 +69,7 @@ int xilinx_load (Xilinx_desc * desc, void *buf, size_t bsize)
 #endif
                        break;
                case Xilinx_Spartan3:
-#if (CONFIG_FPGA & CFG_SPARTAN3)
+#if defined(CONFIG_FPGA_SPARTAN3)
                        PRINTF ("%s: Launching the Spartan-III Loader...\n",
                                        __FUNCTION__);
                        ret_val = Spartan3_load (desc, buf, bsize);
@@ -79,7 +79,7 @@ int xilinx_load (Xilinx_desc * desc, void *buf, size_t bsize)
 #endif
                        break;
                case Xilinx_Virtex2:
-#if (CONFIG_FPGA & CFG_VIRTEX2)
+#if defined(CONFIG_FPGA_VIRTEX2)
                        PRINTF ("%s: Launching the Virtex-II Loader...\n",
                                        __FUNCTION__);
                        ret_val = Virtex2_load (desc, buf, bsize);
@@ -106,7 +106,7 @@ int xilinx_dump (Xilinx_desc * desc, void *buf, size_t bsize)
        } else
                switch (desc->family) {
                case Xilinx_Spartan2:
-#if (CONFIG_FPGA & CFG_SPARTAN2)
+#if defined(CONFIG_FPGA_SPARTAN2)
                        PRINTF ("%s: Launching the Spartan-II Reader...\n",
                                        __FUNCTION__);
                        ret_val = Spartan2_dump (desc, buf, bsize);
@@ -116,7 +116,7 @@ int xilinx_dump (Xilinx_desc * desc, void *buf, size_t bsize)
 #endif
                        break;
                case Xilinx_Spartan3:
-#if (CONFIG_FPGA & CFG_SPARTAN3)
+#if defined(CONFIG_FPGA_SPARTAN3)
                        PRINTF ("%s: Launching the Spartan-III Reader...\n",
                                        __FUNCTION__);
                        ret_val = Spartan3_dump (desc, buf, bsize);
@@ -126,7 +126,7 @@ int xilinx_dump (Xilinx_desc * desc, void *buf, size_t bsize)
 #endif
                        break;
                case Xilinx_Virtex2:
-#if (CONFIG_FPGA & CFG_VIRTEX2)
+#if defined( CONFIG_FPGA_VIRTEX2)
                        PRINTF ("%s: Launching the Virtex-II Reader...\n",
                                        __FUNCTION__);
                        ret_val = Virtex2_dump (desc, buf, bsize);
@@ -198,7 +198,7 @@ int xilinx_info (Xilinx_desc * desc)
                        printf ("Device Function Table @ 0x%p\n", desc->iface_fns);
                        switch (desc->family) {
                        case Xilinx_Spartan2:
-#if (CONFIG_FPGA & CFG_SPARTAN2)
+#if defined(CONFIG_FPGA_SPARTAN2)
                                Spartan2_info (desc);
 #else
                                /* just in case */
@@ -207,7 +207,7 @@ int xilinx_info (Xilinx_desc * desc)
 #endif
                                break;
                        case Xilinx_Spartan3:
-#if (CONFIG_FPGA & CFG_SPARTAN3)
+#if defined(CONFIG_FPGA_SPARTAN3)
                                Spartan3_info (desc);
 #else
                                /* just in case */
@@ -216,7 +216,7 @@ int xilinx_info (Xilinx_desc * desc)
 #endif
                                break;
                        case Xilinx_Virtex2:
-#if (CONFIG_FPGA & CFG_VIRTEX2)
+#if defined(CONFIG_FPGA_VIRTEX2)
                                Virtex2_info (desc);
 #else
                                /* just in case */
@@ -249,7 +249,7 @@ int xilinx_reloc (Xilinx_desc * desc, ulong reloc_offset)
        } else
                switch (desc->family) {
                case Xilinx_Spartan2:
-#if (CONFIG_FPGA & CFG_SPARTAN2)
+#if defined(CONFIG_FPGA_SPARTAN2)
                        ret_val = Spartan2_reloc (desc, reloc_offset);
 #else
                        printf ("%s: No support for Spartan-II devices.\n",
@@ -257,7 +257,7 @@ int xilinx_reloc (Xilinx_desc * desc, ulong reloc_offset)
 #endif
                        break;
                case Xilinx_Spartan3:
-#if (CONFIG_FPGA & CFG_SPARTAN3)
+#if defined(CONFIG_FPGA_SPARTAN3)
                        ret_val = Spartan3_reloc (desc, reloc_offset);
 #else
                        printf ("%s: No support for Spartan-III devices.\n",
@@ -265,7 +265,7 @@ int xilinx_reloc (Xilinx_desc * desc, ulong reloc_offset)
 #endif
                        break;
                case Xilinx_Virtex2:
-#if (CONFIG_FPGA & CFG_VIRTEX2)
+#if defined(CONFIG_FPGA_VIRTEX2)
                        ret_val = Virtex2_reloc (desc, reloc_offset);
 #else
                        printf ("%s: No support for Virtex-II devices.\n",
@@ -308,4 +308,4 @@ static int xilinx_validate (Xilinx_desc * desc, char *fn)
        return ret_val;
 }
 
-#endif                                                 /* CONFIG_FPGA & CFG_FPGA_XILINX */
+#endif /* CONFIG_FPGA && CONFIG_FPGA_XILINX */
index 7e4af441054bb1c3c44c81530b36a0f58bbc3c1b..a33b956975eaec6f71be9bc337da3683411a6f53 100644 (file)
@@ -408,25 +408,25 @@ static int npe_init(struct eth_device *dev, bd_t * bis)
        if (ixEthAccPortRxCallbackRegister(p_npe->eth_id, npe_rx_callback,
                                           (u32)p_npe) != IX_ETH_ACC_SUCCESS) {
                printf("can't register RX callback!\n");
-               return 0;
+               return -1;
        }
 
        if (ixEthAccPortTxDoneCallbackRegister(p_npe->eth_id, npe_tx_callback,
                                               (u32)p_npe) != IX_ETH_ACC_SUCCESS) {
                printf("can't register TX callback!\n");
-               return 0;
+               return -1;
        }
 
        npe_set_mac_address(dev);
 
        if (ixEthAccPortEnable(p_npe->eth_id) != IX_ETH_ACC_SUCCESS) {
                printf("can't enable port!\n");
-               return 0;
+               return -1;
        }
 
        p_npe->active = 1;
 
-       return 1;
+       return 0;
 }
 
 #if 0 /* test-only: probably have to deal with it when booting linux (for a clean state) */
index 2015958571423aa5705e46b8525bcc2309b841c1..cf520b699ed55a2b56ed8fd1fee14b5ae981ad24 100644 (file)
 #include <common.h>
 #include <asm/arch/ixp425.h>
 
+/*
+ *               14.7456 MHz
+ * Baud Rate = --------------
+ *              16 x Divisor
+ */
+#define SERIAL_CLOCK 921600
+
 DECLARE_GLOBAL_DATA_PTR;
 
 void serial_setbrg (void)
@@ -38,18 +45,8 @@ void serial_setbrg (void)
        unsigned int quot = 0;
        int uart = CFG_IXP425_CONSOLE;
 
-       if (gd->baudrate == 1200)
-               quot = 192;
-       else if (gd->baudrate == 9600)
-               quot = 96;
-       else if (gd->baudrate == 19200)
-               quot = 48;
-       else if (gd->baudrate == 38400)
-               quot = 24;
-       else if (gd->baudrate == 57600)
-               quot = 16;
-       else if (gd->baudrate == 115200)
-               quot = 8;
+       if ((gd->baudrate <= SERIAL_CLOCK) && (SERIAL_CLOCK % gd->baudrate == 0))
+               quot = SERIAL_CLOCK / gd->baudrate;
        else
                hang ();
 
@@ -65,7 +62,6 @@ void serial_setbrg (void)
        IER(uart) = IER_UUE;
 }
 
-
 /*
  * Initialise the serial port with the given baudrate. The settings
  * are always 8 data bits, no parity, 1 stop bit, no start bits.
index accae6e066eb6897b3d3d5ed810e2672efab63ed..6421a511e423a49fe1d87c60c993c5f252c49e25 100644 (file)
 #include <mpc512x.h>
 #include <asm/processor.h>
 
+#if defined(CONFIG_OF_LIBFDT)
+#include <fdt_support.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 int checkcpu (void)
@@ -125,3 +129,20 @@ void watchdog_reset (void)
                enable_interrupts ();
 }
 #endif
+
+#ifdef CONFIG_OF_LIBFDT
+void ft_cpu_setup(void *blob, bd_t *bd)
+{
+       char * cpu_path = "/cpus/" OF_CPU;
+       char * eth_path = "/" OF_SOC "/ethernet@2800";
+
+       do_fixup_by_path_u32(blob, cpu_path, "timebase-frequency", OF_TBCLK, 1);
+       do_fixup_by_path_u32(blob, cpu_path, "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_path_u32(blob, cpu_path, "ref-frequency", CFG_MPC512X_CLKIN, 1);
+       do_fixup_by_path_u32(blob, cpu_path, "clock-frequency", bd->bi_intfreq, 1);
+       do_fixup_by_path_u32(blob, "/" OF_SOC, "bus-frequency", bd->bi_ipsfreq, 1);
+       do_fixup_by_path_u32(blob, "/" OF_SOC, "ref-frequency", CFG_MPC512X_CLKIN, 1);
+       do_fixup_by_path(blob, eth_path, "address", bd->bi_enetaddr, 6, 0);
+       do_fixup_by_path(blob, eth_path, "local-mac-address", bd->bi_enetaddr, 6, 0);
+}
+#endif
index 675b7a2e09e5475ef3d81291c145933a1801f1be..c226a8a5a20e0525057083ace34a5fcc1f7e3b44 100644 (file)
@@ -299,7 +299,7 @@ int mpc512x_fec_init_phy (struct eth_device *dev, bd_t * bis)
                 * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock
                 * and do not drop the Preamble.
                 */
-               fec->eth->mii_speed = (((gd->ipb_clk / 1000000) / 5) + 1) << 1;
+               fec->eth->mii_speed = (((gd->ips_clk / 1000000) / 5) + 1) << 1;
 
                /*
                 * Reset PHY, then delay 300ns
index 00e28d6404dfd439fa28f2147e42cdd90855a4b3..56ba44372694ac44b2246a5ef854600b9c2c5aac 100644 (file)
@@ -236,7 +236,7 @@ static int mpc_get_fdr (int speed)
        if (fdr == -1) {
                ulong best_speed = 0;
                ulong divider;
-               ulong ipb, scl;
+               ulong ips, scl;
                ulong bestmatch = 0xffffffffUL;
                int best_i = 0, best_j = 0, i, j;
                int SCL_Tap[] = { 9, 10, 12, 15, 5, 6, 7, 8};
@@ -251,18 +251,18 @@ static int mpc_get_fdr (int speed)
                        {126, 128}
                };
 
-               ipb = gd->ipb_clk;
+               ips = gd->ips_clk;
                for (i = 7; i >= 0; i--) {
                        for (j = 7; j >= 0; j--) {
                                scl = 2 * (scltap[j].scl2tap +
                                           (SCL_Tap[i] - 1) * scltap[j].tap2tap
                                           + 2);
-                               if (ipb <= speed*scl) {
-                                       if ((speed*scl - ipb) < bestmatch) {
-                                               bestmatch = speed*scl - ipb;
+                               if (ips <= speed*scl) {
+                                       if ((speed*scl - ips) < bestmatch) {
+                                               bestmatch = speed*scl - ips;
                                                best_i = i;
                                                best_j = j;
-                                               best_speed = ipb/scl;
+                                               best_speed = ips/scl;
                                        }
                                }
                        }
index 200ff2c49646a8793cc598c5ac3651dd30cfc024..8a214041ad8cef18b52e2a570cb8517f17927e26 100644 (file)
@@ -86,7 +86,7 @@ int serial_init(void)
        psc->mode = PSC_MODE_1_STOPBIT;
 
        /* calculate dividor for setting PSC CTUR and CTLR registers */
-       baseclk = (gd->ipb_clk + 8) / 16;
+       baseclk = (gd->ips_clk + 8) / 16;
        div = (baseclk + (gd->baudrate / 2)) / gd->baudrate;
 
        psc->ctur = (div >> 8) & 0xff;
index a609827387b9881ad8dbfb6beda6d6756daa335a..99e3495c2fdd258a88fd9f0d675dbf42ca590770 100644 (file)
@@ -96,7 +96,7 @@ int get_clocks (void)
                ips_clk = 0;
        }
 
-       gd->ipb_clk = ips_clk;
+       gd->ips_clk = ips_clk;
        gd->csb_clk = csb_clk;
        gd->cpu_clk = core_clk;
        gd->bus_clk = csb_clk;
@@ -118,7 +118,7 @@ int do_clocks (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        printf ("Clock configuration:\n");
        printf ("  CPU:                 %4d MHz\n", gd->cpu_clk / 1000000);
        printf ("  Coherent System Bus: %4d MHz\n", gd->csb_clk / 1000000);
-       printf ("  IPS Bus:             %4d MHz\n", gd->ipb_clk / 1000000);
+       printf ("  IPS Bus:             %4d MHz\n", gd->ips_clk / 1000000);
        printf ("  DDR:                 %4d MHz\n", 2 * gd->csb_clk / 1000000);
        return 0;
 }
index 5b03fef66c77ddac1bbbe0c032a0525b5752953b..ca1de954cd223b74236e63a7d17148f2082c0917 100644 (file)
@@ -121,7 +121,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 1d3da779a721534f71265ae8031a2bb79b38245b..2aded1a5f131dfff1d48b65402bc0ebbefe17d40 100644 (file)
@@ -288,13 +288,13 @@ static int mpc5xxx_fec_init(struct eth_device *dev, bd_t * bis)
                 * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock
                 * and do not drop the Preamble.
                 */
-               fec->eth->mii_speed = (((gd->ipb_clk >> 20) / 5) << 1); /* No MII for 7-wire mode */
+               fec->eth->mii_speed = (((gd->ipb_clk >> 20) / 5) << 1); /* No MII for 7-wire mode */
        }
 
        /*
         * Set Opcode/Pause Duration Register
         */
-       fec->eth->op_pause = 0x00010020;        /*FIXME0xffff0020; */
+       fec->eth->op_pause = 0x00010020;        /*FIXME 0xffff0020; */
 
        /*
         * Set Rx FIFO alarm and granularity value
@@ -902,7 +902,8 @@ int mpc5xxx_fec_initialize(bd_t * bis)
        defined(CONFIG_TOP5200)         || \
        defined(CONFIG_TQM5200)         || \
        defined(CONFIG_UC101)           || \
-       defined(CONFIG_V38B)
+       defined(CONFIG_V38B)            || \
+       defined(CONFIG_MUNICES)
 # ifndef CONFIG_FEC_10MBIT
        fec->xcv_type = MII100;
 # else
index 1d83fe26d998e638c18f9ca1c55553c0d8136829..a07c7769934f3c1406da221e5c10c59c78c8016d 100644 (file)
@@ -23,7 +23,7 @@ scEthernetRecv_Entry:         /* Task 0 */
 .long   0x00000000
 .long   0x00000000
 .long   scEthernetRecv_CSave - taskTable       /* Task 0 context save space */
-.long   0xf0000000
+.long   CFG_MBAR
 .globl scEthernetXmit_Entry
 scEthernetXmit_Entry:          /* Task 1 */
 .long   scEthernetXmit_TDT - taskTable /* Task 1 Descriptor Table */
@@ -33,7 +33,7 @@ scEthernetXmit_Entry:         /* Task 1 */
 .long   0x00000000
 .long   0x00000000
 .long   scEthernetXmit_CSave - taskTable       /* Task 1 context save space */
-.long   0xf0000000
+.long   CFG_MBAR
 
 
 .globl scEthernetRecv_TDT
@@ -151,7 +151,7 @@ scEthernetRecv_VarTab:      /* Task 0 Variable Table */
 .long   0x00000000     /* var[6] */
 .long   0x00000000     /* var[7] */
 .long   0x00000000     /* var[8] */
-.long   0xf0008800     /* var[9] */
+.long   (CFG_MBAR + 0x8800)    /* var[9] */
 .long   0x00000008     /* var[10] */
 .long   0x0000000c     /* var[11] */
 .long   0x80000000     /* var[12] */
@@ -190,7 +190,7 @@ scEthernetXmit_VarTab:      /* Task 1 Variable Table */
 .long   0x00000000     /* var[8] */
 .long   0x00000000     /* var[9] */
 .long   0x00000000     /* var[10] */
-.long   0xf0008800     /* var[11] */
+.long   (CFG_MBAR + 0x8800)    /* var[11] */
 .long   0x00000000     /* var[12] */
 .long   0x80000000     /* var[13] */
 .long   0x10000000     /* var[14] */
index 123a14c5aa01dc9c01b5312f3531270b669e44ef..4e10ddbcc2aefd434e3c61f16f3173d4111fb78c 100644 (file)
@@ -124,7 +124,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 78818a49ebd753254f09a3b6bc800294267bb44f..bb2747b6d70972d0814bd97b6932ad4fe9044f05 100644 (file)
@@ -113,7 +113,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 889bc77d2f820d3af5cb055013a307d0416a850e..98b0a7924443e1d83a493e1538c684d1d5aa93f5 100644 (file)
@@ -113,7 +113,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index c90d1e9457e80a065bb77208cf022a7b456ca958..036e61b908a46aefd6ff4a65d4b7990266360149 100644 (file)
@@ -113,7 +113,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index e56839d3aad020be2eb54c4f964774739dcfa7db..633d053914ec17f8b3f7b99f3d7e4ad09d6c0bb5 100644 (file)
@@ -77,7 +77,9 @@
 
 #define TX_BUF_CNT 2
 
-#define TOUT_LOOP 1000000
+#if !defined(CFG_SCC_TOUT_LOOP)
+  #define CFG_SCC_TOUT_LOOP 1000000
+#endif
 
 static char txbuf[TX_BUF_CNT][ DBUF_LENGTH ];
 
@@ -109,7 +111,7 @@ int eth_send(volatile void *packet, int length)
     }
 
     for(i=0; rtx->txbd[txIdx].cbd_sc & BD_ENET_TX_READY; i++) {
-       if (i >= TOUT_LOOP) {
+       if (i >= CFG_SCC_TOUT_LOOP) {
            puts ("scc: tx buffer not ready\n");
            goto out;
        }
@@ -121,7 +123,7 @@ int eth_send(volatile void *packet, int length)
                                BD_ENET_TX_WRAP);
 
     for(i=0; rtx->txbd[txIdx].cbd_sc & BD_ENET_TX_READY; i++) {
-       if (i >= TOUT_LOOP) {
+       if (i >= CFG_SCC_TOUT_LOOP) {
            puts ("scc: tx error\n");
            goto out;
        }
@@ -262,7 +264,6 @@ int eth_init(bd_t *bis)
     pram_ptr->sen_taddrm = 0x0;   /* Tmp Address (unused) */
     pram_ptr->sen_taddrl = 0x0;   /* Tmp Address (LSB) (unused) */
 
-
     /* 24.21 - (19): Initialize RxBD */
     for (i = 0; i < PKTBUFSRX; i++)
     {
index 3e84f234d7226a90886777696f215874bc853092..838454928380ada39374af5eca09f46c50ad3a97 100644 (file)
@@ -113,7 +113,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 232997005102a39036304f01d3c709d58976b475..94a3cb833477c70765726c0b8fb622a1fea4b555 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 ecc.o qe_io.o pci.o
+         spd_sdram.o ecc.o qe_io.o pci.o fdt.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
index f1ea17d5a52d331a8c5f7b9a2bc9f37310305158..bff3cefda94934770c47f3267abfb8e9cb07c41f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2006 Freescale Semiconductor, Inc.
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 #include <command.h>
 #include <mpc83xx.h>
 #include <asm/processor.h>
-#if defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
-#elif defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
-#include <fdt_support.h>
-#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -65,6 +60,10 @@ int checkcpu(void)
                        printf("e300c3, ");
                        break;
 
+               case PVR_E300C4:
+                       printf("e300c4, ");
+                       break;
+
                default:
                        printf("Unknown core, ");
        }
@@ -149,6 +148,36 @@ int checkcpu(void)
        case SPR_8313E_REV10:
                puts("MPC8313E, ");
                break;
+       case SPR_8315E_REV10:
+               puts("MPC8315E, ");
+               break;
+       case SPR_8315_REV10:
+               puts("MPC8315, ");
+               break;
+       case SPR_8314E_REV10:
+               puts("MPC8314E, ");
+               break;
+       case SPR_8314_REV10:
+               puts("MPC8314, ");
+               break;
+       case SPR_8379E_REV10:
+               puts("MPC8379E, ");
+               break;
+       case SPR_8379_REV10:
+               puts("MPC8379, ");
+               break;
+       case SPR_8378E_REV10:
+               puts("MPC8378E, ");
+               break;
+       case SPR_8378_REV10:
+               puts("MPC8378, ");
+               break;
+       case SPR_8377E_REV10:
+               puts("MPC8377E, ");
+               break;
+       case SPR_8377_REV10:
+               puts("MPC8377, ");
+               break;
        default:
                printf("Rev: Unknown revision number:%08x\n"
                        "Warning: Unsupported cpu revision!\n",spridr);
@@ -325,313 +354,6 @@ void watchdog_reset (void)
 }
 #endif
 
-#if defined(CONFIG_OF_LIBFDT)
-
-/*
- * "Setter" functions used to add/modify FDT entries.
- */
-static int fdt_set_eth0(void *blob, 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(blob, nodeoffset, name, 0)) {
-               return fdt_setprop(blob, nodeoffset, name, bd->bi_enetaddr, 6);
-       }
-       return 0;
-}
-#ifdef CONFIG_HAS_ETH1
-/* second onboard ethernet port */
-static int fdt_set_eth1(void *blob, 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(blob, nodeoffset, name, 0)) {
-               return fdt_setprop(blob, nodeoffset, name, bd->bi_enet1addr, 6);
-       }
-       return 0;
-}
-#endif
-#ifdef CONFIG_HAS_ETH2
-/* third onboard ethernet port */
-static int fdt_set_eth2(void *blob, 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(blob, nodeoffset, name, 0)) {
-               return fdt_setprop(blob, nodeoffset, name, bd->bi_enet2addr, 6);
-       }
-       return 0;
-}
-#endif
-#ifdef CONFIG_HAS_ETH3
-/* fourth onboard ethernet port */
-static int fdt_set_eth3(void *blob, 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(blob, nodeoffset, name, 0)) {
-               return fdt_setprop(blob, nodeoffset, name, bd->bi_enet3addr, 6);
-       }
-       return 0;
-}
-#endif
-
-static int fdt_set_busfreq(void *blob, 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(blob, nodeoffset, name, &tmp, sizeof(tmp));
-}
-
-static int fdt_set_tbfreq(void *blob, int nodeoffset, const char *name, bd_t *bd)
-{
-       u32  tmp;
-       /* Create or update the property */
-       tmp = cpu_to_be32(OF_TBCLK);
-       return fdt_setprop(blob, nodeoffset, name, &tmp, sizeof(tmp));
-}
-
-
-static int fdt_set_clockfreq(void *blob, int nodeoffset, const char *name, bd_t *bd)
-{
-       u32  tmp;
-       /* Create or update the property */
-       tmp = cpu_to_be32(gd->core_clk);
-       return fdt_setprop(blob, nodeoffset, name, &tmp, sizeof(tmp));
-}
-
-#ifdef CONFIG_QE
-static int fdt_set_qe_busfreq(void *blob, int nodeoffset, const char *name, bd_t *bd)
-{
-       u32  tmp;
-       /* Create or update the property */
-       tmp = cpu_to_be32(gd->qe_clk);
-       return fdt_setprop(blob, nodeoffset, name, &tmp, sizeof(tmp));
-}
-
-static int fdt_set_qe_brgfreq(void *blob, int nodeoffset, const char *name, bd_t *bd)
-{
-       u32  tmp;
-       /* Create or update the property */
-       tmp = cpu_to_be32(gd->brg_clk);
-       return fdt_setprop(blob, nodeoffset, name, &tmp, sizeof(tmp));
-}
-#endif
-
-/*
- * Fixups to the fdt.
- */
-static const struct {
-       char *node;
-       char *prop;
-       int (*set_fn)(void *blob, int nodeoffset, const char *name, bd_t *bd);
-} fixup_props[] = {
-       {       "/cpus/" OF_CPU,
-               "timebase-frequency",
-               fdt_set_tbfreq
-       },
-       {       "/cpus/" OF_CPU,
-               "bus-frequency",
-               fdt_set_busfreq
-       },
-       {       "/cpus/" OF_CPU,
-               "clock-frequency",
-               fdt_set_clockfreq
-       },
-       {       "/" OF_SOC,
-               "bus-frequency",
-               fdt_set_busfreq
-       },
-       {       "/" OF_SOC "/serial@4500",
-               "clock-frequency",
-               fdt_set_busfreq
-       },
-       {       "/" OF_SOC "/serial@4600",
-               "clock-frequency",
-               fdt_set_busfreq
-       },
-#ifdef CONFIG_TSEC1
-       {       "/" OF_SOC "/ethernet@24000",
-               "mac-address",
-               fdt_set_eth0
-       },
-       {       "/" OF_SOC "/ethernet@24000",
-               "local-mac-address",
-               fdt_set_eth0
-       },
-#endif
-#ifdef CONFIG_TSEC2
-       {       "/" OF_SOC "/ethernet@25000",
-               "mac-address",
-               fdt_set_eth1
-       },
-       {       "/" OF_SOC "/ethernet@25000",
-               "local-mac-address",
-               fdt_set_eth1
-       },
-#endif
-#ifdef CONFIG_QE
-       {       "/" OF_QE,
-               "brg-frequency",
-               fdt_set_qe_brgfreq
-       },
-       {       "/" OF_QE,
-               "bus-frequency",
-               fdt_set_qe_busfreq
-       },
-#ifdef CONFIG_UEC_ETH1
-#if CFG_UEC1_UCC_NUM == 0  /* UCC1 */
-       {       "/" OF_QE "/ucc@2000",
-               "mac-address",
-               fdt_set_eth0
-       },
-       {       "/" OF_QE "/ucc@2000",
-               "local-mac-address",
-               fdt_set_eth0
-       },
-#elif CFG_UEC1_UCC_NUM == 2  /* UCC3 */
-       {       "/" OF_QE "/ucc@2200",
-               "mac-address",
-               fdt_set_eth0
-       },
-       {       "/" OF_QE "/ucc@2200",
-               "local-mac-address",
-               fdt_set_eth0
-       },
-#endif
-#endif /* CONFIG_UEC_ETH1 */
-#ifdef CONFIG_UEC_ETH2
-#if CFG_UEC2_UCC_NUM == 1  /* UCC2 */
-       {       "/" OF_QE "/ucc@3000",
-               "mac-address",
-               fdt_set_eth1
-       },
-       {       "/" OF_QE "/ucc@3000",
-               "local-mac-address",
-               fdt_set_eth1
-       },
-#elif CFG_UEC2_UCC_NUM == 3  /* UCC4 */
-       {       "/" OF_QE "/ucc@3200",
-               "mac-address",
-               fdt_set_eth1
-       },
-       {       "/" OF_QE "/ucc@3200",
-               "local-mac-address",
-               fdt_set_eth1
-       },
-#endif
-#endif /* CONFIG_UEC_ETH2 */
-#endif /* CONFIG_QE */
-};
-
-void
-ft_cpu_setup(void *blob, bd_t *bd)
-{
-       int nodeoffset;
-       int err;
-       int j;
-
-       for (j = 0; j < (sizeof(fixup_props) / sizeof(fixup_props[0])); j++) {
-               nodeoffset = fdt_path_offset(blob, fixup_props[j].node);
-               if (nodeoffset >= 0) {
-                       err = fixup_props[j].set_fn(blob, nodeoffset,
-                                                   fixup_props[j].prop, bd);
-                       if (err < 0)
-                               debug("Problem setting %s = %s: %s\n",
-                                     fixup_props[j].node, fixup_props[j].prop,
-                                     fdt_strerror(err));
-               } else {
-                       debug("Couldn't find %s: %s\n",
-                             fixup_props[j].node, fdt_strerror(nodeoffset));
-               }
-       }
-
-       fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
-}
-#elif defined(CONFIG_OF_FLAT_TREE)
-void
-ft_cpu_setup(void *blob, bd_t *bd)
-{
-       u32 *p;
-       int len;
-       ulong clock;
-
-       clock = bd->bi_busfreq;
-       p = ft_get_prop(blob, "/cpus/" OF_CPU "/bus-frequency", &len);
-       if (p != NULL)
-               *p = cpu_to_be32(clock);
-
-       p = ft_get_prop(blob, "/" OF_SOC "/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);
-
-       p = ft_get_prop(blob, "/" OF_SOC "/serial@4600/clock-frequency", &len);
-       if (p != NULL)
-               *p = cpu_to_be32(clock);
-
-#ifdef CONFIG_TSEC1
-       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-
-       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/local-mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-#endif
-
-#ifdef CONFIG_TSEC2
-       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/mac-address", &len);
-       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
-
-#ifdef CONFIG_UEC_ETH1
-#if CFG_UEC1_UCC_NUM == 0  /* UCC1 */
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@2000/mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@2000/local-mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-#elif CFG_UEC1_UCC_NUM == 2  /* UCC3 */
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@2200/mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@2200/local-mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enetaddr, 6);
-#endif
-#endif
-
-#ifdef CONFIG_UEC_ETH2
-#if CFG_UEC2_UCC_NUM == 1  /* UCC2 */
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@3000/mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enet1addr, 6);
-
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@3000/local-mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enet1addr, 6);
-#elif CFG_UEC2_UCC_NUM == 3  /* UCC4 */
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@3200/mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enet1addr, 6);
-
-       p = ft_get_prop(blob, "/" OF_QE "/ucc@3200/local-mac-address", &len);
-       if (p != NULL)
-               memcpy(p, bd->bi_enet1addr, 6);
-#endif
-#endif
-}
-#endif
-
 #if defined(CONFIG_DDR_ECC)
 void dma_init(void)
 {
index 722497966a105600d5f0233170231fb8d9d33909..2b92be01ad912e51c0bceac61c4d321e7ea986ac 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2006 Freescale Semiconductor, Inc.
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -155,6 +155,10 @@ void cpu_init_f (volatile immap_t * im)
 #ifdef CFG_DDRCDR
        im->sysconf.ddrcdr = CFG_DDRCDR;
 #endif
+       /* Output buffer impedance register */
+#ifdef CFG_OBIR
+       im->sysconf.obir = CFG_OBIR;
+#endif
 
 #ifdef CONFIG_QE
        /* Config QE ioports */
diff --git a/cpu/mpc83xx/fdt.c b/cpu/mpc83xx/fdt.c
new file mode 100644 (file)
index 0000000..909171f
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+#if defined(CONFIG_OF_LIBFDT)
+
+#include <libfdt.h>
+#include <fdt_support.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void ft_cpu_setup(void *blob, bd_t *bd)
+{
+#if defined(CONFIG_HAS_ETH0) || defined(CONFIG_HAS_ETH1) ||\
+    defined(CONFIG_HAS_ETH2) || defined(CONFIG_HAS_ETH3)
+       fdt_fixup_ethernet(blob, bd);
+#endif
+
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+               "timebase-frequency", (bd->bi_busfreq / 4), 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+               "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4,
+               "clock-frequency", gd->core_clk, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
+               "bus-frequency", bd->bi_busfreq, 1);
+#ifdef CONFIG_QE
+       do_fixup_by_prop_u32(blob, "device_type", "qe", 4,
+               "bus-frequency", gd->qe_clk, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "qe", 4,
+               "brg-frequency", gd->brg_clk, 1);
+       do_fixup_by_compat_u32(blob, "fsl,qe",
+               "clock-frequency", gd->qe_clk, 1);
+       do_fixup_by_compat_u32(blob, "fsl,qe",
+               "bus-frequency", gd->qe_clk, 1);
+       do_fixup_by_compat_u32(blob, "fsl,qe",
+               "brg-frequency", gd->brg_clk, 1);
+#endif
+
+#ifdef CFG_NS16550
+       do_fixup_by_compat_u32(blob, "ns16550",
+               "clock-frequency", bd->bi_busfreq, 1);
+#endif
+
+#ifdef CONFIG_CPM2
+       do_fixup_by_compat_u32(blob, "fsl,cpm2-scc-uart",
+               "current-speed", bd->bi_baudrate, 1);
+
+       do_fixup_by_compat_u32(blob, "fsl,cpm2-brg",
+               "clock-frequency", bd->bi_brgfreq, 1);
+#endif
+
+       fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
+}
+#endif /* CONFIG_OF_LIBFDT */
index 0defb0ec89094612d6b66fb9d2843e9ea6749b0e..18558db537b70da01a14592f62481712cffa7f40 100644 (file)
@@ -28,8 +28,7 @@
 
 #if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
-#elif defined(CONFIG_OF_FLAT_TREE)
-#include <ft_build.h>
+#include <fdt_support.h>
 #endif
 
 #include <asm/mpc8349_pci.h>
@@ -173,63 +172,41 @@ void mpc83xx_pci_init(int num_buses, struct pci_region **reg, int warmboot)
 void ft_pci_setup(void *blob, bd_t *bd)
 {
        int nodeoffset;
-       int err;
        int tmp[2];
+       const char *path;
 
        if (pci_num_buses < 1)
                return;
 
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8500");
+       nodeoffset = fdt_path_offset(blob, "/aliases");
        if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
-
-       if (pci_num_buses < 2)
-               return;
-
-       nodeoffset = fdt_path_offset(blob, "/" OF_SOC "/pci@8600");
-       if (nodeoffset >= 0) {
-               tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
-               tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
-               err = fdt_setprop(blob, nodeoffset, "bus-range",
-                                 tmp, sizeof(tmp));
-
-               tmp[0] = cpu_to_be32(gd->pci_clk);
-               err = fdt_setprop(blob, nodeoffset, "clock-frequency",
-                                 tmp, sizeof(tmp[0]));
-       }
-}
-#elif 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;
+               path = fdt_getprop(blob, nodeoffset, "pci0", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
+
+               if (pci_num_buses < 2)
+                       return;
+
+               path = fdt_getprop(blob, nodeoffset, "pci1", NULL);
+               if (path) {
+                       tmp[0] = cpu_to_be32(pci_hose[0].first_busno);
+                       tmp[1] = cpu_to_be32(pci_hose[0].last_busno);
+                       do_fixup_by_path(blob, path, "bus-range",
+                               &tmp, sizeof(tmp), 1);
+
+                       tmp[0] = cpu_to_be32(gd->pci_clk);
+                       do_fixup_by_path(blob, path, "clock-frequency",
+                               &tmp, sizeof(tmp[0]), 1);
+               }
        }
 }
-#endif /* CONFIG_OF_FLAT_TREE */
-
+#endif /* CONFIG_OF_LIBFDT */
 #endif /* CONFIG_83XX_GENERIC_PCI */
index ee2d0385e457b6bcc8b720024aba63e3b8ef5096..0acca4771783dc30f6a0953968732828f4523915 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2006 Freescale Semiconductor, Inc.
+ * (C) Copyright 2006-2007 Freescale Semiconductor, Inc.
  *
  * (C) Copyright 2006
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -198,6 +198,7 @@ long int spd_sdram()
        if(spd.mem_type == SPD_MEMTYPE_DDR2) {
                immap->sysconf.ddrcdr = CFG_DDRCDR_VALUE;
        }
+       udelay(50000);
 #endif
 
        /*
@@ -573,10 +574,10 @@ long int spd_sdram()
         */
        cpo = 0;
        if (spd.mem_type == SPD_MEMTYPE_DDR2) {
-               if (effective_data_rate == 266 || effective_data_rate == 333) {
+               if (effective_data_rate == 266) {
+                       cpo = 0x4;              /* READ_LAT + 1/2 */
+               } else if (effective_data_rate == 333 || effective_data_rate == 400) {
                        cpo = 0x7;              /* READ_LAT + 5/4 */
-               } else if (effective_data_rate == 400) {
-                       cpo = 0x9;              /* READ_LAT + 7/4 */
                } else {
                        /* Automatic calibration */
                        cpo = 0x1f;
@@ -705,9 +706,11 @@ long int spd_sdram()
         * SDRAM Cfg 2
         */
        odt_cfg = 0;
+#ifndef CONFIG_NEVER_ASSERT_ODT_TO_CPU
        if (odt_rd_cfg | odt_wr_cfg) {
                odt_cfg = 0x2;          /* ODT to IOs during reads */
        }
+#endif
        if (spd.mem_type == SPD_MEMTYPE_DDR2) {
                ddr->sdram_cfg2 = (0
                            | (0 << 26) /* True DQS */
index cba57fadb996f70ad48792969312c92a5d4f234f..4f5a866181666b8fbdc43220a7144fcad8178a05 100644 (file)
@@ -2,7 +2,7 @@
  * (C) Copyright 2000-2002
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * Copyright (C) 2004-2006 Freescale Semiconductor, Inc.
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -100,7 +100,7 @@ int get_clocks(void)
        u32 lcrr;
 
        u32 csb_clk;
-#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
        u32 tsec1_clk;
        u32 tsec2_clk;
        u32 usbdr_clk;
@@ -112,6 +112,12 @@ int get_clocks(void)
        u32 i2c1_clk;
 #if !defined(CONFIG_MPC832X)
        u32 i2c2_clk;
+#endif
+#if defined(CONFIG_MPC8315)
+       u32 tdm_clk;
+#endif
+#if defined(CONFIG_MPC837X)
+       u32 sdhc_clk;
 #endif
        u32 enc_clk;
        u32 lbiu_clk;
@@ -126,6 +132,13 @@ int get_clocks(void)
        u32 qe_clk;
        u32 brg_clk;
 #endif
+#if defined(CONFIG_MPC837X)
+       u32 pciexp1_clk;
+       u32 pciexp2_clk;
+#endif
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
+       u32 sata_clk;
+#endif
 
        if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32) im)
                return -1;
@@ -151,7 +164,7 @@ int get_clocks(void)
 
        sccr = im->clk.sccr;
 
-#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
        switch ((sccr & SCCR_TSEC1CM) >> SCCR_TSEC1CM_SHIFT) {
        case 0:
                tsec1_clk = 0;
@@ -167,7 +180,7 @@ int get_clocks(void)
                break;
        default:
                /* unkown SCCR_TSEC1CM value */
-               return -4;
+               return -2;
        }
 
        switch ((sccr & SCCR_USBDRCM) >> SCCR_USBDRCM_SHIFT) {
@@ -185,11 +198,11 @@ int get_clocks(void)
                break;
        default:
                /* unkown SCCR_USBDRCM value */
-               return -8;
+               return -3;
        }
 #endif
 
-#if defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
        switch ((sccr & SCCR_TSEC2CM) >> SCCR_TSEC2CM_SHIFT) {
        case 0:
                tsec2_clk = 0;
@@ -205,11 +218,18 @@ int get_clocks(void)
                break;
        default:
                /* unkown SCCR_TSEC2CM value */
-               return -5;
+               return -4;
        }
+#elif defined(CONFIG_MPC8313)
+       tsec2_clk = tsec1_clk;
 
-       i2c1_clk = tsec2_clk;
+       if (!(sccr & SCCR_TSEC1ON))
+               tsec1_clk = 0;
+       if (!(sccr & SCCR_TSEC2ON))
+               tsec2_clk = 0;
+#endif
 
+#if defined(CONFIG_MPC834X)
        switch ((sccr & SCCR_USBMPHCM) >> SCCR_USBMPHCM_SHIFT) {
        case 0:
                usbmph_clk = 0;
@@ -225,7 +245,7 @@ int get_clocks(void)
                break;
        default:
                /* unkown SCCR_USBMPHCM value */
-               return -7;
+               return -5;
        }
 
        if (usbmph_clk != 0 && usbdr_clk != 0 && usbmph_clk != usbdr_clk) {
@@ -233,41 +253,138 @@ int get_clocks(void)
                 * USB DR clock is not disabled then
                 * USB MPH & USB DR must have the same rate
                 */
-               return -9;
+               return -6;
+       }
+#endif
+       switch ((sccr & SCCR_ENCCM) >> SCCR_ENCCM_SHIFT) {
+       case 0:
+               enc_clk = 0;
+               break;
+       case 1:
+               enc_clk = csb_clk;
+               break;
+       case 2:
+               enc_clk = csb_clk / 2;
+               break;
+       case 3:
+               enc_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_ENCCM value */
+               return -7;
        }
-#elif defined(CONFIG_MPC831X)
-       tsec2_clk = tsec1_clk;
 
-       if (!(sccr & SCCR_TSEC1ON))
-               tsec1_clk = 0;
-       if (!(sccr & SCCR_TSEC2ON))
-               tsec2_clk = 0;
+#if defined(CONFIG_MPC837X)
+       switch ((sccr & SCCR_SDHCCM) >> SCCR_SDHCCM_SHIFT) {
+       case 0:
+               sdhc_clk = 0;
+               break;
+       case 1:
+               sdhc_clk = csb_clk;
+               break;
+       case 2:
+               sdhc_clk = csb_clk / 2;
+               break;
+       case 3:
+               sdhc_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_SDHCCM value */
+               return -8;
+       }
+#endif
+#if defined(CONFIG_MPC8315)
+       switch ((sccr & SCCR_TDMCM) >> SCCR_TDMCM_SHIFT) {
+       case 0:
+               tdm_clk = 0;
+               break;
+       case 1:
+               tdm_clk = csb_clk;
+               break;
+       case 2:
+               tdm_clk = csb_clk / 2;
+               break;
+       case 3:
+               tdm_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_TDMCM value */
+               return -8;
+       }
 #endif
 
-#if !defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X)
+       i2c1_clk = tsec2_clk;
+#elif defined(CONFIG_MPC8360)
        i2c1_clk = csb_clk;
+#elif defined(CONFIG_MPC832X)
+       i2c1_clk = enc_clk;
+#elif defined(CONFIG_MPC831X)
+       i2c1_clk = enc_clk;
+#elif defined(CONFIG_MPC837X)
+       i2c1_clk = sdhc_clk;
 #endif
 #if !defined(CONFIG_MPC832X)
-       i2c2_clk = csb_clk;     /* i2c-2 clk is equal to csb clk */
+       i2c2_clk = csb_clk; /* i2c-2 clk is equal to csb clk */
 #endif
 
-       switch ((sccr & SCCR_ENCCM) >> SCCR_ENCCM_SHIFT) {
+#if defined(CONFIG_MPC837X)
+       switch ((sccr & SCCR_PCIEXP1CM) >> SCCR_PCIEXP1CM_SHIFT) {
        case 0:
-               enc_clk = 0;
+               pciexp1_clk = 0;
                break;
        case 1:
-               enc_clk = csb_clk;
+               pciexp1_clk = csb_clk;
                break;
        case 2:
-               enc_clk = csb_clk / 2;
+               pciexp1_clk = csb_clk / 2;
                break;
        case 3:
-               enc_clk = csb_clk / 3;
+               pciexp1_clk = csb_clk / 3;
                break;
        default:
-               /* unkown SCCR_ENCCM value */
-               return -6;
+               /* unkown SCCR_PCIEXP1CM value */
+               return -9;
+       }
+
+       switch ((sccr & SCCR_PCIEXP2CM) >> SCCR_PCIEXP2CM_SHIFT) {
+       case 0:
+               pciexp2_clk = 0;
+               break;
+       case 1:
+               pciexp2_clk = csb_clk;
+               break;
+       case 2:
+               pciexp2_clk = csb_clk / 2;
+               break;
+       case 3:
+               pciexp2_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_PCIEXP2CM value */
+               return -10;
        }
+#endif
+
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
+       switch ((sccr & SCCR_SATA1CM) >> SCCR_SATA1CM_SHIFT) {
+       case 0:
+               sata_clk = 0;
+               break;
+       case 1:
+               sata_clk = csb_clk;
+               break;
+       case 2:
+               sata_clk = csb_clk / 2;
+               break;
+       case 3:
+               sata_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_SATA1CM value */
+               return -11;
+       }
+#endif
 
        lbiu_clk = csb_clk *
                   (1 + ((im->reset.rcwl & HRCWL_LBIUCM) >> HRCWL_LBIUCM_SHIFT));
@@ -280,7 +397,7 @@ int get_clocks(void)
                break;
        default:
                /* unknown lcrr */
-               return -10;
+               return -12;
        }
 
        ddr_clk = csb_clk *
@@ -316,7 +433,7 @@ int get_clocks(void)
                break;
        default:
                /* unkown core to csb ratio */
-               return -12;
+               return -13;
        }
 
 #if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)
@@ -327,13 +444,19 @@ int get_clocks(void)
 #endif
 
        gd->csb_clk = csb_clk;
-#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
        gd->tsec1_clk = tsec1_clk;
        gd->tsec2_clk = tsec2_clk;
        gd->usbdr_clk = usbdr_clk;
 #endif
 #if defined(CONFIG_MPC834X)
        gd->usbmph_clk = usbmph_clk;
+#endif
+#if defined(CONFIG_MPC8315)
+       gd->tdm_clk = tdm_clk;
+#endif
+#if defined(CONFIG_MPC837X)
+       gd->sdhc_clk = sdhc_clk;
 #endif
        gd->core_clk = core_clk;
        gd->i2c1_clk = i2c1_clk;
@@ -350,6 +473,13 @@ int get_clocks(void)
 #if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)
        gd->qe_clk = qe_clk;
        gd->brg_clk = brg_clk;
+#endif
+#if defined(CONFIG_MPC837X)
+       gd->pciexp1_clk = pciexp1_clk;
+       gd->pciexp2_clk = pciexp2_clk;
+#endif
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
+       gd->sata_clk = sata_clk;
 #endif
        gd->pci_clk = pci_sync_in;
        gd->cpu_clk = gd->core_clk;
@@ -387,13 +517,26 @@ int do_clocks (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 #if !defined(CONFIG_MPC832X)
        printf("  I2C2:                %4d MHz\n", gd->i2c2_clk / 1000000);
 #endif
-#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC8315)
+       printf("  TDM:                 %4d MHz\n", gd->tdm_clk / 1000000);
+#endif
+#if defined(CONFIG_MPC837X)
+       printf("  SDHC:                %4d MHz\n", gd->sdhc_clk / 1000000);
+#endif
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
        printf("  TSEC1:               %4d MHz\n", gd->tsec1_clk / 1000000);
        printf("  TSEC2:               %4d MHz\n", gd->tsec2_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
+#if defined(CONFIG_MPC837X)
+       printf("  PCIEXP1:             %4d MHz\n", gd->pciexp1_clk / 1000000);
+       printf("  PCIEXP2:             %4d MHz\n", gd->pciexp2_clk / 1000000);
+#endif
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
+       printf("  SATA:                %4d MHz\n", gd->sata_clk / 1000000);
 #endif
        return 0;
 }
index 496c8a5861baaa1f849a6c7151fe6b6ec212f2f6..1dfbf62239760e5d8b78f79fd1c78ad8f9d1087b 100644 (file)
@@ -462,7 +462,7 @@ init_e300_core: /* time t 10 */
 
        li      r4, 0x556C
        sth     r4, SWSRR@l(r3)
-       li      r4, 0xAA39
+       li      r4, -0x55C7
        sth     r4, SWSRR@l(r3)
 #else
        /* Disable Wathcdog  */
index 937c87a27cd3ce375c0ec7696c52b1101a5ea573..8da6f147259795bffca62531d4c81aac472d7af5 100644 (file)
@@ -110,7 +110,7 @@ SECTIONS
   __init_end = .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 737a6c485a20119bd435b539edaad0ed491fd6db..0ce17e7f57300e1c15806f5a3a513d3d568069de 100644 (file)
@@ -43,8 +43,11 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
                "bus-frequency", bd->bi_busfreq, 1);
 #ifdef CONFIG_QE
-       do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
+       do_fixup_by_prop_u32(blob, "device_type", "qe", 4,
                "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "qe", 4,
+                       "brg-frequency", bd->bi_busfreq / 2, 1);
+       fdt_fixup_qe_firmware(blob);
 #endif
 
 #ifdef CFG_NS16550
index 553f736a56a07d2d64bf21166a96eef900ce522d..adc9c4dd40ec356d241569a2e4ca00aebabb1690 100644 (file)
@@ -1071,22 +1071,19 @@ setup_laws_and_tlbs(unsigned int memsize)
        ram_tlb_address = (unsigned int)CFG_DDR_SDRAM_BASE;
        while (ram_tlb_address < (memsize * 1024 * 1024)
              && ram_tlb_index < 16) {
-               mtspr(MAS0, TLB1_MAS0(1, ram_tlb_index, 0));
-               mtspr(MAS1, TLB1_MAS1(1, 1, 0, 0, tlb_size));
-               mtspr(MAS2, TLB1_MAS2(E500_TLB_EPN(ram_tlb_address),
-                                     0, 0, 0, 0, 0, 0, 0, 0));
-               mtspr(MAS3, TLB1_MAS3(E500_TLB_RPN(ram_tlb_address),
-                                     0, 0, 0, 0, 0, 1, 0, 1, 0, 1));
+               mtspr(MAS0, FSL_BOOKE_MAS0(1, ram_tlb_index, 0));
+               mtspr(MAS1, FSL_BOOKE_MAS1(1, 1, 0, 0, tlb_size));
+               mtspr(MAS2, FSL_BOOKE_MAS2(ram_tlb_address, 0));
+               mtspr(MAS3, FSL_BOOKE_MAS3(ram_tlb_address, 0,
+                       (MAS3_SX|MAS3_SW|MAS3_SR)));
                asm volatile("isync;msync;tlbwe;isync");
 
-               debug("DDR: MAS0=0x%08x\n", TLB1_MAS0(1, ram_tlb_index, 0));
-               debug("DDR: MAS1=0x%08x\n", TLB1_MAS1(1, 1, 0, 0, tlb_size));
-               debug("DDR: MAS2=0x%08x\n",
-                     TLB1_MAS2(E500_TLB_EPN(ram_tlb_address),
-                               0, 0, 0, 0, 0, 0, 0, 0));
+               debug("DDR: MAS0=0x%08x\n", FSL_BOOKE_MAS0(1, ram_tlb_index, 0));
+               debug("DDR: MAS1=0x%08x\n", FSL_BOOKE_MAS1(1, 1, 0, 0, tlb_size));
+               debug("DDR: MAS2=0x%08x\n", FSL_BOOKE_MAS2(ram_tlb_address, 0));
                debug("DDR: MAS3=0x%08x\n",
-                     TLB1_MAS3(E500_TLB_RPN(ram_tlb_address),
-                               0, 0, 0, 0, 0, 1, 0, 1, 0, 1));
+                       FSL_BOOKE_MAS3(ram_tlb_address, 0,
+                                     (MAS3_SX|MAS3_SW|MAS3_SR)));
 
                ram_tlb_address += (0x1000 << ((tlb_size - 1) * 2));
                ram_tlb_index++;
index b769ef8a76a4ffa3ee281a6f264c9c7fc449144e..b489d2ff0ca2b33cefbd461995740f8952f096b0 100644 (file)
@@ -268,7 +268,10 @@ _start_e500:
         */
        lis     r3,CFG_INIT_RAM_ADDR@h
        ori     r3,r3,CFG_INIT_RAM_ADDR@l
-       li      r2,(CFG_DCACHE_SIZE / (2 * CFG_CACHELINE_SIZE))
+       mfspr   r2, L1CFG0
+       andi.   r2, r2, 0x1ff
+       /* cache size * 1024 / (2 * L1 line size) */
+       slwi    r2, r2, (10 - 1 - L1_CACHE_SHIFT)
        mtctr   r2
        li      r0,0
 1:
@@ -1061,7 +1064,9 @@ unlock_ram_in_cache:
        /* invalidate the INIT_RAM section */
        lis     r3,(CFG_INIT_RAM_ADDR & ~31)@h
        ori     r3,r3,(CFG_INIT_RAM_ADDR & ~31)@l
-       li      r4,(CFG_DCACHE_SIZE / (2 * CFG_CACHELINE_SIZE))
+       mfspr   r4,L1CFG0
+       andi.   r4,r4,0x1ff
+       slwi    r4,r4,(10 - 1 - L1_CACHE_SHIFT)
        mtctr   r4
 1:     icbi    r0,r3
        dcbi    r0,r3
index d83bedd6e0c2aa082016ac7623c6a379f633dde2..11354d38dabe259027d7e3ad7c21b1023f581c4e 100644 (file)
@@ -41,6 +41,8 @@ checkcpu(void)
        uint major, minor;
        uint lcrr;              /* local bus clock ratio register */
        uint clkdiv;            /* clock divider portion of lcrr */
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
 
        puts("Freescale PowerPC\n");
 
@@ -54,8 +56,14 @@ checkcpu(void)
 
        switch (ver) {
        case PVR_VER(PVR_86xx):
-               puts("E600");
-               break;
+       {
+               uint msscr0 = mfspr(MSSCR0);
+               printf("E600 Core %d", (msscr0 & 0x20) ? 1 : 0 );
+               if (gur->pordevsr & MPC86xx_PORDEVSR_CORE1TE)
+                       puts("\n    Core1Translation Enabled");
+               debug(" (MSSCR0=%x, PORDEVSR=%x)", msscr0, gur->pordevsr);
+       }
+       break;
        default:
                puts("Unknown");
                break;
@@ -76,6 +84,9 @@ checkcpu(void)
                puts("8641");
            }
            break;
+       case SVR_8610:
+               puts("8610");
+               break;
        default:
                puts("Unknown");
                break;
index 265e033fb3dca0c3d30ecfac1bbd6b55c566c20e..54e40f1f50ddde3b0956fb270568904bf643b47d 100644 (file)
@@ -196,7 +196,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
        spd_eeprom_t spd;
        unsigned int n_ranks;
        unsigned int rank_density;
-       unsigned int odt_rd_cfg, odt_wr_cfg;
+       unsigned int odt_rd_cfg, odt_wr_cfg, ba_bits;
        unsigned int odt_cfg, mode_odt_enable;
        unsigned int refresh_clk;
 #ifdef MPC86xx_DDR_SDRAM_CLK_CNTL
@@ -321,6 +321,10 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
                odt_wr_cfg = 1;         /* Assert ODT on writes to CS0 */
        }
 
+       ba_bits = 0;
+       if (spd.nbanks == 0x8)
+               ba_bits = 1;
+
 #ifdef CONFIG_DDR_INTERLEAVE
 
        if (dimm_num != 1) {
@@ -357,6 +361,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
 #endif
                                    | (odt_rd_cfg << 20)
                                    | (odt_wr_cfg << 16)
+                                   | (ba_bits << 14)
                                    | (spd.nrow_addr - 12) << 8
                                    | (spd.ncol_addr - 8) );
 
@@ -386,6 +391,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
                ddr->cs0_config = ( 1 << 31
                                    | (odt_rd_cfg << 20)
                                    | (odt_wr_cfg << 16)
+                                   | (ba_bits << 14)
                                    | (spd.nrow_addr - 12) << 8
                                    | (spd.ncol_addr - 8) );
 
@@ -403,6 +409,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
                        ddr->cs1_config = ( 1<<31
                                            | (odt_rd_cfg << 20)
                                            | (odt_wr_cfg << 16)
+                                           | (ba_bits << 14)
                                            | (spd.nrow_addr - 12) << 8
                                            | (spd.ncol_addr - 8) );
                        debug("DDR: cs1_bnds   = 0x%08x\n", ddr->cs1_bnds);
@@ -422,6 +429,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
                ddr->cs2_config = ( 1 << 31
                                    | (odt_rd_cfg << 20)
                                    | (odt_wr_cfg << 16)
+                                   | (ba_bits << 14)
                                    | (spd.nrow_addr - 12) << 8
                                    | (spd.ncol_addr - 8) );
 
@@ -439,6 +447,7 @@ spd_init(unsigned char i2c_address, unsigned int ddr_num,
                        ddr->cs3_config = ( 1<<31
                                            | (odt_rd_cfg << 20)
                                            | (odt_wr_cfg << 16)
+                                           | (ba_bits << 14)
                                            | (spd.nrow_addr - 12) << 8
                                            | (spd.ncol_addr - 8) );
                        debug("DDR: cs3_bnds   = 0x%08x\n", ddr->cs3_bnds);
index 97112f03daf168b7a311d1af7a91a34a05c08ce4..c8783525129be2f4d87346a5c373083da9dd5258 100644 (file)
 #include <mpc8xx.h>
 #include <asm/cache.h>
 
+#if defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#include <libfdt_env.h>
+#include <fdt_support.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 static char *cpu_warning = "\n         " \
@@ -632,3 +638,13 @@ void reset_8xx_watchdog (volatile immap_t * immr)
 #endif /* CONFIG_WATCHDOG */
 
 /* ------------------------------------------------------------------------- */
+#if defined(CONFIG_OF_LIBFDT)
+void ft_cpu_setup (void *blob, bd_t *bd)
+{
+       char * cpu_path = "/cpus/" OF_CPU;
+
+       do_fixup_by_path_u32(blob, cpu_path, "bus-frequency", bd->bi_busfreq, 1);
+       do_fixup_by_path_u32(blob, cpu_path, "timebase-frequency", OF_TBCLK, 1);
+       do_fixup_by_path_u32(blob, cpu_path, "clock-frequency", bd->bi_intfreq, 1);
+}
+#endif /* CONFIG_OF_LIBFDT */
index c79e5780ad3d74d7adc3397837383ffa2298d9e2..fb3414aae254514aff01f185ba532306efda8618 100644 (file)
@@ -31,7 +31,8 @@
 DECLARE_GLOBAL_DATA_PTR;
 #endif
 
-#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH)
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH) || \
+    defined(CFG_SMC_UCODE_PATCH)
 void cpm_load_patch (volatile immap_t * immr);
 #endif
 
@@ -253,7 +254,8 @@ void cpu_init_f (volatile immap_t * immr)
        immr->im_cpm.cp_rccr = CFG_RCCR;
 #endif
 
-#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH)
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH) || \
+    defined(CFG_SMC_UCODE_PATCH)
        cpm_load_patch (immr);  /* load mpc8xx  microcode patch */
 #endif
 }
index 08a3715812dc2ccda643fae2af38d0504fa01ebf..37eb481ff16d534d0009b5d06010deb2a0d93e9d 100644 (file)
@@ -143,6 +143,9 @@ static int fec_send(struct eth_device* dev, volatile void *packet, int length);
 static int fec_recv(struct eth_device* dev);
 static int fec_init(struct eth_device* dev, bd_t * bd);
 static void fec_halt(struct eth_device* dev);
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+static void __mii_init(void);
+#endif
 
 int fec_initialize(bd_t *bis)
 {
@@ -539,6 +542,30 @@ static void fec_pin_init(int fecidx)
        }
 }
 
+static int fec_reset(volatile fec_t *fecp)
+{
+       int i;
+
+       /* Whack a reset.
+        * A delay is required between a reset of the FEC block and
+        * initialization of other FEC registers because the reset takes
+        * some time to complete. If you don't delay, subsequent writes
+        * to FEC registers might get killed by the reset routine which is
+        * still in progress.
+        */
+
+       fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;
+       for (i = 0;
+            (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);
+            ++i) {
+               udelay (1);
+       }
+       if (i == FEC_RESET_DELAY)
+               return -1;
+
+       return 0;
+}
+
 static int fec_init (struct eth_device *dev, bd_t * bd)
 {
        struct ether_fcc_info_s *efis = dev->priv;
@@ -573,23 +600,17 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
 #endif /* CONFIG_FADS */
        }
 
-       /* Whack a reset.
-        * A delay is required between a reset of the FEC block and
-        * initialization of other FEC registers because the reset takes
-        * some time to complete. If you don't delay, subsequent writes
-        * to FEC registers might get killed by the reset routine which is
-        * still in progress.
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+       /* the MII interface is connected to FEC1
+        * so for the miiphy_xxx function to work we must
+        * call mii_init since fec_halt messes the thing up
         */
-       fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;
-       for (i = 0;
-            (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);
-            ++i) {
-               udelay (1);
-       }
-       if (i == FEC_RESET_DELAY) {
+       if (efis->ether_index != 0)
+               __mii_init();
+#endif
+
+       if (fec_reset(fecp) < 0)
                printf ("FEC_RESET_DELAY timeout\n");
-               return 0;
-       }
 
        /* We use strictly polling mode only
         */
@@ -603,7 +624,7 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
 
        /* Set station address
         */
-#define ea eth_get_dev()->enetaddr
+#define ea dev->enetaddr
        fecp->fec_addr_low = (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);
        fecp->fec_addr_high = (ea[4] << 8) | (ea[5]);
 #undef ea
@@ -708,7 +729,7 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
 
                if (efis->actual_phy_addr == -1) {
                        printf ("Unable to discover phy!\n");
-                       return 0;
+                       return -1;
                }
 #else
                efis->actual_phy_addr = -1;
@@ -716,15 +737,8 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
        } else {
                efis->actual_phy_addr = efis->phy_addr;
        }
-#if defined(CONFIG_MII) && defined(CONFIG_RMII)
-
-       /* the MII interface is connected to FEC1
-        * so for the miiphy_xxx function to work we must
-        * call mii_init since fec_halt messes the thing up
-        */
-       if (efis->ether_index != 0)
-               mii_init();
 
+#if defined(CONFIG_MII) && defined(CONFIG_RMII)
        /*
         * adapt the RMII speed to the speed of the phy
         */
@@ -751,7 +765,7 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
 
        efis->initialized = 1;
 
-       return 1;
+       return 0;
 }
 
 
@@ -874,15 +888,14 @@ static int mii_discover_phy(struct eth_device *dev)
                        udelay(10000);  /* wait 10ms */
                }
                for (phyno = 0; phyno < 32 && phyaddr < 0; ++phyno) {
-                       phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1));
+                       phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR2));
 #ifdef ET_DEBUG
                        printf("PHY type 0x%x pass %d type ", phytype, pass);
 #endif
                        if (phytype != 0xffff) {
                                phyaddr = phyno;
-                               phytype <<= 16;
                                phytype |= mii_send(mk_mii_read(phyno,
-                                                               PHY_PHYIDR2));
+                                                               PHY_PHYIDR1)) << 16;
 
 #ifdef ET_DEBUG
                                printf("PHY @ 0x%x pass %d type ",phyno,pass);
@@ -929,36 +942,17 @@ static int mii_discover_phy(struct eth_device *dev)
 #if (defined(CONFIG_MII) || defined(CONFIG_CMD_MII)) && !defined(CONFIG_BITBANGMII)
 
 /****************************************************************************
- * mii_init -- Initialize the MII for MII command without ethernet
+ * mii_init -- Initialize the MII via FEC 1 for MII command without ethernet
  * This function is a subset of eth_init
  ****************************************************************************
  */
-void mii_init (void)
+static void __mii_init(void)
 {
        volatile immap_t *immr = (immap_t *) CFG_IMMR;
        volatile fec_t *fecp = &(immr->im_cpm.cp_fec);
-       int i, j;
 
-       for (j = 0; j < sizeof(ether_fcc_info) / sizeof(ether_fcc_info[0]); j++) {
-
-       /* Whack a reset.
-        * A delay is required between a reset of the FEC block and
-        * initialization of other FEC registers because the reset takes
-        * some time to complete. If you don't delay, subsequent writes
-        * to FEC registers might get killed by the reset routine which is
-        * still in progress.
-        */
-
-       fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;
-       for (i = 0;
-            (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);
-            ++i) {
-               udelay (1);
-       }
-       if (i == FEC_RESET_DELAY) {
+       if (fec_reset(fecp) < 0)
                printf ("FEC_RESET_DELAY timeout\n");
-               return;
-       }
 
        /* We use strictly polling mode only
         */
@@ -968,14 +962,21 @@ void mii_init (void)
         */
        fecp->fec_ievent = 0xffc0;
 
-       /* Setup the pin configuration of the FEC(s)
-       */
-               fec_pin_init(ether_fcc_info[i].ether_index);
-
        /* Now enable the transmit and receive processing
         */
        fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN;
-       }
+}
+
+void mii_init (void)
+{
+       int i;
+
+       __mii_init();
+
+       /* Setup the pin configuration of the FEC(s)
+       */
+       for (i = 0; i < sizeof(ether_fcc_info) / sizeof(ether_fcc_info[0]); i++)
+               fec_pin_init(ether_fcc_info[i].ether_index);
 }
 
 /*****************************************************************************
index 68804cc43945012667604feef865f1dba4ffcc1a..ad0229999fa43a4ca60918f441c71d9919e14d15 100644 (file)
@@ -124,6 +124,12 @@ static int smc_init (void)
 
        sp = (smc_t *) &(cp->cp_smc[SMC_INDEX]);
        up = (smc_uart_t *) &cp->cp_dparam[PROFF_SMC];
+#ifdef CFG_SMC_UCODE_PATCH
+       up = (smc_uart_t *) &cp->cp_dpmem[up->smc_rpbase];
+#else
+       /* Disable relocation */
+       up->smc_rpbase = 0;
+#endif
 
        /* Disable transmitter/receiver.
        */
@@ -212,6 +218,12 @@ static int smc_init (void)
        up->smc_tbase = dpaddr+sizeof(cbd_t);
        up->smc_rfcr = SMC_EB;
        up->smc_tfcr = SMC_EB;
+#if defined (CFG_SMC_UCODE_PATCH)
+       up->smc_rbptr = up->smc_rbase;
+       up->smc_tbptr = up->smc_tbase;
+       up->smc_rstate = 0;
+       up->smc_tstate = 0;
+#endif
 
 #if defined(CONFIG_MBX)
        board_serial_init();
@@ -288,6 +300,9 @@ smc_putc(const char c)
                smc_putc ('\r');
 
        up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC];
+#ifdef CFG_SMC_UCODE_PATCH
+       up = (smc_uart_t *) &cpmp->cp_dpmem[up->smc_rpbase];
+#endif
 
        tbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_tbase];
 
@@ -326,6 +341,9 @@ smc_getc(void)
        unsigned char           c;
 
        up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC];
+#ifdef CFG_SMC_UCODE_PATCH
+       up = (smc_uart_t *) &cpmp->cp_dpmem[up->smc_rpbase];
+#endif
 
        rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase];
 
@@ -351,6 +369,9 @@ smc_tstc(void)
        volatile cpm8xx_t       *cpmp = &(im->im_cpm);
 
        up = (smc_uart_t *)&cpmp->cp_dparam[PROFF_SMC];
+#ifdef CFG_SMC_UCODE_PATCH
+       up = (smc_uart_t *) &cpmp->cp_dpmem[up->smc_rpbase];
+#endif
 
        rbdf = (cbd_t *)&cpmp->cp_dpmem[up->smc_rbase];
 
index eccff645e30c1e588bbaef5a373d34e5eccf5c86..4d6c522467972ec1db77484bb703a88f7b9c171e 100644 (file)
@@ -1,7 +1,8 @@
 #include <common.h>
 #include <commproc.h>
 
-#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH)
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCH) || \
+    defined(CFG_SMC_UCODE_PATCH)
 
 static void UcodeCopy (volatile cpm8xx_t *cpm);
 
@@ -32,13 +33,29 @@ void cpm_load_patch (volatile immap_t *immr)
     }
 #endif
 
+#ifdef CFG_SMC_UCODE_PATCH
+    {
+       volatile smc_uart_t *up = (smc_uart_t *) & immr->im_cpm.cp_dparam[PROFF_SMC1];
+       /* Activate the microcode per the instructions in the microcode manual */
+       /* NOTE:  We're only relocating the SMC parameters.                    */
+       immr->im_cpm.cp_cpmcr1 = 0x8080;        /* Write Trap register 1 value */
+       immr->im_cpm.cp_cpmcr2 = 0x8088;        /* Write Trap register 2 value */
+       up->smc_rpbase = CFG_SMC_DPMEM_OFFSET;  /* Where to relocte SMC params */
+    }
+#endif
+
        /*
         * Enable DPRAM microcode to execute from the first 512 bytes
         * and a 256 byte extension of DPRAM.
         */
+#ifdef CFG_SMC_UCODE_PATCH
+       immr->im_cpm.cp_rccr |= 0x0002;
+#else
        immr->im_cpm.cp_rccr |= 0x0001;
+#endif
 }
 
+#if defined(CFG_I2C_UCODE_PATCH) || defined(CFG_SPI_UCODE_PATCh)
 static ulong patch_2000[] = {
        0x7FFFEFD9, 0x3FFD0000, 0x7FFB49F7, 0x7FF90000,
        0x5FEFADF7, 0x5F88ADF7, 0x5FEFAFF7, 0x5F88AFF7,
@@ -82,6 +99,81 @@ static ulong patch_2F00[] = {
        0x35931497, 0x35376956, 0xBD697B9D, 0x96931313,
        0x19797937, 0x69350000,
 };
+#else
+
+static ulong patch_2000[] = {
+       0x3fff0000, 0x3ffd0000, 0x3ffb0000, 0x3ff90000,
+       0x5fefeff8, 0x5f91eff8, 0x3ff30000, 0x3ff10000,
+       0x3a11e710, 0xedf0ccb9, 0xf318ed66, 0x7f0e5fe2,
+       0x7fedbb38, 0x3afe7468, 0x7fedf4d8, 0x8ffbb92d,
+       0xb83b77fd, 0xb0bb5eb9, 0xdfda7fed, 0x90bde74d,
+       0x6f0dcbd3, 0xe7decfed, 0xcb50cfed, 0xcfeddf6d,
+       0x914d4f74, 0x5eaedfcb, 0x9ee0e7df, 0xefbb6ffb,
+       0xe7ef7f0e, 0x9ee57fed, 0xebb7effa, 0xeb30affb,
+       0x7fea90b3, 0x7e0cf09f, 0xbffff318, 0x5fffdfff,
+       0xac35efea, 0x7fce1fc1, 0xe2ff5fbd, 0xaffbe2ff,
+       0x5fbfaffb, 0xf9a87d0f, 0xaef8770f, 0x7d0fb0a2,
+       0xeffbbfff, 0xcfef5fba, 0x7d0fbfff, 0x5fba4cf8,
+       0x7fddd09b, 0x49f847fd, 0x7efdf097, 0x7fedfffd,
+       0x7dfdf093, 0xef7e7e1e, 0x5fba7f0e, 0x3a11e710,
+       0xedf0cc87, 0xfb18ad0a, 0x1f85bbb8, 0x74283b7e,
+       0x7375e4bb, 0x2ab64fb8, 0x5c7de4bb, 0x32fdffbf,
+       0x5f0843f8, 0x7ce3e1bb, 0xe74f7ded, 0x6f0f4fe8,
+       0xc7ba32be, 0x73f2efeb, 0x600b4f78, 0xe5bb760b,
+       0x5388aef8, 0x4ef80b6a, 0xcfef9ee5, 0xabf8751f,
+       0xefef5b88, 0x741f4fe8, 0x751e760d, 0x7fdb70dd,
+       0x741cafce, 0xefcc7fce, 0x751e7088, 0x741ce7bb,
+       0x334ecfed, 0xafdbefeb, 0xe5bb760b, 0x53ceaef8,
+       0xafe8e7eb, 0x4bf8771e, 0x7e007fed, 0x4fcbe2cc,
+       0x7fbc3085, 0x7b0f7a0f, 0x34b177fd, 0xb0e75e93,
+       0xdf313e3b, 0xaf78741f, 0x741f30cc, 0xcfef5f08,
+       0x741f3e88, 0xafb8771e, 0x5f437fed, 0x0bafe2cc,
+       0x741ccfec, 0xe5ca53a9, 0x6fcb4f74, 0x5e89df27,
+       0x2a923d14, 0x4b8fdf0c, 0x751f741c, 0x6c1eeffa,
+       0xefea7fce, 0x6ffc309a, 0xefec3fca, 0x308fdf0a,
+       0xadf85e7a, 0xaf7daefd, 0x5e7adf0a, 0x5e7aafdd,
+       0x761f1088, 0x1e7c7efd, 0x3089fffe, 0x4908fb18,
+       0x5fffdfff, 0xafbbf0f7, 0x4ef85f43, 0xadf81489,
+       0x7a0f7089, 0xcfef5089, 0x7a0fdf0c, 0x5e7cafed,
+       0xbc6e780f, 0xefef780f, 0xefef790f, 0xa7f85eeb,
+       0xffef790f, 0xefef790f, 0x1489df0a, 0x5e7aadfd,
+       0x5f09fffb, 0xe79aded9, 0xeff96079, 0x607ae79a,
+       0xded8eff9, 0x60795edb, 0x607acfef, 0xefefefdf,
+       0xefbfef7f, 0xeeffedff, 0xebffe7ff, 0xafefafdf,
+       0xafbfaf7f, 0xaeffadff, 0xabffa7ff, 0x6fef6fdf,
+       0x6fbf6f7f, 0x6eff6dff, 0x6bff67ff, 0x2fef2fdf,
+       0x2fbf2f7f, 0x2eff2dff, 0x2bff27ff, 0x4e08fd1f,
+       0xe5ff6e0f, 0xaff87eef, 0x7e0ffdef, 0xf11f6079,
+       0xabf8f51e, 0x7e0af11c, 0x37cfae16, 0x7fec909a,
+       0xadf8efdc, 0xcfeae52f, 0x7d0fe12b, 0xf11c6079,
+       0x7e0a4df8, 0xcfea5ea0, 0x7d0befec, 0xcfea5ea2,
+       0xe522efdc, 0x5ea2cfda, 0x4e08fd1f, 0x6e0faff8,
+       0x7c1f761f, 0xfdeff91f, 0x6079abf8, 0x761cee00,
+       0xf91f2bfb, 0xefefcfec, 0xf91f6079, 0x761c27fb,
+       0xefdf5e83, 0xcfdc7fdd, 0x50f84bf8, 0x47fd7c1f,
+       0x761ccfcf, 0x7eef7fed, 0x7dfd70ef, 0xef7e7f1e,
+       0x771efb18, 0x6079e722, 0xe6bbe5bb, 0x2e66e5bb,
+       0x600b2ee1, 0xe2bbe2bb, 0xe2bbe2bb, 0x2f5ee2bb,
+       0xe2bb2ff9, 0x6079e2bb,
+};
+
+static ulong patch_2F00[] = {
+       0x30303030, 0x3e3e3030, 0xaf79b9b3, 0xbaa3b979,
+       0x9693369f, 0x79f79777, 0x97333fff, 0xfb3b9e9f,
+       0x79b91d11, 0x9e13f3ff, 0x3f9b6bd9, 0xe173d136,
+       0x695669d1, 0x697b3daf, 0x79b93a3a, 0x3f979f91,
+       0x379ff976, 0xf99777fd, 0x9779737d, 0xe9d6bbf9,
+       0xbfffd9df, 0x97f7fd97, 0x6f7b9bff, 0xf9bd9683,
+       0x397db973, 0xd97b3b9f, 0xd7f9f733, 0x9993bb9e,
+       0xe1f9ef93, 0x73773337, 0xb936917d, 0x11f87379,
+       0xb979d336, 0x8b7ded73, 0x1b7d9337, 0x31f3f22f,
+       0x3f2327ee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee,
+       0xeeeeee4b, 0xf4fbdbd2, 0x58bb1878, 0x577fdfd2,
+       0xd573b773, 0xf7374b4f, 0xbdbd25b8, 0xb177d2d1,
+       0x7376856b, 0xbfdd687b, 0xdd2fff8f, 0x78ffff8f,
+       0xf22f0000,
+};
+#endif
 
 static void UcodeCopy (volatile cpm8xx_t *cpm)
 {
index 19c4f764e39031fe3a7046967c27193fe9daeb15..42fd7fb872f91c97f7823ecaf44f4423fda78e14 100644 (file)
@@ -148,7 +148,7 @@ long int spd_sdram(int(read_spd)(uint addr))
        int t_rc;
        int min_cas;
 
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
        unsigned long bus_period_x_10;
 
        /*
index 4a4c6f29edf2e8a43ecc268279c13fd51d9c2ca2..b9cf5cbfccaf0b8ebdfa4a32616c2ebd3674cbae 100644 (file)
@@ -251,10 +251,10 @@ void spd_ddr_init_hang (void) __attribute__((weak, alias("__spd_ddr_init_hang"))
  * memory.
  *
  * If at some time this restriction doesn't apply anymore, just define
- * CFG_ENABLE_SDRAM_CACHE in the board config file and this code should setup
+ * CONFIG_4xx_DCACHE in the board config file and this code should setup
  * everything correctly.
  */
-#ifdef CFG_ENABLE_SDRAM_CACHE
+#ifdef CONFIG_4xx_DCACHE
 #define MY_TLB_WORD2_I_ENABLE  0                       /* enable caching on SDRAM */
 #else
 #define MY_TLB_WORD2_I_ENABLE  TLB_WORD2_I_ENABLE      /* disable caching on SDRAM */
@@ -345,7 +345,7 @@ long int spd_sdram(void) {
         */
        check_volt_type(dimm_populated, iic0_dimm_addr, num_dimm_banks);
 
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
        /*
         * Soft-reset SDRAM controller.
         */
@@ -645,7 +645,7 @@ static void program_rtr(unsigned long *dimm_populated,
        unsigned char refresh_rate_type;
        unsigned long refresh_interval;
        unsigned long sdram_rtr;
-       PPC440_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        /*
         * get the board info
@@ -721,7 +721,7 @@ static void program_tr0(unsigned long *dimm_populated,
        unsigned long tcyc_2_0_ns_x_10;
        unsigned long tcyc_reg;
        unsigned long bus_period_x_10;
-       PPC440_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
        unsigned long residue;
 
        /*
@@ -1065,7 +1065,7 @@ static void program_tr1(void)
        unsigned char window_found;
        unsigned char fail_found;
        unsigned char pass_found;
-       PPC440_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        /*
         * get the board info
@@ -1197,9 +1197,6 @@ static void program_tr1(void)
        }
 
        rdclt_average = ((max_start + max_end) >> 1);
-       if (rdclt_average >= 0x60)
-               while (1)
-                       ;
 
        if (rdclt_average < 0) {
                rdclt_average = 0;
index 67ba5bdef24f76716ee817e1d7b382c2ce91840f..3ac2cdcf7f469f7126309f4105c6fc3b88adf776 100644 (file)
@@ -3,7 +3,7 @@
  * This SPD SDRAM detection code supports AMCC PPC44x cpu's with a
  * DDR2 controller (non Denali Core). Those are 440SP/SPe.
  *
- * (C) Copyright 2007
+ * (C) Copyright 2007-2008
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
  * COPYRIGHT   AMCC   CORPORATION 2004
 #define NUMMEMWORDS    8
 #define NUMLOOPS       64              /* memory test loops */
 
-#undef CONFIG_ECC_ERROR_RESET          /* test-only: see description below, at check_ecc() */
-
 /*
  * This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
  * region. Right now the cache should still be disabled in U-Boot because of the
  * memory.
  *
  * If at some time this restriction doesn't apply anymore, just define
- * CFG_ENABLE_SDRAM_CACHE in the board config file and this code should setup
+ * CONFIG_4xx_DCACHE in the board config file and this code should setup
  * everything correctly.
  */
-#ifdef CFG_ENABLE_SDRAM_CACHE
+#ifdef CONFIG_4xx_DCACHE
 #define MY_TLB_WORD2_I_ENABLE  0                       /* enable caching on SDRAM */
 #else
 #define MY_TLB_WORD2_I_ENABLE  TLB_WORD2_I_ENABLE      /* disable caching on SDRAM */
@@ -623,7 +621,7 @@ static void get_spd_info(unsigned long *dimm_populated,
 
 void board_add_ram_info(int use_default)
 {
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
        u32 val;
 
        if (is_ecc_enabled())
@@ -741,7 +739,7 @@ static void check_frequency(unsigned long *dimm_populated,
        unsigned long calc_cycle_time;
        unsigned long sdram_freq;
        unsigned long sdr_ddrpll;
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
 
        /*------------------------------------------------------------------
         * Get the board configuration info.
@@ -1353,7 +1351,7 @@ static void program_mode(unsigned long *dimm_populated,
        unsigned long max_4_0_tcyc_ns_x_100;
        unsigned long max_5_0_tcyc_ns_x_100;
        unsigned long cycle_time_ns_x_100[3];
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
        unsigned char cas_2_0_available;
        unsigned char cas_2_5_available;
        unsigned char cas_3_0_available;
@@ -1640,7 +1638,7 @@ static void program_rtr(unsigned long *dimm_populated,
                        unsigned char *iic0_dimm_addr,
                        unsigned long num_dimm_banks)
 {
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
        unsigned long max_refresh_rate;
        unsigned long dimm_num;
        unsigned long refresh_rate_type;
@@ -1737,7 +1735,7 @@ static void program_tr(unsigned long *dimm_populated,
        unsigned long sdram_freq;
        unsigned long sdr_ddrpll;
 
-       PPC440_SYS_INFO board_cfg;
+       PPC4xx_SYS_INFO board_cfg;
 
        /*------------------------------------------------------------------
         * Get the board configuration info.
@@ -2048,14 +2046,10 @@ static void program_bxcf(unsigned long *dimm_populated,
        /*------------------------------------------------------------------
         * Set the BxCF regs.  First, wipe out the bank config registers.
         *-----------------------------------------------------------------*/
-       mtdcr(SDRAMC_CFGADDR, SDRAM_MB0CF);
-       mtdcr(SDRAMC_CFGDATA, 0x00000000);
-       mtdcr(SDRAMC_CFGADDR, SDRAM_MB1CF);
-       mtdcr(SDRAMC_CFGDATA, 0x00000000);
-       mtdcr(SDRAMC_CFGADDR, SDRAM_MB2CF);
-       mtdcr(SDRAMC_CFGDATA, 0x00000000);
-       mtdcr(SDRAMC_CFGADDR, SDRAM_MB3CF);
-       mtdcr(SDRAMC_CFGDATA, 0x00000000);
+       mtsdram(SDRAM_MB0CF, 0x00000000);
+       mtsdram(SDRAM_MB1CF, 0x00000000);
+       mtsdram(SDRAM_MB2CF, 0x00000000);
+       mtsdram(SDRAM_MB3CF, 0x00000000);
 
        mode = SDRAM_BXCF_M_BE_ENABLE;
 
@@ -2107,8 +2101,9 @@ static void program_bxcf(unsigned long *dimm_populated,
                                bank_0_populated = 1;
 
                        for (ind_rank = 0; ind_rank < num_ranks; ind_rank++) {
-                               mtdcr(SDRAMC_CFGADDR, SDRAM_MB0CF + ((dimm_num + bank_0_populated + ind_rank) << 2));
-                               mtdcr(SDRAMC_CFGDATA, mode);
+                               mtsdram(SDRAM_MB0CF +
+                                       ((dimm_num + bank_0_populated + ind_rank) << 2),
+                                       mode);
                        }
                }
        }
@@ -2271,39 +2266,6 @@ static void program_ecc(unsigned long *dimm_populated,
        return;
 }
 
-#ifdef CONFIG_ECC_ERROR_RESET
-/*
- * Check for ECC errors and reset board upon any error here
- *
- * On the Katmai 440SPe eval board, from time to time, the first
- * lword write access after DDR2 initializazion with ECC checking
- * enabled, leads to an ECC error. I couldn't find a configuration
- * without this happening. On my board with the current setup it
- * happens about 1 from 10 times.
- *
- * The ECC modules used for testing are:
- * - Kingston ValueRAM KVR667D2E5/512 (tested with 1 and 2 DIMM's)
- *
- * This has to get fixed for the Katmai and tested for the other
- * board (440SP/440SPe) that will eventually use this code in the
- * future.
- *
- * 2007-03-01, sr
- */
-static void check_ecc(void)
-{
-       u32 val;
-
-       mfsdram(SDRAM_ECCCR, val);
-       if (val != 0) {
-               printf("\nECC error: MCIF0_ECCES=%08lx MQ0_ESL=%08lx address=%08lx\n",
-                      val, mfdcr(0x4c), mfdcr(0x4e));
-               printf("ECC error occured, resetting board...\n");
-               do_reset(NULL, 0, 0, NULL);
-       }
-}
-#endif
-
 static void wait_ddr_idle(void)
 {
        u32 val;
@@ -2378,15 +2340,6 @@ static void program_ecc_addr(unsigned long start_address,
                sync();
                eieio();
                wait_ddr_idle();
-
-#ifdef CONFIG_ECC_ERROR_RESET
-               /*
-                * One write to 0 is enough to trigger this ECC error
-                * (see description above)
-                */
-               out_be32(0, 0x12345678);
-               check_ecc();
-#endif
        }
 }
 #endif
@@ -2412,17 +2365,10 @@ static void program_DQS_calibration(unsigned long *dimm_populated,
         * Read sample cycle auto-update enable
         *-----------------------------------------------------------------*/
 
-       /*
-        * Modified for the Katmai platform:  with some DIMMs, the DDR2
-        * controller automatically selects the T2 read cycle, but this
-        * proves unreliable.  Go ahead and force the DDR2 controller
-        * to use the T4 sample and disable the automatic update of the
-        * RDSS field.
-        */
        mfsdram(SDRAM_RDCC, val);
        mtsdram(SDRAM_RDCC,
                (val & ~(SDRAM_RDCC_RDSS_MASK | SDRAM_RDCC_RSAE_MASK))
-               | (SDRAM_RDCC_RDSS_T4 | SDRAM_RDCC_RSAE_DISABLE));
+               | SDRAM_RDCC_RSAE_ENABLE);
 
        /*------------------------------------------------------------------
         * Program RQDC register
@@ -2515,10 +2461,7 @@ static void DQS_calibration_process(void)
 {
        unsigned long rfdc_reg;
        unsigned long rffd;
-       unsigned long rqdc_reg;
-       unsigned long rqfd;
        unsigned long val;
-       long rqfd_average;
        long rffd_average;
        long max_start;
        long min_end;
@@ -2536,10 +2479,14 @@ static void DQS_calibration_process(void)
        long max_end;
        unsigned char fail_found;
        unsigned char pass_found;
+#if !defined(CONFIG_DDR_RQDC_FIXED)
+       u32 rqdc_reg;
+       u32 rqfd;
        u32 rqfd_start;
+       u32 rqfd_average;
+       int loopi = 0;
        char str[] = "Auto calibration -";
        char slash[] = "\\|/-\\|/-";
-       int loopi = 0;
 
        /*------------------------------------------------------------------
         * Test to determine the best read clock delay tuning bits.
@@ -2574,6 +2521,16 @@ calibration_loop:
        mfsdram(SDRAM_RQDC, rqdc_reg);
        mtsdram(SDRAM_RQDC, (rqdc_reg & ~SDRAM_RQDC_RQFD_MASK) |
                SDRAM_RQDC_RQFD_ENCODE(rqfd_start));
+#else /* CONFIG_DDR_RQDC_FIXED */
+       /*
+        * On Katmai the complete auto-calibration somehow doesn't seem to
+        * produce the best results, meaning optimal values for RQFD/RFFD.
+        * This was discovered by GDA using a high bandwidth scope,
+        * analyzing the DDR2 signals. GDA provided a fixed value for RQFD,
+        * so now on Katmai "only" RFFD is auto-calibrated.
+        */
+       mtsdram(SDRAM_RQDC, CONFIG_DDR_RQDC_FIXED);
+#endif /* CONFIG_DDR_RQDC_FIXED */
 
        max_start = 0;
        min_end = 0;
@@ -2658,6 +2615,7 @@ calibration_loop:
        /* now fix RFDC[RFFD] found and find RQDC[RQFD] */
        mtsdram(SDRAM_RFDC, rfdc_reg | SDRAM_RFDC_RFFD_ENCODE(rffd_average));
 
+#if !defined(CONFIG_DDR_RQDC_FIXED)
        max_pass_length = 0;
        max_start = 0;
        max_end = 0;
@@ -2730,8 +2688,6 @@ calibration_loop:
                spd_ddr_init_hang ();
        }
 
-       blank_string(strlen(str));
-
        if (rqfd_average < 0)
                rqfd_average = 0;
 
@@ -2742,12 +2698,31 @@ calibration_loop:
                (rqdc_reg & ~SDRAM_RQDC_RQFD_MASK) |
                SDRAM_RQDC_RQFD_ENCODE(rqfd_average));
 
+       blank_string(strlen(str));
+#endif /* CONFIG_DDR_RQDC_FIXED */
+
+       /*
+        * Now complete RDSS configuration as mentioned on page 7 of the AMCC
+        * PowerPC440SP/SPe DDR2 application note:
+        * "DDR1/DDR2 Initialization Sequence and Dynamic Tuning"
+        */
+       mfsdram(SDRAM_RTSR, val);
+       if ((val & SDRAM_RTSR_TRK1SM_MASK) == SDRAM_RTSR_TRK1SM_ATPLS1) {
+               mfsdram(SDRAM_RDCC, val);
+               if ((val & SDRAM_RDCC_RDSS_MASK) != SDRAM_RDCC_RDSS_T4) {
+                       val += 0x40000000;
+                       mtsdram(SDRAM_RDCC, val);
+               }
+       }
+
        mfsdram(SDRAM_DLCR, val);
        debug("%s[%d] DLCR: 0x%08X\n", __FUNCTION__, __LINE__, val);
        mfsdram(SDRAM_RQDC, val);
        debug("%s[%d] RQDC: 0x%08X\n", __FUNCTION__, __LINE__, val);
        mfsdram(SDRAM_RFDC, val);
        debug("%s[%d] RFDC: 0x%08X\n", __FUNCTION__, __LINE__, val);
+       mfsdram(SDRAM_RDCC, val);
+       debug("%s[%d] RDCC: 0x%08X\n", __FUNCTION__, __LINE__, val);
 }
 #else /* calibration test with hardvalues */
 /*-----------------------------------------------------------------------------+
index 71a9e372da0b70d37e963ff4a02f52795729aff9..44659ffcd9800f1d3d7e856e4c2f5f9bbabe30c2 100644 (file)
 #include <common.h>
 #include <net.h>
 #include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
 #include <commproc.h>
 #include <ppc4xx.h>
 #include <ppc4xx_enet.h>
 #include <405_mal.h>
 #include <miiphy.h>
 #include <malloc.h>
-#include "vecnum.h"
+#include <asm/ppc4xx-intvec.h>
 
 /*
  * Only compile for platform with AMCC EMAC ethernet controller and
 #endif
 
 #define EMAC_RESET_TIMEOUT 1000 /* 1000 ms reset timeout */
-#define PHY_AUTONEGOTIATE_TIMEOUT 4000 /* 4000 ms autonegotiate timeout */
+#define PHY_AUTONEGOTIATE_TIMEOUT 5000 /* 5000 ms autonegotiate timeout */
 
 /* Ethernet Transmit and Receive Buffers */
 /* AS.HARNOIS
 #define BI_PHYMODE_GMII  3
 #define BI_PHYMODE_RTBI  4
 #define BI_PHYMODE_TBI   5
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define BI_PHYMODE_SMII  6
 #define BI_PHYMODE_MII   7
 #endif
 
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || \
-       defined(CONFIG_440GRX) || defined(CONFIG_440SP)
+#if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define SDR0_MFR_ETH_CLK_SEL_V(n)      ((0x01<<27) / (n+1))
 #endif
 
@@ -156,7 +161,14 @@ struct eth_device *emac0_dev = NULL;
 /*
  * Get count of EMAC devices (doesn't have to be the max. possible number
  * supported by the cpu)
+ *
+ * CONFIG_BOARD_EMAC_COUNT added so now a "dynamic" way to configure the
+ * EMAC count is possible. As it is needed for the Kilauea/Haleakala
+ * 405EX/405EXr eval board, using the same binary.
  */
+#if defined(CONFIG_BOARD_EMAC_COUNT)
+#define LAST_EMAC_NUM  board_emac_count()
+#else /* CONFIG_BOARD_EMAC_COUNT */
 #if defined(CONFIG_HAS_ETH3)
 #define LAST_EMAC_NUM  4
 #elif defined(CONFIG_HAS_ETH2)
@@ -166,12 +178,23 @@ struct eth_device *emac0_dev = NULL;
 #else
 #define LAST_EMAC_NUM  1
 #endif
+#endif /* CONFIG_BOARD_EMAC_COUNT */
 
 /* normal boards start with EMAC0 */
 #if !defined(CONFIG_EMAC_NR_START)
 #define CONFIG_EMAC_NR_START   0
 #endif
 
+#if defined(CONFIG_405EX) || defined(CONFIG_440EPX)
+#define ETH_IRQ_NUM(dev)       (VECNUM_ETH0 + ((dev)))
+#else
+#define ETH_IRQ_NUM(dev)       (VECNUM_ETH0 + ((dev) * 2))
+#endif
+
+#define MAL_RX_DESC_SIZE       2048
+#define MAL_TX_DESC_SIZE       2048
+#define MAL_ALLOC_SIZE         (MAL_TX_DESC_SIZE + MAL_RX_DESC_SIZE)
+
 /*-----------------------------------------------------------------------------+
  * Prototypes and externals.
  *-----------------------------------------------------------------------------*/
@@ -189,6 +212,8 @@ extern int emac4xx_miiphy_read (char *devname, unsigned char addr,
 extern int emac4xx_miiphy_write (char *devname, unsigned char addr,
                unsigned char reg, unsigned short value);
 
+int board_emac_count(void);
+
 /*-----------------------------------------------------------------------------+
 | ppc_4xx_eth_halt
 | Disable MAL channel, and EMACn
@@ -197,11 +222,13 @@ static void ppc_4xx_eth_halt (struct eth_device *dev)
 {
        EMAC_4XX_HW_PST hw_p = dev->priv;
        uint32_t failsafe = 10000;
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        unsigned long mfr;
 #endif
 
-       out32 (EMAC_IER + hw_p->hw_addr, 0x00000000);   /* disable emac interrupts */
+       out_be32((void *)EMAC_IER + hw_p->hw_addr, 0x00000000); /* disable emac interrupts */
 
        /* 1st reset MAL channel */
        /* Note: writing a 0 to a channel has no effect */
@@ -221,16 +248,20 @@ static void ppc_4xx_eth_halt (struct eth_device *dev)
        }
 
        /* EMAC RESET */
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        /* provide clocks for EMAC internal loopback  */
        mfsdr (sdr_mfr, mfr);
        mfr |= SDR0_MFR_ETH_CLK_SEL_V(hw_p->devnum);
        mtsdr(sdr_mfr, mfr);
 #endif
 
-       out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
+       out_be32((void *)EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
 
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        /* remove clocks for EMAC internal loopback  */
        mfsdr (sdr_mfr, mfr);
        mfr &= ~SDR0_MFR_ETH_CLK_SEL_V(hw_p->devnum);
@@ -329,8 +360,8 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
        /* Ensure we setup mdio for this devnum and ONLY this devnum */
        zmiifer |= (ZMII_FER_MDI) << ZMII_FER_V(devnum);
 
-       out32 (ZMII_FER, zmiifer);
-       out32 (RGMII_FER, rmiifer);
+       out_be32((void *)ZMII_FER, zmiifer);
+       out_be32((void *)RGMII_FER, rmiifer);
 
        return ((int)pfc1);
 }
@@ -348,31 +379,31 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
        switch (pfc1) {
        case SDR0_PFC1_SELECT_CONFIG_2:
                /* 1 x GMII port */
-               out32 (ZMII_FER, 0x00);
-               out32 (RGMII_FER, 0x00000037);
+               out_be32((void *)ZMII_FER, 0x00);
+               out_be32((void *)RGMII_FER, 0x00000037);
                bis->bi_phymode[0] = BI_PHYMODE_GMII;
                bis->bi_phymode[1] = BI_PHYMODE_NONE;
                break;
        case SDR0_PFC1_SELECT_CONFIG_4:
                /* 2 x RGMII ports */
-               out32 (ZMII_FER, 0x00);
-               out32 (RGMII_FER, 0x00000055);
+               out_be32((void *)ZMII_FER, 0x00);
+               out_be32((void *)RGMII_FER, 0x00000055);
                bis->bi_phymode[0] = BI_PHYMODE_RGMII;
                bis->bi_phymode[1] = BI_PHYMODE_RGMII;
                break;
        case SDR0_PFC1_SELECT_CONFIG_6:
                /* 2 x SMII ports */
-               out32 (ZMII_FER,
-                      ((ZMII_FER_SMII) << ZMII_FER_V(0)) |
-                      ((ZMII_FER_SMII) << ZMII_FER_V(1)));
-               out32 (RGMII_FER, 0x00000000);
+               out_be32((void *)ZMII_FER,
+                        ((ZMII_FER_SMII) << ZMII_FER_V(0)) |
+                        ((ZMII_FER_SMII) << ZMII_FER_V(1)));
+               out_be32((void *)RGMII_FER, 0x00000000);
                bis->bi_phymode[0] = BI_PHYMODE_SMII;
                bis->bi_phymode[1] = BI_PHYMODE_SMII;
                break;
        case SDR0_PFC1_SELECT_CONFIG_1_2:
                /* only 1 x MII supported */
-               out32 (ZMII_FER, (ZMII_FER_MII) << ZMII_FER_V(0));
-               out32 (RGMII_FER, 0x00000000);
+               out_be32((void *)ZMII_FER, (ZMII_FER_MII) << ZMII_FER_V(0));
+               out_be32((void *)RGMII_FER, 0x00000000);
                bis->bi_phymode[0] = BI_PHYMODE_MII;
                bis->bi_phymode[1] = BI_PHYMODE_NONE;
                break;
@@ -381,17 +412,55 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
        }
 
        /* Ensure we setup mdio for this devnum and ONLY this devnum */
-       zmiifer = in32 (ZMII_FER);
+       zmiifer = in_be32((void *)ZMII_FER);
        zmiifer |= (ZMII_FER_MDI) << ZMII_FER_V(devnum);
-       out32 (ZMII_FER, zmiifer);
+       out_be32((void *)ZMII_FER, zmiifer);
 
        return ((int)0x0);
 }
 #endif /* CONFIG_440EPX */
 
+#if defined(CONFIG_405EX)
+int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
+{
+       u32 gmiifer = 0;
+
+       /*
+        * Right now only 2*RGMII is supported. Please extend when needed.
+        * sr - 2007-09-19
+        */
+       switch (1) {
+       case 1:
+               /* 2 x RGMII ports */
+               out_be32((void *)RGMII_FER, 0x00000055);
+               bis->bi_phymode[0] = BI_PHYMODE_RGMII;
+               bis->bi_phymode[1] = BI_PHYMODE_RGMII;
+               break;
+       case 2:
+               /* 2 x SMII ports */
+               break;
+       default:
+               break;
+       }
+
+       /* Ensure we setup mdio for this devnum and ONLY this devnum */
+       gmiifer = in_be32((void *)RGMII_FER);
+       gmiifer |= (1 << (19-devnum));
+       out_be32((void *)RGMII_FER, gmiifer);
+
+       return ((int)0x0);
+}
+#endif  /* CONFIG_405EX */
+
+static inline void *malloc_aligned(u32 size, u32 align)
+{
+       return (void *)(((u32)malloc(size + align) + align - 1) &
+                       ~(align - 1));
+}
+
 static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 {
-       int i, j;
+       int i;
        unsigned long reg = 0;
        unsigned long msr;
        unsigned long speed;
@@ -402,18 +471,22 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        unsigned short reg_short;
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
        sys_info_t sysinfo;
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        int ethgroup = -1;
 #endif
 #endif
 #if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
        unsigned long mfr;
 #endif
-
+       u32 bd_cached;
+       u32 bd_uncached = 0;
 
        EMAC_4XX_HW_PST hw_p = dev->priv;
 
@@ -426,7 +499,8 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
        /* Need to get the OPB frequency so we can access the PHY */
        get_sys_info (&sysinfo);
 #endif
@@ -476,53 +550,57 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        /* NOTE: Therefore, disable all other EMACS, since we handle */
        /* NOTE: only one emac at a time */
        reg = 0;
-       out32 (ZMII_FER, 0);
+       out_be32((void *)ZMII_FER, 0);
        udelay (100);
 
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       out32 (ZMII_FER, (ZMII_FER_RMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
+       out_be32((void *)ZMII_FER, (ZMII_FER_RMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
 #elif defined(CONFIG_440GX) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        ethgroup = ppc_4xx_eth_setup_bridge(devnum, bis);
 #elif defined(CONFIG_440GP)
        /* set RMII mode */
-       out32 (ZMII_FER, ZMII_RMII | ZMII_MDI0);
+       out_be32((void *)ZMII_FER, ZMII_RMII | ZMII_MDI0);
 #else
        if ((devnum == 0) || (devnum == 1)) {
-               out32 (ZMII_FER, (ZMII_FER_SMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
+               out_be32((void *)ZMII_FER, (ZMII_FER_SMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
        } else { /* ((devnum == 2) || (devnum == 3)) */
-               out32 (ZMII_FER, ZMII_FER_MDI << ZMII_FER_V (devnum));
-               out32 (RGMII_FER, ((RGMII_FER_RGMII << RGMII_FER_V (2)) |
-                                  (RGMII_FER_RGMII << RGMII_FER_V (3))));
+               out_be32((void *)ZMII_FER, ZMII_FER_MDI << ZMII_FER_V (devnum));
+               out_be32((void *)RGMII_FER, ((RGMII_FER_RGMII << RGMII_FER_V (2)) |
+                                            (RGMII_FER_RGMII << RGMII_FER_V (3))));
        }
 #endif
 
-       out32 (ZMII_SSR, ZMII_SSR_SP << ZMII_SSR_V(devnum));
+       out_be32((void *)ZMII_SSR, ZMII_SSR_SP << ZMII_SSR_V(devnum));
 #endif /* defined(CONFIG_440) && !defined(CONFIG_440SP) */
+#if defined(CONFIG_405EX)
+       ethgroup = ppc_4xx_eth_setup_bridge(devnum, bis);
+#endif
 
        __asm__ volatile ("eieio");
 
        /* reset emac so we have access to the phy */
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+#if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        /* provide clocks for EMAC internal loopback  */
        mfsdr (sdr_mfr, mfr);
        mfr |= SDR0_MFR_ETH_CLK_SEL_V(devnum);
        mtsdr(sdr_mfr, mfr);
 #endif
 
-       out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
-       __asm__ volatile ("eieio");
+       out_be32((void *)EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
 
        failsafe = 1000;
-       while ((in32 (EMAC_M0 + hw_p->hw_addr) & (EMAC_M0_SRST)) && failsafe) {
+       while ((in_be32((void *)EMAC_M0 + hw_p->hw_addr) & (EMAC_M0_SRST)) && failsafe) {
                udelay (1000);
                failsafe--;
        }
        if (failsafe <= 0)
                printf("\nProblem resetting EMAC!\n");
 
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+#if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        /* remove clocks for EMAC internal loopback  */
        mfsdr (sdr_mfr, mfr);
        mfr &= ~SDR0_MFR_ETH_CLK_SEL_V(devnum);
@@ -531,7 +609,8 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
        /* Whack the M1 register */
        mode_reg = 0x0;
        mode_reg &= ~0x00000038;
@@ -545,7 +624,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        else
                mode_reg |= EMAC_M1_OBCI_GT100;
 
-       out32 (EMAC_M1 + hw_p->hw_addr, mode_reg);
+       out_be32((void *)EMAC_M1 + hw_p->hw_addr, mode_reg);
 #endif /* defined(CONFIG_440GX) || defined(CONFIG_440SP) */
 
        /* wait for PHY to complete auto negotiation */
@@ -591,7 +670,8 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
 
 #if defined(CONFIG_CIS8201_PHY)
                /*
@@ -702,11 +782,11 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 #endif
 
        /* Set ZMII/RGMII speed according to the phy link speed */
-       reg = in32 (ZMII_SSR);
+       reg = in_be32((void *)ZMII_SSR);
        if ( (speed == 100) || (speed == 1000) )
-               out32 (ZMII_SSR, reg | (ZMII_SSR_SP << ZMII_SSR_V (devnum)));
+               out_be32((void *)ZMII_SSR, reg | (ZMII_SSR_SP << ZMII_SSR_V (devnum)));
        else
-               out32 (ZMII_SSR, reg & (~(ZMII_SSR_SP << ZMII_SSR_V (devnum))));
+               out_be32((void *)ZMII_SSR, reg & (~(ZMII_SSR_SP << ZMII_SSR_V (devnum))));
 
        if ((devnum == 2) || (devnum == 3)) {
                if (speed == 1000)
@@ -719,11 +799,12 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
                        printf("Error in RGMII Speed\n");
                        return -1;
                }
-               out32 (RGMII_SSR, reg);
+               out_be32((void *)RGMII_SSR, reg);
        }
 #endif /* defined(CONFIG_440) && !defined(CONFIG_440SP) */
 
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        if (speed == 1000)
                reg = (RGMII_SSR_SP_1000MBPS << RGMII_SSR_V (devnum));
        else if (speed == 100)
@@ -734,13 +815,14 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
                printf("Error in RGMII Speed\n");
                return -1;
        }
-       out32 (RGMII_SSR, reg);
+       out_be32((void *)RGMII_SSR, reg);
 #endif
 
        /* set the Mal configuration reg */
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
        mtdcr (malmcr, MAL_CR_PLBB | MAL_CR_OPBBL | MAL_CR_LEA |
               MAL_CR_PLBLT_DEFAULT | MAL_CR_EOPIE | 0x00330000);
 #else
@@ -751,91 +833,58 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        }
 #endif
 
-       /* Free "old" buffers */
-       if (hw_p->alloc_tx_buf)
-               free (hw_p->alloc_tx_buf);
-       if (hw_p->alloc_rx_buf)
-               free (hw_p->alloc_rx_buf);
-
        /*
         * Malloc MAL buffer desciptors, make sure they are
         * aligned on cache line boundary size
         * (401/403/IOP480 = 16, 405 = 32)
         * and doesn't cross cache block boundaries.
         */
-       hw_p->alloc_tx_buf =
-               (mal_desc_t *) malloc ((sizeof (mal_desc_t) * NUM_TX_BUFF) +
-                                      ((2 * CFG_CACHELINE_SIZE) - 2));
-       if (NULL == hw_p->alloc_tx_buf)
-               return -1;
-       if (((int) hw_p->alloc_tx_buf & CACHELINE_MASK) != 0) {
-               hw_p->tx =
-                       (mal_desc_t *) ((int) hw_p->alloc_tx_buf +
-                                       CFG_CACHELINE_SIZE -
-                                       ((int) hw_p->
-                                        alloc_tx_buf & CACHELINE_MASK));
-       } else {
-               hw_p->tx = hw_p->alloc_tx_buf;
-       }
+       if (hw_p->first_init == 0) {
+               debug("*** Allocating descriptor memory ***\n");
 
-       hw_p->alloc_rx_buf =
-               (mal_desc_t *) malloc ((sizeof (mal_desc_t) * NUM_RX_BUFF) +
-                                      ((2 * CFG_CACHELINE_SIZE) - 2));
-       if (NULL == hw_p->alloc_rx_buf) {
-               free(hw_p->alloc_tx_buf);
-               hw_p->alloc_tx_buf = NULL;
-               return -1;
-       }
+               bd_cached = (u32)malloc_aligned(MAL_ALLOC_SIZE, 4096);
+               if (!bd_cached) {
+                       printf("%s: Error allocating MAL descriptor buffers!\n");
+                       return -1;
+               }
 
-       if (((int) hw_p->alloc_rx_buf & CACHELINE_MASK) != 0) {
-               hw_p->rx =
-                       (mal_desc_t *) ((int) hw_p->alloc_rx_buf +
-                                       CFG_CACHELINE_SIZE -
-                                       ((int) hw_p->
-                                        alloc_rx_buf & CACHELINE_MASK));
-       } else {
-               hw_p->rx = hw_p->alloc_rx_buf;
+#ifdef CONFIG_4xx_DCACHE
+               flush_dcache_range(bd_cached, bd_cached + MAL_ALLOC_SIZE);
+               bd_uncached = bis->bi_memsize;
+               program_tlb(bd_cached, bd_uncached, MAL_ALLOC_SIZE,
+                           TLB_WORD2_I_ENABLE);
+#else
+               bd_uncached = bd_cached;
+#endif
+               hw_p->tx_phys = bd_cached;
+               hw_p->rx_phys = bd_cached + MAL_TX_DESC_SIZE;
+               hw_p->tx = (mal_desc_t *)(bd_uncached);
+               hw_p->rx = (mal_desc_t *)(bd_uncached + MAL_TX_DESC_SIZE);
+               debug("hw_p->tx=%08x, hw_p->rx=%08x\n", hw_p->tx, hw_p->rx);
        }
 
        for (i = 0; i < NUM_TX_BUFF; i++) {
                hw_p->tx[i].ctrl = 0;
                hw_p->tx[i].data_len = 0;
-               if (hw_p->first_init == 0) {
-                       hw_p->txbuf_ptr =
-                               (char *) malloc (ENET_MAX_MTU_ALIGNED);
-                       if (NULL == hw_p->txbuf_ptr) {
-                               free(hw_p->alloc_rx_buf);
-                               free(hw_p->alloc_tx_buf);
-                               hw_p->alloc_rx_buf = NULL;
-                               hw_p->alloc_tx_buf = NULL;
-                               for(j = 0; j < i; j++) {
-                                       free(hw_p->tx[i].data_ptr);
-                                       hw_p->tx[i].data_ptr = NULL;
-                               }
-                       }
-               }
+               if (hw_p->first_init == 0)
+                       hw_p->txbuf_ptr = malloc_aligned(MAL_ALLOC_SIZE,
+                                                        L1_CACHE_BYTES);
                hw_p->tx[i].data_ptr = hw_p->txbuf_ptr;
                if ((NUM_TX_BUFF - 1) == i)
                        hw_p->tx[i].ctrl |= MAL_TX_CTRL_WRAP;
                hw_p->tx_run[i] = -1;
-#if 0
-               printf ("TX_BUFF %d @ 0x%08lx\n", i,
-                       (ulong) hw_p->tx[i].data_ptr);
-#endif
+               debug("TX_BUFF %d @ 0x%08lx\n", i, (u32)hw_p->tx[i].data_ptr);
        }
 
        for (i = 0; i < NUM_RX_BUFF; i++) {
                hw_p->rx[i].ctrl = 0;
                hw_p->rx[i].data_len = 0;
-               /*       rx[i].data_ptr = (char *) &rx_buff[i]; */
-               hw_p->rx[i].data_ptr = (char *) NetRxPackets[i];
+               hw_p->rx[i].data_ptr = (char *)NetRxPackets[i];
                if ((NUM_RX_BUFF - 1) == i)
                        hw_p->rx[i].ctrl |= MAL_RX_CTRL_WRAP;
                hw_p->rx[i].ctrl |= MAL_RX_CTRL_EMPTY | MAL_RX_CTRL_INTR;
                hw_p->rx_ready[i] = -1;
-#if 0
-               printf ("RX_BUFF %d @ 0x%08lx\n", i, (ulong) hw_p->rx[i].data_ptr);
-#endif
+               debug("RX_BUFF %d @ 0x%08lx\n", i, (u32)hw_p->rx[i].data_ptr);
        }
 
        reg = 0x00000000;
@@ -844,7 +893,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        reg = reg << 8;
        reg |= dev->enetaddr[1];
 
-       out32 (EMAC_IAH + hw_p->hw_addr, reg);
+       out_be32((void *)EMAC_IAH + hw_p->hw_addr, reg);
 
        reg = 0x00000000;
        reg |= dev->enetaddr[2];        /* set low address  */
@@ -855,21 +904,21 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        reg = reg << 8;
        reg |= dev->enetaddr[5];
 
-       out32 (EMAC_IAL + hw_p->hw_addr, reg);
+       out_be32((void *)EMAC_IAL + hw_p->hw_addr, reg);
 
        switch (devnum) {
        case 1:
                /* setup MAL tx & rx channel pointers */
 #if defined (CONFIG_405EP) || defined (CONFIG_440EP) || defined (CONFIG_440GR)
-               mtdcr (maltxctp2r, hw_p->tx);
+               mtdcr (maltxctp2r, hw_p->tx_phys);
 #else
-               mtdcr (maltxctp1r, hw_p->tx);
+               mtdcr (maltxctp1r, hw_p->tx_phys);
 #endif
 #if defined(CONFIG_440)
                mtdcr (maltxbattr, 0x0);
                mtdcr (malrxbattr, 0x0);
 #endif
-               mtdcr (malrxctp1r, hw_p->rx);
+               mtdcr (malrxctp1r, hw_p->rx_phys);
                /* set RX buffer size */
                mtdcr (malrcbs1, ENET_MAX_MTU_ALIGNED / 16);
                break;
@@ -878,17 +927,17 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
                /* setup MAL tx & rx channel pointers */
                mtdcr (maltxbattr, 0x0);
                mtdcr (malrxbattr, 0x0);
-               mtdcr (maltxctp2r, hw_p->tx);
-               mtdcr (malrxctp2r, hw_p->rx);
+               mtdcr (maltxctp2r, hw_p->tx_phys);
+               mtdcr (malrxctp2r, hw_p->rx_phys);
                /* set RX buffer size */
                mtdcr (malrcbs2, ENET_MAX_MTU_ALIGNED / 16);
                break;
        case 3:
                /* setup MAL tx & rx channel pointers */
                mtdcr (maltxbattr, 0x0);
-               mtdcr (maltxctp3r, hw_p->tx);
+               mtdcr (maltxctp3r, hw_p->tx_phys);
                mtdcr (malrxbattr, 0x0);
-               mtdcr (malrxctp3r, hw_p->rx);
+               mtdcr (malrxctp3r, hw_p->rx_phys);
                /* set RX buffer size */
                mtdcr (malrcbs3, ENET_MAX_MTU_ALIGNED / 16);
                break;
@@ -900,8 +949,8 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
                mtdcr (maltxbattr, 0x0);
                mtdcr (malrxbattr, 0x0);
 #endif
-               mtdcr (maltxctp0r, hw_p->tx);
-               mtdcr (malrxctp0r, hw_p->rx);
+               mtdcr (maltxctp0r, hw_p->tx_phys);
+               mtdcr (malrxctp0r, hw_p->rx_phys);
                /* set RX buffer size */
                mtdcr (malrcbs0, ENET_MAX_MTU_ALIGNED / 16);
                break;
@@ -916,10 +965,10 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        mtdcr (malrxcasr, (MAL_TXRX_CASR >> hw_p->devnum));
 
        /* set transmit enable & receive enable */
-       out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_TXE | EMAC_M0_RXE);
+       out_be32((void *)EMAC_M0 + hw_p->hw_addr, EMAC_M0_TXE | EMAC_M0_RXE);
 
        /* set receive fifo to 4k and tx fifo to 2k */
-       mode_reg = in32 (EMAC_M1 + hw_p->hw_addr);
+       mode_reg = in_be32((void *)EMAC_M1 + hw_p->hw_addr);
        mode_reg |= EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K;
 
        /* set speed */
@@ -940,46 +989,46 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        if (duplex == FULL)
                mode_reg = mode_reg | 0x80000000 | EMAC_M1_IST;
 
-       out32 (EMAC_M1 + hw_p->hw_addr, mode_reg);
+       out_be32((void *)EMAC_M1 + hw_p->hw_addr, mode_reg);
 
        /* Enable broadcast and indvidual address */
        /* TBS: enabling runts as some misbehaved nics will send runts */
-       out32 (EMAC_RXM + hw_p->hw_addr, EMAC_RMR_BAE | EMAC_RMR_IAE);
+       out_be32((void *)EMAC_RXM + hw_p->hw_addr, EMAC_RMR_BAE | EMAC_RMR_IAE);
 
        /* we probably need to set the tx mode1 reg? maybe at tx time */
 
        /* set transmit request threshold register */
-       out32 (EMAC_TRTR + hw_p->hw_addr, 0x18000000);  /* 256 byte threshold */
+       out_be32((void *)EMAC_TRTR + hw_p->hw_addr, 0x18000000);        /* 256 byte threshold */
 
        /* set receive  low/high water mark register */
 #if defined(CONFIG_440)
        /* 440s has a 64 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x80009000);
+       out_be32((void *)EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x80009000);
 #else
        /* 405s have a 16 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x0f002000);
+       out_be32((void *)EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x0f002000);
 #endif /* defined(CONFIG_440) */
-       out32 (EMAC_TXM1 + hw_p->hw_addr, 0xf8640000);
+       out_be32((void *)EMAC_TXM1 + hw_p->hw_addr, 0xf8640000);
 
        /* Set fifo limit entry in tx mode 0 */
-       out32 (EMAC_TXM0 + hw_p->hw_addr, 0x00000003);
+       out_be32((void *)EMAC_TXM0 + hw_p->hw_addr, 0x00000003);
        /* Frame gap set */
-       out32 (EMAC_I_FRAME_GAP_REG + hw_p->hw_addr, 0x00000008);
+       out_be32((void *)EMAC_I_FRAME_GAP_REG + hw_p->hw_addr, 0x00000008);
 
        /* Set EMAC IER */
        hw_p->emac_ier = EMAC_ISR_PTLE | EMAC_ISR_BFCS | EMAC_ISR_ORE | EMAC_ISR_IRE;
        if (speed == _100BASET)
                hw_p->emac_ier = hw_p->emac_ier | EMAC_ISR_SYE;
 
-       out32 (EMAC_ISR + hw_p->hw_addr, 0xffffffff);   /* clear pending interrupts */
-       out32 (EMAC_IER + hw_p->hw_addr, hw_p->emac_ier);
+       out_be32((void *)EMAC_ISR + hw_p->hw_addr, 0xffffffff); /* clear pending interrupts */
+       out_be32((void *)EMAC_IER + hw_p->hw_addr, hw_p->emac_ier);
 
        if (hw_p->first_init == 0) {
                /*
                 * Connect interrupt service routines
                 */
-               irq_install_handler (VECNUM_ETH0 + (hw_p->devnum * 2),
-                                    (interrupt_handler_t *) enetInt, dev);
+               irq_install_handler(ETH_IRQ_NUM(hw_p->devnum),
+                                   (interrupt_handler_t *) enetInt, dev);
        }
 
        mtmsr (msr);            /* enable interrupts again */
@@ -987,7 +1036,7 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
        hw_p->bis = bis;
        hw_p->first_init = 1;
 
-       return (1);
+       return 0;
 }
 
 
@@ -1015,6 +1064,7 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
 
        /*   memcpy ((void *) &tx_buff[tx_slot], (const void *) ptr, len); */
        memcpy ((void *) hw_p->txbuf_ptr, (const void *) ptr, len);
+       flush_dcache_range((u32)hw_p->txbuf_ptr, (u32)hw_p->txbuf_ptr + len);
 
        /*-----------------------------------------------------------------------+
         * set TX Buffer busy, and send it
@@ -1030,8 +1080,8 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
 
        __asm__ volatile ("eieio");
 
-       out32 (EMAC_TXM0 + hw_p->hw_addr,
-              in32 (EMAC_TXM0 + hw_p->hw_addr) | EMAC_TXM0_GNP0);
+       out_be32((void *)EMAC_TXM0 + hw_p->hw_addr,
+                in_be32((void *)EMAC_TXM0 + hw_p->hw_addr) | EMAC_TXM0_GNP0);
 #ifdef INFO_4XX_ENET
        hw_p->stats.pkts_tx++;
 #endif
@@ -1041,7 +1091,7 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
         *-----------------------------------------------------------------------*/
        time_start = get_timer (0);
        while (1) {
-               temp_txm0 = in32 (EMAC_TXM0 + hw_p->hw_addr);
+               temp_txm0 = in_be32((void *)EMAC_TXM0 + hw_p->hw_addr);
                /* loop until either TINT turns on or 3 seconds elapse */
                if ((temp_txm0 & EMAC_TXM0_GNP0) != 0) {
                        /* transmit is done, so now check for errors
@@ -1059,7 +1109,7 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
 }
 
 
-#if defined (CONFIG_440)
+#if defined (CONFIG_440) || defined(CONFIG_405EX)
 
 #if defined(CONFIG_440SP) || defined(CONFIG_440SPE)
 /*
@@ -1073,7 +1123,8 @@ static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
 #define UIC0SR         uic0sr
 #endif
 
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define UICMSR_ETHX    uic0msr
 #define UICSR_ETHX     uic0sr
 #else
@@ -1149,7 +1200,7 @@ int enetInt (struct eth_device *dev)
                /* port by port dispatch of emac interrupts */
                if (hw_p->devnum == 0) {
                        if (UIC_ETH0 & my_uicmsr_ethx) {        /* look for EMAC errors */
-                               emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
+                               emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr);
                                if ((hw_p->emac_ier & emac_isr) != 0) {
                                        emac_err (dev, emac_isr);
                                        serviced = 1;
@@ -1168,7 +1219,7 @@ int enetInt (struct eth_device *dev)
 #if !defined(CONFIG_440SP)
                if (hw_p->devnum == 1) {
                        if (UIC_ETH1 & my_uicmsr_ethx) {        /* look for EMAC errors */
-                               emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
+                               emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr);
                                if ((hw_p->emac_ier & emac_isr) != 0) {
                                        emac_err (dev, emac_isr);
                                        serviced = 1;
@@ -1186,7 +1237,7 @@ int enetInt (struct eth_device *dev)
 #if defined (CONFIG_440GX)
                if (hw_p->devnum == 2) {
                        if (UIC_ETH2 & my_uic2msr) {    /* look for EMAC errors */
-                               emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
+                               emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr);
                                if ((hw_p->emac_ier & emac_isr) != 0) {
                                        emac_err (dev, emac_isr);
                                        serviced = 1;
@@ -1204,7 +1255,7 @@ int enetInt (struct eth_device *dev)
 
                if (hw_p->devnum == 3) {
                        if (UIC_ETH3 & my_uic2msr) {    /* look for EMAC errors */
-                               emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
+                               emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr);
                                if ((hw_p->emac_ier & emac_isr) != 0) {
                                        emac_err (dev, emac_isr);
                                        serviced = 1;
@@ -1316,7 +1367,7 @@ int enetInt (struct eth_device *dev)
                /* port by port dispatch of emac interrupts */
 
                if ((SEL_UIC_DEF(hw_p->devnum) & my_uicmsr) != 0) {     /* look for EMAC errors */
-                       emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
+                       emac_isr = in_be32((void *)EMAC_ISR + hw_p->hw_addr);
                        if ((hw_p->emac_ier & emac_isr) != 0) {
                                emac_err (dev, emac_isr);
                                serviced = 1;
@@ -1390,7 +1441,7 @@ static void emac_err (struct eth_device *dev, unsigned long isr)
        EMAC_4XX_HW_PST hw_p = dev->priv;
 
        printf ("EMAC%d error occured.... ISR = %lx\n", hw_p->devnum, isr);
-       out32 (EMAC_ISR + hw_p->hw_addr, isr);
+       out_be32((void *)EMAC_ISR + hw_p->hw_addr, isr);
 }
 
 /*-----------------------------------------------------------------------------+
@@ -1513,6 +1564,9 @@ static int ppc_4xx_eth_rx (struct eth_device *dev)
                /* Pass the packet up to the protocol layers. */
                /*       NetReceive(NetRxPackets[rxIdx], length - 4); */
                /*       NetReceive(NetRxPackets[i], length); */
+               invalidate_dcache_range((u32)hw_p->rx[user_index].data_ptr,
+                                       (u32)hw_p->rx[user_index].data_ptr +
+                                       length - 4);
                NetReceive (NetRxPackets[user_index], length - 4);
                /* Free Recv Buffer */
                hw_p->rx[user_index].ctrl |= MAL_RX_CTRL_EMPTY;
@@ -1601,7 +1655,11 @@ int ppc_4xx_eth_initialize (bd_t * bis)
        bis->bi_phynum[3] = CONFIG_PHY3_ADDR;
        bis->bi_phymode[2] = 2;
        bis->bi_phymode[3] = 2;
+#endif
 
+#if defined(CONFIG_440GX) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
        ppc_4xx_eth_setup_bridge(0, bis);
 #endif
 
@@ -1649,7 +1707,9 @@ int ppc_4xx_eth_initialize (bd_t * bis)
 
                if (0 == virgin) {
                        /* set the MAL IER ??? names may change with new spec ??? */
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
                        mal_ier =
                                MAL_IER_PT | MAL_IER_PRE | MAL_IER_PWE |
                                MAL_IER_DE | MAL_IER_OTE | MAL_IER_OE | MAL_IER_PE ;
@@ -1695,7 +1755,8 @@ int ppc_4xx_eth_initialize (bd_t * bis)
 #endif
 #endif
        }                       /* end for each supported device */
-       return (1);
+
+       return 0;
 }
 
 #if !defined(CONFIG_NET_MULTI)
similarity index 98%
rename from cpu/ppc4xx/405gp_pci.c
rename to cpu/ppc4xx/4xx_pci.c
index 282e7a1ba4737d87a0f6641bb84638ea78a01cf1..a5b9690bec3fceeeca1a894f641ab575e141ea17 100644 (file)
@@ -72,7 +72,7 @@
 #include <common.h>
 #include <command.h>
 #if !defined(CONFIG_440)
-#include <405gp_pci.h>
+#include <asm/4xx_pci.h>
 #endif
 #include <asm/processor.h>
 #include <pci.h>
@@ -339,7 +339,7 @@ void pci_405gp_init(struct pci_controller *hose)
 }
 
 /*
- * drivers/pci.c skips every host bridge but the 405GP since it could
+ * drivers/pci/pci.c skips every host bridge but the 405GP since it could
  * be set as an Adapter.
  *
  * I (Andrew May) don't know what we should do here, but I don't want
@@ -592,4 +592,15 @@ void pci_init_board(void)
 }
 
 #endif /* CONFIG_440 */
+
+#if defined(CONFIG_405EX)
+void pci_init_board(void)
+{
+#ifdef CONFIG_PCI_SCAN_SHOW
+       printf("PCI:   Bus Dev VenId DevId Class Int\n");
+#endif
+       pcie_setup_hoses(0);
+}
+#endif /* CONFIG_405EX */
+
 #endif /* CONFIG_PCI */
similarity index 54%
rename from cpu/ppc4xx/440spe_pcie.c
rename to cpu/ppc4xx/4xx_pcie.c
index 3eac0ae62cd43d511946a123c266a9fbf23eae52..3af9862bfff0dd8a5d313d7bb68c81a903035d5d 100644 (file)
  *
  */
 
+/* define DEBUG for debugging output (obviously ;-)) */
+#if 0
+#define DEBUG
+#endif
+
 #include <asm/processor.h>
 #include <asm-ppc/io.h>
 #include <ppc4xx.h>
 #include <common.h>
 #include <pci.h>
 
-#if defined(CONFIG_440SPE) && defined(CONFIG_PCI)
+#if (defined(CONFIG_440SPE) || defined(CONFIG_405EX)) && \
+    defined(CONFIG_PCI)
 
-#include "440spe_pcie.h"
+#include <asm/4xx_pcie.h>
 
 enum {
        PTYPE_ENDPOINT          = 0x0,
@@ -40,6 +46,20 @@ enum {
        LNKW_X8                 = 0x8
 };
 
+static int validate_endpoint(struct pci_controller *hose)
+{
+       if (hose->cfg_data == (u8 *)CFG_PCIE0_CFGBASE)
+               return (is_end_point(0));
+       else if (hose->cfg_data == (u8 *)CFG_PCIE1_CFGBASE)
+               return (is_end_point(1));
+#if CFG_PCIE_NR_PORTS > 2
+       else if (hose->cfg_data == (u8 *)CFG_PCIE2_CFGBASE)
+               return (is_end_point(2));
+#endif
+
+       return 0;
+}
+
 static u8* pcie_get_base(struct pci_controller *hose, unsigned int devfn)
 {
        u8 *base = (u8*)hose->cfg_data;
@@ -50,8 +70,10 @@ static u8* pcie_get_base(struct pci_controller *hose, unsigned int devfn)
                        base = (u8*)CFG_PCIE0_XCFGBASE;
                if (hose->cfg_data == (u8*)CFG_PCIE1_CFGBASE)
                        base = (u8*)CFG_PCIE1_XCFGBASE;
+#if CFG_PCIE_NR_PORTS > 2
                if (hose->cfg_data == (u8*)CFG_PCIE2_CFGBASE)
                        base = (u8*)CFG_PCIE2_XCFGBASE;
+#endif
        }
 
        return base;
@@ -63,8 +85,10 @@ static void pcie_dmer_disable(void)
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE0_BASE)) | GPL_DMER_MASK_DISA);
        mtdcr (DCRN_PEGPL_CFG(DCRN_PCIE1_BASE),
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE1_BASE)) | GPL_DMER_MASK_DISA);
+#if CFG_PCIE_NR_PORTS > 2
        mtdcr (DCRN_PEGPL_CFG(DCRN_PCIE2_BASE),
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE2_BASE)) | GPL_DMER_MASK_DISA);
+#endif
 }
 
 static void pcie_dmer_enable(void)
@@ -73,8 +97,10 @@ static void pcie_dmer_enable(void)
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE0_BASE)) & ~GPL_DMER_MASK_DISA);
        mtdcr (DCRN_PEGPL_CFG (DCRN_PCIE1_BASE),
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE1_BASE)) & ~GPL_DMER_MASK_DISA);
+#if CFG_PCIE_NR_PORTS > 2
        mtdcr (DCRN_PEGPL_CFG (DCRN_PCIE2_BASE),
                mfdcr (DCRN_PEGPL_CFG(DCRN_PCIE2_BASE)) & ~GPL_DMER_MASK_DISA);
+#endif
 }
 
 static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
@@ -83,6 +109,9 @@ static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
        u8 *address;
        *val = 0;
 
+       if (validate_endpoint(hose))
+               return 0;               /* No upstream config access */
+
        /*
         * Bus numbers are relative to hose->first_busno
         */
@@ -115,6 +144,7 @@ static int pcie_read_config(struct pci_controller *hose, unsigned int devfn,
         */
        pcie_dmer_disable ();
 
+       debug("%s: cfg_data=%08x offset=%08x\n", __func__, hose->cfg_data, offset);
        switch (len) {
        case 1:
                *val = in_8(hose->cfg_data + offset);
@@ -137,6 +167,9 @@ static int pcie_write_config(struct pci_controller *hose, unsigned int devfn,
 
        u8 *address;
 
+       if (validate_endpoint(hose))
+               return 0;               /* No upstream config access */
+
        /*
         * Bus numbers are relative to hose->first_busno
         */
@@ -222,7 +255,8 @@ int pcie_write_config_dword(struct pci_controller *hose,pci_dev_t dev,int offset
        return pcie_write_config(hose,(u32)dev,offset,3,(u32 )val);
 }
 
-static void ppc440spe_setup_utl(u32 port) {
+#if defined(CONFIG_440SPE)
+static void ppc4xx_setup_utl(u32 port) {
 
        volatile void *utl_base = NULL;
 
@@ -333,7 +367,7 @@ static int check_error(void)
 /*
  * Initialize PCI Express core
  */
-int ppc440spe_init_pcie(void)
+int ppc4xx_init_pcie(void)
 {
        int time_out = 20;
 
@@ -366,13 +400,223 @@ int ppc440spe_init_pcie(void)
        }
        return 0;
 }
+#else
+static void ppc4xx_setup_utl(u32 port)
+{
+       u32 utl_base;
+
+       /*
+        * Map UTL registers at 0xef4f_n000 (4K 0xfff mask) PEGPLn_REGMSK
+        */
+       switch (port) {
+       case 0:
+               mtdcr(DCRN_PEGPL_REGBAH(PCIE0), 0x00000000);
+               mtdcr(DCRN_PEGPL_REGBAL(PCIE0), CFG_PCIE0_UTLBASE);
+               mtdcr(DCRN_PEGPL_REGMSK(PCIE0), 0x00007001); /* 4k region, valid */
+               mtdcr(DCRN_PEGPL_SPECIAL(PCIE0), 0);
+               break;
+
+       case 1:
+               mtdcr(DCRN_PEGPL_REGBAH(PCIE1), 0x00000000);
+               mtdcr(DCRN_PEGPL_REGBAL(PCIE1), CFG_PCIE1_UTLBASE);
+               mtdcr(DCRN_PEGPL_REGMSK(PCIE1), 0x00007001); /* 4k region, valid */
+               mtdcr(DCRN_PEGPL_SPECIAL(PCIE1), 0);
+
+               break;
+       }
+       utl_base = (port==0) ? CFG_PCIE0_UTLBASE : CFG_PCIE1_UTLBASE;
+
+       /*
+        * Set buffer allocations and then assert VRB and TXE.
+        */
+       out_be32((u32 *)(utl_base + PEUTL_OUTTR),   0x02000000);
+       out_be32((u32 *)(utl_base + PEUTL_INTR),    0x02000000);
+       out_be32((u32 *)(utl_base + PEUTL_OPDBSZ),  0x04000000);
+       out_be32((u32 *)(utl_base + PEUTL_PBBSZ),   0x21000000);
+       out_be32((u32 *)(utl_base + PEUTL_IPHBSZ),  0x02000000);
+       out_be32((u32 *)(utl_base + PEUTL_IPDBSZ),  0x04000000);
+       out_be32((u32 *)(utl_base + PEUTL_RCIRQEN), 0x00f00000);
+       out_be32((u32 *)(utl_base + PEUTL_PCTL),    0x80800066);
+
+       out_be32((u32 *)(utl_base + PEUTL_PBCTL),   0x0800000c);
+       out_be32((u32 *)(utl_base + PEUTL_RCSTA),
+                in_be32((u32 *)(utl_base + PEUTL_RCSTA)) | 0x000040000);
+}
+
+int ppc4xx_init_pcie(void)
+{
+       /*
+        * Nothing to do on 405EX
+        */
+       return 0;
+}
+#endif
 
 /*
- *  Yucca board as End point and root point setup
+ * Board-specific pcie initialization
+ * Platform code can reimplement ppc4xx_init_pcie_port_hw() if needed
+ */
+
+/*
+ * Initialize various parts of the PCI Express core for our port:
+ *
+ * - Set as a root port and enable max width
+ *   (PXIE0 -> X8, PCIE1 and PCIE2 -> X4).
+ * - Set up UTL configuration.
+ * - Increase SERDES drive strength to levels suggested by AMCC.
+ * - De-assert RSTPYN, RSTDL and RSTGU.
+ *
+ * NOTICE for 440SPE revB chip: PESDRn_UTLSET2 is not set - we leave it
+ * with default setting 0x11310000. The register has new fields,
+ * PESDRn_UTLSET2[LKINE] in particular: clearing it leads to PCIE core
+ * hang.
+ */
+#if defined(CONFIG_440SPE)
+int __ppc4xx_init_pcie_port_hw(int port, int rootport)
+{
+       u32 val = 1 << 24;
+       u32 utlset1;
+
+       if (rootport) {
+               val = PTYPE_ROOT_PORT << 20;
+               utlset1 = 0x21222222;
+       } else {
+               val = PTYPE_LEGACY_ENDPOINT << 20;
+               utlset1 = 0x20222222;
+       }
+
+       if (port == 0)
+               val |= LNKW_X8 << 12;
+       else
+               val |= LNKW_X4 << 12;
+
+       SDR_WRITE(SDRN_PESDR_DLPSET(port), val);
+       SDR_WRITE(SDRN_PESDR_UTLSET1(port), utlset1);
+       if (!ppc440spe_revB())
+               SDR_WRITE(SDRN_PESDR_UTLSET2(port), 0x11000000);
+       SDR_WRITE(SDRN_PESDR_HSSL0SET1(port), 0x35000000);
+       SDR_WRITE(SDRN_PESDR_HSSL1SET1(port), 0x35000000);
+       SDR_WRITE(SDRN_PESDR_HSSL2SET1(port), 0x35000000);
+       SDR_WRITE(SDRN_PESDR_HSSL3SET1(port), 0x35000000);
+       if (port == 0) {
+               SDR_WRITE(PESDR0_HSSL4SET1, 0x35000000);
+               SDR_WRITE(PESDR0_HSSL5SET1, 0x35000000);
+               SDR_WRITE(PESDR0_HSSL6SET1, 0x35000000);
+               SDR_WRITE(PESDR0_HSSL7SET1, 0x35000000);
+       }
+       SDR_WRITE(SDRN_PESDR_RCSSET(port), (SDR_READ(SDRN_PESDR_RCSSET(port)) &
+                                           ~(1 << 24 | 1 << 16)) | 1 << 12);
+
+       return 0;
+}
+#endif /* CONFIG_440SPE */
+
+#if defined(CONFIG_405EX)
+int __ppc4xx_init_pcie_port_hw(int port, int rootport)
+{
+       u32 val;
+
+       if (rootport)
+               val = 0x00401000;
+       else
+               val = 0x00101000;
+
+       SDR_WRITE(SDRN_PESDR_DLPSET(port), val);
+       SDR_WRITE(SDRN_PESDR_UTLSET1(port), 0x00000000);
+       SDR_WRITE(SDRN_PESDR_UTLSET2(port), 0x01010000);
+       SDR_WRITE(SDRN_PESDR_PHYSET1(port), 0x720F0000);
+       SDR_WRITE(SDRN_PESDR_PHYSET2(port), 0x70600003);
+
+       /* Assert the PE0_PHY reset */
+       SDR_WRITE(SDRN_PESDR_RCSSET(port), 0x01010000);
+       udelay(1000);
+
+       /* deassert the PE0_hotreset */
+       if (is_end_point(port))
+               SDR_WRITE(SDRN_PESDR_RCSSET(port), 0x01111000);
+       else
+               SDR_WRITE(SDRN_PESDR_RCSSET(port), 0x01101000);
+
+       /* poll for phy !reset */
+       while (!(SDR_READ(SDRN_PESDR_PHYSTA(port)) & 0x00001000))
+               ;
+
+       /* deassert the PE0_gpl_utl_reset */
+       SDR_WRITE(SDRN_PESDR_RCSSET(port), 0x00101000);
+
+       if (port == 0)
+               mtdcr(DCRN_PEGPL_CFG(PCIE0), 0x10000000);  /* guarded on */
+       else
+               mtdcr(DCRN_PEGPL_CFG(PCIE1), 0x10000000);  /* guarded on */
+
+       return 0;
+}
+#endif /* CONFIG_405EX */
+
+int ppc4xx_init_pcie_port_hw(int port, int rootport)
+__attribute__((weak, alias("__ppc4xx_init_pcie_port_hw")));
+
+/*
+ * We map PCI Express configuration access into the 512MB regions
+ *
+ * NOTICE: revB is very strict about PLB real addressess and ranges to
+ * be mapped for config space; it seems to only work with d_nnnn_nnnn
+ * range (hangs the core upon config transaction attempts when set
+ * otherwise) while revA uses c_nnnn_nnnn.
+ *
+ * For revA:
+ *     PCIE0: 0xc_4000_0000
+ *     PCIE1: 0xc_8000_0000
+ *     PCIE2: 0xc_c000_0000
+ *
+ * For revB:
+ *     PCIE0: 0xd_0000_0000
+ *     PCIE1: 0xd_2000_0000
+ *     PCIE2: 0xd_4000_0000
+ *
+ * For 405EX:
+ *     PCIE0: 0xa000_0000
+ *     PCIE1: 0xc000_0000
+ */
+static inline u64 ppc4xx_get_cfgaddr(int port)
+{
+#if defined(CONFIG_405EX)
+       if (port == 0)
+               return (u64)CFG_PCIE0_CFGBASE;
+       else
+               return (u64)CFG_PCIE1_CFGBASE;
+#endif
+#if defined(CONFIG_440SPE)
+       if (ppc440spe_revB()) {
+               switch (port) {
+               default:        /* to satisfy compiler */
+               case 0:
+                       return 0x0000000d00000000ULL;
+               case 1:
+                       return 0x0000000d20000000ULL;
+               case 2:
+                       return 0x0000000d40000000ULL;
+               }
+       } else {
+               switch (port) {
+               default:        /* to satisfy compiler */
+               case 0:
+                       return 0x0000000c40000000ULL;
+               case 1:
+                       return 0x0000000c80000000ULL;
+               case 2:
+                       return 0x0000000cc0000000ULL;
+               }
+       }
+#endif
+}
+
+/*
+ *  4xx boards as end point and root point setup
  *                    and
  *    testing inbound and out bound windows
  *
- *  YUCCA board can be plugged into another yucca board or you can get PCI-E
+ *  4xx boards can be plugged into another 4xx boards or you can get PCI-E
  *  cable which can be used to setup loop back from one port to another port.
  *  Please rememeber that unless there is a endpoint plugged in to root port it
  *  will not initialize. It is the same in case of endpoint , unless there is
@@ -386,110 +630,47 @@ int ppc440spe_init_pcie(void)
  *  /proc/bus/pci/devices. Where you can see the configuration registers
  *  of end point device attached to the port.
  *
- *  Enpoint cofiguration can be verified by connecting Yucca board to any
- *  host or another yucca board. Then try to scan the device. In case of
+ *  Enpoint cofiguration can be verified by connecting 4xx board to any
+ *  host or another 4xx board. Then try to scan the device. In case of
  *  linux use "lspci" or appripriate os command.
  *
- *  How do I verify the inbound and out bound windows ?(yucca to yucca)
+ *  How do I verify the inbound and out bound windows ? (4xx to 4xx)
  *  in this configuration inbound and outbound windows are setup to access
  *  sram memroy area. SRAM is at 0x4 0000 0000 , on PLB bus. This address
  *  is mapped at 0x90000000. From u-boot prompt write data 0xb000 0000,
  *  This is waere your POM(PLB out bound memory window) mapped. then
- *  read the data from other yucca board's u-boot prompt at address
+ *  read the data from other 4xx board's u-boot prompt at address
  *  0x9000 0000(SRAM). Data should match.
  *  In case of inbound , write data to u-boot command prompt at 0xb000 0000
  *  which is mapped to 0x4 0000 0000. Now on rootpoint yucca u-boot prompt check
  *  data at 0x9000 0000(SRAM).Data should match.
  */
-int ppc440spe_init_pcie_rootport(int port)
+int ppc4xx_init_pcie_port(int port, int rootport)
 {
        static int core_init;
        volatile u32 val = 0;
        int attempts;
+       u64 addr;
+       u32 low, high;
 
        if (!core_init) {
-               ++core_init;
-               if (ppc440spe_init_pcie())
+               if (ppc4xx_init_pcie())
                        return -1;
+               ++core_init;
        }
 
        /*
-        * Initialize various parts of the PCI Express core for our port:
-        *
-        * - Set as a root port and enable max width
-        *   (PXIE0 -> X8, PCIE1 and PCIE2 -> X4).
-        * - Set up UTL configuration.
-        * - Increase SERDES drive strength to levels suggested by AMCC.
-        * - De-assert RSTPYN, RSTDL and RSTGU.
-        *
-        * NOTICE for revB chip: PESDRn_UTLSET2 is not set - we leave it with
-        * default setting 0x11310000. The register has new fields,
-        * PESDRn_UTLSET2[LKINE] in particular: clearing it leads to PCIE core
-        * hang.
+        * Initialize various parts of the PCI Express core for our port
         */
-       switch (port) {
-       case 0:
-               SDR_WRITE(PESDR0_DLPSET,  1 << 24 | PTYPE_ROOT_PORT << 20 | LNKW_X8 << 12);
-
-               SDR_WRITE(PESDR0_UTLSET1, 0x21222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR0_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR0_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL4SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL5SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL6SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL7SET1, 0x35000000);
-               SDR_WRITE(PESDR0_RCSSET,
-                         (SDR_READ(PESDR0_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
+       ppc4xx_init_pcie_port_hw(port, rootport);
 
-       case 1:
-               SDR_WRITE(PESDR1_DLPSET, 1 << 24 | PTYPE_ROOT_PORT << 20 | LNKW_X4 << 12);
-               SDR_WRITE(PESDR1_UTLSET1, 0x21222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR1_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR1_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR1_RCSSET,
-                         (SDR_READ(PESDR1_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
-
-       case 2:
-               SDR_WRITE(PESDR2_DLPSET, 1 << 24 | PTYPE_ROOT_PORT << 20 | LNKW_X4 << 12);
-               SDR_WRITE(PESDR2_UTLSET1, 0x21222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR2_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR2_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR2_RCSSET,
-                         (SDR_READ(PESDR2_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
-       }
        /*
         * Notice: the following delay has critical impact on device
         * initialization - if too short (<50ms) the link doesn't get up.
         */
        mdelay(100);
 
-       switch (port) {
-       case 0:
-               val = SDR_READ(PESDR0_RCSSTS);
-               break;
-       case 1:
-               val = SDR_READ(PESDR1_RCSSTS);
-               break;
-       case 2:
-               val = SDR_READ(PESDR2_RCSSTS);
-               break;
-       }
-
+       val = SDR_READ(SDRN_PESDR_RCSSTS(port));
        if (val & (1 << 20)) {
                printf("PCIE%d: PGRST failed %08x\n", port, val);
                return -1;
@@ -498,18 +679,7 @@ int ppc440spe_init_pcie_rootport(int port)
        /*
         * Verify link is up
         */
-       val = 0;
-       switch (port) {
-       case 0:
-               val = SDR_READ(PESDR0_LOOP);
-               break;
-       case 1:
-               val = SDR_READ(PESDR1_LOOP);
-               break;
-       case 2:
-               val = SDR_READ(PESDR2_LOOP);
-               break;
-       }
+       val = SDR_READ(SDRN_PESDR_LOOP(port));
        if (!(val & 0x00001000)) {
                printf("PCIE%d: link is not up.\n", port);
                return -1;
@@ -520,331 +690,75 @@ int ppc440spe_init_pcie_rootport(int port)
         * We use default settings for revB chip.
         */
        if (!ppc440spe_revB())
-               ppc440spe_setup_utl(port);
+               ppc4xx_setup_utl(port);
 
        /*
         * We map PCI Express configuration access into the 512MB regions
-        *
-        * NOTICE: revB is very strict about PLB real addressess and ranges to
-        * be mapped for config space; it seems to only work with d_nnnn_nnnn
-        * range (hangs the core upon config transaction attempts when set
-        * otherwise) while revA uses c_nnnn_nnnn.
-        *
-        * For revA:
-        *     PCIE0: 0xc_4000_0000
-        *     PCIE1: 0xc_8000_0000
-        *     PCIE2: 0xc_c000_0000
-        *
-        * For revB:
-        *     PCIE0: 0xd_0000_0000
-        *     PCIE1: 0xd_2000_0000
-        *     PCIE2: 0xd_4000_0000
         */
+       addr = ppc4xx_get_cfgaddr(port);
+       low = U64_TO_U32_LOW(addr);
+       high = U64_TO_U32_HIGH(addr);
 
        switch (port) {
        case 0:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE0), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE0), 0x00000000);
-               } else {
-                       /* revA */
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE0), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE0), 0x40000000);
-               }
+               mtdcr(DCRN_PEGPL_CFGBAH(PCIE0), high);
+               mtdcr(DCRN_PEGPL_CFGBAL(PCIE0), low);
                mtdcr(DCRN_PEGPL_CFGMSK(PCIE0), 0xe0000001); /* 512MB region, valid */
                break;
-
        case 1:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE1), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE1), 0x20000000);
-               } else {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE1), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE1), 0x80000000);
-               }
+               mtdcr(DCRN_PEGPL_CFGBAH(PCIE1), high);
+               mtdcr(DCRN_PEGPL_CFGBAL(PCIE1), low);
                mtdcr(DCRN_PEGPL_CFGMSK(PCIE1), 0xe0000001); /* 512MB region, valid */
                break;
-
+#if CFG_PCIE_NR_PORTS > 2
        case 2:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE2), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE2), 0x40000000);
-               } else {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE2), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE2), 0xc0000000);
-               }
+               mtdcr(DCRN_PEGPL_CFGBAH(PCIE2), high);
+               mtdcr(DCRN_PEGPL_CFGBAL(PCIE2), low);
                mtdcr(DCRN_PEGPL_CFGMSK(PCIE2), 0xe0000001); /* 512MB region, valid */
                break;
+#endif
        }
 
        /*
         * Check for VC0 active and assert RDY.
         */
        attempts = 10;
-       switch (port) {
-       case 0:
-               while(!(SDR_READ(PESDR0_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE0: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-               SDR_WRITE(PESDR0_RCSSET, SDR_READ(PESDR0_RCSSET) | 1 << 20);
-               break;
-       case 1:
-               while(!(SDR_READ(PESDR1_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE1: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-
-               SDR_WRITE(PESDR1_RCSSET, SDR_READ(PESDR1_RCSSET) | 1 << 20);
-               break;
-       case 2:
-               while(!(SDR_READ(PESDR2_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE2: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
+       while(!(SDR_READ(SDRN_PESDR_RCSSTS(port)) & (1 << 16))) {
+               if (!(attempts--)) {
+                       printf("PCIE%d: VC0 not active\n", port);
+                       return -1;
                }
-
-               SDR_WRITE(PESDR2_RCSSET, SDR_READ(PESDR2_RCSSET) | 1 << 20);
-               break;
+               mdelay(1000);
        }
+       SDR_WRITE(SDRN_PESDR_RCSSET(port),
+                 SDR_READ(SDRN_PESDR_RCSSET(port)) | 1 << 20);
        mdelay(100);
 
        return 0;
 }
 
-int ppc440spe_init_pcie_endport(int port)
+int ppc4xx_init_pcie_rootport(int port)
 {
-       static int core_init;
-       volatile u32 val = 0;
-       int attempts;
-
-       if (!core_init) {
-               ++core_init;
-               if (ppc440spe_init_pcie())
-                       return -1;
-       }
-
-       /*
-        * Initialize various parts of the PCI Express core for our port:
-        *
-        * - Set as a end port and enable max width
-        *   (PXIE0 -> X8, PCIE1 and PCIE2 -> X4).
-        * - Set up UTL configuration.
-        * - Increase SERDES drive strength to levels suggested by AMCC.
-        * - De-assert RSTPYN, RSTDL and RSTGU.
-        *
-        * NOTICE for revB chip: PESDRn_UTLSET2 is not set - we leave it with
-        * default setting 0x11310000. The register has new fields,
-        * PESDRn_UTLSET2[LKINE] in particular: clearing it leads to PCIE core
-        * hang.
-        */
-       switch (port) {
-       case 0:
-               SDR_WRITE(PESDR0_DLPSET,  1 << 24 | PTYPE_LEGACY_ENDPOINT << 20 | LNKW_X8 << 12);
-
-               SDR_WRITE(PESDR0_UTLSET1, 0x20222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR0_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR0_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL4SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL5SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL6SET1, 0x35000000);
-               SDR_WRITE(PESDR0_HSSL7SET1, 0x35000000);
-               SDR_WRITE(PESDR0_RCSSET,
-                       (SDR_READ(PESDR0_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
-
-       case 1:
-               SDR_WRITE(PESDR1_DLPSET, 1 << 24 | PTYPE_LEGACY_ENDPOINT << 20 | LNKW_X4 << 12);
-               SDR_WRITE(PESDR1_UTLSET1, 0x20222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR1_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR1_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR1_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR1_RCSSET,
-                       (SDR_READ(PESDR1_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
-
-       case 2:
-               SDR_WRITE(PESDR2_DLPSET, 1 << 24 | PTYPE_LEGACY_ENDPOINT << 20 | LNKW_X4 << 12);
-               SDR_WRITE(PESDR2_UTLSET1, 0x20222222);
-               if (!ppc440spe_revB())
-                       SDR_WRITE(PESDR2_UTLSET2, 0x11000000);
-               SDR_WRITE(PESDR2_HSSL0SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL1SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL2SET1, 0x35000000);
-               SDR_WRITE(PESDR2_HSSL3SET1, 0x35000000);
-               SDR_WRITE(PESDR2_RCSSET,
-                       (SDR_READ(PESDR2_RCSSET) & ~(1 << 24 | 1 << 16)) | 1 << 12);
-               break;
-       }
-       /*
-        * Notice: the following delay has critical impact on device
-        * initialization - if too short (<50ms) the link doesn't get up.
-        */
-       mdelay(100);
-
-       switch (port) {
-       case 0: val = SDR_READ(PESDR0_RCSSTS); break;
-       case 1: val = SDR_READ(PESDR1_RCSSTS); break;
-       case 2: val = SDR_READ(PESDR2_RCSSTS); break;
-       }
-
-       if (val & (1 << 20)) {
-               printf("PCIE%d: PGRST failed %08x\n", port, val);
-               return -1;
-       }
-
-       /*
-        * Verify link is up
-        */
-       val = 0;
-       switch (port)
-       {
-               case 0:
-                       val = SDR_READ(PESDR0_LOOP);
-                       break;
-               case 1:
-                       val = SDR_READ(PESDR1_LOOP);
-                       break;
-               case 2:
-                       val = SDR_READ(PESDR2_LOOP);
-                       break;
-       }
-       if (!(val & 0x00001000)) {
-               printf("PCIE%d: link is not up.\n", port);
-               return -1;
-       }
-
-       /*
-        * Setup UTL registers - but only on revA!
-        * We use default settings for revB chip.
-        */
-       if (!ppc440spe_revB())
-               ppc440spe_setup_utl(port);
-
-       /*
-        * We map PCI Express configuration access into the 512MB regions
-        *
-        * NOTICE: revB is very strict about PLB real addressess and ranges to
-        * be mapped for config space; it seems to only work with d_nnnn_nnnn
-        * range (hangs the core upon config transaction attempts when set
-        * otherwise) while revA uses c_nnnn_nnnn.
-        *
-        * For revA:
-        *     PCIE0: 0xc_4000_0000
-        *     PCIE1: 0xc_8000_0000
-        *     PCIE2: 0xc_c000_0000
-        *
-        * For revB:
-        *     PCIE0: 0xd_0000_0000
-        *     PCIE1: 0xd_2000_0000
-        *     PCIE2: 0xd_4000_0000
-        */
-       switch (port) {
-       case 0:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE0), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE0), 0x00000000);
-               } else {
-                       /* revA */
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE0), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE0), 0x40000000);
-               }
-               mtdcr(DCRN_PEGPL_CFGMSK(PCIE0), 0xe0000001); /* 512MB region, valid */
-               break;
-
-       case 1:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE1), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE1), 0x20000000);
-               } else {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE1), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE1), 0x80000000);
-               }
-               mtdcr(DCRN_PEGPL_CFGMSK(PCIE1), 0xe0000001); /* 512MB region, valid */
-               break;
-
-       case 2:
-               if (ppc440spe_revB()) {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE2), 0x0000000d);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE2), 0x40000000);
-               } else {
-                       mtdcr(DCRN_PEGPL_CFGBAH(PCIE2), 0x0000000c);
-                       mtdcr(DCRN_PEGPL_CFGBAL(PCIE2), 0xc0000000);
-               }
-               mtdcr(DCRN_PEGPL_CFGMSK(PCIE2), 0xe0000001); /* 512MB region, valid */
-               break;
-       }
-
-       /*
-        * Check for VC0 active and assert RDY.
-        */
-       attempts = 10;
-       switch (port) {
-       case 0:
-               while(!(SDR_READ(PESDR0_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE0: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-               SDR_WRITE(PESDR0_RCSSET, SDR_READ(PESDR0_RCSSET) | 1 << 20);
-               break;
-       case 1:
-               while(!(SDR_READ(PESDR1_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE1: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-
-               SDR_WRITE(PESDR1_RCSSET, SDR_READ(PESDR1_RCSSET) | 1 << 20);
-               break;
-       case 2:
-               while(!(SDR_READ(PESDR2_RCSSTS) & (1 << 16))) {
-                       if (!(attempts--)) {
-                               printf("PCIE2: VC0 not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-
-               SDR_WRITE(PESDR2_RCSSET, SDR_READ(PESDR2_RCSSET) | 1 << 20);
-               break;
-       }
-       mdelay(100);
+       return ppc4xx_init_pcie_port(port, 1);
+}
 
-       return 0;
+int ppc4xx_init_pcie_endport(int port)
+{
+       return ppc4xx_init_pcie_port(port, 0);
 }
 
-void ppc440spe_setup_pcie_rootpoint(struct pci_controller *hose, int port)
+void ppc4xx_setup_pcie_rootpoint(struct pci_controller *hose, int port)
 {
        volatile void *mbase = NULL;
        volatile void *rmbase = NULL;
 
        pci_set_ops(hose,
-               pcie_read_config_byte,
-               pcie_read_config_word,
-               pcie_read_config_dword,
-               pcie_write_config_byte,
-               pcie_write_config_word,
-               pcie_write_config_dword);
+                   pcie_read_config_byte,
+                   pcie_read_config_word,
+                   pcie_read_config_dword,
+                   pcie_write_config_byte,
+                   pcie_write_config_word,
+                   pcie_write_config_dword);
 
        switch (port) {
        case 0:
@@ -857,11 +771,13 @@ void ppc440spe_setup_pcie_rootpoint(struct pci_controller *hose, int port)
                rmbase = (u32 *)CFG_PCIE1_CFGBASE;
                hose->cfg_data = (u8 *)CFG_PCIE1_CFGBASE;
                break;
+#if CFG_PCIE_NR_PORTS > 2
        case 2:
                mbase = (u32 *)CFG_PCIE2_XCFGBASE;
                rmbase = (u32 *)CFG_PCIE2_CFGBASE;
                hose->cfg_data = (u8 *)CFG_PCIE2_CFGBASE;
                break;
+#endif
        }
 
        /*
@@ -878,33 +794,53 @@ void ppc440spe_setup_pcie_rootpoint(struct pci_controller *hose, int port)
         * subregions and to enable the outbound translation.
         */
        out_le32(mbase + PECFG_POM0LAH, 0x00000000);
-       out_le32(mbase + PECFG_POM0LAL, 0x00000000);
+       out_le32(mbase + PECFG_POM0LAL, CFG_PCIE_MEMBASE +
+                port * CFG_PCIE_MEMSIZE);
+       debug("PECFG_POM0LA=%08x.%08x\n", in_le32(mbase + PECFG_POM0LAH),
+             in_le32(mbase + PECFG_POM0LAL));
 
        switch (port) {
        case 0:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE0),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE0),  CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE);
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE0), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE0), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE0), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE0),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
+               debug("0:PEGPL_OMR1BA=%08x.%08x MSK=%08x.%08x\n",
+                     mfdcr(DCRN_PEGPL_OMR1BAH(PCIE0)),
+                     mfdcr(DCRN_PEGPL_OMR1BAL(PCIE0)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKH(PCIE0)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKL(PCIE0)));
                break;
        case 1:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE1),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE1),  (CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE));
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE1), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE1), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE1), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE1),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
-               break;
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
+               debug("1:PEGPL_OMR1BA=%08x.%08x MSK=%08x.%08x\n",
+                     mfdcr(DCRN_PEGPL_OMR1BAH(PCIE1)),
+                     mfdcr(DCRN_PEGPL_OMR1BAL(PCIE1)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKH(PCIE1)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKL(PCIE1)));
+               break;
+#if CFG_PCIE_NR_PORTS > 2
        case 2:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE2),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE2),  (CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE));
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE2), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE2), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE2), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE2),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
+               debug("2:PEGPL_OMR1BA=%08x.%08x MSK=%08x.%08x\n",
+                     mfdcr(DCRN_PEGPL_OMR1BAH(PCIE2)),
+                     mfdcr(DCRN_PEGPL_OMR1BAL(PCIE2)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKH(PCIE2)),
+                     mfdcr(DCRN_PEGPL_OMR1MSKL(PCIE2)));
                break;
+#endif
        }
 
        /* Set up 16GB inbound memory window at 0 */
@@ -917,41 +853,26 @@ void ppc440spe_setup_pcie_rootpoint(struct pci_controller *hose, int port)
        out_le32(mbase + PECFG_PIM01SAL, 0x00000000);
        out_le32(mbase + PECFG_PIM0LAL, 0);
        out_le32(mbase + PECFG_PIM0LAH, 0);
-       out_le32(mbase + PECFG_PIM1LAL,  0x00000000);
-       out_le32(mbase + PECFG_PIM1LAH,  0x00000004);
+       out_le32(mbase + PECFG_PIM1LAL, 0x00000000);
+       out_le32(mbase + PECFG_PIM1LAH, 0x00000004);
        out_le32(mbase + PECFG_PIMEN, 0x1);
 
        /* Enable I/O, Mem, and Busmaster cycles */
        out_le16((u16 *)(mbase + PCI_COMMAND),
                 in_le16((u16 *)(mbase + PCI_COMMAND)) |
                 PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-       printf("PCIE:%d successfully set as rootpoint\n",port);
 
        /* Set Device and Vendor Id */
-       switch (port) {
-       case 0:
-               out_le16(mbase + 0x200, 0xaaa0);
-               out_le16(mbase + 0x202, 0xbed0);
-               break;
-       case 1:
-               out_le16(mbase + 0x200, 0xaaa1);
-               out_le16(mbase + 0x202, 0xbed1);
-               break;
-       case 2:
-               out_le16(mbase + 0x200, 0xaaa2);
-               out_le16(mbase + 0x202, 0xbed2);
-               break;
-       default:
-               out_le16(mbase + 0x200, 0xaaa3);
-               out_le16(mbase + 0x202, 0xbed3);
-       }
+       out_le16(mbase + 0x200, 0xaaa0 + port);
+       out_le16(mbase + 0x202, 0xbed0 + port);
 
        /* Set Class Code to PCI-PCI bridge and Revision Id to 1 */
        out_le32(mbase + 0x208, 0x06040001);
 
+       printf("PCIE%d: successfully set as root-complex\n", port);
 }
 
-int ppc440spe_setup_pcie_endpoint(struct pci_controller *hose, int port)
+int ppc4xx_setup_pcie_endpoint(struct pci_controller *hose, int port)
 {
        volatile void *mbase = NULL;
        int attempts = 0;
@@ -973,10 +894,12 @@ int ppc440spe_setup_pcie_endpoint(struct pci_controller *hose, int port)
                mbase = (u32 *)CFG_PCIE1_XCFGBASE;
                hose->cfg_data = (u8 *)CFG_PCIE1_CFGBASE;
                break;
+#if defined(CFG_PCIE2_CFGBASE)
        case 2:
                mbase = (u32 *)CFG_PCIE2_XCFGBASE;
                hose->cfg_data = (u8 *)CFG_PCIE2_CFGBASE;
                break;
+#endif
        }
 
        /*
@@ -990,77 +913,73 @@ int ppc440spe_setup_pcie_endpoint(struct pci_controller *hose, int port)
 
        switch (port) {
        case 0:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE0),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE0),  CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE);
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE0), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE0), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE0), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE0),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
                break;
        case 1:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE1),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE1),  (CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE));
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE1), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE1), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE1), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE1),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
                break;
+#if CFG_PCIE_NR_PORTS > 2
        case 2:
-               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE2),  0x0000000d);
-               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE2),  (CFG_PCIE_MEMBASE +
-                       port * CFG_PCIE_MEMSIZE));
+               mtdcr(DCRN_PEGPL_OMR1BAH(PCIE2), CFG_PCIE_ADDR_HIGH);
+               mtdcr(DCRN_PEGPL_OMR1BAL(PCIE2), CFG_PCIE_MEMBASE +
+                     port * CFG_PCIE_MEMSIZE);
                mtdcr(DCRN_PEGPL_OMR1MSKH(PCIE2), 0x7fffffff);
                mtdcr(DCRN_PEGPL_OMR1MSKL(PCIE2),
-                       ~(CFG_PCIE_MEMSIZE - 1) | 3);
+                     ~(CFG_PCIE_MEMSIZE - 1) | 3);
                break;
+#endif
        }
 
-       /* Set up 16GB inbound memory window at 0 */
+       /* Set up 64MB inbound memory window at 0 */
        out_le32(mbase + PCI_BASE_ADDRESS_0, 0);
        out_le32(mbase + PCI_BASE_ADDRESS_1, 0);
-       out_le32(mbase + PECFG_BAR0HMPA, 0x7fffffc);
-       out_le32(mbase + PECFG_BAR0LMPA, 0);
-       out_le32(mbase + PECFG_PIM0LAL, 0x00000000);
-       out_le32(mbase + PECFG_PIM0LAH, 0x00000004);    /* pointing to SRAM */
+
+       out_le32(mbase + PECFG_PIM01SAH, 0xffffffff);
+       out_le32(mbase + PECFG_PIM01SAL, 0xfc000000);
+
+       /* Setup BAR0 */
+       out_le32(mbase + PECFG_BAR0HMPA, 0x7fffffff);
+       out_le32(mbase + PECFG_BAR0LMPA, 0xfc000000 | PCI_BASE_ADDRESS_MEM_TYPE_64);
+
+       /* Disable BAR1 & BAR2 */
+       out_le32(mbase + PECFG_BAR1MPA, 0);
+       out_le32(mbase + PECFG_BAR2HMPA, 0);
+       out_le32(mbase + PECFG_BAR2LMPA, 0);
+
+       out_le32(mbase + PECFG_PIM0LAL, U64_TO_U32_LOW(CFG_PCIE_INBOUND_BASE));
+       out_le32(mbase + PECFG_PIM0LAH, U64_TO_U32_HIGH(CFG_PCIE_INBOUND_BASE));
        out_le32(mbase + PECFG_PIMEN, 0x1);
 
        /* Enable I/O, Mem, and Busmaster cycles */
        out_le16((u16 *)(mbase + PCI_COMMAND),
-               in_le16((u16 *)(mbase + PCI_COMMAND)) |
-               PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-       out_le16(mbase + 0x200,0xcaad);                 /* Setting vendor ID */
-       out_le16(mbase + 0x202,0xfeed);                 /* Setting device ID */
+                in_le16((u16 *)(mbase + PCI_COMMAND)) |
+                PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+       out_le16(mbase + 0x200, 0xcaad);                /* Setting vendor ID */
+       out_le16(mbase + 0x202, 0xfeed);                /* Setting device ID */
+
+       /* Set Class Code to Processor/PPC */
+       out_le32(mbase + 0x208, 0x0b200001);
+
        attempts = 10;
-       switch (port) {
-       case 0:
-               while (!(SDR_READ(PESDR0_RCSSTS) & (1 << 8))) {
-                       if (!(attempts--)) {
-                               printf("PCIE0: BMEN is  not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-               break;
-       case 1:
-               while (!(SDR_READ(PESDR1_RCSSTS) & (1 << 8))) {
-                       if (!(attempts--)) {
-                               printf("PCIE1: BMEN is not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
-               }
-               break;
-       case 2:
-               while (!(SDR_READ(PESDR2_RCSSTS) & (1 << 8))) {
-                       if (!(attempts--)) {
-                               printf("PCIE2: BMEN is  not active\n");
-                               return -1;
-                       }
-                       mdelay(1000);
+       while(!(SDR_READ(SDRN_PESDR_RCSSTS(port)) & (1 << 8))) {
+               if (!(attempts--)) {
+                       printf("PCIE%d: BME not active\n", port);
+                       return -1;
                }
-               break;
+               mdelay(1000);
        }
-       printf("PCIE:%d successfully set as endpoint\n",port);
+
+       printf("PCIE%d: successfully set as endpoint\n", port);
 
        return 0;
 }
similarity index 56%
rename from cpu/ppc4xx/serial.c
rename to cpu/ppc4xx/4xx_uart.c
index 60712b151e294c65e5b16e6a8f6e75ed0f228179..3d1124e0b27def7f97d42fd56e817079b4bc1266 100644 (file)
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
-/*------------------------------------------------------------------------------+ */
+
 /*
  * This source code has been made available to you by IBM on an AS-IS
  * basis.  Anyone receiving this source is licensed under IBM
  * COPYRIGHT   I B M   CORPORATION 1995
  * LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
  */
-/*------------------------------------------------------------------------------- */
-/*
- * Travis Sawyer 15 September 2004
- *    Added CONFIG_SERIAL_MULTI support
- */
+
 #include <common.h>
 #include <commproc.h>
 #include <asm/processor.h>
+#include <asm/io.h>
 #include <watchdog.h>
-#include "vecnum.h"
+#include <asm/ppc4xx-intvec.h>
 
 #ifdef CONFIG_SERIAL_MULTI
 #include <serial.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/*****************************************************************************/
-#ifdef CONFIG_IOP480
-
-#define SPU_BASE         0x40000000
-
-#define spu_LineStat_rc  0x00  /* Line Status Register (Read/Clear) */
-#define spu_LineStat_w   0x04  /* Line Status Register (Set) */
-#define spu_Handshk_rc   0x08  /* Handshake Status Register (Read/Clear) */
-#define spu_Handshk_w    0x0c  /* Handshake Status Register (Set) */
-#define spu_BRateDivh    0x10  /* Baud rate divisor high */
-#define spu_BRateDivl    0x14  /* Baud rate divisor low */
-#define spu_CtlReg       0x18  /* Control Register */
-#define spu_RxCmd        0x1c  /* Rx Command Register */
-#define spu_TxCmd        0x20  /* Tx Command Register */
-#define spu_RxBuff       0x24  /* Rx data buffer */
-#define spu_TxBuff       0x24  /* Tx data buffer */
-
-/*-----------------------------------------------------------------------------+
-  | Line Status Register.
-  +-----------------------------------------------------------------------------*/
-#define asyncLSRport1           0x40000000
-#define asyncLSRport1set        0x40000004
-#define asyncLSRDataReady             0x80
-#define asyncLSRFramingError          0x40
-#define asyncLSROverrunError          0x20
-#define asyncLSRParityError           0x10
-#define asyncLSRBreakInterrupt        0x08
-#define asyncLSRTxHoldEmpty           0x04
-#define asyncLSRTxShiftEmpty          0x02
-
-/*-----------------------------------------------------------------------------+
-  | Handshake Status Register.
-  +-----------------------------------------------------------------------------*/
-#define asyncHSRport1           0x40000008
-#define asyncHSRport1set        0x4000000c
-#define asyncHSRDsr                   0x80
-#define asyncLSRCts                   0x40
-
-/*-----------------------------------------------------------------------------+
-  | Control Register.
-  +-----------------------------------------------------------------------------*/
-#define asyncCRport1            0x40000018
-#define asyncCRNormal                 0x00
-#define asyncCRLoopback               0x40
-#define asyncCRAutoEcho               0x80
-#define asyncCRDtr                    0x20
-#define asyncCRRts                    0x10
-#define asyncCRWordLength7            0x00
-#define asyncCRWordLength8            0x08
-#define asyncCRParityDisable          0x00
-#define asyncCRParityEnable           0x04
-#define asyncCREvenParity             0x00
-#define asyncCROddParity              0x02
-#define asyncCRStopBitsOne            0x00
-#define asyncCRStopBitsTwo            0x01
-#define asyncCRDisableDtrRts          0x00
-
-/*-----------------------------------------------------------------------------+
-  | Receiver Command Register.
-  +-----------------------------------------------------------------------------*/
-#define asyncRCRport1           0x4000001c
-#define asyncRCRDisable               0x00
-#define asyncRCREnable                0x80
-#define asyncRCRIntDisable            0x00
-#define asyncRCRIntEnabled            0x20
-#define asyncRCRDMACh2                0x40
-#define asyncRCRDMACh3                0x60
-#define asyncRCRErrorInt              0x10
-#define asyncRCRPauseEnable           0x08
-
-/*-----------------------------------------------------------------------------+
-  | Transmitter Command Register.
-  +-----------------------------------------------------------------------------*/
-#define asyncTCRport1           0x40000020
-#define asyncTCRDisable               0x00
-#define asyncTCREnable                0x80
-#define asyncTCRIntDisable            0x00
-#define asyncTCRIntEnabled            0x20
-#define asyncTCRDMACh2                0x40
-#define asyncTCRDMACh3                0x60
-#define asyncTCRTxEmpty               0x10
-#define asyncTCRErrorInt              0x08
-#define asyncTCRStopPause             0x04
-#define asyncTCRBreakGen              0x02
-
-/*-----------------------------------------------------------------------------+
-  | Miscellanies defines.
-  +-----------------------------------------------------------------------------*/
-#define asyncTxBufferport1      0x40000024
-#define asyncRxBufferport1      0x40000024
-#define asyncDLABLsbport1       0x40000014
-#define asyncDLABMsbport1       0x40000010
-#define asyncXOFFchar                 0x13
-#define asyncXONchar                  0x11
-
-/*
- * Minimal serial functions needed to use one of the SMC ports
- * as serial console interface.
- */
-
-int serial_init (void)
-{
-       volatile char val;
-       unsigned short br_reg;
-
-       br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1);
-
-       /*
-        * Init onboard UART
-        */
-       out8 (SPU_BASE + spu_LineStat_rc, 0x78); /* Clear all bits in Line Status Reg */
-       out8 (SPU_BASE + spu_BRateDivl, (br_reg & 0x00ff)); /* Set baud rate divisor... */
-       out8 (SPU_BASE + spu_BRateDivh, ((br_reg & 0xff00) >> 8)); /* ... */
-       out8 (SPU_BASE + spu_CtlReg, 0x08);     /* Set 8 bits, no parity and 1 stop bit */
-       out8 (SPU_BASE + spu_RxCmd, 0xb0);      /* Enable Rx */
-       out8 (SPU_BASE + spu_TxCmd, 0x9c);      /* Enable Tx */
-       out8 (SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */
-       val = in8 (SPU_BASE + spu_RxBuff);      /* Dummy read, to clear receiver */
-
-       return (0);
-}
-
-void serial_setbrg (void)
-{
-       unsigned short br_reg;
-
-       br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1);
-
-       out8 (SPU_BASE + spu_BRateDivl, (br_reg & 0x00ff)); /* Set baud rate divisor... */
-       out8 (SPU_BASE + spu_BRateDivh, ((br_reg & 0xff00) >> 8)); /* ... */
-}
-
-void serial_putc (const char c)
-{
-       if (c == '\n')
-               serial_putc ('\r');
-
-       /* load status from handshake register */
-       if (in8 (SPU_BASE + spu_Handshk_rc) != 00)
-               out8 (SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */
-
-       out8 (SPU_BASE + spu_TxBuff, c);        /* Put char */
-
-       while ((in8 (SPU_BASE + spu_LineStat_rc) & 04) != 04) {
-               if (in8 (SPU_BASE + spu_Handshk_rc) != 00)
-                       out8 (SPU_BASE + spu_Handshk_rc, 0xff); /* Clear Handshake */
-       }
-}
-
-void serial_puts (const char *s)
-{
-       while (*s) {
-               serial_putc (*s++);
-       }
-}
-
-int serial_getc ()
-{
-       unsigned char status = 0;
-
-       while (1) {
-               status = in8 (asyncLSRport1);
-               if ((status & asyncLSRDataReady) != 0x0) {
-                       break;
-               }
-               if ((status & ( asyncLSRFramingError |
-                               asyncLSROverrunError |
-                               asyncLSRParityError  |
-                               asyncLSRBreakInterrupt )) != 0) {
-                       (void) out8 (asyncLSRport1,
-                                    asyncLSRFramingError |
-                                    asyncLSROverrunError |
-                                    asyncLSRParityError  |
-                                    asyncLSRBreakInterrupt );
-               }
-       }
-       return (0x000000ff & (int) in8 (asyncRxBufferport1));
-}
-
-int serial_tstc ()
-{
-       unsigned char status;
-
-       status = in8 (asyncLSRport1);
-       if ((status & asyncLSRDataReady) != 0x0) {
-               return (1);
-       }
-       if ((status & ( asyncLSRFramingError |
-                       asyncLSROverrunError |
-                       asyncLSRParityError  |
-                       asyncLSRBreakInterrupt )) != 0) {
-               (void) out8 (asyncLSRport1,
-                            asyncLSRFramingError |
-                            asyncLSROverrunError |
-                            asyncLSRParityError  |
-                            asyncLSRBreakInterrupt);
-       }
-       return 0;
-}
-
-#endif /* CONFIG_IOP480 */
-
-/*****************************************************************************/
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
-    defined(CONFIG_440)
+    defined(CONFIG_405EX) || defined(CONFIG_440)
 
 #if defined(CONFIG_440)
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
@@ -318,6 +112,15 @@ int serial_tstc ()
 #define UCR0_UDIV_POS   0
 #define UCR1_UDIV_POS   8
 #define UDIV_MAX        127
+#elif defined(CONFIG_405EX)
+#define UART0_BASE     0xef600200
+#define UART1_BASE     0xef600300
+#define CR0_MASK       0x000000ff
+#define CR0_EXTCLK_ENA 0x00800000
+#define CR0_UDIV_POS   0
+#define UDIV_SUBTRACT  0
+#define UART0_SDR      sdr_uart0
+#define UART1_SDR      sdr_uart1
 #else /* CONFIG_405GP || CONFIG_405CR */
 #define UART0_BASE      0xef600300
 #define UART1_BASE      0xef600400
@@ -336,12 +139,6 @@ int serial_tstc ()
 #define ACTING_UART1_BASE      UART1_BASE
 #endif
 
-#if defined(CONFIG_SERIAL_MULTI)
-#define UART_BASE      dev_base
-#else
-#define UART_BASE      ACTING_UART0_BASE
-#endif
-
 #if defined(CONFIG_405EP) && defined(CFG_EXT_SERIAL_CLOCK)
 #error "External serial clock not supported on AMCC PPC405EP!"
 #endif
@@ -362,7 +159,6 @@ int serial_tstc ()
 /*-----------------------------------------------------------------------------+
   | Line Status Register.
   +-----------------------------------------------------------------------------*/
-/*#define asyncLSRport1           ACTING_UART0_BASE+0x05 */
 #define asyncLSRDataReady1            0x01
 #define asyncLSROverrunError1         0x02
 #define asyncLSRParityError1          0x04
@@ -372,12 +168,6 @@ int serial_tstc ()
 #define asyncLSRTxShiftEmpty1         0x40
 #define asyncLSRRxFifoError1          0x80
 
-/*-----------------------------------------------------------------------------+
-  | Miscellanies defines.
-  +-----------------------------------------------------------------------------*/
-/*#define asyncTxBufferport1      ACTING_UART0_BASE+0x00 */
-/*#define asyncRxBufferport1      ACTING_UART0_BASE+0x00 */
-
 #ifdef CONFIG_SERIAL_SOFTWARE_FIFO
 /*-----------------------------------------------------------------------------+
   | Fifo
@@ -391,7 +181,36 @@ typedef struct {
 volatile static serial_buffer_t buf_info;
 #endif
 
-#if defined(CONFIG_440) && !defined(CFG_EXT_SERIAL_CLOCK)
+static void serial_init_common(u32 base, u32 udiv, u16 bdiv)
+{
+       PPC4xx_SYS_INFO sys_info;
+       u8 val;
+
+       get_sys_info(&sys_info);
+
+       /* Correct UART frequency in bd-info struct now that
+        * the UART divisor is available
+        */
+#ifdef CFG_EXT_SERIAL_CLOCK
+       gd->uart_clk = CFG_EXT_SERIAL_CLOCK;
+#else
+       gd->uart_clk = sys_info.freqUART / udiv;
+#endif
+
+       out_8((u8 *)base + UART_LCR, 0x80);     /* set DLAB bit */
+       out_8((u8 *)base + UART_DLL, bdiv);     /* set baudrate divisor */
+       out_8((u8 *)base + UART_DLM, bdiv >> 8); /* set baudrate divisor */
+       out_8((u8 *)base + UART_LCR, 0x03);     /* clear DLAB; set 8 bits, no parity */
+       out_8((u8 *)base + UART_FCR, 0x00);     /* disable FIFO */
+       out_8((u8 *)base + UART_MCR, 0x00);     /* no modem control DTR RTS */
+       val = in_8((u8 *)base + UART_LSR);      /* clear line status */
+       val = in_8((u8 *)base + UART_RBR);      /* read receive buffer */
+       out_8((u8 *)base + UART_SCR, 0x00);     /* set scratchpad */
+       out_8((u8 *)base + UART_IER, 0x00);     /* set interrupt enable reg */
+}
+
+#if (defined(CONFIG_440) || defined(CONFIG_405EX)) &&  \
+    !defined(CFG_EXT_SERIAL_CLOCK)
 static void serial_divs (int baudrate, unsigned long *pudiv,
                         unsigned short *pbdiv)
 {
@@ -457,8 +276,8 @@ static void serial_divs (int baudrate, unsigned long *pudiv,
        get_sys_info(&sysinfo);
 
        plloutb = ((CONFIG_SYS_CLK_FREQ * ((cpr_pllc & PLLC_SRC_MASK) ?
-               sysinfo.pllFwdDivB : sysinfo.pllFwdDiv) * sysinfo.pllFbkDiv) /
-               sysinfo.pllFwdDivB);
+                                          sysinfo.pllFwdDivB : sysinfo.pllFwdDiv) *
+                   sysinfo.pllFbkDiv) / sysinfo.pllFwdDivB);
        udiv = 256;                     /* Assume lowest possible serial clk */
        div = plloutb / (16 * baudrate); /* total divisor */
        umin = (plloutb / get_OPB_freq()) << 1; /* 2 x OPB divisor */
@@ -496,16 +315,11 @@ static void serial_divs (int baudrate, unsigned long *pudiv,
  */
 
 #if defined(CONFIG_440)
-#if defined(CONFIG_SERIAL_MULTI)
-int serial_init_dev (unsigned long dev_base)
-#else
-int serial_init(void)
-#endif
+int serial_init_dev(unsigned long base)
 {
        unsigned long reg;
        unsigned long udiv;
        unsigned short bdiv;
-       volatile char val;
 #ifdef CFG_EXT_SERIAL_CLOCK
        unsigned long tmp;
 #endif
@@ -543,36 +357,46 @@ int serial_init(void)
        MTREG(UART3_SDR, reg);
 #endif
 
-       out8(UART_BASE + UART_LCR, 0x80);       /* set DLAB bit */
-       out8(UART_BASE + UART_DLL, bdiv);       /* set baudrate divisor */
-       out8(UART_BASE + UART_DLM, bdiv >> 8);  /* set baudrate divisor */
-       out8(UART_BASE + UART_LCR, 0x03);       /* clear DLAB; set 8 bits, no parity */
-       out8(UART_BASE + UART_FCR, 0x00);       /* disable FIFO */
-       out8(UART_BASE + UART_MCR, 0x00);       /* no modem control DTR RTS */
-       val = in8(UART_BASE + UART_LSR);        /* clear line status */
-       val = in8(UART_BASE + UART_RBR);        /* read receive buffer */
-       out8(UART_BASE + UART_SCR, 0x00);       /* set scratchpad */
-       out8(UART_BASE + UART_IER, 0x00);       /* set interrupt enable reg */
+       serial_init_common(base, udiv, bdiv);
 
        return (0);
 }
 
 #else /* !defined(CONFIG_440) */
 
-#if defined(CONFIG_SERIAL_MULTI)
-int serial_init_dev (unsigned long dev_base)
-#else
-int serial_init (void)
-#endif
+int serial_init_dev (unsigned long base)
 {
        unsigned long reg;
        unsigned long tmp;
        unsigned long clk;
        unsigned long udiv;
        unsigned short bdiv;
-       volatile char val;
 
-#if defined(CONFIG_405EZ)
+#ifdef CONFIG_405EX
+       clk = tmp = 0;
+       mfsdr(UART0_SDR, reg);
+       reg &= ~CR0_MASK;
+#ifdef CFG_EXT_SERIAL_CLOCK
+       reg |= CR0_EXTCLK_ENA;
+       udiv = 1;
+       tmp  = gd->baudrate * 16;
+       bdiv = (CFG_EXT_SERIAL_CLOCK + tmp / 2) / tmp;
+#else
+       serial_divs(gd->baudrate, &udiv, &bdiv);
+#endif
+       reg |= (udiv - UDIV_SUBTRACT) << CR0_UDIV_POS;  /* set the UART divisor */
+
+       /*
+        * Configure input clock to baudrate generator for all
+        * available serial ports here
+        */
+       mtsdr(UART0_SDR, reg);
+
+#if defined(UART1_SDR)
+       mtsdr(UART1_SDR, reg);
+#endif
+
+#elif defined(CONFIG_405EZ)
        serial_divs(gd->baudrate, &udiv, &bdiv);
        clk = tmp = reg = 0;
 #else
@@ -608,81 +432,44 @@ int serial_init (void)
 #endif /* CONFIG_405EP */
        tmp = gd->baudrate * udiv * 16;
        bdiv = (clk + tmp / 2) / tmp;
-#endif /* CONFIG_405EZ */
-
-       out8(UART_BASE + UART_LCR, 0x80);       /* set DLAB bit */
-       out8(UART_BASE + UART_DLL, bdiv);       /* set baudrate divisor */
-       out8(UART_BASE + UART_DLM, bdiv >> 8);  /* set baudrate divisor */
-       out8(UART_BASE + UART_LCR, 0x03);       /* clear DLAB; set 8 bits, no parity */
-       out8(UART_BASE + UART_FCR, 0x00);       /* disable FIFO */
-       out8(UART_BASE + UART_MCR, 0x00);       /* no modem control DTR RTS */
-       val = in8(UART_BASE + UART_LSR);        /* clear line status */
-       val = in8(UART_BASE + UART_RBR);        /* read receive buffer */
-       out8(UART_BASE + UART_SCR, 0x00);       /* set scratchpad */
-       out8(UART_BASE + UART_IER, 0x00);       /* set interrupt enable reg */
+#endif /* CONFIG_405EX */
+
+       serial_init_common(base, udiv, bdiv);
 
        return (0);
 }
 
 #endif /* if defined(CONFIG_440) */
 
-#if defined(CONFIG_SERIAL_MULTI)
-void serial_setbrg_dev (unsigned long dev_base)
-#else
-void serial_setbrg (void)
-#endif
+void serial_setbrg_dev(unsigned long base)
 {
-#if defined(CONFIG_SERIAL_MULTI)
-       serial_init_dev(dev_base);
-#else
-       serial_init();
-#endif
+       serial_init_dev(base);
 }
 
-#if defined(CONFIG_SERIAL_MULTI)
-void serial_putc_dev (unsigned long dev_base, const char c)
-#else
-void serial_putc (const char c)
-#endif
+void serial_putc_dev(unsigned long base, const char c)
 {
        int i;
 
        if (c == '\n')
-#if defined(CONFIG_SERIAL_MULTI)
-               serial_putc_dev (dev_base, '\r');
-#else
-               serial_putc ('\r');
-#endif
+               serial_putc_dev(base, '\r');
 
        /* check THRE bit, wait for transmiter available */
        for (i = 1; i < 3500; i++) {
-               if ((in8 (UART_BASE + UART_LSR) & 0x20) == 0x20)
+               if ((in_8((u8 *)base + UART_LSR) & 0x20) == 0x20)
                        break;
                udelay (100);
        }
-       out8 (UART_BASE + UART_THR, c); /* put character out */
+
+       out_8((u8 *)base + UART_THR, c);        /* put character out */
 }
 
-#if defined(CONFIG_SERIAL_MULTI)
-void serial_puts_dev (unsigned long dev_base, const char *s)
-#else
-void serial_puts (const char *s)
-#endif
+void serial_puts_dev (unsigned long base, const char *s)
 {
-       while (*s) {
-#if defined(CONFIG_SERIAL_MULTI)
-               serial_putc_dev (dev_base, *s++);
-#else
-               serial_putc (*s++);
-#endif
-       }
+       while (*s)
+               serial_putc_dev (base, *s++);
 }
 
-#if defined(CONFIG_SERIAL_MULTI)
-int serial_getc_dev (unsigned long dev_base)
-#else
-int serial_getc (void)
-#endif
+int serial_getc_dev (unsigned long base)
 {
        unsigned char status = 0;
 
@@ -690,46 +477,45 @@ int serial_getc (void)
 #if defined(CONFIG_HW_WATCHDOG)
                WATCHDOG_RESET ();      /* Reset HW Watchdog, if needed */
 #endif /* CONFIG_HW_WATCHDOG */
-               status = in8 (UART_BASE + UART_LSR);
-               if ((status & asyncLSRDataReady1) != 0x0) {
+
+               status = in_8((u8 *)base + UART_LSR);
+               if ((status & asyncLSRDataReady1) != 0x0)
                        break;
-               }
+
                if ((status & ( asyncLSRFramingError1 |
                                asyncLSROverrunError1 |
                                asyncLSRParityError1  |
                                asyncLSRBreakInterrupt1 )) != 0) {
-                       out8 (UART_BASE + UART_LSR,
+                       out_8((u8 *)base + UART_LSR,
                              asyncLSRFramingError1 |
                              asyncLSROverrunError1 |
                              asyncLSRParityError1  |
                              asyncLSRBreakInterrupt1);
                }
        }
-       return (0x000000ff & (int) in8 (UART_BASE));
+
+       return (0x000000ff & (int) in_8((u8 *)base));
 }
 
-#if defined(CONFIG_SERIAL_MULTI)
-int serial_tstc_dev (unsigned long dev_base)
-#else
-int serial_tstc (void)
-#endif
+int serial_tstc_dev (unsigned long base)
 {
        unsigned char status;
 
-       status = in8 (UART_BASE + UART_LSR);
-       if ((status & asyncLSRDataReady1) != 0x0) {
+       status = in_8((u8 *)base + UART_LSR);
+       if ((status & asyncLSRDataReady1) != 0x0)
                return (1);
-       }
+
        if ((status & ( asyncLSRFramingError1 |
                        asyncLSROverrunError1 |
                        asyncLSRParityError1  |
                        asyncLSRBreakInterrupt1 )) != 0) {
-               out8 (UART_BASE + UART_LSR,
+               out_8((u8 *)base + UART_LSR,
                      asyncLSRFramingError1 |
                      asyncLSROverrunError1 |
                      asyncLSRParityError1  |
                      asyncLSRBreakInterrupt1);
        }
+
        return 0;
 }
 
@@ -742,11 +528,11 @@ void serial_isr (void *arg)
        const int rx_get = buf_info.rx_get;
        int rx_put = buf_info.rx_put;
 
-       if (rx_get <= rx_put) {
+       if (rx_get <= rx_put)
                space = CONFIG_SERIAL_SOFTWARE_FIFO - (rx_put - rx_get);
-       } else {
+       else
                space = rx_get - rx_put;
-       }
+
        while (serial_tstc_dev (ACTING_UART0_BASE)) {
                c = serial_getc_dev (ACTING_UART0_BASE);
                if (space) {
@@ -757,8 +543,9 @@ void serial_isr (void *arg)
                        rx_put = 0;
                if (space < CONFIG_SERIAL_SOFTWARE_FIFO / 4) {
                        /* Stop flow by setting RTS inactive */
-                       out8 (ACTING_UART0_BASE + UART_MCR,
-                             in8 (ACTING_UART0_BASE + UART_MCR) & (0xFF ^ 0x02));
+                       out_8((u8 *)ACTING_UART0_BASE + UART_MCR,
+                             in_8((u8 *)ACTING_UART0_BASE + UART_MCR) &
+                             (0xFF ^ 0x02));
                }
        }
        buf_info.rx_put = rx_put;
@@ -771,35 +558,35 @@ void serial_buffered_init (void)
        buf_info.rx_put = 0;
        buf_info.rx_get = 0;
 
-       if (in8 (ACTING_UART0_BASE + UART_MSR) & 0x10) {
+       if (in_8((u8 *)ACTING_UART0_BASE + UART_MSR) & 0x10)
                serial_puts ("Check CTS signal present on serial port: OK.\n");
-       } else {
+       else
                serial_puts ("WARNING: CTS signal not present on serial port.\n");
-       }
 
        irq_install_handler ( VECNUM_U0 /*UART0 */ /*int vec */ ,
                              serial_isr /*interrupt_handler_t *handler */ ,
                              (void *) &buf_info /*void *arg */ );
 
        /* Enable "RX Data Available" Interrupt on UART */
-       /* out8(ACTING_UART0_BASE + UART_IER, in8(ACTING_UART0_BASE + UART_IER) |0x01); */
-       out8 (ACTING_UART0_BASE + UART_IER, 0x01);
+       out_8(ACTING_UART0_BASE + UART_IER, 0x01);
        /* Set DTR active */
-       out8 (ACTING_UART0_BASE + UART_MCR, in8 (ACTING_UART0_BASE + UART_MCR) | 0x01);
+       out_8(ACTING_UART0_BASE + UART_MCR,
+             in_8((u8 *)ACTING_UART0_BASE + UART_MCR) | 0x01);
        /* Start flow by setting RTS active */
-       out8 (ACTING_UART0_BASE + UART_MCR, in8 (ACTING_UART0_BASE + UART_MCR) | 0x02);
+       out_8(ACTING_UART0_BASE + UART_MCR,
+             in_8((u8 *)ACTING_UART0_BASE + UART_MCR) | 0x02);
        /* Setup UART FIFO: RX trigger level: 4 byte, Enable FIFO */
-       out(ACTING_UART0_BASE + UART_FCR, (1 << 6) | 1);
+       out_8(ACTING_UART0_BASE + UART_FCR, (1 << 6) | 1);
 }
 
 void serial_buffered_putc (const char c)
 {
        /* Wait for CTS */
 #if defined(CONFIG_HW_WATCHDOG)
-       while (!(in8 (ACTING_UART0_BASE + UART_MSR) & 0x10))
+       while (!(in_8((u8 *)ACTING_UART0_BASE + UART_MSR) & 0x10))
                WATCHDOG_RESET ();
 #else
-       while (!(in8 (ACTING_UART0_BASE + UART_MSR) & 0x10));
+       while (!(in_8((u8 *)ACTING_UART0_BASE + UART_MSR) & 0x10));
 #endif
        serial_putc (c);
 }
@@ -828,14 +615,15 @@ int serial_buffered_getc (void)
        buf_info.rx_get = rx_get;
 
        rx_put = buf_info.rx_put;
-       if (rx_get <= rx_put) {
+       if (rx_get <= rx_put)
                space = CONFIG_SERIAL_SOFTWARE_FIFO - (rx_put - rx_get);
-       } else {
+       else
                space = rx_get - rx_put;
-       }
+
        if (space > CONFIG_SERIAL_SOFTWARE_FIFO / 2) {
                /* Start flow by setting RTS active */
-               out8 (ACTING_UART0_BASE + UART_MCR, in8 (ACTING_UART0_BASE + UART_MCR) | 0x02);
+               out_8(ACTING_UART0_BASE + UART_MCR,
+                     in_8((u8 *)ACTING_UART0_BASE + UART_MCR) | 0x02);
        }
 
        return c;
@@ -860,8 +648,8 @@ int serial_buffered_tstc (void)
 #if (CONFIG_KGDB_SER_INDEX & 2)
 void kgdb_serial_init (void)
 {
-       volatile char val;
-       unsigned short br_reg;
+       u8 val;
+       u16 br_reg;
 
        get_clocks ();
        br_reg = (((((gd->cpu_clk / 16) / 18) * 10) / CONFIG_KGDB_BAUDRATE) +
@@ -869,16 +657,16 @@ void kgdb_serial_init (void)
        /*
         * Init onboard 16550 UART
         */
-       out8 (ACTING_UART1_BASE + UART_LCR, 0x80);      /* set DLAB bit */
-       out8 (ACTING_UART1_BASE + UART_DLL, (br_reg & 0x00ff)); /* set divisor for 9600 baud */
-       out8 (ACTING_UART1_BASE + UART_DLM, ((br_reg & 0xff00) >> 8));  /* set divisor for 9600 baud */
-       out8 (ACTING_UART1_BASE + UART_LCR, 0x03);      /* line control 8 bits no parity */
-       out8 (ACTING_UART1_BASE + UART_FCR, 0x00);      /* disable FIFO */
-       out8 (ACTING_UART1_BASE + UART_MCR, 0x00);      /* no modem control DTR RTS */
-       val = in8 (ACTING_UART1_BASE + UART_LSR);       /* clear line status */
-       val = in8 (ACTING_UART1_BASE + UART_RBR);       /* read receive buffer */
-       out8 (ACTING_UART1_BASE + UART_SCR, 0x00);      /* set scratchpad */
-       out8 (ACTING_UART1_BASE + UART_IER, 0x00);      /* set interrupt enable reg */
+       out_8((u8 *)ACTING_UART1_BASE + UART_LCR, 0x80);        /* set DLAB bit */
+       out_8((u8 *)ACTING_UART1_BASE + UART_DLL, (br_reg & 0x00ff)); /* set divisor for 9600 baud */
+       out_8((u8 *)ACTING_UART1_BASE + UART_DLM, ((br_reg & 0xff00) >> 8)); /* set divisor for 9600 baud */
+       out_8((u8 *)ACTING_UART1_BASE + UART_LCR, 0x03);        /* line control 8 bits no parity */
+       out_8((u8 *)ACTING_UART1_BASE + UART_FCR, 0x00);        /* disable FIFO */
+       out_8((u8 *)ACTING_UART1_BASE + UART_MCR, 0x00);        /* no modem control DTR RTS */
+       val = in_8((u8 *)ACTING_UART1_BASE + UART_LSR);         /* clear line status */
+       val = in_8((u8 *)ACTING_UART1_BASE + UART_RBR);         /* read receive buffer */
+       out_8((u8 *)ACTING_UART1_BASE + UART_SCR, 0x00);        /* set scratchpad */
+       out_8((u8 *)ACTING_UART1_BASE + UART_IER, 0x00);        /* set interrupt enable reg */
 }
 
 void putDebugChar (const char c)
@@ -886,17 +674,16 @@ void putDebugChar (const char c)
        if (c == '\n')
                serial_putc ('\r');
 
-       out8 (ACTING_UART1_BASE + UART_THR, c); /* put character out */
+       out_8((u8 *)ACTING_UART1_BASE + UART_THR, c);   /* put character out */
 
        /* check THRE bit, wait for transfer done */
-       while ((in8 (ACTING_UART1_BASE + UART_LSR) & 0x20) != 0x20);
+       while ((in_8((u8 *)ACTING_UART1_BASE + UART_LSR) & 0x20) != 0x20);
 }
 
 void putDebugStr (const char *s)
 {
-       while (*s) {
+       while (*s)
                serial_putc (*s++);
-       }
 }
 
 int getDebugChar (void)
@@ -904,22 +691,23 @@ int getDebugChar (void)
        unsigned char status = 0;
 
        while (1) {
-               status = in8 (ACTING_UART1_BASE + UART_LSR);
-               if ((status & asyncLSRDataReady1) != 0x0) {
+               status = in_8((u8 *)ACTING_UART1_BASE + UART_LSR);
+               if ((status & asyncLSRDataReady1) != 0x0)
                        break;
-               }
-               if ((status & ( asyncLSRFramingError1 |
-                               asyncLSROverrunError1 |
-                               asyncLSRParityError1  |
-                               asyncLSRBreakInterrupt1 )) != 0) {
-                       out8 (ACTING_UART1_BASE + UART_LSR,
+
+               if ((status & (asyncLSRFramingError1 |
+                              asyncLSROverrunError1 |
+                              asyncLSRParityError1  |
+                              asyncLSRBreakInterrupt1 )) != 0) {
+                       out_8((u8 *)ACTING_UART1_BASE + UART_LSR,
                              asyncLSRFramingError1 |
                              asyncLSROverrunError1 |
                              asyncLSRParityError1  |
                              asyncLSRBreakInterrupt1);
                }
        }
-       return (0x000000ff & (int) in8 (ACTING_UART1_BASE));
+
+       return (0x000000ff & (int) in_8((u8 *)ACTING_UART1_BASE));
 }
 
 void kgdb_interruptible (int yes)
@@ -967,10 +755,12 @@ int serial1_init(void)
 {
        return (serial_init_dev(UART1_BASE));
 }
+
 void serial0_setbrg (void)
 {
        serial_setbrg_dev(UART0_BASE);
 }
+
 void serial1_setbrg (void)
 {
        serial_setbrg_dev(UART1_BASE);
@@ -985,6 +775,7 @@ void serial1_putc(const char c)
 {
        serial_putc_dev(UART1_BASE, c);
 }
+
 void serial0_puts(const char *s)
 {
        serial_puts_dev(UART0_BASE, s);
@@ -1004,6 +795,7 @@ int serial1_getc(void)
 {
        return(serial_getc_dev(UART1_BASE));
 }
+
 int serial0_tstc(void)
 {
        return (serial_tstc_dev(UART0_BASE));
@@ -1037,6 +829,39 @@ struct serial_device serial1_device =
        serial1_putc,
        serial1_puts,
 };
+#else
+/*
+ * Wrapper functions
+ */
+int serial_init(void)
+{
+       return serial_init_dev(ACTING_UART0_BASE);
+}
+
+void serial_setbrg(void)
+{
+       serial_setbrg_dev(ACTING_UART0_BASE);
+}
+
+void serial_putc(const char c)
+{
+       serial_putc_dev(ACTING_UART0_BASE, c);
+}
+
+void serial_puts(const char *s)
+{
+       serial_puts_dev(ACTING_UART0_BASE, s);
+}
+
+int serial_getc(void)
+{
+       return serial_getc_dev(ACTING_UART0_BASE);
+}
+
+int serial_tstc(void)
+{
+       return serial_tstc_dev(ACTING_UART0_BASE);
+}
 #endif /* CONFIG_SERIAL_MULTI */
 
 #endif /* CONFIG_405GP || CONFIG_405CR */
index af9da5b95fde6ab1dfddc5c51c62a2061cfb1968..178c5c67425a52bb49bb99d0a2accfb1268bb04c 100644 (file)
@@ -25,15 +25,40 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(CPU).a
 
-START  = start.o resetvec.o kgdb.o
-SOBJS  = dcr.o
-COBJS  = 405gp_pci.o 440spe_pcie.o 4xx_enet.o \
-         bedbug_405.o commproc.o \
-         cpu.o cpu_init.o gpio.o i2c.o interrupts.o \
-         miiphy.o ndfc.o sdram.o serial.o \
-         40x_spd_sdram.o 44x_spd_ddr.o 44x_spd_ddr2.o speed.o \
-         tlb.o traps.o usb_ohci.o usb.o usbdev.o \
-         440spe_pcie.o
+START  := resetvec.o
+START  += start.o
+
+SOBJS  := cache.o
+SOBJS  += dcr.o
+SOBJS  += kgdb.o
+
+COBJS  := 40x_spd_sdram.o
+COBJS  += 44x_spd_ddr.o
+COBJS  += 44x_spd_ddr2.o
+COBJS  += 4xx_enet.o
+COBJS  += 4xx_pci.o
+COBJS  += 4xx_pcie.o
+COBJS  += 4xx_uart.o
+COBJS  += bedbug_405.o
+COBJS  += commproc.o
+COBJS  += cpu.o
+COBJS  += cpu_init.o
+COBJS  += denali_data_eye.o
+COBJS  += denali_spd_ddr2.o
+COBJS  += fdt.o
+COBJS  += gpio.o
+COBJS  += i2c.o
+COBJS  += interrupts.o
+COBJS  += iop480_uart.o
+COBJS  += miiphy.o
+COBJS  += ndfc.o
+COBJS  += sdram.o
+COBJS  += speed.o
+COBJS  += tlb.o
+COBJS  += traps.o
+COBJS  += usb.o
+COBJS  += usb_ohci.o
+COBJS  += usbdev.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
diff --git a/cpu/ppc4xx/cache.S b/cpu/ppc4xx/cache.S
new file mode 100644 (file)
index 0000000..5124dec
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * This file contains miscellaneous low-level functions.
+ *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
+ *
+ * Largely rewritten by Cort Dougan (cort@cs.nmt.edu)
+ * and Paul Mackerras.
+ *
+ * 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.
+ *
+ */
+
+#include <config.h>
+#include <config.h>
+#include <ppc4xx.h>
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
+
+/*
+ * Flush instruction cache.
+ */
+_GLOBAL(invalidate_icache)
+       iccci   r0,r0
+       isync
+       blr
+
+/*
+ * Write any modified data cache blocks out to memory
+ * and invalidate the corresponding instruction cache blocks.
+ *
+ * flush_icache_range(unsigned long start, unsigned long stop)
+ */
+_GLOBAL(flush_icache_range)
+       li      r5,L1_CACHE_BYTES-1
+       andc    r3,r3,r5
+       subf    r4,r3,r4
+       add     r4,r4,r5
+       srwi.   r4,r4,L1_CACHE_SHIFT
+       beqlr
+       mtctr   r4
+       mr      r6,r3
+1:     dcbst   0,r3
+       addi    r3,r3,L1_CACHE_BYTES
+       bdnz    1b
+       sync                            /* wait for dcbst's to get to ram */
+       mtctr   r4
+2:     icbi    0,r6
+       addi    r6,r6,L1_CACHE_BYTES
+       bdnz    2b
+       sync                            /* additional sync needed on g4 */
+       isync
+       blr
+
+/*
+ * Write any modified data cache blocks out to memory.
+ * Does not invalidate the corresponding cache lines (especially for
+ * any corresponding instruction cache).
+ *
+ * clean_dcache_range(unsigned long start, unsigned long stop)
+ */
+_GLOBAL(clean_dcache_range)
+       li      r5,L1_CACHE_BYTES-1
+       andc    r3,r3,r5
+       subf    r4,r3,r4
+       add     r4,r4,r5
+       srwi.   r4,r4,L1_CACHE_SHIFT
+       beqlr
+       mtctr   r4
+
+1:     dcbst   0,r3
+       addi    r3,r3,L1_CACHE_BYTES
+       bdnz    1b
+       sync                            /* wait for dcbst's to get to ram */
+       blr
+
+/*
+ * Write any modified data cache blocks out to memory and invalidate them.
+ * Does not invalidate the corresponding instruction cache blocks.
+ *
+ * flush_dcache_range(unsigned long start, unsigned long stop)
+ */
+_GLOBAL(flush_dcache_range)
+       li      r5,L1_CACHE_BYTES-1
+       andc    r3,r3,r5
+       subf    r4,r3,r4
+       add     r4,r4,r5
+       srwi.   r4,r4,L1_CACHE_SHIFT
+       beqlr
+       mtctr   r4
+
+1:     dcbf    0,r3
+       addi    r3,r3,L1_CACHE_BYTES
+       bdnz    1b
+       sync                            /* wait for dcbst's to get to ram */
+       blr
+
+/*
+ * Like above, but invalidate the D-cache.  This is used by the 8xx
+ * to invalidate the cache so the PPC core doesn't get stale data
+ * from the CPM (no cache snooping here :-).
+ *
+ * invalidate_dcache_range(unsigned long start, unsigned long stop)
+ */
+_GLOBAL(invalidate_dcache_range)
+       li      r5,L1_CACHE_BYTES-1
+       andc    r3,r3,r5
+       subf    r4,r3,r4
+       add     r4,r4,r5
+       srwi.   r4,r4,L1_CACHE_SHIFT
+       beqlr
+       mtctr   r4
+
+1:     dcbi    0,r3
+       addi    r3,r3,L1_CACHE_BYTES
+       bdnz    1b
+       sync                            /* wait for dcbi's to get to ram */
+       blr
+
+/*
+ * 40x cores have 8K or 16K dcache and 32 byte line size.
+ * 44x has a 32K dcache and 32 byte line size.
+ * 8xx has 1, 2, 4, 8K variants.
+ * For now, cover the worst case of the 44x.
+ * Must be called with external interrupts disabled.
+ */
+#define CACHE_NWAYS     64
+#define CACHE_NLINES    32
+
+_GLOBAL(flush_dcache)
+       li      r4,(2 * CACHE_NWAYS * CACHE_NLINES)
+       mtctr   r4
+       lis     r5,0
+1:     lwz     r3,0(r5)                /* Load one word from every line */
+       addi    r5,r5,L1_CACHE_BYTES
+       bdnz    1b
+       sync
+       blr
+
+_GLOBAL(invalidate_dcache)
+       addi    r6,0,0x0000             /* clear GPR 6 */
+       /* Do loop for # of dcache congruence classes. */
+       lis     r7,(CFG_DCACHE_SIZE / L1_CACHE_BYTES / 2)@ha    /* TBS for large sized cache */
+       ori     r7,r7,(CFG_DCACHE_SIZE / L1_CACHE_BYTES / 2)@l
+                                       /* NOTE: dccci invalidates both */
+       mtctr   r7                      /* ways in the D cache */
+..dcloop:
+       dccci   0,r6                    /* invalidate line */
+       addi    r6,r6,L1_CACHE_BYTES    /* bump to next line */
+       bdnz    ..dcloop
+       sync
+       blr
+
+/*
+ * Cache functions.
+ *
+ * NOTE: currently the 440s run with dcache _disabled_ once relocated to DRAM,
+ * although for some cache-ralated calls stubs have to be provided to satisfy
+ * symbols resolution.
+ * Icache-related functions are used in POST framework.
+ *
+ */
+#ifdef CONFIG_440
+
+       .globl  dcache_disable
+       .globl  icache_disable
+       .globl  icache_enable
+dcache_disable:
+icache_disable:
+icache_enable:
+       blr
+
+       .globl  dcache_status
+       .globl  icache_status
+dcache_status:
+icache_status:
+       mr      r3,  0
+       blr
+
+#else /* CONFIG_440 */
+
+       .globl  icache_enable
+icache_enable:
+       mflr    r8
+       bl      invalidate_icache
+       mtlr    r8
+       isync
+       addis   r3,r0, 0xc000         /* set bit 0 */
+       mticcr  r3
+       blr
+
+       .globl  icache_disable
+icache_disable:
+       addis   r3,r0, 0x0000         /* clear bit 0 */
+       mticcr  r3
+       isync
+       blr
+
+       .globl  icache_status
+icache_status:
+       mficcr  r3
+       srwi    r3, r3, 31      /* >>31 => select bit 0 */
+       blr
+
+       .globl  dcache_enable
+dcache_enable:
+       mflr    r8
+       bl      invalidate_dcache
+       mtlr    r8
+       isync
+       addis   r3,r0, 0x8000         /* set bit 0 */
+       mtdccr  r3
+       blr
+
+       .globl  dcache_disable
+dcache_disable:
+       mflr    r8
+       bl      flush_dcache
+       mtlr    r8
+       addis   r3,r0, 0x0000         /* clear bit 0 */
+       mtdccr  r3
+       blr
+
+       .globl  dcache_status
+dcache_status:
+       mfdccr  r3
+       srwi    r3, r3, 31      /* >>31 => select bit 0 */
+       blr
+
+#endif /* CONFIG_440 */
index 68aab5b7eab2d6ebda4daf6abe2d8d45f9ac051d..22156dd9ded363c8ae9b467314326a69f211cc6f 100644 (file)
 
 #include <common.h>
 #include <commproc.h>
-
+#include <asm/io.h>
 
 #if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
 
+#if defined(CFG_POST_ALT_WORD_ADDR)
+void post_word_store (ulong a)
+{
+       out_be32((void *)CFG_POST_ALT_WORD_ADDR, a);
+}
+
+ulong post_word_load (void)
+{
+       return in_be32((void *)CFG_POST_ALT_WORD_ADDR);
+}
+#else /* CFG_POST_ALT_WORD_ADDR */
 void post_word_store (ulong a)
 {
        volatile void *save_addr = (volatile void *)(CFG_OCM_DATA_ADDR + CFG_POST_WORD_ADDR);
@@ -41,6 +52,7 @@ ulong post_word_load (void)
        volatile void *save_addr = (volatile void *)(CFG_OCM_DATA_ADDR + CFG_POST_WORD_ADDR);
        return *(volatile ulong *) save_addr;
 }
+#endif /* CFG_POST_ALT_WORD_ADDR */
 
 #endif /* CONFIG_POST || CONFIG_LOGBUFFER*/
 
index c07bc0c325e0a9ef5c1f123f6906378c94d14b83..9e9c685afe344800882b7fe281b217a55765607f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000-2006
+ * (C) Copyright 2000-2007
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
 #include <asm/cache.h>
 #include <ppc4xx.h>
 
-#if !defined(CONFIG_405)
 DECLARE_GLOBAL_DATA_PTR;
-#endif
 
-#if defined(CONFIG_BOARD_RESET)
 void board_reset(void);
-#endif
-
-#if defined(CONFIG_440)
-#define FREQ_EBC               (sys_info.freqEPB)
-#elif defined(CONFIG_405EZ)
-#define FREQ_EBC               ((CONFIG_SYS_CLK_FREQ * sys_info.pllFbkDiv) / \
-                                sys_info.pllExtBusDiv)
-#else
-#define FREQ_EBC               (sys_info.freqPLB / sys_info.pllExtBusDiv)
-#endif
 
 #if defined(CONFIG_405GP) || \
     defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
@@ -60,7 +47,7 @@ void board_reset(void);
 
 #define PCI_ASYNC
 
-int pci_async_enabled(void)
+static int pci_async_enabled(void)
 {
 #if defined(CONFIG_405GP)
        return (mfdcr(strap) & PSR_PCI_ASYNC_EN);
@@ -76,8 +63,9 @@ int pci_async_enabled(void)
 }
 #endif
 
-#if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && !defined(CONFIG_405)
-int pci_arbiter_enabled(void)
+#if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && \
+    !defined(CONFIG_405) && !defined(CONFIG_405EX)
+static int pci_arbiter_enabled(void)
 {
 #if defined(CONFIG_405GP)
        return (mfdcr(strap) & PSR_PCI_ARBIT_EN);
@@ -107,14 +95,10 @@ int pci_arbiter_enabled(void)
 }
 #endif
 
-#if defined(CONFIG_405EP) || defined(CONFIG_440GX) || \
-    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
-
+#if defined(CONFIG_405EP)
 #define I2C_BOOTROM
 
-int i2c_bootrom_enabled(void)
+static int i2c_bootrom_enabled(void)
 {
 #if defined(CONFIG_405EP)
        return (mfdcr(cpc0_boot) & CPC0_BOOT_SEP);
@@ -207,6 +191,21 @@ static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', \
                                 'I', 'x', 'K', 'L', 'M', 'N', 'O', 'P' };
 #endif
 
+#if defined(CONFIG_405EX)
+#define SDR0_PINSTP_SHIFT      29
+static char *bootstrap_str[] = {
+       "EBC (8 bits)",
+       "EBC (16 bits)",
+       "EBC (16 bits)",
+       "NAND (8 bits)",
+       "NAND (8 bits)",
+       "I2C (Addr 0x54)",
+       "EBC (8 bits)",
+       "I2C (Addr 0x52)",
+};
+static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'G', 'F', 'H' };
+#endif
+
 #if defined(SDR0_PINSTP_SHIFT)
 static int bootstrap_option(void)
 {
@@ -219,7 +218,19 @@ static int bootstrap_option(void)
 
 
 #if defined(CONFIG_440)
-static int do_chip_reset(unsigned long sys0, unsigned long sys1);
+static int do_chip_reset (unsigned long sys0, unsigned long sys1)
+{
+       /* Changes to cpc0_sys0 and cpc0_sys1 require chip
+        * reset.
+        */
+       mtdcr (cntrl0, mfdcr (cntrl0) | 0x80000000);    /* Set SWE */
+       mtdcr (cpc0_sys0, sys0);
+       mtdcr (cpc0_sys1, sys1);
+       mtdcr (cntrl0, mfdcr (cntrl0) & ~0x80000000);   /* Clr SWE */
+       mtspr (dbcr0, 0x20000000);      /* Reset the chip */
+
+       return 1;
+}
 #endif
 
 
@@ -241,7 +252,8 @@ int checkcpu (void)
        puts("AMCC PowerPC 4");
 
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
-    defined(CONFIG_405EP) || defined(CONFIG_405EZ)
+    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
+    defined(CONFIG_405EX)
        puts("05");
 #endif
 #if defined(CONFIG_440)
@@ -293,6 +305,26 @@ int checkcpu (void)
                puts("EZ Rev. A");
                break;
 
+       case PVR_405EX1_RA:
+               puts("EX Rev. A");
+               strcpy(addstr, "Security support");
+               break;
+
+       case PVR_405EX2_RA:
+               puts("EX Rev. A");
+               strcpy(addstr, "No Security support");
+               break;
+
+       case PVR_405EXR1_RA:
+               puts("EXr Rev. A");
+               strcpy(addstr, "Security support");
+               break;
+
+       case PVR_405EXR2_RA:
+               puts("EXr Rev. A");
+               strcpy(addstr, "No Security support");
+               break;
+
 #if defined(CONFIG_440)
        case PVR_440GP_RB:
                puts("GP Rev. B");
@@ -424,7 +456,7 @@ int checkcpu (void)
        printf (" at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n", strmhz(buf, clock),
                sys_info.freqPLB / 1000000,
                get_OPB_freq() / 1000000,
-               FREQ_EBC / 1000000);
+               sys_info.freqEBC / 1000000);
 
        if (addstr[0] != 0)
                printf("       %s\n", addstr);
@@ -437,7 +469,7 @@ int checkcpu (void)
        printf ("Boot ROM Location %s\n", bootstrap_str[bootstrap_option()]);
 #endif /* SDR0_PINSTP_SHIFT */
 
-#if defined(CONFIG_PCI)
+#if defined(CONFIG_PCI) && !defined(CONFIG_405EX)
        printf ("       Internal PCI arbiter %sabled", pci_arbiter_enabled() ? "en" : "dis");
 #endif
 
@@ -450,11 +482,11 @@ int checkcpu (void)
        }
 #endif
 
-#if defined(CONFIG_PCI)
+#if defined(CONFIG_PCI) && !defined(CONFIG_405EX)
        putc('\n');
 #endif
 
-#if defined(CONFIG_405EP) || defined(CONFIG_405EZ)
+#if defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX)
        printf ("       16 kB I-Cache 16 kB D-Cache");
 #elif defined(CONFIG_440)
        printf ("       32 kB I-Cache 32 kB D-Cache");
@@ -478,7 +510,6 @@ int checkcpu (void)
        return 0;
 }
 
-#if defined (CONFIG_440SPE)
 int ppc440spe_revB() {
        unsigned int pvr;
 
@@ -488,7 +519,6 @@ int ppc440spe_revB() {
        else
                return 0;
 }
-#endif
 
 /* ------------------------------------------------------------------------- */
 
@@ -510,22 +540,6 @@ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        return 1;
 }
 
-#if defined(CONFIG_440)
-static int do_chip_reset (unsigned long sys0, unsigned long sys1)
-{
-       /* Changes to cpc0_sys0 and cpc0_sys1 require chip
-        * reset.
-        */
-       mtdcr (cntrl0, mfdcr (cntrl0) | 0x80000000);    /* Set SWE */
-       mtdcr (cpc0_sys0, sys0);
-       mtdcr (cpc0_sys1, sys1);
-       mtdcr (cntrl0, mfdcr (cntrl0) & ~0x80000000);   /* Clr SWE */
-       mtspr (dbcr0, 0x20000000);      /* Reset the chip */
-
-       return 1;
-}
-#endif
-
 
 /*
  * Get timebase clock frequency
@@ -545,16 +559,14 @@ unsigned long get_tbclk (void)
 
 
 #if defined(CONFIG_WATCHDOG)
-void
-watchdog_reset(void)
+void watchdog_reset(void)
 {
        int re_enable = disable_interrupts();
        reset_4xx_watchdog();
        if (re_enable) enable_interrupts();
 }
 
-void
-reset_4xx_watchdog(void)
+void reset_4xx_watchdog(void)
 {
        /*
         * Clear TSR(WIS) bit
index 351da36e855fc37acab3529f331f28e2a9738244..2e0dd6f062fd44f9bc01c1e8593e7228dc34cd64 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000-2006
+ * (C) Copyright 2000-2007
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
@@ -112,7 +112,7 @@ cpu_init_f (void)
        unsigned long val;
 #endif
 
-#if defined(CONFIG_405EP)
+#if (defined(CONFIG_405EP) || defined (CONFIG_405EX)) && !defined(CFG_4xx_GPIO_TABLE)
        /*
         * GPIO0 setup (select GPIO or alternate function)
         */
@@ -128,17 +128,30 @@ cpu_init_f (void)
        out32(GPIO0_ISR1L, CFG_GPIO0_ISR1L);
        out32(GPIO0_TSRH, CFG_GPIO0_TSRH);      /* three-state select                   */
        out32(GPIO0_TSRL, CFG_GPIO0_TSRL);
+#if defined(CFG_GPIO0_ISR2H)
+       out32(GPIO0_ISR2H, CFG_GPIO0_ISR2H);
+       out32(GPIO0_ISR2L, CFG_GPIO0_ISR2L);
+#endif
+#if defined (CFG_GPIO0_TCR)
        out32(GPIO0_TCR, CFG_GPIO0_TCR);        /* enable output driver for outputs     */
+#endif
 
+#if defined (CONFIG_405EP)
        /*
         * Set EMAC noise filter bits
         */
        mtdcr(cpc0_epctl, CPC0_EPRCSR_E0NFE | CPC0_EPRCSR_E1NFE);
+
+       /*
+        * Enable the internal PCI arbiter
+        */
+       mtdcr(cpc0_pci, mfdcr(cpc0_pci) | CPC0_PCI_HOST_CFG_EN | CPC0_PCI_ARBIT_EN);
+#endif /* CONFIG_405EP */
 #endif /* CONFIG_405EP */
 
-#if defined(CFG_440_GPIO_TABLE)
+#if defined(CFG_4xx_GPIO_TABLE)
        gpio_set_chip_configuration();
-#endif /* CFG_440_GPIO_TABLE */
+#endif /* CFG_4xx_GPIO_TABLE */
 
        /*
         * External Bus Controller (EBC) Setup
@@ -146,7 +159,7 @@ cpu_init_f (void)
 #if (defined(CFG_EBC_PB0AP) && defined(CFG_EBC_PB0CR))
 #if (defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
      defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
-     defined(CONFIG_405))
+     defined(CONFIG_405EX) || defined(CONFIG_405))
        /*
         * Move the next instructions into icache, since these modify the flash
         * we are running from!
diff --git a/cpu/ppc4xx/denali_data_eye.c b/cpu/ppc4xx/denali_data_eye.c
new file mode 100644 (file)
index 0000000..967e61b
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * cpu/ppc4xx/denali_data_eye.c
+ * Extracted from board/amcc/sequoia/sdram.c by Larry Johnson <lrj@acm.org>.
+ *
+ * (C) Copyright 2006
+ * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
+ * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com
+ *
+ * (C) Copyright 2006-2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* define DEBUG for debugging output (obviously ;-)) */
+#if 0
+#define DEBUG
+#endif
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <ppc4xx.h>
+
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+/*-----------------------------------------------------------------------------+
+ * denali_wait_for_dlllock.
+ +----------------------------------------------------------------------------*/
+int denali_wait_for_dlllock(void)
+{
+       u32 val;
+       int wait;
+
+       /* -----------------------------------------------------------+
+        * Wait for the DCC master delay line to finish calibration
+        * ----------------------------------------------------------*/
+       for (wait = 0; wait != 0xffff; ++wait) {
+               mfsdram(DDR0_17, val);
+               if (DDR0_17_DLLLOCKREG_DECODE(val)) {
+                       /* dlllockreg bit on */
+                       return 0;
+               }
+       }
+       debug("0x%04x: DDR0_17 Value (dlllockreg bit): 0x%08x\n", wait, val);
+       debug("Waiting for dlllockreg bit to raise\n");
+       return -1;
+}
+
+#if defined(CONFIG_DDR_DATA_EYE)
+#define DDR_DCR_BASE 0x10
+#define ddrcfga  (DDR_DCR_BASE+0x0)    /* DDR configuration address reg */
+#define ddrcfgd  (DDR_DCR_BASE+0x1)    /* DDR configuration data reg    */
+
+/*-----------------------------------------------------------------------------+
+ * wait_for_dram_init_complete.
+ +----------------------------------------------------------------------------*/
+static int wait_for_dram_init_complete(void)
+{
+       unsigned long val;
+       int wait = 0;
+
+       /* --------------------------------------------------------------+
+        * Wait for 'DRAM initialization complete' bit in status register
+        * -------------------------------------------------------------*/
+       mtdcr(ddrcfga, DDR0_00);
+
+       while (wait != 0xffff) {
+               val = mfdcr(ddrcfgd);
+               if ((val & DDR0_00_INT_STATUS_BIT6) == DDR0_00_INT_STATUS_BIT6)
+                       /* 'DRAM initialization complete' bit */
+                       return 0;
+               else
+                       wait++;
+       }
+       debug("DRAM initialization complete bit in status register did not "
+             "rise\n");
+       return -1;
+}
+
+#define NUM_TRIES 64
+#define NUM_READS 10
+
+/*-----------------------------------------------------------------------------+
+ * denali_core_search_data_eye.
+ +----------------------------------------------------------------------------*/
+void denali_core_search_data_eye(void)
+{
+       int k, j;
+       u32 val;
+       u32 wr_dqs_shift, dqs_out_shift, dll_dqs_delay_X;
+       u32 max_passing_cases = 0, wr_dqs_shift_with_max_passing_cases = 0;
+       u32 passing_cases = 0, dll_dqs_delay_X_sw_val = 0;
+       u32 dll_dqs_delay_X_start_window = 0, dll_dqs_delay_X_end_window = 0;
+       volatile u32 *ram_pointer;
+       u32 test[NUM_TRIES] = {
+               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
+               0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
+               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
+               0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
+               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
+               0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
+               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
+               0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
+               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
+               0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
+               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
+               0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
+               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
+               0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
+               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55,
+               0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55
+       };
+
+       ram_pointer = (volatile u32 *)(CFG_SDRAM_BASE);
+
+       for (wr_dqs_shift = 64; wr_dqs_shift < 96; wr_dqs_shift++) {
+               /* for (wr_dqs_shift=1; wr_dqs_shift<96; wr_dqs_shift++) { */
+
+               /* -----------------------------------------------------------+
+                * De-assert 'start' parameter.
+                * ----------------------------------------------------------*/
+               mtdcr(ddrcfga, DDR0_02);
+               val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) |
+                   DDR0_02_START_OFF;
+               mtdcr(ddrcfgd, val);
+
+               /* -----------------------------------------------------------+
+                * Set 'wr_dqs_shift'
+                * ----------------------------------------------------------*/
+               mtdcr(ddrcfga, DDR0_09);
+               val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK) |
+                   DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
+               mtdcr(ddrcfgd, val);
+
+               /* -----------------------------------------------------------+
+                * Set 'dqs_out_shift' = wr_dqs_shift + 32
+                * ----------------------------------------------------------*/
+               dqs_out_shift = wr_dqs_shift + 32;
+               mtdcr(ddrcfga, DDR0_22);
+               val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK) |
+                   DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
+               mtdcr(ddrcfgd, val);
+
+               passing_cases = 0;
+
+               for (dll_dqs_delay_X = 1; dll_dqs_delay_X < 64;
+                    dll_dqs_delay_X++) {
+                       /* for (dll_dqs_delay_X=1; dll_dqs_delay_X<128;
+                          dll_dqs_delay_X++) { */
+                       /* -----------------------------------------------------------+
+                        * Set 'dll_dqs_delay_X'.
+                        * ----------------------------------------------------------*/
+                       /* dll_dqs_delay_0 */
+                       mtdcr(ddrcfga, DDR0_17);
+                       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
+                           | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
+                       mtdcr(ddrcfgd, val);
+                       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
+                       mtdcr(ddrcfga, DDR0_18);
+                       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
+                           | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
+                           | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
+                           | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
+                           | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
+                       mtdcr(ddrcfgd, val);
+                       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
+                       mtdcr(ddrcfga, DDR0_19);
+                       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
+                           | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
+                           | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
+                           | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
+                           | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
+                       mtdcr(ddrcfgd, val);
+                       /* clear any ECC errors */
+                       mtdcr(ddrcfga, DDR0_00);
+                       mtdcr(ddrcfgd,
+                             mfdcr(ddrcfgd) | DDR0_00_INT_ACK_ENCODE(0x3C));
+
+                       sync();
+                       eieio();
+
+                       /* -----------------------------------------------------------+
+                        * Assert 'start' parameter.
+                        * ----------------------------------------------------------*/
+                       mtdcr(ddrcfga, DDR0_02);
+                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) |
+                           DDR0_02_START_ON;
+                       mtdcr(ddrcfgd, val);
+
+                       sync();
+                       eieio();
+
+                       /* -----------------------------------------------------------+
+                        * Wait for the DCC master delay line to finish calibration
+                        * ----------------------------------------------------------*/
+                       if (denali_wait_for_dlllock() != 0) {
+                               printf("dll lock did not occur !!!\n");
+                               printf("denali_core_search_data_eye!!!\n");
+                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = "
+                                      "%d\n", wr_dqs_shift, dll_dqs_delay_X);
+                               hang();
+                       }
+                       sync();
+                       eieio();
+
+                       if (wait_for_dram_init_complete() != 0) {
+                               printf("dram init complete did not occur!!!\n");
+                               printf("denali_core_search_data_eye!!!\n");
+                               printf("wr_dqs_shift = %d - dll_dqs_delay_X = "
+                                      "%d\n", wr_dqs_shift, dll_dqs_delay_X);
+                               hang();
+                       }
+                       udelay(100); /* wait 100us to ensure init is really completed !!! */
+
+                       /* write values */
+                       for (j = 0; j < NUM_TRIES; j++) {
+                               ram_pointer[j] = test[j];
+
+                               /* clear any cache at ram location */
+                             __asm__("dcbf 0,%0": :"r"(&ram_pointer[j]));
+                       }
+
+                       /* read values back */
+                       for (j = 0; j < NUM_TRIES; j++) {
+                               for (k = 0; k < NUM_READS; k++) {
+                                       /* clear any cache at ram location */
+                                     __asm__("dcbf 0,%0": :"r"(&ram_pointer
+                                           [j]));
+
+                                       if (ram_pointer[j] != test[j])
+                                               break;
+                               }
+
+                               /* read error */
+                               if (k != NUM_READS)
+                                       break;
+                       }
+
+                       /* See if the dll_dqs_delay_X value passed. */
+                       mtdcr(ddrcfga, DDR0_00);
+                       if (j < NUM_TRIES
+                           || (DDR0_00_INT_STATUS_DECODE(mfdcr(ddrcfgd)) &
+                               0x3F)) {
+                               /* Failed */
+                               passing_cases = 0;
+                               /* break; */
+                       } else {
+                               /* Passed */
+                               if (passing_cases == 0)
+                                       dll_dqs_delay_X_sw_val =
+                                           dll_dqs_delay_X;
+                               passing_cases++;
+                               if (passing_cases >= max_passing_cases) {
+                                       max_passing_cases = passing_cases;
+                                       wr_dqs_shift_with_max_passing_cases =
+                                           wr_dqs_shift;
+                                       dll_dqs_delay_X_start_window =
+                                           dll_dqs_delay_X_sw_val;
+                                       dll_dqs_delay_X_end_window =
+                                           dll_dqs_delay_X;
+                               }
+                       }
+
+                       /* -----------------------------------------------------------+
+                        * De-assert 'start' parameter.
+                        * ----------------------------------------------------------*/
+                       mtdcr(ddrcfga, DDR0_02);
+                       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) |
+                           DDR0_02_START_OFF;
+                       mtdcr(ddrcfgd, val);
+               } /* for (dll_dqs_delay_X=0; dll_dqs_delay_X<128; dll_dqs_delay_X++) */
+       } /* for (wr_dqs_shift=0; wr_dqs_shift<96; wr_dqs_shift++) */
+
+       /* -----------------------------------------------------------+
+        * Largest passing window is now detected.
+        * ----------------------------------------------------------*/
+
+       /* Compute dll_dqs_delay_X value */
+       dll_dqs_delay_X = (dll_dqs_delay_X_end_window +
+                          dll_dqs_delay_X_start_window) / 2;
+       wr_dqs_shift = wr_dqs_shift_with_max_passing_cases;
+
+       debug("DQS calibration - Window detected:\n");
+       debug("max_passing_cases = %d\n", max_passing_cases);
+       debug("wr_dqs_shift      = %d\n", wr_dqs_shift);
+       debug("dll_dqs_delay_X   = %d\n", dll_dqs_delay_X);
+       debug("dll_dqs_delay_X window = %d - %d\n",
+             dll_dqs_delay_X_start_window, dll_dqs_delay_X_end_window);
+
+       /* -----------------------------------------------------------+
+        * De-assert 'start' parameter.
+        * ----------------------------------------------------------*/
+       mtdcr(ddrcfga, DDR0_02);
+       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_OFF;
+       mtdcr(ddrcfgd, val);
+
+       /* -----------------------------------------------------------+
+        * Set 'wr_dqs_shift'
+        * ----------------------------------------------------------*/
+       mtdcr(ddrcfga, DDR0_09);
+       val = (mfdcr(ddrcfgd) & ~DDR0_09_WR_DQS_SHIFT_MASK)
+           | DDR0_09_WR_DQS_SHIFT_ENCODE(wr_dqs_shift);
+       mtdcr(ddrcfgd, val);
+       debug("DDR0_09=0x%08lx\n", val);
+
+       /* -----------------------------------------------------------+
+        * Set 'dqs_out_shift' = wr_dqs_shift + 32
+        * ----------------------------------------------------------*/
+       dqs_out_shift = wr_dqs_shift + 32;
+       mtdcr(ddrcfga, DDR0_22);
+       val = (mfdcr(ddrcfgd) & ~DDR0_22_DQS_OUT_SHIFT_MASK)
+           | DDR0_22_DQS_OUT_SHIFT_ENCODE(dqs_out_shift);
+       mtdcr(ddrcfgd, val);
+       debug("DDR0_22=0x%08lx\n", val);
+
+       /* -----------------------------------------------------------+
+        * Set 'dll_dqs_delay_X'.
+        * ----------------------------------------------------------*/
+       /* dll_dqs_delay_0 */
+       mtdcr(ddrcfga, DDR0_17);
+       val = (mfdcr(ddrcfgd) & ~DDR0_17_DLL_DQS_DELAY_0_MASK)
+           | DDR0_17_DLL_DQS_DELAY_0_ENCODE(dll_dqs_delay_X);
+       mtdcr(ddrcfgd, val);
+       debug("DDR0_17=0x%08lx\n", val);
+
+       /* dll_dqs_delay_1 to dll_dqs_delay_4 */
+       mtdcr(ddrcfga, DDR0_18);
+       val = (mfdcr(ddrcfgd) & ~DDR0_18_DLL_DQS_DELAY_X_MASK)
+           | DDR0_18_DLL_DQS_DELAY_4_ENCODE(dll_dqs_delay_X)
+           | DDR0_18_DLL_DQS_DELAY_3_ENCODE(dll_dqs_delay_X)
+           | DDR0_18_DLL_DQS_DELAY_2_ENCODE(dll_dqs_delay_X)
+           | DDR0_18_DLL_DQS_DELAY_1_ENCODE(dll_dqs_delay_X);
+       mtdcr(ddrcfgd, val);
+       debug("DDR0_18=0x%08lx\n", val);
+
+       /* dll_dqs_delay_5 to dll_dqs_delay_8 */
+       mtdcr(ddrcfga, DDR0_19);
+       val = (mfdcr(ddrcfgd) & ~DDR0_19_DLL_DQS_DELAY_X_MASK)
+           | DDR0_19_DLL_DQS_DELAY_8_ENCODE(dll_dqs_delay_X)
+           | DDR0_19_DLL_DQS_DELAY_7_ENCODE(dll_dqs_delay_X)
+           | DDR0_19_DLL_DQS_DELAY_6_ENCODE(dll_dqs_delay_X)
+           | DDR0_19_DLL_DQS_DELAY_5_ENCODE(dll_dqs_delay_X);
+       mtdcr(ddrcfgd, val);
+       debug("DDR0_19=0x%08lx\n", val);
+
+       /* -----------------------------------------------------------+
+        * Assert 'start' parameter.
+        * ----------------------------------------------------------*/
+       mtdcr(ddrcfga, DDR0_02);
+       val = (mfdcr(ddrcfgd) & ~DDR0_02_START_MASK) | DDR0_02_START_ON;
+       mtdcr(ddrcfgd, val);
+
+       sync();
+       eieio();
+
+       /* -----------------------------------------------------------+
+        * Wait for the DCC master delay line to finish calibration
+        * ----------------------------------------------------------*/
+       if (denali_wait_for_dlllock() != 0) {
+               printf("dll lock did not occur !!!\n");
+               hang();
+       }
+       sync();
+       eieio();
+
+       if (wait_for_dram_init_complete() != 0) {
+               printf("dram init complete did not occur !!!\n");
+               hang();
+       }
+       udelay(100); /* wait 100us to ensure init is really completed !!! */
+}
+#endif /* defined(CONFIG_DDR_DATA_EYE) */
+#endif /* defined(CONFIG_440EPX) || defined(CONFIG_440GRX) */
diff --git a/cpu/ppc4xx/denali_spd_ddr2.c b/cpu/ppc4xx/denali_spd_ddr2.c
new file mode 100644 (file)
index 0000000..825bc21
--- /dev/null
@@ -0,0 +1,1254 @@
+/*
+ * cpu/ppc4xx/denali_spd_ddr2.c
+ * This SPD SDRAM detection code supports AMCC PPC44x CPUs with a Denali-core
+ * DDR2 controller, specifically the 440EPx/GRx.
+ *
+ * (C) Copyright 2007
+ * Larry Johnson, lrj@acm.org.
+ *
+ * Based primarily on cpu/ppc4xx/4xx_spd_ddr2.c, which is...
+ *
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * COPYRIGHT   AMCC   CORPORATION 2004
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+/* define DEBUG for debugging output (obviously ;-)) */
+#if 0
+#define DEBUG
+#endif
+
+#include <common.h>
+#include <command.h>
+#include <ppc4xx.h>
+#include <i2c.h>
+#include <asm/io.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+
+#if defined(CONFIG_SPD_EEPROM) &&                              \
+       (defined(CONFIG_440EPX) || defined(CONFIG_440GRX))
+
+/*-----------------------------------------------------------------------------+
+ * Defines
+ *-----------------------------------------------------------------------------*/
+#ifndef        TRUE
+#define TRUE           1
+#endif
+#ifndef FALSE
+#define FALSE          0
+#endif
+
+#define MAXDIMMS       2
+#define MAXRANKS       2
+
+#define ONE_BILLION    1000000000
+
+#define MULDIV64(m1, m2, d)    (u32)(((u64)(m1) * (u64)(m2)) / (u64)(d))
+
+#define DLL_DQS_DELAY  0x19
+#define DLL_DQS_BYPASS 0x0B
+#define DQS_OUT_SHIFT  0x7F
+
+/*
+ * This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
+ * region. Right now the cache should still be disabled in U-Boot because of the
+ * EMAC driver, that need it's buffer descriptor to be located in non cached
+ * memory.
+ *
+ * If at some time this restriction doesn't apply anymore, just define
+ * CFG_ENABLE_SDRAM_CACHE in the board config file and this code should setup
+ * everything correctly.
+ */
+#if defined(CFG_ENABLE_SDRAM_CACHE)
+#define MY_TLB_WORD2_I_ENABLE  0                       /* enable caching on SDRAM */
+#else
+#define MY_TLB_WORD2_I_ENABLE  TLB_WORD2_I_ENABLE      /* disable caching on SDRAM */
+#endif
+
+/*-----------------------------------------------------------------------------+
+ * Prototypes
+ *-----------------------------------------------------------------------------*/
+extern int denali_wait_for_dlllock(void);
+extern void denali_core_search_data_eye(void);
+extern void dcbz_area(u32 start_address, u32 num_bytes);
+extern void dflush(void);
+
+/*
+ * Board-specific Platform code can reimplement spd_ddr_init_hang () if needed
+ */
+void __spd_ddr_init_hang(void)
+{
+       hang();
+}
+void spd_ddr_init_hang(void)
+    __attribute__ ((weak, alias("__spd_ddr_init_hang")));
+
+#if defined(DEBUG)
+static void print_mcsr(void)
+{
+       printf("MCSR = 0x%08X\n", mfspr(SPRN_MCSR));
+}
+
+static void denali_sdram_register_dump(void)
+{
+       unsigned int sdram_data;
+
+       printf("\n  Register Dump:\n");
+       mfsdram(DDR0_00, sdram_data);
+       printf("        DDR0_00 = 0x%08X", sdram_data);
+       mfsdram(DDR0_01, sdram_data);
+       printf("        DDR0_01 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_02, sdram_data);
+       printf("        DDR0_02 = 0x%08X", sdram_data);
+       mfsdram(DDR0_03, sdram_data);
+       printf("        DDR0_03 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_04, sdram_data);
+       printf("        DDR0_04 = 0x%08X", sdram_data);
+       mfsdram(DDR0_05, sdram_data);
+       printf("        DDR0_05 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_06, sdram_data);
+       printf("        DDR0_06 = 0x%08X", sdram_data);
+       mfsdram(DDR0_07, sdram_data);
+       printf("        DDR0_07 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_08, sdram_data);
+       printf("        DDR0_08 = 0x%08X", sdram_data);
+       mfsdram(DDR0_09, sdram_data);
+       printf("        DDR0_09 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_10, sdram_data);
+       printf("        DDR0_10 = 0x%08X", sdram_data);
+       mfsdram(DDR0_11, sdram_data);
+       printf("        DDR0_11 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_12, sdram_data);
+       printf("        DDR0_12 = 0x%08X", sdram_data);
+       mfsdram(DDR0_14, sdram_data);
+       printf("        DDR0_14 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_17, sdram_data);
+       printf("        DDR0_17 = 0x%08X", sdram_data);
+       mfsdram(DDR0_18, sdram_data);
+       printf("        DDR0_18 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_19, sdram_data);
+       printf("        DDR0_19 = 0x%08X", sdram_data);
+       mfsdram(DDR0_20, sdram_data);
+       printf("        DDR0_20 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_21, sdram_data);
+       printf("        DDR0_21 = 0x%08X", sdram_data);
+       mfsdram(DDR0_22, sdram_data);
+       printf("        DDR0_22 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_23, sdram_data);
+       printf("        DDR0_23 = 0x%08X", sdram_data);
+       mfsdram(DDR0_24, sdram_data);
+       printf("        DDR0_24 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_25, sdram_data);
+       printf("        DDR0_25 = 0x%08X", sdram_data);
+       mfsdram(DDR0_26, sdram_data);
+       printf("        DDR0_26 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_27, sdram_data);
+       printf("        DDR0_27 = 0x%08X", sdram_data);
+       mfsdram(DDR0_28, sdram_data);
+       printf("        DDR0_28 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_31, sdram_data);
+       printf("        DDR0_31 = 0x%08X", sdram_data);
+       mfsdram(DDR0_32, sdram_data);
+       printf("        DDR0_32 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_33, sdram_data);
+       printf("        DDR0_33 = 0x%08X", sdram_data);
+       mfsdram(DDR0_34, sdram_data);
+       printf("        DDR0_34 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_35, sdram_data);
+       printf("        DDR0_35 = 0x%08X", sdram_data);
+       mfsdram(DDR0_36, sdram_data);
+       printf("        DDR0_36 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_37, sdram_data);
+       printf("        DDR0_37 = 0x%08X", sdram_data);
+       mfsdram(DDR0_38, sdram_data);
+       printf("        DDR0_38 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_39, sdram_data);
+       printf("        DDR0_39 = 0x%08X", sdram_data);
+       mfsdram(DDR0_40, sdram_data);
+       printf("        DDR0_40 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_41, sdram_data);
+       printf("        DDR0_41 = 0x%08X", sdram_data);
+       mfsdram(DDR0_42, sdram_data);
+       printf("        DDR0_42 = 0x%08X\n", sdram_data);
+       mfsdram(DDR0_43, sdram_data);
+       printf("        DDR0_43 = 0x%08X", sdram_data);
+       mfsdram(DDR0_44, sdram_data);
+       printf("        DDR0_44 = 0x%08X\n", sdram_data);
+}
+#else
+static inline void denali_sdram_register_dump(void)
+{
+}
+
+inline static void print_mcsr(void)
+{
+}
+#endif /* defined(DEBUG) */
+
+static int is_ecc_enabled(void)
+{
+       u32 val;
+
+       mfsdram(DDR0_22, val);
+       return 0x3 == DDR0_22_CTRL_RAW_DECODE(val);
+}
+
+static unsigned char spd_read(u8 chip, unsigned int addr)
+{
+       u8 data[2];
+
+       if (0 != i2c_probe(chip) || 0 != i2c_read(chip, addr, 1, data, 1)) {
+               debug("spd_read(0x%02X, 0x%02X) failed\n", chip, addr);
+               return 0;
+       }
+       debug("spd_read(0x%02X, 0x%02X) returned 0x%02X\n",
+             chip, addr, data[0]);
+       return data[0];
+}
+
+static unsigned long get_tcyc(unsigned char reg)
+{
+       /*
+        * Byte 9, et al: Cycle time for CAS Latency=X, is split into two
+        * nibbles: the higher order nibble (bits 4-7) designates the cycle time
+        * to a granularity of 1ns; the value presented by the lower order
+        * nibble (bits 0-3) has a granularity of .1ns and is added to the value
+        * designated by the higher nibble. In addition, four lines of the lower
+        * order nibble are assigned to support +.25, +.33, +.66, and +.75.
+        */
+
+       unsigned char subfield_b = reg & 0x0F;
+
+       switch (subfield_b & 0x0F) {
+       case 0x0:
+       case 0x1:
+       case 0x2:
+       case 0x3:
+       case 0x4:
+       case 0x5:
+       case 0x6:
+       case 0x7:
+       case 0x8:
+       case 0x9:
+               return 1000 * (reg >> 4) + 100 * subfield_b;
+       case 0xA:
+               return 1000 * (reg >> 4) + 250;
+       case 0xB:
+               return 1000 * (reg >> 4) + 333;
+       case 0xC:
+               return 1000 * (reg >> 4) + 667;
+       case 0xD:
+               return 1000 * (reg >> 4) + 750;
+       }
+       return 0;
+}
+
+/*------------------------------------------------------------------
+ * Find the installed DIMMs, make sure that the are DDR2, and fill
+ * in the dimm_ranks array.  Then dimm_ranks[dimm_num] > 0 iff the
+ * DIMM and dimm_num is present.
+ * Note: Because there are only two chip-select lines, it is assumed
+ * that a board with a single socket can support two ranks on that
+ * socket, while a board with two sockets can support only one rank
+ * on each socket.
+ *-----------------------------------------------------------------*/
+static void get_spd_info(unsigned long dimm_ranks[],
+                        unsigned long *ranks,
+                        unsigned char const iic0_dimm_addr[],
+                        unsigned long num_dimm_banks)
+{
+       unsigned long dimm_num;
+       unsigned long dimm_found = FALSE;
+       unsigned long const max_ranks_per_dimm = (1 == num_dimm_banks) ? 2 : 1;
+       unsigned char num_of_bytes;
+       unsigned char total_size;
+
+       *ranks = 0;
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               num_of_bytes = 0;
+               total_size = 0;
+
+               num_of_bytes = spd_read(iic0_dimm_addr[dimm_num], 0);
+               total_size = spd_read(iic0_dimm_addr[dimm_num], 1);
+               if ((num_of_bytes != 0) && (total_size != 0)) {
+                       unsigned char const dimm_type =
+                           spd_read(iic0_dimm_addr[dimm_num], 2);
+
+                       unsigned long ranks_on_dimm =
+                           (spd_read(iic0_dimm_addr[dimm_num], 5) & 0x07) + 1;
+
+                       if (8 != dimm_type) {
+                               switch (dimm_type) {
+                               case 1:
+                                       printf("ERROR: Standard Fast Page Mode "
+                                              "DRAM DIMM");
+                                       break;
+                               case 2:
+                                       printf("ERROR: EDO DIMM");
+                                       break;
+                               case 3:
+                                       printf("ERROR: Pipelined Nibble DIMM");
+                                       break;
+                               case 4:
+                                       printf("ERROR: SDRAM DIMM");
+                                       break;
+                               case 5:
+                                       printf("ERROR: Multiplexed ROM DIMM");
+                                       break;
+                               case 6:
+                                       printf("ERROR: SGRAM DIMM");
+                                       break;
+                               case 7:
+                                       printf("ERROR: DDR1 DIMM");
+                                       break;
+                               default:
+                                       printf("ERROR: Unknown DIMM (type %d)",
+                                              (unsigned int)dimm_type);
+                                       break;
+                               }
+                               printf(" detected in slot %lu.\n", dimm_num);
+                               printf("Only DDR2 SDRAM DIMMs are supported."
+                                      "\n");
+                               printf("Replace the module with a DDR2 DIMM."
+                                      "\n\n");
+                               spd_ddr_init_hang();
+                       }
+                       dimm_found = TRUE;
+                       debug("DIMM slot %lu: populated with %lu-rank DDR2 DIMM"
+                             "\n", dimm_num, ranks_on_dimm);
+                       if (ranks_on_dimm > max_ranks_per_dimm) {
+                               printf("WARNING: DRAM DIMM in slot %lu has %lu "
+                                      "ranks.\n");
+                               if (1 == max_ranks_per_dimm) {
+                                       printf("Only one rank will be used.\n");
+                               } else {
+                                       printf
+                                           ("Only two ranks will be used.\n");
+                               }
+                               ranks_on_dimm = max_ranks_per_dimm;
+                       }
+                       dimm_ranks[dimm_num] = ranks_on_dimm;
+                       *ranks += ranks_on_dimm;
+               } else {
+                       dimm_ranks[dimm_num] = 0;
+                       debug("DIMM slot %lu: Not populated\n", dimm_num);
+               }
+       }
+       if (dimm_found == FALSE) {
+               printf("ERROR: No memory installed.\n");
+               printf("Install at least one DDR2 DIMM.\n\n");
+               spd_ddr_init_hang();
+       }
+       debug("Total number of ranks = %d\n", *ranks);
+}
+
+/*------------------------------------------------------------------
+ * For the memory DIMMs installed, this routine verifies that
+ * frequency previously calculated is supported.
+ *-----------------------------------------------------------------*/
+static void check_frequency(unsigned long *dimm_ranks,
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq)
+{
+       unsigned long dimm_num;
+       unsigned long cycle_time;
+       unsigned long calc_cycle_time;
+
+       /*
+        * calc_cycle_time is calculated from DDR frequency set by board/chip
+        * and is expressed in picoseconds to match the way DIMM cycle time is
+        * calculated below.
+        */
+       calc_cycle_time = MULDIV64(ONE_BILLION, 1000, sdram_freq);
+
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               if (dimm_ranks[dimm_num]) {
+                       cycle_time =
+                           get_tcyc(spd_read(iic0_dimm_addr[dimm_num], 9));
+                       debug("cycle_time=%d ps\n", cycle_time);
+
+                       if (cycle_time > (calc_cycle_time + 10)) {
+                               /*
+                                * the provided sdram cycle_time is too small
+                                * for the available DIMM cycle_time. The
+                                * additionnal 10ps is here to accept a small
+                                * incertainty.
+                                */
+                               printf
+                                   ("ERROR: DRAM DIMM detected with cycle_time %d ps in "
+                                    "slot %d \n while calculated cycle time is %d ps.\n",
+                                    (unsigned int)cycle_time,
+                                    (unsigned int)dimm_num,
+                                    (unsigned int)calc_cycle_time);
+                               printf
+                                   ("Replace the DIMM, or change DDR frequency via "
+                                    "strapping bits.\n\n");
+                               spd_ddr_init_hang();
+                       }
+               }
+       }
+}
+
+/*------------------------------------------------------------------
+ * This routine gets size information for the installed memory
+ * DIMMs.
+ *-----------------------------------------------------------------*/
+static void get_dimm_size(unsigned long dimm_ranks[],
+                         unsigned char const iic0_dimm_addr[],
+                         unsigned long num_dimm_banks,
+                         unsigned long *const rows,
+                         unsigned long *const banks,
+                         unsigned long *const cols, unsigned long *const width)
+{
+       unsigned long dimm_num;
+
+       *rows = 0;
+       *banks = 0;
+       *cols = 0;
+       *width = 0;
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long t;
+
+                       /* Rows */
+                       t = spd_read(iic0_dimm_addr[dimm_num], 3);
+                       if (0 == *rows) {
+                               *rows = t;
+                       } else if (t != *rows) {
+                               printf("ERROR: DRAM DIMM modules do not all "
+                                      "have the same number of rows.\n\n");
+                               spd_ddr_init_hang();
+                       }
+                       /* Banks */
+                       t = spd_read(iic0_dimm_addr[dimm_num], 17);
+                       if (0 == *banks) {
+                               *banks = t;
+                       } else if (t != *banks) {
+                               printf("ERROR: DRAM DIMM modules do not all "
+                                      "have the same number of banks.\n\n");
+                               spd_ddr_init_hang();
+                       }
+                       /* Columns */
+                       t = spd_read(iic0_dimm_addr[dimm_num], 4);
+                       if (0 == *cols) {
+                               *cols = t;
+                       } else if (t != *cols) {
+                               printf("ERROR: DRAM DIMM modules do not all "
+                                      "have the same number of columns.\n\n");
+                               spd_ddr_init_hang();
+                       }
+                       /* Data width */
+                       t = spd_read(iic0_dimm_addr[dimm_num], 6);
+                       if (0 == *width) {
+                               *width = t;
+                       } else if (t != *width) {
+                               printf("ERROR: DRAM DIMM modules do not all "
+                                      "have the same data width.\n\n");
+                               spd_ddr_init_hang();
+                       }
+               }
+       }
+       debug("Number of rows = %d\n", *rows);
+       debug("Number of columns = %d\n", *cols);
+       debug("Number of banks = %d\n", *banks);
+       debug("Data width = %d\n", *width);
+       if (*rows > 14) {
+               printf("ERROR: DRAM DIMM modules have %lu address rows.\n",
+                      *rows);
+               printf("Only modules with 14 or fewer rows are supported.\n\n");
+               spd_ddr_init_hang();
+       }
+       if (4 != *banks && 8 != *banks) {
+               printf("ERROR: DRAM DIMM modules have %lu banks.\n", *banks);
+               printf("Only modules with 4 or 8 banks are supported.\n\n");
+               spd_ddr_init_hang();
+       }
+       if (*cols > 12) {
+               printf("ERROR: DRAM DIMM modules have %lu address columns.\n",
+                      *cols);
+               printf("Only modules with 12 or fewer columns are "
+                      "supported.\n\n");
+               spd_ddr_init_hang();
+       }
+       if (32 != *width && 40 != *width && 64 != *width && 72 != *width) {
+               printf("ERROR: DRAM DIMM modules have a width of %lu bit.\n",
+                      *width);
+               printf("Only modules with widths of 32, 40, 64, and 72 bits "
+                      "are supported.\n\n");
+               spd_ddr_init_hang();
+       }
+}
+
+/*------------------------------------------------------------------
+ * Only 1.8V modules are supported.  This routine verifies this.
+ *-----------------------------------------------------------------*/
+static void check_voltage_type(unsigned long dimm_ranks[],
+                              unsigned char const iic0_dimm_addr[],
+                              unsigned long num_dimm_banks)
+{
+       unsigned long dimm_num;
+       unsigned long voltage_type;
+
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               if (dimm_ranks[dimm_num]) {
+                       voltage_type = spd_read(iic0_dimm_addr[dimm_num], 8);
+                       if (0x05 != voltage_type) {     /* 1.8V for DDR2 */
+                               printf("ERROR: Slot %lu provides 1.8V for DDR2 "
+                                      "DIMMs.\n", dimm_num);
+                               switch (voltage_type) {
+                               case 0x00:
+                                       printf("This DIMM is 5.0 Volt/TTL.\n");
+                                       break;
+                               case 0x01:
+                                       printf("This DIMM is LVTTL.\n");
+                                       break;
+                               case 0x02:
+                                       printf("This DIMM is 1.5 Volt.\n");
+                                       break;
+                               case 0x03:
+                                       printf("This DIMM is 3.3 Volt/TTL.\n");
+                                       break;
+                               case 0x04:
+                                       printf("This DIMM is 2.5 Volt.\n");
+                                       break;
+                               default:
+                                       printf("This DIMM is an unknown "
+                                              "voltage.\n");
+                                       break;
+                               }
+                               printf("Replace it with a 1.8V DDR2 DIMM.\n\n");
+                               spd_ddr_init_hang();
+                       }
+               }
+       }
+}
+
+static void program_ddr0_03(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq,
+                           unsigned long rows, unsigned long *cas_latency)
+{
+       unsigned long dimm_num;
+       unsigned long cas_index;
+       unsigned long cycle_2_0_clk;
+       unsigned long cycle_3_0_clk;
+       unsigned long cycle_4_0_clk;
+       unsigned long cycle_5_0_clk;
+       unsigned long max_2_0_tcyc_ps = 100;
+       unsigned long max_3_0_tcyc_ps = 100;
+       unsigned long max_4_0_tcyc_ps = 100;
+       unsigned long max_5_0_tcyc_ps = 100;
+       unsigned char cas_available = 0x3C;     /* value for DDR2 */
+       u32 ddr0_03 = DDR0_03_BSTLEN_ENCODE(0x2) | DDR0_03_INITAREF_ENCODE(0x2);
+       unsigned int const tcyc_addr[3] = { 9, 23, 25 };
+
+       /*------------------------------------------------------------------
+        * Get the board configuration info.
+        *-----------------------------------------------------------------*/
+       debug("sdram_freq = %d\n", sdram_freq);
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned char const cas_bit =
+                           spd_read(iic0_dimm_addr[dimm_num], 18);
+                       unsigned char cas_mask;
+
+                       cas_available &= cas_bit;
+                       for (cas_mask = 0x80; cas_mask; cas_mask >>= 1) {
+                               if (cas_bit & cas_mask)
+                                       break;
+                       }
+                       debug("cas_bit (SPD byte 18) = %02X, cas_mask = %02X\n",
+                             cas_bit, cas_mask);
+
+                       for (cas_index = 0; cas_index < 3;
+                            cas_mask >>= 1, cas_index++) {
+                               unsigned long cycle_time_ps;
+
+                               if (!(cas_available & cas_mask)) {
+                                       continue;
+                               }
+                               cycle_time_ps =
+                                   get_tcyc(spd_read(iic0_dimm_addr[dimm_num],
+                                                     tcyc_addr[cas_index]));
+
+                               debug("cas_index = %d: cycle_time_ps = %d\n",
+                                     cas_index, cycle_time_ps);
+                               /*
+                                * DDR2 devices use the following bitmask for CAS latency:
+                                *  Bit   7    6    5    4    3    2    1    0
+                                *       TBD  6.0  5.0  4.0  3.0  2.0  TBD  TBD
+                                */
+                               switch (cas_mask) {
+                               case 0x20:
+                                       max_5_0_tcyc_ps =
+                                           max(max_5_0_tcyc_ps, cycle_time_ps);
+                                       break;
+                               case 0x10:
+                                       max_4_0_tcyc_ps =
+                                           max(max_4_0_tcyc_ps, cycle_time_ps);
+                                       break;
+                               case 0x08:
+                                       max_3_0_tcyc_ps =
+                                           max(max_3_0_tcyc_ps, cycle_time_ps);
+                                       break;
+                               case 0x04:
+                                       max_2_0_tcyc_ps =
+                                           max(max_2_0_tcyc_ps, cycle_time_ps);
+                                       break;
+                               }
+                       }
+               }
+       }
+       debug("cas_available (bit map) = 0x%02X\n", cas_available);
+
+       /*------------------------------------------------------------------
+        * Set the SDRAM mode, SDRAM_MMODE
+        *-----------------------------------------------------------------*/
+
+       /* add 10 here because of rounding problems */
+       cycle_2_0_clk = MULDIV64(ONE_BILLION, 1000, max_2_0_tcyc_ps) + 10;
+       cycle_3_0_clk = MULDIV64(ONE_BILLION, 1000, max_3_0_tcyc_ps) + 10;
+       cycle_4_0_clk = MULDIV64(ONE_BILLION, 1000, max_4_0_tcyc_ps) + 10;
+       cycle_5_0_clk = MULDIV64(ONE_BILLION, 1000, max_5_0_tcyc_ps) + 10;
+       debug("cycle_2_0_clk = %d\n", cycle_2_0_clk);
+       debug("cycle_3_0_clk = %d\n", cycle_3_0_clk);
+       debug("cycle_4_0_clk = %d\n", cycle_4_0_clk);
+       debug("cycle_5_0_clk = %d\n", cycle_5_0_clk);
+
+       if ((cas_available & 0x04) && (sdram_freq <= cycle_2_0_clk)) {
+               *cas_latency = 2;
+               ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x2) |
+                   DDR0_03_CASLAT_LIN_ENCODE(0x4);
+       } else if ((cas_available & 0x08) && (sdram_freq <= cycle_3_0_clk)) {
+               *cas_latency = 3;
+               ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x3) |
+                   DDR0_03_CASLAT_LIN_ENCODE(0x6);
+       } else if ((cas_available & 0x10) && (sdram_freq <= cycle_4_0_clk)) {
+               *cas_latency = 4;
+               ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x4) |
+                   DDR0_03_CASLAT_LIN_ENCODE(0x8);
+       } else if ((cas_available & 0x20) && (sdram_freq <= cycle_5_0_clk)) {
+               *cas_latency = 5;
+               ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x5) |
+                   DDR0_03_CASLAT_LIN_ENCODE(0xA);
+       } else {
+               printf("ERROR: Cannot find a supported CAS latency with the "
+                      "installed DIMMs.\n");
+               printf("Only DDR2 DIMMs with CAS latencies of 2.0, 3.0, 4.0, "
+                      "and 5.0 are supported.\n");
+               printf("Make sure the PLB speed is within the supported range "
+                      "of the DIMMs.\n");
+               printf("sdram_freq=%d cycle2=%d cycle3=%d cycle4=%d "
+                      "cycle5=%d\n\n", sdram_freq, cycle_2_0_clk,
+                      cycle_3_0_clk, cycle_4_0_clk, cycle_5_0_clk);
+               spd_ddr_init_hang();
+       }
+       debug("CAS latency = %d\n", *cas_latency);
+       mtsdram(DDR0_03, ddr0_03);
+}
+
+static void program_ddr0_04(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq)
+{
+       unsigned long dimm_num;
+       unsigned long t_rc_ps = 0;
+       unsigned long t_rrd_ps = 0;
+       unsigned long t_rtp_ps = 0;
+       unsigned long t_rc_clk;
+       unsigned long t_rrd_clk;
+       unsigned long t_rtp_clk;
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long ps;
+
+                       /* tRC */
+                       ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 41);
+                       switch (spd_read(iic0_dimm_addr[dimm_num], 40) >> 4) {
+                       case 0x1:
+                               ps += 250;
+                               break;
+                       case 0x2:
+                               ps += 333;
+                               break;
+                       case 0x3:
+                               ps += 500;
+                               break;
+                       case 0x4:
+                               ps += 667;
+                               break;
+                       case 0x5:
+                               ps += 750;
+                               break;
+                       }
+                       t_rc_ps = max(t_rc_ps, ps);
+                       /* tRRD */
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 28);
+                       t_rrd_ps = max(t_rrd_ps, ps);
+                       /* tRTP */
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 38);
+                       t_rtp_ps = max(t_rtp_ps, ps);
+               }
+       }
+       debug("t_rc_ps  = %d\n", t_rc_ps);
+       t_rc_clk = (MULDIV64(sdram_freq, t_rc_ps, ONE_BILLION) + 999) / 1000;
+       debug("t_rrd_ps = %d\n", t_rrd_ps);
+       t_rrd_clk = (MULDIV64(sdram_freq, t_rrd_ps, ONE_BILLION) + 999) / 1000;
+       debug("t_rtp_ps = %d\n", t_rtp_ps);
+       t_rtp_clk = (MULDIV64(sdram_freq, t_rtp_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_04, DDR0_04_TRC_ENCODE(t_rc_clk) |
+               DDR0_04_TRRD_ENCODE(t_rrd_clk) |
+               DDR0_04_TRTP_ENCODE(t_rtp_clk));
+}
+
+static void program_ddr0_05(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq)
+{
+       unsigned long dimm_num;
+       unsigned long t_rp_ps = 0;
+       unsigned long t_ras_ps = 0;
+       unsigned long t_rp_clk;
+       unsigned long t_ras_clk;
+       u32 ddr0_05 = DDR0_05_TMRD_ENCODE(0x2) | DDR0_05_TEMRS_ENCODE(0x2);
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long ps;
+
+                       /* tRP */
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 27);
+                       t_rp_ps = max(t_rp_ps, ps);
+                       /* tRAS */
+                       ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 30);
+                       t_ras_ps = max(t_ras_ps, ps);
+               }
+       }
+       debug("t_rp_ps  = %d\n", t_rp_ps);
+       t_rp_clk = (MULDIV64(sdram_freq, t_rp_ps, ONE_BILLION) + 999) / 1000;
+       debug("t_ras_ps = %d\n", t_ras_ps);
+       t_ras_clk = (MULDIV64(sdram_freq, t_ras_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_05, ddr0_05 | DDR0_05_TRP_ENCODE(t_rp_clk) |
+               DDR0_05_TRAS_MIN_ENCODE(t_ras_clk));
+}
+
+static void program_ddr0_06(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq)
+{
+       unsigned long dimm_num;
+       unsigned char spd_40;
+       unsigned long t_wtr_ps = 0;
+       unsigned long t_rfc_ps = 0;
+       unsigned long t_wtr_clk;
+       unsigned long t_rfc_clk;
+       u32 ddr0_06 =
+           DDR0_06_WRITEINTERP_ENCODE(0x1) | DDR0_06_TDLL_ENCODE(200);
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long ps;
+
+                       /* tWTR */
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 37);
+                       t_wtr_ps = max(t_wtr_ps, ps);
+                       /* tRFC */
+                       ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 42);
+                       spd_40 = spd_read(iic0_dimm_addr[dimm_num], 40);
+                       ps += 256000 * (spd_40 & 0x01);
+                       switch ((spd_40 & 0x0E) >> 1) {
+                       case 0x1:
+                               ps += 250;
+                               break;
+                       case 0x2:
+                               ps += 333;
+                               break;
+                       case 0x3:
+                               ps += 500;
+                               break;
+                       case 0x4:
+                               ps += 667;
+                               break;
+                       case 0x5:
+                               ps += 750;
+                               break;
+                       }
+                       t_rfc_ps = max(t_rfc_ps, ps);
+               }
+       }
+       debug("t_wtr_ps = %d\n", t_wtr_ps);
+       t_wtr_clk = (MULDIV64(sdram_freq, t_wtr_ps, ONE_BILLION) + 999) / 1000;
+       debug("t_rfc_ps = %d\n", t_rfc_ps);
+       t_rfc_clk = (MULDIV64(sdram_freq, t_rfc_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_06, ddr0_06 | DDR0_06_TWTR_ENCODE(t_wtr_clk) |
+               DDR0_06_TRFC_ENCODE(t_rfc_clk));
+}
+
+static void program_ddr0_10(unsigned long dimm_ranks[], unsigned long ranks)
+{
+       unsigned long csmap;
+
+       if (2 == ranks) {
+               /* Both chip selects in use */
+               csmap = 0x03;
+       } else {
+               /* One chip select in use */
+               csmap = (1 == dimm_ranks[0]) ? 0x1 : 0x2;
+       }
+       mtsdram(DDR0_10, DDR0_10_WRITE_MODEREG_ENCODE(0x0) |
+               DDR0_10_CS_MAP_ENCODE(csmap) |
+               DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(0));
+}
+
+static void program_ddr0_11(unsigned long sdram_freq)
+{
+       unsigned long const t_xsnr_ps = 200000; /* 200 ns */
+       unsigned long t_xsnr_clk;
+
+       debug("t_xsnr_ps = %d\n", t_xsnr_ps);
+       t_xsnr_clk =
+           (MULDIV64(sdram_freq, t_xsnr_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_11, DDR0_11_SREFRESH_ENCODE(0) |
+               DDR0_11_TXSNR_ENCODE(t_xsnr_clk) | DDR0_11_TXSR_ENCODE(200));
+}
+
+static void program_ddr0_22(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks, unsigned long width)
+{
+#if defined(CONFIG_DDR_ECC)
+       unsigned long dimm_num;
+       unsigned long ecc_available = width >= 64;
+       u32 ddr0_22 = DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(0x26) |
+           DDR0_22_DQS_OUT_SHIFT_ENCODE(DQS_OUT_SHIFT) |
+           DDR0_22_DLL_DQS_BYPASS_8_ENCODE(DLL_DQS_BYPASS);
+
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       /* Check for ECC */
+                       if (0 == (spd_read(iic0_dimm_addr[dimm_num], 11) &
+                                 0x02)) {
+                               ecc_available = FALSE;
+                       }
+               }
+       }
+       if (ecc_available) {
+               debug("ECC found on all DIMMs present\n");
+               mtsdram(DDR0_22, ddr0_22 | DDR0_22_CTRL_RAW_ENCODE(0x3));
+       } else {
+               debug("ECC not found on some or all DIMMs present\n");
+               mtsdram(DDR0_22, ddr0_22 | DDR0_22_CTRL_RAW_ENCODE(0x0));
+       }
+#else
+       mtsdram(DDR0_22, DDR0_22_CTRL_RAW_ENCODE(0x0) |
+               DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(0x26) |
+               DDR0_22_DQS_OUT_SHIFT_ENCODE(DQS_OUT_SHIFT) |
+               DDR0_22_DLL_DQS_BYPASS_8_ENCODE(DLL_DQS_BYPASS));
+#endif /* defined(CONFIG_DDR_ECC) */
+}
+
+static void program_ddr0_24(unsigned long ranks)
+{
+       u32 ddr0_24 = DDR0_24_RTT_PAD_TERMINATION_ENCODE(0x1) | /* 75 ohm */
+           DDR0_24_ODT_RD_MAP_CS1_ENCODE(0x0);
+
+       if (2 == ranks) {
+               /* Both chip selects in use */
+               ddr0_24 |= DDR0_24_ODT_WR_MAP_CS1_ENCODE(0x1) |
+                   DDR0_24_ODT_WR_MAP_CS0_ENCODE(0x2);
+       } else {
+               /* One chip select in use */
+               /* One of the two fields added to ddr0_24 is a "don't care" */
+               ddr0_24 |= DDR0_24_ODT_WR_MAP_CS1_ENCODE(0x2) |
+                   DDR0_24_ODT_WR_MAP_CS0_ENCODE(0x1);
+       }
+       mtsdram(DDR0_24, ddr0_24);
+}
+
+static void program_ddr0_26(unsigned long sdram_freq)
+{
+       unsigned long const t_ref_ps = 7800000; /* 7.8 us. refresh */
+       /* TODO: check definition of tRAS_MAX */
+       unsigned long const t_ras_max_ps = 9 * t_ref_ps;
+       unsigned long t_ras_max_clk;
+       unsigned long t_ref_clk;
+
+       /* Round down t_ras_max_clk and t_ref_clk */
+       debug("t_ras_max_ps = %d\n", t_ras_max_ps);
+       t_ras_max_clk = MULDIV64(sdram_freq, t_ras_max_ps, ONE_BILLION) / 1000;
+       debug("t_ref_ps     = %d\n", t_ref_ps);
+       t_ref_clk = MULDIV64(sdram_freq, t_ref_ps, ONE_BILLION) / 1000;
+       mtsdram(DDR0_26, DDR0_26_TRAS_MAX_ENCODE(t_ras_max_clk) |
+               DDR0_26_TREF_ENCODE(t_ref_clk));
+}
+
+static void program_ddr0_27(unsigned long sdram_freq)
+{
+       unsigned long const t_init_ps = 200000000;      /* 200 us. init */
+       unsigned long t_init_clk;
+
+       debug("t_init_ps = %d\n", t_init_ps);
+       t_init_clk =
+           (MULDIV64(sdram_freq, t_init_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_27, DDR0_27_EMRS_DATA_ENCODE(0x0000) |
+               DDR0_27_TINIT_ENCODE(t_init_clk));
+}
+
+static void program_ddr0_43(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq,
+                           unsigned long cols, unsigned long banks)
+{
+       unsigned long dimm_num;
+       unsigned long t_wr_ps = 0;
+       unsigned long t_wr_clk;
+       u32 ddr0_43 = DDR0_43_APREBIT_ENCODE(10) |
+           DDR0_43_COLUMN_SIZE_ENCODE(12 - cols) |
+           DDR0_43_EIGHT_BANK_MODE_ENCODE(8 == banks ? 1 : 0);
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long ps;
+
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 36);
+                       t_wr_ps = max(t_wr_ps, ps);
+               }
+       }
+       debug("t_wr_ps = %d\n", t_wr_ps);
+       t_wr_clk = (MULDIV64(sdram_freq, t_wr_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_43, ddr0_43 | DDR0_43_TWR_ENCODE(t_wr_clk));
+}
+
+static void program_ddr0_44(unsigned long dimm_ranks[],
+                           unsigned char const iic0_dimm_addr[],
+                           unsigned long num_dimm_banks,
+                           unsigned long sdram_freq)
+{
+       unsigned long dimm_num;
+       unsigned long t_rcd_ps = 0;
+       unsigned long t_rcd_clk;
+
+       /*------------------------------------------------------------------
+        * Handle the timing.  We need to find the worst case timing of all
+        * the dimm modules installed.
+        *-----------------------------------------------------------------*/
+       /* loop through all the DIMM slots on the board */
+       for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
+               /* If a dimm is installed in a particular slot ... */
+               if (dimm_ranks[dimm_num]) {
+                       unsigned long ps;
+
+                       ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 29);
+                       t_rcd_ps = max(t_rcd_ps, ps);
+               }
+       }
+       debug("t_rcd_ps = %d\n", t_rcd_ps);
+       t_rcd_clk = (MULDIV64(sdram_freq, t_rcd_ps, ONE_BILLION) + 999) / 1000;
+       mtsdram(DDR0_44, DDR0_44_TRCD_ENCODE(t_rcd_clk));
+}
+
+/*-----------------------------------------------------------------------------+
+ * initdram.  Initializes the 440EPx/GPx DDR SDRAM controller.
+ * Note: This routine runs from flash with a stack set up in the chip's
+ * sram space.  It is important that the routine does not require .sbss, .bss or
+ * .data sections.  It also cannot call routines that require these sections.
+ *-----------------------------------------------------------------------------*/
+/*-----------------------------------------------------------------------------
+ * Function:    initdram
+ * Description:  Configures SDRAM memory banks for DDR operation.
+ *              Auto Memory Configuration option reads the DDR SDRAM EEPROMs
+ *              via the IIC bus and then configures the DDR SDRAM memory
+ *              banks appropriately. If Auto Memory Configuration is
+ *              not used, it is assumed that no DIMM is plugged
+ *-----------------------------------------------------------------------------*/
+long int initdram(int board_type)
+{
+       unsigned char const iic0_dimm_addr[] = SPD_EEPROM_ADDRESS;
+       unsigned long dimm_ranks[MAXDIMMS];
+       unsigned long ranks;
+       unsigned long rows;
+       unsigned long banks;
+       unsigned long cols;
+       unsigned long width;
+       unsigned long const sdram_freq = get_bus_freq(0);
+       unsigned long const num_dimm_banks = sizeof(iic0_dimm_addr);    /* on board dimm banks */
+       unsigned long cas_latency = 0;  /* to quiet initialization warning */
+       unsigned long dram_size;
+
+       debug("\nEntering initdram()\n");
+
+       /*------------------------------------------------------------------
+        * Stop the DDR-SDRAM controller.
+        *-----------------------------------------------------------------*/
+       mtsdram(DDR0_02, DDR0_02_START_ENCODE(0));
+
+       /*
+        * Make sure I2C controller is initialized
+        * before continuing.
+        */
+       /* switch to correct I2C bus */
+       I2C_SET_BUS(CFG_SPD_BUS_NUM);
+       i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);
+
+       /*------------------------------------------------------------------
+        * Clear out the serial presence detect buffers.
+        * Perform IIC reads from the dimm.  Fill in the spds.
+        * Check to see if the dimm slots are populated
+        *-----------------------------------------------------------------*/
+       get_spd_info(dimm_ranks, &ranks, iic0_dimm_addr, num_dimm_banks);
+
+       /*------------------------------------------------------------------
+        * Check the frequency supported for the dimms plugged.
+        *-----------------------------------------------------------------*/
+       check_frequency(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
+
+       /*------------------------------------------------------------------
+        * Check and get size information.
+        *-----------------------------------------------------------------*/
+       get_dimm_size(dimm_ranks, iic0_dimm_addr, num_dimm_banks, &rows, &banks,
+                     &cols, &width);
+
+       /*------------------------------------------------------------------
+        * Check the voltage type for the dimms plugged.
+        *-----------------------------------------------------------------*/
+       check_voltage_type(dimm_ranks, iic0_dimm_addr, num_dimm_banks);
+
+       /*------------------------------------------------------------------
+        * Program registers for SDRAM controller.
+        *-----------------------------------------------------------------*/
+       mtsdram(DDR0_00, DDR0_00_DLL_INCREMENT_ENCODE(0x19) |
+               DDR0_00_DLL_START_POINT_DECODE(0x0A));
+
+       mtsdram(DDR0_01, DDR0_01_PLB0_DB_CS_LOWER_ENCODE(0x01) |
+               DDR0_01_PLB0_DB_CS_UPPER_ENCODE(0x00) |
+               DDR0_01_INT_MASK_ENCODE(0xFF));
+
+       program_ddr0_03(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq,
+                       rows, &cas_latency);
+
+       program_ddr0_04(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
+
+       program_ddr0_05(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
+
+       program_ddr0_06(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
+
+       /*------------------------------------------------------------------
+        * TODO: tFAW not found in SPD.  Value of 13 taken from Sequoia
+        * board SDRAM, but may be overly concervate.
+        *-----------------------------------------------------------------*/
+       mtsdram(DDR0_07, DDR0_07_NO_CMD_INIT_ENCODE(0) |
+               DDR0_07_TFAW_ENCODE(13) |
+               DDR0_07_AUTO_REFRESH_MODE_ENCODE(1) |
+               DDR0_07_AREFRESH_ENCODE(0));
+
+       mtsdram(DDR0_08, DDR0_08_WRLAT_ENCODE(cas_latency - 1) |
+               DDR0_08_TCPD_ENCODE(200) | DDR0_08_DQS_N_EN_ENCODE(0) |
+               DDR0_08_DDRII_ENCODE(1));
+
+       mtsdram(DDR0_09, DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(0x00) |
+               DDR0_09_RTT_0_ENCODE(0x1) |
+               DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(0x1D) |
+               DDR0_09_WR_DQS_SHIFT_ENCODE(DQS_OUT_SHIFT - 0x20));
+
+       program_ddr0_10(dimm_ranks, ranks);
+
+       program_ddr0_11(sdram_freq);
+
+       mtsdram(DDR0_12, DDR0_12_TCKE_ENCODE(3));
+
+       mtsdram(DDR0_14, DDR0_14_DLL_BYPASS_MODE_ENCODE(0) |
+               DDR0_14_REDUC_ENCODE(width <= 40 ? 1 : 0) |
+               DDR0_14_REG_DIMM_ENABLE_ENCODE(0));
+
+       mtsdram(DDR0_17, DDR0_17_DLL_DQS_DELAY_0_ENCODE(DLL_DQS_DELAY));
+
+       mtsdram(DDR0_18, DDR0_18_DLL_DQS_DELAY_4_ENCODE(DLL_DQS_DELAY) |
+               DDR0_18_DLL_DQS_DELAY_3_ENCODE(DLL_DQS_DELAY) |
+               DDR0_18_DLL_DQS_DELAY_2_ENCODE(DLL_DQS_DELAY) |
+               DDR0_18_DLL_DQS_DELAY_1_ENCODE(DLL_DQS_DELAY));
+
+       mtsdram(DDR0_19, DDR0_19_DLL_DQS_DELAY_8_ENCODE(DLL_DQS_DELAY) |
+               DDR0_19_DLL_DQS_DELAY_7_ENCODE(DLL_DQS_DELAY) |
+               DDR0_19_DLL_DQS_DELAY_6_ENCODE(DLL_DQS_DELAY) |
+               DDR0_19_DLL_DQS_DELAY_5_ENCODE(DLL_DQS_DELAY));
+
+       mtsdram(DDR0_20, DDR0_20_DLL_DQS_BYPASS_3_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_20_DLL_DQS_BYPASS_2_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_20_DLL_DQS_BYPASS_1_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_20_DLL_DQS_BYPASS_0_ENCODE(DLL_DQS_BYPASS));
+
+       mtsdram(DDR0_21, DDR0_21_DLL_DQS_BYPASS_7_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_21_DLL_DQS_BYPASS_6_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_21_DLL_DQS_BYPASS_5_ENCODE(DLL_DQS_BYPASS) |
+               DDR0_21_DLL_DQS_BYPASS_4_ENCODE(DLL_DQS_BYPASS));
+
+       program_ddr0_22(dimm_ranks, iic0_dimm_addr, num_dimm_banks, width);
+
+       mtsdram(DDR0_23, DDR0_23_ODT_RD_MAP_CS0_ENCODE(0x0) |
+               DDR0_23_FWC_ENCODE(0));
+
+       program_ddr0_24(ranks);
+
+       program_ddr0_26(sdram_freq);
+
+       program_ddr0_27(sdram_freq);
+
+       mtsdram(DDR0_28, DDR0_28_EMRS3_DATA_ENCODE(0x0000) |
+               DDR0_28_EMRS2_DATA_ENCODE(0x0000));
+
+       mtsdram(DDR0_31, DDR0_31_XOR_CHECK_BITS_ENCODE(0x0000));
+
+       mtsdram(DDR0_42, DDR0_42_ADDR_PINS_DECODE(14 - rows) |
+               DDR0_42_CASLAT_LIN_GATE_ENCODE(2 * cas_latency));
+
+       program_ddr0_43(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq,
+                       cols, banks);
+
+       program_ddr0_44(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
+
+       denali_sdram_register_dump();
+
+       dram_size = (width >= 64) ? 8 : 4;
+       dram_size *= 1 << cols;
+       dram_size *= banks;
+       dram_size *= 1 << rows;
+       dram_size *= ranks;
+       debug("dram_size = %lu\n", dram_size);
+
+       /* Start the SDRAM controler */
+       mtsdram(DDR0_02, DDR0_02_START_ENCODE(1));
+       denali_wait_for_dlllock();
+
+#if defined(CONFIG_DDR_DATA_EYE)
+       /* -----------------------------------------------------------+
+        * Perform data eye search if requested.
+        * ----------------------------------------------------------*/
+       program_tlb(0, CFG_SDRAM_BASE, dram_size, TLB_WORD2_I_ENABLE);
+       denali_core_search_data_eye();
+       denali_sdram_register_dump();
+       remove_tlb(CFG_SDRAM_BASE, dram_size);
+#endif
+
+#if defined(CONFIG_ZERO_SDRAM) || defined(CONFIG_DDR_ECC)
+       program_tlb(0, CFG_SDRAM_BASE, dram_size, 0);
+       sync();
+       eieio();
+       /* Zero the memory */
+       debug("Zeroing SDRAM...");
+       dcbz_area(CFG_SDRAM_BASE, dram_size);
+       dflush();
+       debug("Completed\n");
+       sync();
+       eieio();
+       remove_tlb(CFG_SDRAM_BASE, dram_size);
+
+#if defined(CONFIG_DDR_ECC)
+       /*
+        * If ECC is enabled, clear and enable interrupts
+        */
+       if (is_ecc_enabled()) {
+               u32 val;
+
+               sync();
+               eieio();
+               /* Clear error status */
+               mfsdram(DDR0_00, val);
+               mtsdram(DDR0_00, val | DDR0_00_INT_ACK_ALL);
+               /* Set 'int_mask' parameter to functionnal value */
+               mfsdram(DDR0_01, val);
+               mtsdram(DDR0_01, (val & ~DDR0_01_INT_MASK_MASK) |
+                       DDR0_01_INT_MASK_ALL_OFF);
+#if defined(CONFIG_DDR_DATA_EYE)
+               /*
+                * Running denali_core_search_data_eye() when ECC is enabled
+                * causes non-ECC machine checks.  This clears them.
+                */
+               print_mcsr();
+               mtspr(SPRN_MCSR, mfspr(SPRN_MCSR));
+               print_mcsr();
+#endif
+               sync();
+               eieio();
+       }
+#endif /* defined(CONFIG_DDR_ECC) */
+#endif /* defined(CONFIG_ZERO_SDRAM) || defined(CONFIG_DDR_ECC) */
+
+       program_tlb(0, CFG_SDRAM_BASE, dram_size, MY_TLB_WORD2_I_ENABLE);
+       return dram_size;
+}
+
+void board_add_ram_info(int use_default)
+{
+       u32 val;
+
+       printf(" (ECC");
+       if (!is_ecc_enabled()) {
+               printf(" not");
+       }
+       printf(" enabled, %d MHz", (2 * get_bus_freq(0)) / 1000000);
+
+       mfsdram(DDR0_03, val);
+       printf(", CL%d)", DDR0_03_CASLAT_LIN_DECODE(val) >> 1);
+}
+#endif /* CONFIG_SPD_EEPROM */
diff --git a/cpu/ppc4xx/fdt.c b/cpu/ppc4xx/fdt.c
new file mode 100644 (file)
index 0000000..afcb974
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <command.h>
+#include <asm/cache.h>
+#include <ppc4xx.h>
+
+#if defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#include <libfdt_env.h>
+#include <fdt_support.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void ft_cpu_setup(void *blob, bd_t *bd)
+{
+       sys_info_t sys_info;
+
+       get_sys_info(&sys_info);
+
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, "timebase-frequency",
+                            bd->bi_intfreq, 1);
+       do_fixup_by_prop_u32(blob, "device_type", "cpu", 4, "clock-frequency",
+                            bd->bi_intfreq, 1);
+       do_fixup_by_path_u32(blob, "/plb", "clock-frequency", sys_info.freqPLB, 1);
+       do_fixup_by_path_u32(blob, "/plb/opb", "clock-frequency", sys_info.freqOPB, 1);
+       do_fixup_by_path_u32(blob, "/plb/opb/ebc", "clock-frequency",
+                            sys_info.freqEBC, 1);
+       fdt_fixup_memory(blob, (u64)bd->bi_memstart, (u64)bd->bi_memsize);
+
+       /*
+        * Setup all baudrates for the UARTs
+        */
+       do_fixup_by_compat_u32(blob, "ns16550", "clock-frequency", gd->uart_clk, 1);
+
+       /*
+        * Fixup all ethernet nodes
+        * Note: aliases in the dts are required for this
+        */
+       fdt_fixup_ethernet(blob, bd);
+}
+#endif /* CONFIG_OF_LIBFDT */
index 50f2fdf1139cfbbb049fd7377a66de187d175bf8..37d3fa8ef74652e7477be0600cde41e4d12a6257 100644 (file)
@@ -26,8 +26,8 @@
 #include <asm/io.h>
 #include <asm/gpio.h>
 
-#if defined(CFG_440_GPIO_TABLE)
-gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX] = CFG_440_GPIO_TABLE;
+#if defined(CFG_4xx_GPIO_TABLE)
+gpio_param_s const gpio_tab[GPIO_GROUP_MAX][GPIO_MAX] = CFG_4xx_GPIO_TABLE;
 #endif
 
 #if defined(GPIO0_OSRL)
@@ -47,7 +47,7 @@ void gpio_config(int pin, int in_out, int gpio_alt, int out_val)
        }
 
        if (pin >= GPIO_MAX/2) {
-               offs2 = 0x100;
+               offs2 = 0x4;
                pin2 = (pin - GPIO_MAX/2) << 1;
        }
 
@@ -55,10 +55,10 @@ void gpio_config(int pin, int in_out, int gpio_alt, int out_val)
        mask2 = 0xc0000000 >> (pin2 << 1);
 
        /* first set TCR to 0 */
-       out32(GPIO0_TCR + offs, in32(GPIO0_TCR + offs) & ~mask);
+       out_be32((void *)GPIO0_TCR + offs, in_be32((void *)GPIO0_TCR + offs) & ~mask);
 
        if (in_out == GPIO_OUT) {
-               val = in32(GPIO0_OSRL + offs + offs2) & ~mask2;
+               val = in_be32((void *)GPIO0_OSRL + offs + offs2) & ~mask2;
                switch (gpio_alt) {
                case GPIO_ALT1:
                        val |= GPIO_ALT1_SEL >> pin2;
@@ -70,20 +70,23 @@ void gpio_config(int pin, int in_out, int gpio_alt, int out_val)
                        val |= GPIO_ALT3_SEL >> pin2;
                        break;
                }
-               out32(GPIO0_OSRL + offs + offs2, val);
+               out_be32((void *)GPIO0_OSRL + offs + offs2, val);
 
                /* setup requested output value */
                if (out_val == GPIO_OUT_0)
-                       out32(GPIO0_OR + offs, in32(GPIO0_OR + offs) & ~mask);
+                       out_be32((void *)GPIO0_OR + offs,
+                                in_be32((void *)GPIO0_OR + offs) & ~mask);
                else if (out_val == GPIO_OUT_1)
-                       out32(GPIO0_OR + offs, in32(GPIO0_OR + offs) | mask);
+                       out_be32((void *)GPIO0_OR + offs,
+                                in_be32((void *)GPIO0_OR + offs) | mask);
 
                /* now configure TCR to drive output if selected */
-               out32(GPIO0_TCR + offs, in32(GPIO0_TCR + offs) | mask);
+               out_be32((void *)GPIO0_TCR + offs,
+                        in_be32((void *)GPIO0_TCR + offs) | mask);
        } else {
-               val = in32(GPIO0_ISR1L + offs + offs2) & ~mask2;
+               val = in_be32((void *)GPIO0_ISR1L + offs + offs2) & ~mask2;
                val |= GPIO_IN_SEL >> pin2;
-               out32(GPIO0_ISR1L + offs + offs2, val);
+               out_be32((void *)GPIO0_ISR1L + offs + offs2, val);
        }
 }
 #endif /* GPIO_OSRL */
@@ -98,9 +101,11 @@ void gpio_write_bit(int pin, int val)
        }
 
        if (val)
-               out32(GPIO0_OR + offs, in32(GPIO0_OR + offs) | GPIO_VAL(pin));
+               out_be32((void *)GPIO0_OR + offs,
+                        in_be32((void *)GPIO0_OR + offs) | GPIO_VAL(pin));
        else
-               out32(GPIO0_OR + offs, in32(GPIO0_OR + offs) & ~GPIO_VAL(pin));
+               out_be32((void *)GPIO0_OR + offs,
+                        in_be32((void *)GPIO0_OR + offs) & ~GPIO_VAL(pin));
 }
 
 int gpio_read_out_bit(int pin)
@@ -112,10 +117,22 @@ int gpio_read_out_bit(int pin)
                pin -= GPIO_MAX;
        }
 
-       return (in32(GPIO0_OR + offs) & GPIO_VAL(pin) ? 1 : 0);
+       return (in_be32((void *)GPIO0_OR + offs) & GPIO_VAL(pin) ? 1 : 0);
 }
 
-#if defined(CFG_440_GPIO_TABLE)
+int gpio_read_in_bit(int pin)
+{
+       u32 offs = 0;
+
+       if (pin >= GPIO_MAX) {
+               offs = 0x100;
+               pin -= GPIO_MAX;
+       }
+
+       return (in_be32((void *)GPIO0_IR + offs) & GPIO_VAL(pin) ? 1 : 0);
+}
+
+#if defined(CFG_4xx_GPIO_TABLE)
 void gpio_set_chip_configuration(void)
 {
        unsigned char i=0, j=0, offs=0, gpio_core;
@@ -141,24 +158,24 @@ void gpio_set_chip_configuration(void)
                                        break;
 
                                case GPIO_ALT1:
-                                       reg = in32(GPIO_IS1(core_add+offs))
+                                       reg = in_be32((void *)GPIO_IS1(core_add+offs))
                                                & ~(GPIO_MASK >> (j*2));
                                        reg = reg | (GPIO_IN_SEL >> (j*2));
-                                       out32(GPIO_IS1(core_add+offs), reg);
+                                       out_be32((void *)GPIO_IS1(core_add+offs), reg);
                                        break;
 
                                case GPIO_ALT2:
-                                       reg = in32(GPIO_IS2(core_add+offs))
+                                       reg = in_be32((void *)GPIO_IS2(core_add+offs))
                                                & ~(GPIO_MASK >> (j*2));
                                        reg = reg | (GPIO_IN_SEL >> (j*2));
-                                       out32(GPIO_IS2(core_add+offs), reg);
+                                       out_be32((void *)GPIO_IS2(core_add+offs), reg);
                                        break;
 
                                case GPIO_ALT3:
-                                       reg = in32(GPIO_IS3(core_add+offs))
+                                       reg = in_be32((void *)GPIO_IS3(core_add+offs))
                                                & ~(GPIO_MASK >> (j*2));
                                        reg = reg | (GPIO_IN_SEL >> (j*2));
-                                       out32(GPIO_IS3(core_add+offs), reg);
+                                       out_be32((void *)GPIO_IS3(core_add+offs), reg);
                                        break;
                                }
                        }
@@ -166,89 +183,73 @@ void gpio_set_chip_configuration(void)
                        if ((gpio_tab[gpio_core][i].in_out == GPIO_OUT) ||
                            (gpio_tab[gpio_core][i].in_out == GPIO_BI)) {
 
+                               u32 gpio_alt_sel = 0;
+
                                switch (gpio_tab[gpio_core][i].alt_nb) {
                                case GPIO_SEL:
-                                       if (gpio_core == GPIO0) {
-                                               /*
-                                                * Setup output value
-                                                * 1 -> high level
-                                                * 0 -> low level
-                                                * else -> don't touch
-                                                */
-                                               reg = in32(GPIO0_OR);
-                                               if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_1)
-                                                       reg |= (0x80000000 >> (i));
-                                               else if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_0)
-                                                       reg &= ~(0x80000000 >> (i));
-                                               out32(GPIO0_OR, reg);
-
-                                               reg = in32(GPIO0_TCR) | (0x80000000 >> (i));
-                                               out32(GPIO0_TCR, reg);
-                                       }
-
-#ifdef GPIO1
-                                       if (gpio_core == GPIO1) {
-                                               /*
-                                                * Setup output value
-                                                * 1 -> high level
-                                                * 0 -> low level
-                                                * else -> don't touch
-                                                */
-                                               reg = in32(GPIO1_OR);
-                                               if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_1)
-                                                       reg |= (0x80000000 >> (i));
-                                               else if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_0)
-                                                       reg &= ~(0x80000000 >> (i));
-                                               out32(GPIO1_OR, reg);
-
-                                               reg = in32(GPIO1_TCR) | (0x80000000 >> (i));
-                                               out32(GPIO1_TCR, reg);
-                                       }
-#endif /* GPIO1 */
-
-                                       reg = in32(GPIO_OS(core_add+offs))
+                                       /*
+                                        * Setup output value
+                                        * 1 -> high level
+                                        * 0 -> low level
+                                        * else -> don't touch
+                                        */
+                                       reg = in_be32((void *)GPIO_OR(core_add));
+                                       if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_1)
+                                               reg |= (0x80000000 >> (i));
+                                       else if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_0)
+                                               reg &= ~(0x80000000 >> (i));
+                                       out_be32((void *)GPIO_OR(core_add), reg);
+
+                                       reg = in_be32((void *)GPIO_TCR(core_add)) |
+                                               (0x80000000 >> (i));
+                                       out_be32((void *)GPIO_TCR(core_add), reg);
+
+                                       reg = in_be32((void *)GPIO_OS(core_add+offs))
                                                & ~(GPIO_MASK >> (j*2));
-                                       out32(GPIO_OS(core_add+offs), reg);
-                                       reg = in32(GPIO_TS(core_add+offs))
+                                       out_be32((void *)GPIO_OS(core_add+offs), reg);
+                                       reg = in_be32((void *)GPIO_TS(core_add+offs))
                                                & ~(GPIO_MASK >> (j*2));
-                                       out32(GPIO_TS(core_add+offs), reg);
+                                       out_be32((void *)GPIO_TS(core_add+offs), reg);
                                        break;
 
                                case GPIO_ALT1:
-                                       reg = in32(GPIO_OS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT1_SEL >> (j*2));
-                                       out32(GPIO_OS(core_add+offs), reg);
-                                       reg = in32(GPIO_TS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT1_SEL >> (j*2));
-                                       out32(GPIO_TS(core_add+offs), reg);
+                                       gpio_alt_sel = GPIO_ALT1_SEL;
                                        break;
 
                                case GPIO_ALT2:
-                                       reg = in32(GPIO_OS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT2_SEL >> (j*2));
-                                       out32(GPIO_OS(core_add+offs), reg);
-                                       reg = in32(GPIO_TS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT2_SEL >> (j*2));
-                                       out32(GPIO_TS(core_add+offs), reg);
+                                       gpio_alt_sel = GPIO_ALT2_SEL;
                                        break;
 
                                case GPIO_ALT3:
-                                       reg = in32(GPIO_OS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT3_SEL >> (j*2));
-                                       out32(GPIO_OS(core_add+offs), reg);
-                                       reg = in32(GPIO_TS(core_add+offs))
-                                               & ~(GPIO_MASK >> (j*2));
-                                       reg = reg | (GPIO_ALT3_SEL >> (j*2));
-                                       out32(GPIO_TS(core_add+offs), reg);
+                                       gpio_alt_sel = GPIO_ALT3_SEL;
                                        break;
                                }
+
+                               if (0 != gpio_alt_sel) {
+                                       reg = in_be32((void *)GPIO_OS(core_add+offs))
+                                               & ~(GPIO_MASK >> (j*2));
+                                       reg = reg | (gpio_alt_sel >> (j*2));
+                                       out_be32((void *)GPIO_OS(core_add+offs), reg);
+
+                                       if (gpio_tab[gpio_core][i].out_val == GPIO_OUT_1) {
+                                               reg = in_be32((void *)GPIO_TCR(core_add))
+                                                       | (0x80000000 >> (i));
+                                               out_be32((void *)GPIO_TCR(core_add), reg);
+                                               reg = in_be32((void *)GPIO_TS(core_add+offs))
+                                                       & ~(GPIO_MASK >> (j*2));
+                                               out_be32((void *)GPIO_TS(core_add+offs), reg);
+                                       } else {
+                                               reg = in_be32((void *)GPIO_TCR(core_add))
+                                                       & ~(0x80000000 >> (i));
+                                               out_be32((void *)GPIO_TCR(core_add), reg);
+                                               reg = in_be32((void *)GPIO_TS(core_add+offs))
+                                                       & ~(GPIO_MASK >> (j*2));
+                                               reg = reg | (gpio_alt_sel >> (j*2));
+                                               out_be32((void *)GPIO_TS(core_add+offs), reg);
+                                       }
+                               }
                        }
                }
        }
 }
-#endif /* CFG_440_GPIO_TABLE */
+#endif /* CFG_4xx_GPIO_TABLE */
index ca565cc3e073f946b4d090cfc7907f09724bd2c9..2f3dc326b4667fe6b78b1eb8856325ab40d058b1 100644 (file)
@@ -34,7 +34,7 @@
 #include <ppc4xx.h>
 #include <ppc_asm.tmpl>
 #include <commproc.h>
-#include "vecnum.h"
+#include <asm/ppc4xx-intvec.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -52,7 +52,7 @@ struct        irq_action {
 static struct irq_action irq_vecs[32];
 void uic0_interrupt( void * parms); /* UIC0 handler */
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 static struct irq_action irq_vecs1[32]; /* For UIC1 */
 
 void uic1_interrupt( void * parms); /* UIC1 handler */
@@ -116,7 +116,7 @@ int interrupt_init_cpu (unsigned *decrementer_count)
                irq_vecs[vec].handler = NULL;
                irq_vecs[vec].arg = NULL;
                irq_vecs[vec].count = 0;
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
                irq_vecs1[vec].handler = NULL;
                irq_vecs1[vec].arg = NULL;
                irq_vecs1[vec].count = 0;
@@ -172,7 +172,7 @@ int interrupt_init_cpu (unsigned *decrementer_count)
         */
        set_evpr(0x00000000);
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if !defined(CONFIG_440GX)
        /* Install the UIC1 handlers */
        irq_install_handler(VECNUM_UIC1NC, uic1_interrupt, 0);
@@ -378,7 +378,7 @@ void uic0_interrupt( void * parms)
 
 #endif /* CONFIG_440GX */
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 /* Handler for UIC1 interrupt */
 void uic1_interrupt( void * parms)
 {
@@ -525,7 +525,7 @@ void irq_install_handler (int vec, interrupt_handler_t * handler, void *arg)
        struct irq_action *irqa = irq_vecs;
        int i = vec;
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        if ((vec > 31) && (vec < 64)) {
@@ -553,7 +553,7 @@ void irq_install_handler (int vec, interrupt_handler_t * handler, void *arg)
        irqa[i].handler = handler;
        irqa[i].arg = arg;
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        if ((vec > 31) && (vec < 64))
@@ -577,7 +577,7 @@ void irq_free_handler (int vec)
        struct irq_action *irqa = irq_vecs;
        int i = vec;
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        if ((vec > 31) && (vec < 64)) {
@@ -599,7 +599,7 @@ void irq_free_handler (int vec)
                vec, irq_vecs[vec].handler);
 #endif
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        if ((vec > 31) && (vec < 64))
@@ -641,7 +641,7 @@ do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        int vec;
 
        printf ("\nInterrupt-Information:\n");
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
        printf ("\nUIC 0\n");
 #endif
        printf ("Nr  Routine   Arg       Count\n");
@@ -656,7 +656,7 @@ do_irqinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                }
        }
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
        printf ("\nUIC 1\n");
        printf ("Nr  Routine   Arg       Count\n");
 
diff --git a/cpu/ppc4xx/iop480_uart.c b/cpu/ppc4xx/iop480_uart.c
new file mode 100644 (file)
index 0000000..3af0767
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * (C) Copyright 2000-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 <common.h>
+#include <commproc.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <watchdog.h>
+#include <asm/ppc4xx-intvec.h>
+
+#ifdef CONFIG_SERIAL_MULTI
+#include <serial.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_IOP480
+
+#define SPU_BASE         0x40000000
+
+#define spu_LineStat_rc  0x00  /* Line Status Register (Read/Clear) */
+#define spu_LineStat_w   0x04  /* Line Status Register (Set) */
+#define spu_Handshk_rc   0x08  /* Handshake Status Register (Read/Clear) */
+#define spu_Handshk_w    0x0c  /* Handshake Status Register (Set) */
+#define spu_BRateDivh    0x10  /* Baud rate divisor high */
+#define spu_BRateDivl    0x14  /* Baud rate divisor low */
+#define spu_CtlReg       0x18  /* Control Register */
+#define spu_RxCmd        0x1c  /* Rx Command Register */
+#define spu_TxCmd        0x20  /* Tx Command Register */
+#define spu_RxBuff       0x24  /* Rx data buffer */
+#define spu_TxBuff       0x24  /* Tx data buffer */
+
+/*-----------------------------------------------------------------------------+
+  | Line Status Register.
+  +-----------------------------------------------------------------------------*/
+#define asyncLSRport1           0x40000000
+#define asyncLSRport1set        0x40000004
+#define asyncLSRDataReady             0x80
+#define asyncLSRFramingError          0x40
+#define asyncLSROverrunError          0x20
+#define asyncLSRParityError           0x10
+#define asyncLSRBreakInterrupt        0x08
+#define asyncLSRTxHoldEmpty           0x04
+#define asyncLSRTxShiftEmpty          0x02
+
+/*-----------------------------------------------------------------------------+
+  | Handshake Status Register.
+  +-----------------------------------------------------------------------------*/
+#define asyncHSRport1           0x40000008
+#define asyncHSRport1set        0x4000000c
+#define asyncHSRDsr                   0x80
+#define asyncLSRCts                   0x40
+
+/*-----------------------------------------------------------------------------+
+  | Control Register.
+  +-----------------------------------------------------------------------------*/
+#define asyncCRport1            0x40000018
+#define asyncCRNormal                 0x00
+#define asyncCRLoopback               0x40
+#define asyncCRAutoEcho               0x80
+#define asyncCRDtr                    0x20
+#define asyncCRRts                    0x10
+#define asyncCRWordLength7            0x00
+#define asyncCRWordLength8            0x08
+#define asyncCRParityDisable          0x00
+#define asyncCRParityEnable           0x04
+#define asyncCREvenParity             0x00
+#define asyncCROddParity              0x02
+#define asyncCRStopBitsOne            0x00
+#define asyncCRStopBitsTwo            0x01
+#define asyncCRDisableDtrRts          0x00
+
+/*-----------------------------------------------------------------------------+
+  | Receiver Command Register.
+  +-----------------------------------------------------------------------------*/
+#define asyncRCRport1           0x4000001c
+#define asyncRCRDisable               0x00
+#define asyncRCREnable                0x80
+#define asyncRCRIntDisable            0x00
+#define asyncRCRIntEnabled            0x20
+#define asyncRCRDMACh2                0x40
+#define asyncRCRDMACh3                0x60
+#define asyncRCRErrorInt              0x10
+#define asyncRCRPauseEnable           0x08
+
+/*-----------------------------------------------------------------------------+
+  | Transmitter Command Register.
+  +-----------------------------------------------------------------------------*/
+#define asyncTCRport1           0x40000020
+#define asyncTCRDisable               0x00
+#define asyncTCREnable                0x80
+#define asyncTCRIntDisable            0x00
+#define asyncTCRIntEnabled            0x20
+#define asyncTCRDMACh2                0x40
+#define asyncTCRDMACh3                0x60
+#define asyncTCRTxEmpty               0x10
+#define asyncTCRErrorInt              0x08
+#define asyncTCRStopPause             0x04
+#define asyncTCRBreakGen              0x02
+
+/*-----------------------------------------------------------------------------+
+  | Miscellanies defines.
+  +-----------------------------------------------------------------------------*/
+#define asyncTxBufferport1      0x40000024
+#define asyncRxBufferport1      0x40000024
+#define asyncDLABLsbport1       0x40000014
+#define asyncDLABMsbport1       0x40000010
+#define asyncXOFFchar                 0x13
+#define asyncXONchar                  0x11
+
+/*
+ * Minimal serial functions needed to use one of the SMC ports
+ * as serial console interface.
+ */
+
+int serial_init (void)
+{
+       volatile char val;
+       unsigned short br_reg;
+
+       br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1);
+
+       /*
+        * Init onboard UART
+        */
+       out_8((u8 *)SPU_BASE + spu_LineStat_rc, 0x78); /* Clear all bits in Line Status Reg */
+       out_8((u8 *)SPU_BASE + spu_BRateDivl, (br_reg & 0x00ff)); /* Set baud rate divisor... */
+       out_8((u8 *)SPU_BASE + spu_BRateDivh, ((br_reg & 0xff00) >> 8)); /* ... */
+       out_8((u8 *)SPU_BASE + spu_CtlReg, 0x08);       /* Set 8 bits, no parity and 1 stop bit */
+       out_8((u8 *)SPU_BASE + spu_RxCmd, 0xb0);        /* Enable Rx */
+       out_8((u8 *)SPU_BASE + spu_TxCmd, 0x9c);        /* Enable Tx */
+       out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff);   /* Clear Handshake */
+       val = in_8((u8 *)SPU_BASE + spu_RxBuff);        /* Dummy read, to clear receiver */
+
+       return (0);
+}
+
+void serial_setbrg (void)
+{
+       unsigned short br_reg;
+
+       br_reg = ((((CONFIG_CPUCLOCK * 1000000) / 16) / gd->baudrate) - 1);
+
+       out_8((u8 *)SPU_BASE + spu_BRateDivl,
+             (br_reg & 0x00ff)); /* Set baud rate divisor... */
+       out_8((u8 *)SPU_BASE + spu_BRateDivh,
+             ((br_reg & 0xff00) >> 8)); /* ... */
+}
+
+void serial_putc (const char c)
+{
+       if (c == '\n')
+               serial_putc ('\r');
+
+       /* load status from handshake register */
+       if (in_8((u8 *)SPU_BASE + spu_Handshk_rc) != 00)
+               out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff);   /* Clear Handshake */
+
+       out_8((u8 *)SPU_BASE + spu_TxBuff, c);  /* Put char */
+
+       while ((in_8((u8 *)SPU_BASE + spu_LineStat_rc) & 04) != 04) {
+               if (in_8((u8 *)SPU_BASE + spu_Handshk_rc) != 00)
+                       out_8((u8 *)SPU_BASE + spu_Handshk_rc, 0xff);   /* Clear Handshake */
+       }
+}
+
+void serial_puts (const char *s)
+{
+       while (*s) {
+               serial_putc (*s++);
+       }
+}
+
+int serial_getc ()
+{
+       unsigned char status = 0;
+
+       while (1) {
+               status = in_8((u8 *)asyncLSRport1);
+               if ((status & asyncLSRDataReady) != 0x0) {
+                       break;
+               }
+               if ((status & ( asyncLSRFramingError |
+                               asyncLSROverrunError |
+                               asyncLSRParityError  |
+                               asyncLSRBreakInterrupt )) != 0) {
+                       (void) out_8((u8 *)asyncLSRport1,
+                                    asyncLSRFramingError |
+                                    asyncLSROverrunError |
+                                    asyncLSRParityError  |
+                                    asyncLSRBreakInterrupt );
+               }
+       }
+       return (0x000000ff & (int) in_8((u8 *)asyncRxBufferport1));
+}
+
+int serial_tstc ()
+{
+       unsigned char status;
+
+       status = in_8((u8 *)asyncLSRport1);
+       if ((status & asyncLSRDataReady) != 0x0) {
+               return (1);
+       }
+       if ((status & ( asyncLSRFramingError |
+                       asyncLSROverrunError |
+                       asyncLSRParityError  |
+                       asyncLSRBreakInterrupt )) != 0) {
+               (void) out_8((u8 *)asyncLSRport1,
+                            asyncLSRFramingError |
+                            asyncLSROverrunError |
+                            asyncLSRParityError  |
+                            asyncLSRBreakInterrupt);
+       }
+       return 0;
+}
+
+#endif /* CONFIG_IOP480 */
index 8c4bbf2e4de35dd908e8c1b5bd94ac281005e2cf..42b9546d3d209ab6ec85b4b63386783b4311382f 100644 (file)
@@ -56,21 +56,21 @@ kgdb_flush_cache_all:
 
        .globl  kgdb_flush_cache_range
 kgdb_flush_cache_range:
-       li      r5,CFG_CACHELINE_SIZE-1
+       li      r5,L1_CACHE_BYTES-1
        andc    r3,r3,r5
        subf    r4,r3,r4
        add     r4,r4,r5
-       srwi.   r4,r4,CFG_CACHELINE_SHIFT
+       srwi.   r4,r4,L1_CACHE_SHIFT
        beqlr
        mtctr   r4
        mr      r6,r3
 1:     dcbst   0,r3
-       addi    r3,r3,CFG_CACHELINE_SIZE
+       addi    r3,r3,L1_CACHE_BYTES
        bdnz    1b
        sync                    /* wait for dcbst's to get to ram */
        mtctr   r4
 2:     icbi    0,r6
-       addi    r6,r6,CFG_CACHELINE_SIZE
+       addi    r6,r6,L1_CACHE_BYTES
        bdnz    2b
        SYNC
        blr
index 6b98025308f502e4fd30f7ff172a110c1451db27..4216f0bd41be79d2a564a5338890a3422e962492 100644 (file)
   |
   |  Author:    Mark Wisner
   |
-  |  Change Activity-
-  |
-  |  Date       Description of Change                                       BY
-  |  ---------  ---------------------                                       ---
-  |  05-May-99  Created                                                     MKW
-  |  01-Jul-99  Changed clock setting of sta_reg from 66Mhz to 50Mhz to
-  |             better match OPB speed. Also modified delay times.          JWB
-  |  29-Jul-99  Added Full duplex support                                   MKW
-  |  24-Aug-99  Removed printf from dp83843_duplex()                        JWB
-  |  19-Jul-00  Ported to esd cpci405                                       sr
-  |  23-Dec-03  Ported from miiphy.c to 440GX Travis Sawyer                 TBS
-  |             <travis.sawyer@sandburst.com>
-  |
   +-----------------------------------------------------------------------------*/
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/io.h>
 #include <ppc_asm.tmpl>
 #include <commproc.h>
 #include <ppc4xx_enet.h>
@@ -60,7 +48,6 @@ void miiphy_dump (char *devname, unsigned char addr)
        unsigned long i;
        unsigned short data;
 
-
        for (i = 0; i < 0x1A; i++) {
                if (miiphy_read (devname, addr, i, &data)) {
                        printf ("read error for reg %lx\n", i);
@@ -75,15 +62,86 @@ void miiphy_dump (char *devname, unsigned char addr)
        }                       /* end for loop */
 }                              /* end dump */
 
-
 /***********************************************************/
 /* (Re)start autonegotiation                              */
 /***********************************************************/
 int phy_setup_aneg (char *devname, unsigned char addr)
 {
-       unsigned short ctl, adv;
+       u16 bmcr;
+
+#if defined(CONFIG_PHY_DYNAMIC_ANEG)
+       /*
+        * Set up advertisement based on capablilities reported by the PHY.
+        * This should work for both copper and fiber.
+        */
+       u16 bmsr;
+#if defined(CONFIG_PHY_GIGE)
+       u16 exsr = 0x0000;
+#endif
+
+       miiphy_read (devname, addr, PHY_BMSR, &bmsr);
+
+#if defined(CONFIG_PHY_GIGE)
+       if (bmsr & PHY_BMSR_EXT_STAT)
+               miiphy_read (devname, addr, PHY_EXSR, &exsr);
+
+       if (exsr & (PHY_EXSR_1000XF | PHY_EXSR_1000XH)) {
+               /* 1000BASE-X */
+               u16 anar = 0x0000;
+
+               if (exsr & PHY_EXSR_1000XF)
+                       anar |= PHY_X_ANLPAR_FD;
+
+               if (exsr & PHY_EXSR_1000XH)
+                       anar |= PHY_X_ANLPAR_HD;
+
+               miiphy_write (devname, addr, PHY_ANAR, anar);
+       } else
+#endif
+       {
+               u16 anar, btcr;
+
+               miiphy_read (devname, addr, PHY_ANAR, &anar);
+               anar &= ~(0x5000 | PHY_ANLPAR_T4 | PHY_ANLPAR_TXFD |
+                         PHY_ANLPAR_TX | PHY_ANLPAR_10FD | PHY_ANLPAR_10);
+
+               miiphy_read (devname, addr, PHY_1000BTCR, &btcr);
+               btcr &= ~(0x00FF | PHY_1000BTCR_1000FD | PHY_1000BTCR_1000HD);
+
+               if (bmsr & PHY_BMSR_100T4)
+                       anar |= PHY_ANLPAR_T4;
+
+               if (bmsr & PHY_BMSR_100TXF)
+                       anar |= PHY_ANLPAR_TXFD;
+
+               if (bmsr & PHY_BMSR_100TXH)
+                       anar |= PHY_ANLPAR_TX;
+
+               if (bmsr & PHY_BMSR_10TF)
+                       anar |= PHY_ANLPAR_10FD;
+
+               if (bmsr & PHY_BMSR_10TH)
+                       anar |= PHY_ANLPAR_10;
+
+               miiphy_write (devname, addr, PHY_ANAR, anar);
+
+#if defined(CONFIG_PHY_GIGE)
+               if (exsr & PHY_EXSR_1000TF)
+                       btcr |= PHY_1000BTCR_1000FD;
+
+               if (exsr & PHY_EXSR_1000TH)
+                       btcr |= PHY_1000BTCR_1000HD;
+
+               miiphy_write (devname, addr, PHY_1000BTCR, btcr);
+#endif
+       }
+
+#else /* defined(CONFIG_PHY_DYNAMIC_ANEG) */
+       /*
+        * Set up standard advertisement
+        */
+       u16 adv;
 
-       /* Setup standard advertise */
        miiphy_read (devname, addr, PHY_ANAR, &adv);
        adv |= (PHY_ANLPAR_ACK | PHY_ANLPAR_RF | PHY_ANLPAR_T4 |
                PHY_ANLPAR_TXFD | PHY_ANLPAR_TX | PHY_ANLPAR_10FD |
@@ -94,15 +152,16 @@ int phy_setup_aneg (char *devname, unsigned char addr)
        adv |= (0x0300);
        miiphy_write (devname, addr, PHY_1000BTCR, adv);
 
+#endif /* defined(CONFIG_PHY_DYNAMIC_ANEG) */
+
        /* Start/Restart aneg */
-       miiphy_read (devname, addr, PHY_BMCR, &ctl);
-       ctl |= (PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
-       miiphy_write (devname, addr, PHY_BMCR, ctl);
+       miiphy_read (devname, addr, PHY_BMCR, &bmcr);
+       bmcr |= (PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+       miiphy_write (devname, addr, PHY_BMCR, bmcr);
 
        return 0;
 }
 
-
 /***********************************************************/
 /* read a phy reg and return the value with a rc          */
 /***********************************************************/
@@ -113,57 +172,70 @@ unsigned int miiphy_getemac_offset (void)
        unsigned long eoffset;
 
        /* Need to find out which mdi port we're using */
-       zmii = in32 (ZMII_FER);
+       zmii = in_be32((void *)ZMII_FER);
 
-       if (zmii & (ZMII_FER_MDI << ZMII_FER_V (0))) {
+       if (zmii & (ZMII_FER_MDI << ZMII_FER_V (0)))
                /* using port 0 */
                eoffset = 0;
-       } else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (1))) {
+
+       else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (1)))
                /* using port 1 */
                eoffset = 0x100;
-       } else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (2))) {
+
+       else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (2)))
                /* using port 2 */
                eoffset = 0x400;
-       } else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (3))) {
+
+       else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (3)))
                /* using port 3 */
                eoffset = 0x600;
-       } else {
+
+       else {
                /* None of the mdi ports are enabled! */
                /* enable port 0 */
                zmii |= ZMII_FER_MDI << ZMII_FER_V (0);
-               out32 (ZMII_FER, zmii);
+               out_be32((void *)ZMII_FER, zmii);
                eoffset = 0;
                /* need to soft reset port 0 */
-               zmii = in32 (EMAC_M0);
+               zmii = in_be32((void *)EMAC_M0);
                zmii |= EMAC_M0_SRST;
-               out32 (EMAC_M0, zmii);
+               out_be32((void *)EMAC_M0, zmii);
        }
 
        return (eoffset);
 #else
+
+#if defined(CONFIG_NET_MULTI) && defined(CONFIG_405EX)
+       unsigned long rgmii;
+       int devnum = 1;
+
+       rgmii = in_be32((void *)RGMII_FER);
+       if (rgmii & (1 << (19 - devnum)))
+               return 0x100;
+#endif
+
        return 0;
 #endif
 }
 
-
-int emac4xx_miiphy_read (char *devname, unsigned char addr,
-               unsigned char reg, unsigned short *value)
+int emac4xx_miiphy_read (char *devname, unsigned char addr, unsigned char reg,
+                        unsigned short *value)
 {
        unsigned long sta_reg;  /* STA scratch area */
        unsigned long i;
        unsigned long emac_reg;
 
-
        emac_reg = miiphy_getemac_offset ();
        /* see if it is ready for 1000 nsec */
        i = 0;
 
        /* see if it is ready for  sec */
-       while ((in32 (EMAC_STACR + emac_reg) & EMAC_STACR_OC) == EMAC_STACR_OC_MASK) {
+       while ((in_be32((void *)EMAC_STACR + emac_reg) & EMAC_STACR_OC) ==
+              EMAC_STACR_OC_MASK) {
                udelay (7);
                if (i > 5) {
 #ifdef ET_DEBUG
-                       sta_reg = in32 (EMAC_STACR + emac_reg);
+                       sta_reg = in_be32((void *)EMAC_STACR + emac_reg);
                        printf ("read : EMAC_STACR=0x%0x\n", sta_reg);  /* test-only */
                        printf ("read err 1\n");
 #endif
@@ -174,11 +246,12 @@ int emac4xx_miiphy_read (char *devname, unsigned char addr,
        sta_reg = reg;          /* reg address */
        /* set clock (50Mhz) and read flags */
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
-#if defined(CONFIG_IBM_EMAC4_V4)      /* EMAC4 V4 changed bit setting */
-               sta_reg = (sta_reg & ~EMAC_STACR_OP_MASK) | EMAC_STACR_READ;
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
+#if defined(CONFIG_IBM_EMAC4_V4)       /* EMAC4 V4 changed bit setting */
+       sta_reg = (sta_reg & ~EMAC_STACR_OP_MASK) | EMAC_STACR_READ;
 #else
-               sta_reg |= EMAC_STACR_READ;
+       sta_reg |= EMAC_STACR_READ;
 #endif
 #else
        sta_reg = (sta_reg | EMAC_STACR_READ) & ~EMAC_STACR_CLK_100MHZ;
@@ -186,49 +259,47 @@ int emac4xx_miiphy_read (char *devname, unsigned char addr,
 
 #if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX) && \
     !defined(CONFIG_440SP) && !defined(CONFIG_440SPE) && \
-    !defined(CONFIG_440EPX) && !defined(CONFIG_440GRX)
+    !defined(CONFIG_440EPX) && !defined(CONFIG_440GRX) && \
+    !defined(CONFIG_405EX)
        sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ;
 #endif
        sta_reg = sta_reg | (addr << 5);        /* Phy address */
        sta_reg = sta_reg | EMAC_STACR_OC_MASK; /* new IBM emac v4 */
-       out32 (EMAC_STACR + emac_reg, sta_reg);
+       out_be32((void *)EMAC_STACR + emac_reg, sta_reg);
 #ifdef ET_DEBUG
        printf ("a2: write: EMAC_STACR=0x%0x\n", sta_reg);      /* test-only */
 #endif
 
-       sta_reg = in32 (EMAC_STACR + emac_reg);
+       sta_reg = in_be32((void *)EMAC_STACR + emac_reg);
 #ifdef ET_DEBUG
-               printf ("a21: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
+       printf ("a21: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
 #endif
        i = 0;
        while ((sta_reg & EMAC_STACR_OC) == EMAC_STACR_OC_MASK) {
                udelay (7);
-               if (i > 5) {
+               if (i > 5)
                        return -1;
-               }
+
                i++;
-               sta_reg = in32 (EMAC_STACR + emac_reg);
+               sta_reg = in_be32((void *)EMAC_STACR + emac_reg);
 #ifdef ET_DEBUG
                printf ("a22: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
 #endif
        }
-       if ((sta_reg & EMAC_STACR_PHYE) != 0) {
+       if ((sta_reg & EMAC_STACR_PHYE) != 0)
                return -1;
-       }
 
-       *value = *(short *) (&sta_reg);
+       *value = *(short *)(&sta_reg);
        return 0;
 
-
 }                              /* phy_read */
 
-
 /***********************************************************/
 /* write a phy reg and return the value with a rc          */
 /***********************************************************/
 
-int emac4xx_miiphy_write (char *devname, unsigned char addr,
-               unsigned char reg, unsigned short value)
+int emac4xx_miiphy_write (char *devname, unsigned char addr, unsigned char reg,
+                         unsigned short value)
 {
        unsigned long sta_reg;  /* STA scratch area */
        unsigned long i;
@@ -238,9 +309,11 @@ int emac4xx_miiphy_write (char *devname, unsigned char addr,
        /* see if it is ready for 1000 nsec */
        i = 0;
 
-       while ((in32 (EMAC_STACR + emac_reg) & EMAC_STACR_OC) == EMAC_STACR_OC_MASK) {
+       while ((in_be32((void *)EMAC_STACR + emac_reg) & EMAC_STACR_OC) ==
+              EMAC_STACR_OC_MASK) {
                if (i > 5)
                        return -1;
+
                udelay (7);
                i++;
        }
@@ -248,11 +321,12 @@ int emac4xx_miiphy_write (char *devname, unsigned char addr,
        sta_reg = reg;          /* reg address */
        /* set clock (50Mhz) and read flags */
 #if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
-#if defined(CONFIG_IBM_EMAC4_V4)      /* EMAC4 V4 changed bit setting */
-               sta_reg = (sta_reg & ~EMAC_STACR_OP_MASK) | EMAC_STACR_WRITE;
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
+#if defined(CONFIG_IBM_EMAC4_V4)       /* EMAC4 V4 changed bit setting */
+       sta_reg = (sta_reg & ~EMAC_STACR_OP_MASK) | EMAC_STACR_WRITE;
 #else
-               sta_reg |= EMAC_STACR_WRITE;
+       sta_reg |= EMAC_STACR_WRITE;
 #endif
 #else
        sta_reg = (sta_reg | EMAC_STACR_WRITE) & ~EMAC_STACR_CLK_100MHZ;
@@ -260,27 +334,29 @@ int emac4xx_miiphy_write (char *devname, unsigned char addr,
 
 #if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX) && \
     !defined(CONFIG_440SP) && !defined(CONFIG_440SPE) && \
-    !defined(CONFIG_440EPX) && !defined(CONFIG_440GRX)
+    !defined(CONFIG_440EPX) && !defined(CONFIG_440GRX) && \
+    !defined(CONFIG_405EX)
        sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ;        /* Set clock frequency (PLB freq. dependend) */
 #endif
-       sta_reg = sta_reg | ((unsigned long) addr << 5);/* Phy address */
-       sta_reg = sta_reg | EMAC_STACR_OC_MASK;         /* new IBM emac v4 */
+       sta_reg = sta_reg | ((unsigned long)addr << 5); /* Phy address */
+       sta_reg = sta_reg | EMAC_STACR_OC_MASK; /* new IBM emac v4 */
        memcpy (&sta_reg, &value, 2);   /* put in data */
 
-       out32 (EMAC_STACR + emac_reg, sta_reg);
+       out_be32((void *)EMAC_STACR + emac_reg, sta_reg);
 
        /* wait for completion */
        i = 0;
-       sta_reg = in32 (EMAC_STACR + emac_reg);
+       sta_reg = in_be32((void *)EMAC_STACR + emac_reg);
 #ifdef ET_DEBUG
-               printf ("a31: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
+       printf ("a31: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
 #endif
        while ((sta_reg & EMAC_STACR_OC) == EMAC_STACR_OC_MASK) {
                udelay (7);
                if (i > 5)
                        return -1;
+
                i++;
-               sta_reg = in32 (EMAC_STACR + emac_reg);
+               sta_reg = in_be32((void *)EMAC_STACR + emac_reg);
 #ifdef ET_DEBUG
                printf ("a32: read : EMAC_STACR=0x%0x\n", sta_reg);     /* test-only */
 #endif
@@ -288,6 +364,7 @@ int emac4xx_miiphy_write (char *devname, unsigned char addr,
 
        if ((sta_reg & EMAC_STACR_PHYE) != 0)
                return -1;
+
        return 0;
 
-}                              /* phy_write */
+} /* phy_write */
index 398457726f426b3898ff794b6ebcd1018eaf3f76..ec1b38cffa35177a18959c502e9a6e348bbd0a97 100644 (file)
@@ -34,7 +34,7 @@
 #if defined(CONFIG_CMD_NAND) && !defined(CFG_NAND_LEGACY) && \
        (defined(CONFIG_440EP) || defined(CONFIG_440GR) ||           \
         defined(CONFIG_440EPX) || defined(CONFIG_440GRX) ||         \
-        defined(CONFIG_405EZ))
+        defined(CONFIG_405EZ) || defined(CONFIG_405EX))
 
 #include <nand.h>
 #include <linux/mtd/ndfc.h>
@@ -222,6 +222,7 @@ int board_nand_init(struct nand_chip *nand)
         */
        board_nand_select_device(nand, cs);
        out_be32((u32 *)(base + NDFC_BCFG0 + (cs << 2)), 0x80002222);
+
        return 0;
 }
 
index da5330a36044faf4020b448007ec35d6f7516bba..90066142de142aa7e8bb609f04ec263ef85e4348 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000
+ * (C) Copyright 2000-2007
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
@@ -37,7 +37,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR)
 
-void get_sys_info (PPC405_SYS_INFO * sysInfo)
+void get_sys_info (PPC4xx_SYS_INFO * sysInfo)
 {
        unsigned long pllmr;
        unsigned long sysClkPeriodPs = ONE_BILLION / (CONFIG_SYS_CLK_FREQ / 1000);
@@ -162,6 +162,8 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
                        sysInfo->freqProcessor = sysInfo->freqPLB * sysInfo->pllPlbDiv;
                }
        }
+
+       sysInfo->freqUART = sysInfo->freqProcessor;
 }
 
 
@@ -173,7 +175,7 @@ ulong get_OPB_freq (void)
 {
        ulong val = 0;
 
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info (&sys_info);
        val = sys_info.freqPLB / sys_info.pllOpbDiv;
@@ -189,7 +191,7 @@ ulong get_OPB_freq (void)
 ulong get_PCI_freq (void)
 {
        ulong val;
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info (&sys_info);
        val = sys_info.freqPLB / sys_info.pllPciDiv;
@@ -216,7 +218,7 @@ void get_sys_info (sys_info_t *sysInfo)
        */
 
        /* Decode CPR0_PLLD0 for divisors */
-       mfclk(clk_plld, reg);
+       mfcpr(clk_plld, reg);
        temp = (reg & PLLD_FWDVA_MASK) >> 16;
        sysInfo->pllFwdDivA = temp ? temp : 16;
        temp = (reg & PLLD_FWDVB_MASK) >> 8;
@@ -225,19 +227,19 @@ void get_sys_info (sys_info_t *sysInfo)
        sysInfo->pllFbkDiv = temp ? temp : 32;
        lfdiv = reg & PLLD_LFBDV_MASK;
 
-       mfclk(clk_opbd, reg);
+       mfcpr(clk_opbd, reg);
        temp = (reg & OPBDDV_MASK) >> 24;
        sysInfo->pllOpbDiv = temp ? temp : 4;
 
-       mfclk(clk_perd, reg);
+       mfcpr(clk_perd, reg);
        temp = (reg & PERDV_MASK) >> 24;
        sysInfo->pllExtBusDiv = temp ? temp : 8;
 
-       mfclk(clk_primbd, reg);
+       mfcpr(clk_primbd, reg);
        temp = (reg & PRBDV_MASK) >> 24;
        prbdv0 = temp ? temp : 8;
 
-       mfclk(clk_spcid, reg);
+       mfcpr(clk_spcid, reg);
        temp = (reg & SPCID_MASK) >> 24;
        sysInfo->pllPciDiv = temp ? temp : 4;
 
@@ -246,7 +248,7 @@ void get_sys_info (sys_info_t *sysInfo)
        temp = (reg & PLLSYS0_SEL_MASK) >> 27;
        if (temp == 0) { /* PLL output */
                /* Figure which pll to use */
-               mfclk(clk_pllc, reg);
+               mfcpr(clk_pllc, reg);
                temp = (reg & PLLC_SRC_MASK) >> 29;
                if (!temp) /* PLLOUTA */
                        m = sysInfo->pllFbkDiv * lfdiv * sysInfo->pllFwdDivA;
@@ -263,8 +265,9 @@ void get_sys_info (sys_info_t *sysInfo)
        sysInfo->freqProcessor = sysInfo->freqVCOMhz/sysInfo->pllFwdDivA;
        sysInfo->freqPLB = sysInfo->freqVCOMhz/sysInfo->pllFwdDivB/prbdv0;
        sysInfo->freqOPB = sysInfo->freqPLB/sysInfo->pllOpbDiv;
-       sysInfo->freqEPB = sysInfo->freqPLB/sysInfo->pllExtBusDiv;
+       sysInfo->freqEBC = sysInfo->freqPLB/sysInfo->pllExtBusDiv;
        sysInfo->freqPCI = sysInfo->freqPLB/sysInfo->pllPciDiv;
+       sysInfo->freqUART = sysInfo->freqPLB;
 
        /* Figure which timer source to use */
        if (mfspr(ccr1) & 0x0080) { /* External Clock, assume same as SYS_CLK */
@@ -277,6 +280,7 @@ void get_sys_info (sys_info_t *sysInfo)
        else  /* Internal clock */
                sysInfo->freqTmrClk = sysInfo->freqProcessor;
 }
+
 /********************************************
  * get_PCI_freq
  * return PCI bus freq in Hz
@@ -317,8 +321,8 @@ void get_sys_info (sys_info_t * sysInfo)
        if( get_pvr() == PVR_440GP_RB ) /* Rev B divs an extra 2 -- geez! */
                sysInfo->freqPLB >>= 1;
        sysInfo->freqOPB = sysInfo->freqPLB/sysInfo->pllOpbDiv;
-       sysInfo->freqEPB = sysInfo->freqOPB/sysInfo->pllExtBusDiv;
-
+       sysInfo->freqEBC = sysInfo->freqOPB/sysInfo->pllExtBusDiv;
+       sysInfo->freqUART = sysInfo->freqPLB;
 }
 #else
 void get_sys_info (sys_info_t * sysInfo)
@@ -393,7 +397,7 @@ void get_sys_info (sys_info_t * sysInfo)
        sysInfo->freqProcessor = sysInfo->freqVCOMhz/sysInfo->pllFwdDivA;
        sysInfo->freqPLB = sysInfo->freqVCOMhz/sysInfo->pllFwdDivB/prbdv0;
        sysInfo->freqOPB = sysInfo->freqPLB/sysInfo->pllOpbDiv;
-       sysInfo->freqEPB = sysInfo->freqOPB/sysInfo->pllExtBusDiv;
+       sysInfo->freqEBC = sysInfo->freqOPB/sysInfo->pllExtBusDiv;
 
 #if defined(CONFIG_YUCCA)
        /* Determine PCI Clock Period */
@@ -403,7 +407,7 @@ void get_sys_info (sys_info_t * sysInfo)
        sysInfo->freqDDR = ((sysInfo->freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));
 #endif
 
-
+       sysInfo->freqUART = sysInfo->freqPLB;
 }
 
 #endif
@@ -632,7 +636,8 @@ extern void get_sys_info (sys_info_t * sysInfo);
 extern ulong get_PCI_freq (void);
 
 #elif defined(CONFIG_AP1000)
-void get_sys_info (sys_info_t * sysInfo) {
+void get_sys_info (sys_info_t * sysInfo)
+{
        sysInfo->freqProcessor = 240 * 1000 * 1000;
        sysInfo->freqPLB = 80 * 1000 * 1000;
        sysInfo->freqPCI = 33 * 1000 * 1000;
@@ -640,17 +645,16 @@ void get_sys_info (sys_info_t * sysInfo) {
 
 #elif defined(CONFIG_405)
 
-void get_sys_info (sys_info_t * sysInfo) {
-
+void get_sys_info (sys_info_t * sysInfo)
+{
        sysInfo->freqVCOMhz=3125000;
        sysInfo->freqProcessor=12*1000*1000;
        sysInfo->freqPLB=50*1000*1000;
        sysInfo->freqPCI=66*1000*1000;
-
 }
 
 #elif defined(CONFIG_405EP)
-void get_sys_info (PPC405_SYS_INFO * sysInfo)
+void get_sys_info (PPC4xx_SYS_INFO * sysInfo)
 {
        unsigned long pllmr0;
        unsigned long pllmr1;
@@ -678,9 +682,8 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
         * Determine FBK_DIV.
         */
        sysInfo->pllFbkDiv = ((pllmr1 & PLLMR1_FBMUL_MASK) >> 20);
-       if (sysInfo->pllFbkDiv == 0) {
+       if (sysInfo->pllFbkDiv == 0)
                sysInfo->pllFbkDiv = 16;
-       }
 
        /*
         * Determine PLB_DIV.
@@ -733,6 +736,10 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
         * Determine PLB clock frequency
         */
        sysInfo->freqPLB = sysInfo->freqProcessor / sysInfo->pllPlbDiv;
+
+       sysInfo->freqEBC = sysInfo->freqPLB / sysInfo->pllExtBusDiv;
+
+       sysInfo->freqUART = sysInfo->freqProcessor * pllmr0_ccdv;
 }
 
 
@@ -744,7 +751,7 @@ ulong get_OPB_freq (void)
 {
        ulong val = 0;
 
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info (&sys_info);
        val = sys_info.freqPLB / sys_info.pllOpbDiv;
@@ -760,7 +767,7 @@ ulong get_OPB_freq (void)
 ulong get_PCI_freq (void)
 {
        ulong val;
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info (&sys_info);
        val = sys_info.freqPLB / sys_info.pllPciDiv;
@@ -768,7 +775,7 @@ ulong get_PCI_freq (void)
 }
 
 #elif defined(CONFIG_405EZ)
-void get_sys_info (PPC405_SYS_INFO * sysInfo)
+void get_sys_info (PPC4xx_SYS_INFO * sysInfo)
 {
        unsigned long cpr_plld;
        unsigned long cpr_pllc;
@@ -806,6 +813,7 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
         * Read CPR_PRIMAD register
         */
        mfcpr(cprprimad, cpr_primad);
+
        /*
         * Determine PLB_DIV.
         */
@@ -856,6 +864,11 @@ void get_sys_info (PPC405_SYS_INFO * sysInfo)
         */
        sysInfo->freqPLB = (CONFIG_SYS_CLK_FREQ * m) /
                sysInfo->pllFwdDiv / sysInfo->pllPlbDiv;
+
+       sysInfo->freqEBC = (CONFIG_SYS_CLK_FREQ * sysInfo->pllFbkDiv) /
+               sysInfo->pllExtBusDiv;
+
+       sysInfo->freqUART = sysInfo->freqVCOHz;
 }
 
 /********************************************
@@ -866,7 +879,7 @@ ulong get_OPB_freq (void)
 {
        ulong val = 0;
 
-       PPC405_SYS_INFO sys_info;
+       PPC4xx_SYS_INFO sys_info;
 
        get_sys_info (&sys_info);
        val = (CONFIG_SYS_CLK_FREQ * sys_info.pllFbkDiv) / sys_info.pllOpbDiv;
@@ -874,13 +887,176 @@ ulong get_OPB_freq (void)
        return val;
 }
 
+#elif defined(CONFIG_405EX)
+
+/*
+ * TODO: We need to get the CPR registers and calculate these values correctly!!!!
+ *   We need the specs!!!!
+ */
+static unsigned char get_fbdv(unsigned char index)
+{
+       unsigned char ret = 0;
+       /* This is table should be 256 bytes.
+        * Only take first 52 values.
+        */
+       unsigned char fbdv_tb[] = {
+               0x00, 0xff, 0x7f, 0xfd,
+               0x7a, 0xf5, 0x6a, 0xd5,
+               0x2a, 0xd4, 0x29, 0xd3,
+               0x26, 0xcc, 0x19, 0xb3,
+               0x67, 0xce, 0x1d, 0xbb,
+               0x77, 0xee, 0x5d, 0xba,
+               0x74, 0xe9, 0x52, 0xa5,
+               0x4b, 0x96, 0x2c, 0xd8,
+               0x31, 0xe3, 0x46, 0x8d,
+               0x1b, 0xb7, 0x6f, 0xde,
+               0x3d, 0xfb, 0x76, 0xed,
+               0x5a, 0xb5, 0x6b, 0xd6,
+               0x2d, 0xdb, 0x36, 0xec,
+
+       };
+
+       if ((index & 0x7f) == 0)
+               return 1;
+       while (ret < sizeof (fbdv_tb)) {
+               if (fbdv_tb[ret] == index)
+                       break;
+               ret++;
+       }
+       ret++;
+
+       return ret;
+}
+
+#define PLL_FBK_PLL_LOCAL      0
+#define PLL_FBK_CPU            1
+#define PLL_FBK_PERCLK         5
+
+void get_sys_info (sys_info_t * sysInfo)
+{
+       unsigned long sysClkPeriodPs = ONE_BILLION / (CONFIG_SYS_CLK_FREQ / 1000);
+       unsigned long m = 1;
+       unsigned int  tmp;
+       unsigned char fwdva[16] = {
+               1, 2, 14, 9, 4, 11, 16, 13,
+               12, 5, 6, 15, 10, 7, 8, 3,
+       };
+       unsigned char sel, cpudv0, plb2xDiv;
+
+       mfcpr(cpr0_plld, tmp);
+
+       /*
+        * Determine forward divider A
+        */
+       sysInfo->pllFwdDiv = fwdva[((tmp >> 16) & 0x0f)];       /* FWDVA */
+
+       /*
+        * Determine FBK_DIV.
+        */
+       sysInfo->pllFbkDiv = get_fbdv(((tmp >> 24) & 0x0ff)); /* FBDV */
+
+       /*
+        * Determine PLBDV0
+        */
+       sysInfo->pllPlbDiv = 2;
+
+       /*
+        * Determine PERDV0
+        */
+       mfcpr(cpr0_perd, tmp);
+       tmp = (tmp >> 24) & 0x03;
+       sysInfo->pllExtBusDiv = (tmp == 0) ? 4 : tmp;
+
+       /*
+        * Determine OPBDV0
+        */
+       mfcpr(cpr0_opbd, tmp);
+       tmp = (tmp >> 24) & 0x03;
+       sysInfo->pllOpbDiv = (tmp == 0) ? 4 : tmp;
+
+       /* Determine PLB2XDV0 */
+       mfcpr(cpr0_plbd, tmp);
+       tmp = (tmp >> 16) & 0x07;
+       plb2xDiv = (tmp == 0) ? 8 : tmp;
+
+       /* Determine CPUDV0 */
+       mfcpr(cpr0_cpud, tmp);
+       tmp = (tmp >> 24) & 0x07;
+       cpudv0 = (tmp == 0) ? 8 : tmp;
+
+       /* Determine SEL(5:7) in CPR0_PLLC */
+       mfcpr(cpr0_pllc, tmp);
+       sel = (tmp >> 24) & 0x07;
+
+       /*
+        * Determine the M factor
+        * PLL local: M = FBDV
+        * CPU clock: M = FBDV * FWDVA * CPUDV0
+        * PerClk       : M = FBDV * FWDVA * PLB2XDV0 * PLBDV0(2) * OPBDV0 * PERDV0
+        *
+        */
+       switch (sel) {
+       case PLL_FBK_CPU:
+               m = sysInfo->pllFwdDiv * cpudv0;
+               break;
+       case PLL_FBK_PERCLK:
+               m = sysInfo->pllFwdDiv * plb2xDiv * 2
+                       * sysInfo->pllOpbDiv * sysInfo->pllExtBusDiv;
+               break;
+       case PLL_FBK_PLL_LOCAL:
+               break;
+       default:
+               printf("%s unknown m\n", __FUNCTION__);
+               return;
+
+       }
+       m *= sysInfo->pllFbkDiv;
+
+       /*
+        * Determine VCO clock frequency
+        */
+       sysInfo->freqVCOHz = (1000000000000LL * (unsigned long long)m) /
+               (unsigned long long)sysClkPeriodPs;
+
+       /*
+        * Determine CPU clock frequency
+        */
+       sysInfo->freqProcessor = sysInfo->freqVCOHz / (sysInfo->pllFwdDiv * cpudv0);
+
+       /*
+        * Determine PLB clock frequency, ddr1x should be the same
+        */
+       sysInfo->freqPLB = sysInfo->freqVCOHz / (sysInfo->pllFwdDiv * plb2xDiv * 2);
+       sysInfo->freqOPB = sysInfo->freqPLB/sysInfo->pllOpbDiv;
+       sysInfo->freqDDR = sysInfo->freqPLB;
+       sysInfo->freqEBC = sysInfo->freqOPB / sysInfo->pllExtBusDiv;
+       sysInfo->freqUART = sysInfo->freqPLB;
+}
+
+/********************************************
+ * get_OPB_freq
+ * return OPB bus freq in Hz
+ *********************************************/
+ulong get_OPB_freq (void)
+{
+       ulong val = 0;
+
+       PPC4xx_SYS_INFO sys_info;
+
+       get_sys_info (&sys_info);
+       val = sys_info.freqPLB / sys_info.pllOpbDiv;
+
+       return val;
+}
+
 #endif
 
 int get_clocks (void)
 {
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
-    defined(CONFIG_440) || defined(CONFIG_405)
+    defined(CONFIG_405EX) || defined(CONFIG_405) || \
+    defined(CONFIG_440)
        sys_info_t sys_info;
 
        get_sys_info (&sys_info);
@@ -907,7 +1083,8 @@ ulong get_bus_freq (ulong dummy)
 
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
-    defined(CONFIG_440) || defined(CONFIG_405)
+    defined(CONFIG_405EX) || defined(CONFIG_405) || \
+    defined(CONFIG_440)
        sys_info_t sys_info;
 
        get_sys_info (&sys_info);
index 9626b65c8858ac24da3e9c89aef998ee985bedf8..77c2aa4117845b479878ba327825bb19143122c4 100644 (file)
@@ -636,6 +636,33 @@ _start:
        dcbz    r0,r3
        addi    r3,r3,32
        bdnz    ..d_ag
+
+       /*
+        * Lock the init-ram/stack in d-cache, so that other regions
+        * may use d-cache as well
+        * Note, that this current implementation locks exactly 4k
+        * of d-cache, so please make sure that you don't define a
+        * bigger init-ram area. Take a look at the lwmon5 440EPx
+        * implementation as a reference.
+        */
+       msync
+       isync
+       /* 8. set TFLOOR/NFLOOR to 8 (-> 8*16*32 bytes locked -> 4k) */
+       lis     r1,0x0201
+       ori     r1,r1,0xf808
+       mtspr   dvlim,r1
+       lis     r1,0x0808
+       ori     r1,r1,0x0808
+       mtspr   dnv0,r1
+       mtspr   dnv1,r1
+       mtspr   dnv2,r1
+       mtspr   dnv3,r1
+       mtspr   dtv0,r1
+       mtspr   dtv1,r1
+       mtspr   dtv2,r1
+       mtspr   dtv3,r1
+       msync
+       isync
 #endif /* CFG_INIT_RAM_DCACHE */
 
        /* 440EP & 440GR are only 440er PPC's without internal SRAM */
@@ -800,7 +827,7 @@ _start:
        /*----------------------------------------------------------------------- */
        /* Enable two 128MB cachable regions. */
        /*----------------------------------------------------------------------- */
-       addis   r1,r0,0x8000
+       addis   r1,r0,0xc000
        addi    r1,r1,0x0001
        mticcr  r1                      /* instruction cache */
 
@@ -823,12 +850,23 @@ _start:
 /*****************************************************************************/
 #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
-    defined(CONFIG_405)
+    defined(CONFIG_405EX) || defined(CONFIG_405)
        /*----------------------------------------------------------------------- */
        /* Clear and set up some registers. */
        /*----------------------------------------------------------------------- */
        addi    r4,r0,0x0000
+#if !defined(CONFIG_405EX)
        mtspr   sgr,r4
+#else
+       /*
+        * On 405EX, completely clearing the SGR leads to PPC hangup
+        * upon PCIe configuration access. The PCIe memory regions
+        * need to be guarded!
+        */
+       lis     r3,0x0000
+       ori     r3,r3,0x7FFC
+       mtspr   sgr,r3
+#endif
        mtspr   dcwr,r4
        mtesr   r4                      /* clear Exception Syndrome Reg */
        mttcr   r4                      /* clear Timer Control Reg */
@@ -851,7 +889,7 @@ _start:
        /*----------------------------------------------------------------------- */
        /* Enable two 128MB cachable regions. */
        /*----------------------------------------------------------------------- */
-       lis     r4,0x8000
+       lis     r4,0xc000
        ori     r4,r4,0x0001
        mticcr  r4                      /* instruction cache */
        isync
@@ -860,12 +898,34 @@ _start:
        ori     r4,r4,0x0000
        mtdccr  r4                      /* data cache */
 
-#if !(defined(CFG_EBC_PB0AP) && defined(CFG_EBC_PB0CR))
+#if !(defined(CFG_EBC_PB0AP) && defined(CFG_EBC_PB0CR)) || defined(CONFIG_405EX)
        /*----------------------------------------------------------------------- */
        /* Tune the speed and size for flash CS0  */
        /*----------------------------------------------------------------------- */
        bl      ext_bus_cntlr_init
 #endif
+#if !(defined(CFG_INIT_DCACHE_CS) || defined(CFG_TEMP_STACK_OCM))
+       /*
+        * Boards like the Kilauea (405EX) don't have OCM and can't use
+        * DCache for init-ram. So setup stack here directly after the
+        * SDRAM is initialized.
+        */
+       lis     r1, CFG_INIT_RAM_ADDR@h
+       ori     r1,r1,CFG_INIT_SP_OFFSET /* set up the stack in SDRAM */
+
+       li      r0, 0                   /* Make room for stack frame header and */
+       stwu    r0, -4(r1)              /* clear final stack frame so that      */
+       stwu    r0, -4(r1)              /* stack backtraces terminate cleanly   */
+       /*
+        * Set up a dummy frame to store reset vector as return address.
+        * this causes stack underflow to reset board.
+        */
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       lis     r0, RESET_VECTOR@h      /* Address of reset vector */
+       ori     r0, r0, RESET_VECTOR@l
+       stwu    r1, -8(r1)              /* Save back chain and move SP */
+       stw     r0, +12(r1)             /* Save return addr (underflow vect) */
+#endif /* !(CFG_INIT_DCACHE_CS || !CFG_TEM_STACK_OCM) */
 
 #if defined(CONFIG_405EP)
        /*----------------------------------------------------------------------- */
@@ -983,7 +1043,7 @@ start_ram:
        ori     r4,r4,0xa000
        mtdcr   ebccfgd,r4
 
-       /* turn on data chache for this region */
+       /* turn on data cache for this region */
        lis     r4,0x0080
        mtdccr  r4
 
@@ -1049,30 +1109,6 @@ start_ram:
        /*----------------------------------------------------------------------- */
        bl      sdram_init
 
-       /*
-        * Setup temporary stack pointer only for boards
-        * that do not use SDRAM SPD I2C stuff since it
-        * is already initialized to use DCACHE or OCM
-        * stacks.
-        */
-#if !(defined(CFG_INIT_DCACHE_CS) || defined(CFG_TEMP_STACK_OCM))
-       lis     r1, CFG_INIT_RAM_ADDR@h
-       ori     r1,r1,CFG_INIT_SP_OFFSET /* set up the stack in SDRAM */
-
-       li      r0, 0                   /* Make room for stack frame header and */
-       stwu    r0, -4(r1)              /* clear final stack frame so that      */
-       stwu    r0, -4(r1)              /* stack backtraces terminate cleanly   */
-       /*
-        * Set up a dummy frame to store reset vector as return address.
-        * this causes stack underflow to reset board.
-        */
-       stwu    r1, -8(r1)              /* Save back chain and move SP */
-       lis     r0, RESET_VECTOR@h      /* Address of reset vector */
-       ori     r0, r0, RESET_VECTOR@l
-       stwu    r1, -8(r1)              /* Save back chain and move SP */
-       stw     r0, +12(r1)             /* Save return addr (underflow vect) */
-#endif /* !(CFG_INIT_DCACHE_CS || !CFG_TEM_STACK_OCM) */
-
 #ifdef CONFIG_NAND_SPL
        bl      nand_boot               /* will not return */
 #else
@@ -1211,111 +1247,6 @@ mck_return:
 #endif /* CONFIG_440 */
 
 
-/*
- * Cache functions.
- *
- * NOTE: currently the 440s run with dcache _disabled_ once relocated to DRAM,
- * although for some cache-ralated calls stubs have to be provided to satisfy
- * symbols resolution.
- * Icache-related functions are used in POST framework.
- *
- */
-#ifdef CONFIG_440
-       .globl  dcache_disable
-       .globl  icache_disable
-       .globl  icache_enable
-dcache_disable:
-icache_disable:
-icache_enable:
-       blr
-
-       .globl  dcache_status
-       .globl  icache_status
-dcache_status:
-icache_status:
-       mr      r3,  0
-       blr
-#else
-flush_dcache:
-       addis   r9,r0,0x0002            /* set mask for EE and CE msr bits */
-       ori     r9,r9,0x8000
-       mfmsr   r12                     /* save msr */
-       andc    r9,r12,r9
-       mtmsr   r9                      /* disable EE and CE */
-       addi    r10,r0,0x0001           /* enable data cache for unused memory */
-       mfdccr  r9                      /* region 0xF8000000-0xFFFFFFFF via */
-       or      r10,r10,r9              /* bit 31 in dccr */
-       mtdccr  r10
-
-       /* do loop for # of congruence classes. */
-       lis     r10,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha       /* TBS: for large cache sizes */
-       ori     r10,r10,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l
-       lis     r11,(CFG_DCACHE_SIZE / 2)@ha /* D cache set size - 2 way sets */
-       ori     r11,r11,(CFG_DCACHE_SIZE / 2)@l /* D cache set size - 2 way sets */
-       mtctr   r10
-       addi    r10,r0,(0xE000-0x10000) /* start at 0xFFFFE000 */
-       add     r11,r10,r11             /* add to get to other side of cache line */
-..flush_dcache_loop:
-       lwz     r3,0(r10)               /* least recently used side */
-       lwz     r3,0(r11)               /* the other side */
-       dccci   r0,r11                  /* invalidate both sides */
-       addi    r10,r10,CFG_CACHELINE_SIZE /* bump to next line */
-       addi    r11,r11,CFG_CACHELINE_SIZE /* bump to next line */
-       bdnz    ..flush_dcache_loop
-       sync                            /* allow memory access to complete */
-       mtdccr  r9                      /* restore dccr */
-       mtmsr   r12                     /* restore msr */
-       blr
-
-       .globl  icache_enable
-icache_enable:
-       mflr    r8
-       bl      invalidate_icache
-       mtlr    r8
-       isync
-       addis   r3,r0, 0x8000         /* set bit 0 */
-       mticcr  r3
-       blr
-
-       .globl  icache_disable
-icache_disable:
-       addis   r3,r0, 0x0000         /* clear bit 0 */
-       mticcr  r3
-       isync
-       blr
-
-       .globl  icache_status
-icache_status:
-       mficcr  r3
-       srwi    r3, r3, 31      /* >>31 => select bit 0 */
-       blr
-
-       .globl  dcache_enable
-dcache_enable:
-       mflr    r8
-       bl      invalidate_dcache
-       mtlr    r8
-       isync
-       addis   r3,r0, 0x8000         /* set bit 0 */
-       mtdccr  r3
-       blr
-
-       .globl  dcache_disable
-dcache_disable:
-       mflr    r8
-       bl      flush_dcache
-       mtlr    r8
-       addis   r3,r0, 0x0000         /* clear bit 0 */
-       mtdccr  r3
-       blr
-
-       .globl  dcache_status
-dcache_status:
-       mfdccr  r3
-       srwi    r3, r3, 31      /* >>31 => select bit 0 */
-       blr
-#endif
-
        .globl get_pvr
 get_pvr:
        mfspr   r3, PVR
@@ -1421,6 +1352,51 @@ ppcSync:
  */
        .globl  relocate_code
 relocate_code:
+#ifdef CONFIG_4xx_DCACHE
+       /*
+        * We need to flush the Init Data before the dcache will be
+        * invalidated
+        */
+
+       /* save regs */
+       mr      r9,r3
+       mr      r10,r4
+       mr      r11,r5
+
+       mr      r3,r4
+       addi    r4,r4,0x200     /* should be enough for init data */
+       bl      flush_dcache_range
+
+       /* restore regs */
+       mr      r3,r9
+       mr      r4,r10
+       mr      r5,r11
+#endif
+
+#ifdef CFG_INIT_RAM_DCACHE
+       /*
+        * Unlock the previously locked d-cache
+        */
+       msync
+       isync
+       /* set TFLOOR/NFLOOR to 0 again */
+       lis     r6,0x0001
+       ori     r6,r6,0xf800
+       mtspr   dvlim,r6
+       lis     r6,0x0000
+       ori     r6,r6,0x0000
+       mtspr   dnv0,r6
+       mtspr   dnv1,r6
+       mtspr   dnv2,r6
+       mtspr   dnv3,r6
+       mtspr   dtv0,r6
+       mtspr   dtv1,r6
+       mtspr   dtv2,r6
+       mtspr   dtv3,r6
+       msync
+       isync
+#endif /* CFG_INIT_RAM_DCACHE */
+
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
     defined(CONFIG_440SP) || defined(CONFIG_440SPE)
@@ -1432,7 +1408,11 @@ relocate_code:
        dccci   0,0                     /* Invalidate data cache, now no longer our stack */
        sync
        isync
-       addi    r1,r0,0x0000            /* TLB entry #0 */
+#ifdef CFG_TLB_FOR_BOOT_FLASH
+       addi    r1,r0,CFG_TLB_FOR_BOOT_FLASH    /* Use defined TLB */
+#else
+       addi    r1,r0,0x0000            /* Default TLB entry is #0 */
+#endif
        tlbre   r0,r1,0x0002            /* Read contents */
        ori     r0,r0,0x0c00            /* Or in the inhibit, write through bit */
        tlbwe   r0,r1,0x0002            /* Save it out */
@@ -1448,7 +1428,7 @@ relocate_code:
        ori     r4, r4, CFG_MONITOR_BASE@l
        lwz     r5, GOT(__init_end)
        sub     r5, r5, r4
-       li      r6, CFG_CACHELINE_SIZE          /* Cache Line Size      */
+       li      r6, L1_CACHE_BYTES              /* Cache Line Size      */
 
        /*
         * Fix GOT pointer:
@@ -1566,16 +1546,25 @@ clear_bss:
        lwz     r4,GOT(_end)
 
        cmplw   0, r3, r4
-       beq     6f
+       beq     7f
 
        li      r0, 0
-5:
+
+       andi.   r5, r4, 3
+       beq     6f
+       sub     r4, r4, r5
+       mtctr   r5
+       mr      r5, r4
+5:     stb     r0, 0(r5)
+       addi    r5, r5, 1
+       bdnz    5b
+6:
        stw     r0, 0(r3)
        addi    r3, r3, 4
        cmplw   0, r3, r4
-       bne     5b
-6:
+       bne     6b
 
+7:
        mr      r3, r9          /* Init Data pointer            */
        mr      r4, r10         /* Destination Address          */
        bl      board_init_r
@@ -1711,6 +1700,7 @@ trap_reloc:
        rlwinm  r8,r9,0,15,13
        rlwinm  r8,r8,0,17,15
        mtmsr   r8
+       mfspr   r8,dvlim
        addi    r3,r0,0x0000
        mtspr   dvlim,r3
        mfspr   r3,ivpr
@@ -1725,6 +1715,7 @@ trap_reloc:
 ..ag:  dcbf    r0,r3
        addi    r3,r3,-32
        bdnz    ..ag
+       mtspr   dvlim,r8
        sync
        mtmsr   r9
        blr
@@ -1768,23 +1759,6 @@ in32:
        lwz     3,0x0000(3)
        blr
 
-invalidate_icache:
-       iccci   r0,r0                   /* for 405, iccci invalidates the */
-       blr                             /*   entire I cache */
-
-invalidate_dcache:
-       addi    r6,0,0x0000             /* clear GPR 6 */
-       /* Do loop for # of dcache congruence classes. */
-       lis     r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha       /* TBS for large sized cache */
-       ori     r7, r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l
-                                       /* NOTE: dccci invalidates both */
-       mtctr   r7                      /* ways in the D cache */
-..dcloop:
-       dccci   0,r6                    /* invalidate line */
-       addi    r6,r6, CFG_CACHELINE_SIZE /* bump to next line */
-       bdnz    ..dcloop
-       blr
-
 /**************************************************************************/
 /* PPC405EP specific stuff                                               */
 /**************************************************************************/
index 098694caf4946704aed9344e808897b955064848..ed493f1a71091fb407cbd9231d0b0dbb279ec376 100644 (file)
@@ -26,6 +26,7 @@
 #if defined(CONFIG_440)
 
 #include <ppc440.h>
+#include <asm/cache.h>
 #include <asm/io.h>
 #include <asm/mmu.h>
 
@@ -42,7 +43,6 @@ void remove_tlb(u32 vaddr, u32 size)
        u32 tlb_vaddr;
        u32 tlb_size = 0;
 
-       /* First, find the index of a TLB entry not being used */
        for (i=0; i<PPC4XX_TLB_SIZE; i++) {
                tlb_word0_value = mftlb1(i);
                tlb_vaddr = TLB_WORD0_EPN_DECODE(tlb_word0_value);
@@ -96,6 +96,92 @@ void remove_tlb(u32 vaddr, u32 size)
        asm("isync");
 }
 
+/*
+ * Change the I attribute (cache inhibited) of a TLB or multiple TLB's.
+ * This function is used to either turn cache on or off in a specific
+ * memory area.
+ */
+void change_tlb(u32 vaddr, u32 size, u32 tlb_word2_i_value)
+{
+       int i;
+       u32 tlb_word0_value;
+       u32 tlb_word2_value;
+       u32 tlb_vaddr;
+       u32 tlb_size = 0;
+
+       for (i=0; i<PPC4XX_TLB_SIZE; i++) {
+               tlb_word0_value = mftlb1(i);
+               tlb_vaddr = TLB_WORD0_EPN_DECODE(tlb_word0_value);
+               if (((tlb_word0_value & TLB_WORD0_V_MASK) == TLB_WORD0_V_ENABLE) &&
+                   (tlb_vaddr >= vaddr)) {
+                       /*
+                        * TLB is enabled and start address is lower or equal
+                        * than the area we are looking for. Now we only have
+                        * to check the size/end address for a match.
+                        */
+                       switch (tlb_word0_value & TLB_WORD0_SIZE_MASK) {
+                       case TLB_WORD0_SIZE_1KB:
+                               tlb_size = 1 << 10;
+                               break;
+                       case TLB_WORD0_SIZE_4KB:
+                               tlb_size = 4 << 10;
+                               break;
+                       case TLB_WORD0_SIZE_16KB:
+                               tlb_size = 16 << 10;
+                               break;
+                       case TLB_WORD0_SIZE_64KB:
+                               tlb_size = 64 << 10;
+                               break;
+                       case TLB_WORD0_SIZE_256KB:
+                               tlb_size = 256 << 10;
+                               break;
+                       case TLB_WORD0_SIZE_1MB:
+                               tlb_size = 1 << 20;
+                               break;
+                       case TLB_WORD0_SIZE_16MB:
+                               tlb_size = 16 << 20;
+                               break;
+                       case TLB_WORD0_SIZE_256MB:
+                               tlb_size = 256 << 20;
+                               break;
+                       }
+
+                       /*
+                        * Now check the end-address if it's in the range
+                        */
+                       if ((tlb_vaddr + tlb_size - 1) <= (vaddr + size - 1)) {
+                               /*
+                                * Found a TLB in the range.
+                                * Change cache attribute in tlb2 word.
+                                */
+                               tlb_word2_value =
+                                       TLB_WORD2_U0_DISABLE | TLB_WORD2_U1_DISABLE |
+                                       TLB_WORD2_U2_DISABLE | TLB_WORD2_U3_DISABLE |
+                                       TLB_WORD2_W_DISABLE | tlb_word2_i_value |
+                                       TLB_WORD2_M_DISABLE | TLB_WORD2_G_DISABLE |
+                                       TLB_WORD2_E_DISABLE | TLB_WORD2_UX_ENABLE |
+                                       TLB_WORD2_UW_ENABLE | TLB_WORD2_UR_ENABLE |
+                                       TLB_WORD2_SX_ENABLE | TLB_WORD2_SW_ENABLE |
+                                       TLB_WORD2_SR_ENABLE;
+
+                               /*
+                                * Now either flush or invalidate the dcache
+                                */
+                               if (tlb_word2_i_value)
+                                       flush_dcache();
+                               else
+                                       invalidate_dcache();
+
+                               mttlb3(i, tlb_word2_value);
+                               asm("iccci 0,0");
+                       }
+               }
+       }
+
+       /* Execute an ISYNC instruction so that the new TLB entry takes effect */
+       asm("isync");
+}
+
 static int add_tlb_entry(unsigned long phys_addr,
                         unsigned long virt_addr,
                         unsigned long tlb_word0_size_value,
index 272ed8c15e4f75ca3109f846434f3c6b6c9c9abd..cb8d5c7d30f631ff8b0223f1c664d3df18ce89b0 100644 (file)
 
 #if defined(CONFIG_USB_OHCI_NEW) && defined(CFG_USB_OHCI_CPU_INIT)
 
+#ifdef CONFIG_4xx_DCACHE
+#include <asm/mmu.h>
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
 #include "usbdev.h"
 
 int usb_cpu_init(void)
 {
+#ifdef CONFIG_4xx_DCACHE
+       /* disable cache */
+       change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, TLB_WORD2_I_ENABLE);
+#endif
 
 #if defined(CONFIG_440EP) || defined(CONFIG_440EPX)
        usb_dev_init();
 #endif
-
        return 0;
 }
 
 int usb_cpu_stop(void)
 {
+#ifdef CONFIG_4xx_DCACHE
+       /* enable cache */
+       change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, 0);
+#endif
        return 0;
 }
 
 int usb_cpu_init_fail(void)
 {
+#ifdef CONFIG_4xx_DCACHE
+       /* enable cache */
+       change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, 0);
+#endif
        return 0;
 }
 
index 5924a6cb8470424ee610bf931ac8c0672070b482..d71ba7710a0e54df87560f0be66ce773021a4376 100644 (file)
@@ -7,7 +7,7 @@
 
 #include <usb.h>
 #include "usbdev.h"
-#include "vecnum.h"
+#include <asm/ppc4xx-intvec.h>
 
 #define USB_DT_DEVICE        0x01
 #define USB_DT_CONFIG        0x02
index b922485ed33a796926a7d27495d0daa42890f056..31f408dfa72f931aa260e52c5597168b5e7b419d 100644 (file)
@@ -57,7 +57,7 @@ _fiq:                 .word fiq
  * Startup Code (reset vector)
  *
  * do important init only if we don't start from RAM!
- * - relocate armboot to ram
+ * - relocate armboot to RAM
  * - setup stack
  * - jump to second stage
  */
@@ -90,7 +90,7 @@ IRQ_STACK_START:
 .globl FIQ_STACK_START
 FIQ_STACK_START:
        .word 0x0badc0de
-#endif
+#endif /* CONFIG_USE_IRQ */
 
 
 /****************************************************************************/
@@ -100,18 +100,18 @@ FIQ_STACK_START:
 /****************************************************************************/
 
 reset:
-       mrs     r0,cpsr                 /* set the cpu to SVC32 mode        */
+       mrs     r0,cpsr                 /* set the CPU to SVC32 mode        */
        bic     r0,r0,#0x1f             /* (superviser mode, M=10011)       */
        orr     r0,r0,#0x13
        msr     cpsr,r0
 
        /*
         * we do sys-critical inits only at reboot,
-        * not when booting from ram!
+        * not when booting from RAM!
         */
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl      cpu_init_crit           /* we do sys-critical inits         */
-#endif
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT */
 
 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
 relocate:                              /* relocate U-Boot to RAM           */
@@ -130,7 +130,7 @@ copy_loop:
        stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
        cmp     r0, r2                  /* until source end addreee [r2]    */
        ble     copy_loop
-#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
+#endif /* !CONFIG_SKIP_RELOCATE_UBOOT */
 
        /* Set up the stack                                                 */
 stack_setup:
@@ -139,7 +139,7 @@ stack_setup:
        sub     r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
 #ifdef CONFIG_USE_IRQ
        sub     r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
-#endif
+#endif /* CONFIG_USE_IRQ */
        sub     sp, r0, #12             /* leave 3 words for abort-stack    */
 
 clear_bss:
@@ -172,11 +172,11 @@ _start_armboot: .word start_armboot
 #undef OSCR
 #undef OWER
 #undef OIER
-#endif
+#endif /* CONFIG_PXA250 || CONFIG_CPU_MONAHANS */
 #ifdef CONFIG_PXA250
 #undef RCSR
 #undef CCCR
-#endif
+#endif /* CONFIG_PXA250 */
 
 /* Interrupt-Controller base address                                       */
 IC_BASE:          .word           0x40d00000
@@ -197,18 +197,18 @@ OSTIMER_BASE:     .word   0x40a00000
 #ifdef CONFIG_CPU_MONAHANS
 # ifndef CFG_MONAHANS_RUN_MODE_OSC_RATIO
 #  error "You have to define CFG_MONAHANS_RUN_MODE_OSC_RATIO!!"
-# endif
+# endif /* !CFG_MONAHANS_RUN_MODE_OSC_RATIO */
 # ifndef CFG_MONAHANS_TURBO_RUN_MODE_RATIO
 #  define CFG_MONAHANS_TURBO_RUN_MODE_RATIO 0x1
-# endif
-#else /* ! CONFIG_CPU_MONAHANS */
+# endif /* !CFG_MONAHANS_TURBO_RUN_MODE_RATIO */
+#else /* !CONFIG_CPU_MONAHANS */
 #ifdef CFG_CPUSPEED
 CC_BASE:       .word   0x41300000
 #define CCCR   0x00
 cpuspeed:      .word   CFG_CPUSPEED
-#else
+#else /* !CFG_CPUSPEED */
 #error "You have to define CFG_CPUSPEED!!"
-#endif
+#endif /* CFG_CPUSPEED */
 #endif /* CONFIG_CPU_MONAHANS */
 
        /* takes care the CP15 update has taken place */
@@ -225,7 +225,7 @@ cpu_init_crit:
        ldr     r0, IC_BASE
        mov     r1, #0x00
        str     r1, [r0, #ICMR]
-#else
+#else /* CONFIG_CPU_MONAHANS */
        /* Step 1 - Enable CP6 permission */
        mrc     p15, 0, r1, c15, c1, 0  @ read CPAR
        orr     r1, r1, #0x40
@@ -244,14 +244,14 @@ cpu_init_crit:
        ldr     r1, =CKENB
        ldr     r2, =(CKENB_6_IRQ)
        str     r2, [r1]
-#endif
+#endif /* !CONFIG_CPU_MONAHANS */
 
        /* set clock speed */
 #ifdef CONFIG_CPU_MONAHANS
        ldr     r0, =ACCR
        ldr     r1, =(((CFG_MONAHANS_TURBO_RUN_MODE_RATIO<<8) & ACCR_XN_MASK) | (CFG_MONAHANS_RUN_MODE_OSC_RATIO & ACCR_XL_MASK))
        str     r1, [r0]
-#else /* ! CONFIG_CPU_MONAHANS */
+#else /* !CONFIG_CPU_MONAHANS */
 #ifdef CFG_CPUSPEED
        ldr     r0, CC_BASE
        ldr     r1, cpuspeed
@@ -451,7 +451,7 @@ fiq:
        bl      do_fiq                  /* effiction fiq_save_user_regs     */
        irq_restore_user_regs
 
-#else
+#else /* !CONFIG_USE_IRQ */
 
        .align  5
 irq:
@@ -465,7 +465,7 @@ fiq:
        bad_save_user_regs
        bl      do_fiq
 
-#endif
+#endif /* CONFIG_USE_IRQ */
 
 /****************************************************************************/
 /*                                                                         */
index 72b7dfadfe70ff2e180458c434e588cc31c45693..aa6f4b7b9d15b940b3e44034e30b6a66b7f67ba9 100644 (file)
@@ -89,6 +89,22 @@ int usb_cpu_stop(void)
 
 int usb_cpu_init_fail(void)
 {
+       UHCHR |= UHCHR_FHR;
+       udelay(11);
+       UHCHR &= ~UHCHR_FHR;
+
+       UHCCOMS |= 1;
+       udelay(10);
+
+#if defined(CONFIG_CPU_MONAHANS)
+       UHCHR |= UHCHR_SSEP0;
+#endif
+#if defined(CONFIG_PXA27X)
+       UHCHR |= UHCHR_SSEP2;
+#endif
+       UHCHR |= UHCHR_SSEP1;
+       UHCHR |= UHCHR_SSE;
+
        return 0;
 }
 
diff --git a/doc/README.atum8548 b/doc/README.atum8548
new file mode 100644 (file)
index 0000000..4eb56ba
--- /dev/null
@@ -0,0 +1,29 @@
+Building U-Boot
+---------------
+
+The ATUM8548 code is known to build using ELDK 4.1.
+
+$ make ATUM8548_config
+Configuring for ATUM8548 board...
+$ make
+
+Using Flash
+-----------
+
+The ATUM8548 board  has one flash bank, of 128MB in size (2^23 = 0x08000000).
+
+The BDI2000 commands for copying u-boot into flash are
+as follows:
+
+     erase 0xFFF80000 0x4000 0x20
+     prog 0xfff80000 uboot.bin bin
+
+Booting Linux
+-------------
+
+U-boot/kermit commands for booting linux via NFS - assumming the proper
+bootargs are set - are as follows:
+
+     tftp 1000000 uImage.atum
+     tftp c00000 mpc8548atum.dtb
+     bootm 1000000 - c00000
index 494dd1f5d92bfa404d47671ae27f6525394f2698..c44c5014743e614990fa280a581acbf0b757180b 100644 (file)
@@ -1,7 +1,7 @@
 Notes on the the generic USB-OHCI driver
 ========================================
 
-This driver (drivers/usb_ohci.[ch]) is the result of the merge of
+This driver (drivers/usb/usb_ohci.[ch]) is the result of the merge of
 various existing OHCI drivers that were basically identical beside
 cpu/board dependant initalization. This initalization has been moved
 into cpu/board directories and are called via the hooks below.
index 30338ce8cc74cde0c1ae7cb91b4d636193dccdd5..f7bb254e16d0858316853c0ddb77aaca968b2664 100644 (file)
@@ -51,8 +51,8 @@ board/modnet50/lowlevel_init.S   .. memory setup for ModNET50
 board/modnet50/flash.c     .. flash routines
 board/modnet50/modnet50.c   .. some board init stuff
 
-drivers/netarm_eth.c       .. ethernet driver for the NET+50 CPU
-drivers/netarm_eth.h       .. header for ethernet driver
+drivers/net/netarm_eth.c    .. ethernet driver for the NET+50 CPU
+drivers/net/netarm_eth.h    .. header for ethernet driver
 
 include/configs/modnet50.h  .. configuration file for ModNET50
 
diff --git a/doc/README.mpc837xemds b/doc/README.mpc837xemds
new file mode 100644 (file)
index 0000000..3f0cdf7
--- /dev/null
@@ -0,0 +1,104 @@
+Freescale MPC837xEMDS Board
+-----------------------------------------
+1.     Board Switches and Jumpers
+1.0    There are four Dual-In-Line Packages(DIP) Switches on MPC837xEMDS board
+       For some reason, the HW designers describe the switch settings
+       in terms of 0 and 1, and then map that to physical switches where
+       the label "On" refers to logic 0 and "Off" is logic 1.
+
+       Switch bits are numbered 1 through, like, 4 6 8 or 10, but the
+       bits may contribute to signals that are numbered based at 0,
+       and some of those signals may be high-bit-number-0 too.  Heed
+       well the names and labels and do not get confused.
+
+               "Off" == 1
+               "On"  == 0
+
+       SW4[8] is the bit labled 8 on Switch 4.
+       SW2[1:6] refers to bits labeled 1 through 6 in order on switch 2.
+       SW2[1:8]= 0000_0001 refers to bits labeled 1 through 7 is set as "On"
+               and bits labeled 8 is set as "Off".
+
+1.1    For the MPC837xEMDS Processor Board
+
+       First, make sure the board default setting is consistent with the
+       document shipped with your board. Then apply the following setting:
+       SW3[1-8]= 0011_0000  (BOOTSEQ, ROMLOC setting)
+       SW4[1-8]= 0000_0110  (core PLL setting)
+       SW5[1-8]= 1001_1000  (system PLL, boot up from low end of flash)
+       SW6[1-8]= 0000_1000  (HRCW is read from NOR FLASH)
+       SW7[1-8]= 0110_1101  (TSEC1/2 interface setting - RGMII)
+       J3 2-3, TSEC1 LVDD1 with 2.5V
+       J6 2-3, TSEC2 LVDD2 with 2.5V
+       J9 2-3, CLKIN from osc on board
+       J10 removed, CS0 connect to NOR flash; when mounted, CS0 connect to NAND
+       J11 removed, Hardware Reset Configuration Word load from FLASH(NOR or NAND)
+           mounted, HRCW load from BCSR.
+
+       on board Oscillator: 66M
+
+2.     Memory Map
+
+2.1.   The memory map should look pretty much like this:
+
+       0x0000_0000     0x7fff_ffff     DDR                     2G
+       0x8000_0000     0x8fff_ffff     PCI MEM prefetch        256M
+       0x9000_0000     0x9fff_ffff     PCI MEM non-prefetch    256M
+       0xc000_0000     0xdfff_ffff     Empty                   512M
+       0xe000_0000     0xe00f_ffff     Int Mem Reg Space       1M
+       0xe010_0000     0xe02f_ffff     Empty                   2M
+       0xe030_0000     0xe03f_ffff     PCI IO                  1M
+       0xe040_0000     0xe05f_ffff     Empty                   2M
+       0xe060_0000     0xe060_8000     NAND Flash              32K
+       0xf400_0000     0xf7ff_ffff     Empty                   64M
+       0xf800_0000     0xf800_7fff     BCSR on CS1             32K
+       0xfe00_0000     0xffff_ffff     NOR Flash on CS0        32M
+
+3. Definitions
+
+3.1 Explanation of NEW definitions in:
+
+       include/configs/MPC837XEMDS.h
+
+    CONFIG_MPC83XX         MPC83xx family for both MPC837x and MPC8360
+    CONFIG_MPC837X         MPC837x specific
+    CONFIG_MPC837XEMDS     MPC837XEMDS board specific
+
+4. Compilation
+
+       Assuming you're using BASH shell:
+
+               export CROSS_COMPILE=your-cross-compile-prefix
+               cd u-boot
+               make distclean
+               make MPC837XEMDS_config
+               make
+
+5. Downloading and Flashing Images
+
+5.0 Download over serial line using Kermit:
+
+       loadb
+       [Drop to kermit:
+           ^\c
+           send <u-boot-bin-image>
+           c
+       ]
+
+
+    Or via tftp:
+
+       tftp 40000 u-boot.bin
+
+5.1 Reflash U-boot Image using U-boot
+
+       tftp 40000 u-boot.bin
+       protect off fe000000 fe1fffff
+       erase fe000000 fe1fffff
+
+       cp.b 40000 fe000000 xxxx
+
+You have to supply the correct byte count with 'xxxx' from the TFTP result log.
+
+6. Notes
+       1) The console baudrate for MPC837XEMDS is 115200bps.
diff --git a/doc/README.mpc8610hpcd b/doc/README.mpc8610hpcd
new file mode 100644 (file)
index 0000000..949dcb2
--- /dev/null
@@ -0,0 +1,67 @@
+Freescale MPC8610HPCD board
+===========================
+
+
+Building U-Boot
+---------------
+
+    $ make MPC8610HPCD_config
+    Configuring for MPC8610HPCD board...
+
+    $ make
+
+
+Flashing U-Boot
+---------------
+The flash is 128M starting at 0xF800_0000.
+
+The alternate image is at 0xFBF0_0000
+The      boot image is at 0xFFF0_0000.
+
+
+To Flash U-Boot into the booting bank:
+
+       tftp 1000000 u-boot.bin
+       protect off all
+       erase fff00000 +$filesize
+       cp.b 1000000 fff00000 $filesize
+
+
+To Flash U-boot into the alternate bank
+
+       tftp 1000000 u-boot.bin
+       erase fbf00000 +$filesize
+       cp.b 1000000 fbf00000 $filesize
+
+
+pixis_reset command
+-------------------
+A new command, "pixis_reset", is introduced to reset mpc8610hpcd 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
index c5c5ef29e6390df037679b2734737dceaca507ce..647a6b8e67fa7cf726b74a39f2df2a89d419330d 100644 (file)
@@ -79,7 +79,7 @@ Commands:
 
    nand write.jffs2 addr ofs|partition size
       Like `write', but blocks that are marked bad are skipped and the
-      is written to the next block instead. This allows writing writing
+      data is written to the next block instead. This allows writing
       a JFFS2 image, as long as the image is short enough to fit even
       after skipping the bad blocks. Compact images, such as those
       produced by mkfs.jffs2 should work well, but loading an image copied
diff --git a/doc/README.sbc8548 b/doc/README.sbc8548
new file mode 100644 (file)
index 0000000..b34d040
--- /dev/null
@@ -0,0 +1,27 @@
+Wind River SBC8548 reference board
+===========================
+
+Copyright 2007, Embedded Specialties, Inc.
+Copyright 2007 Wind River Systemes, Inc.
+-----------------------------
+
+1. Building U-Boot
+------------------
+The SBC8548 code is known to build using ELDK 4.1.
+
+    $ make sbc8548_config
+    Configuring for sbc8548 board...
+
+    $ make
+
+
+2. Switch and Jumper Settings
+-----------------------------
+All Jumpers & Switches are in their default positions.  Please refer to
+the board documentation for details.  Some settings control CPU voltages
+and settings may change with board revisions.
+
+3. Known limitations
+--------------------
+PCI:
+       The code to support PCI is currently disabled and has not been verified.
index cebb2ba6353dfc328b5e5fb6692b9af08ced4ee4..065433a6088942d2ace9bf98f21fc12e945886c6 100644 (file)
@@ -34,6 +34,7 @@ COBJS-y += adm1021.o
 COBJS-y += ds1621.o
 COBJS-y += ds1722.o
 COBJS-y += ds1775.o
+COBJS-$(CONFIG_DTT_LM73) += lm73.o
 COBJS-y += lm75.o
 COBJS-y += lm81.o
 
index e44cee3279c72942d1f0f927d17e0a72c162fb1d..0fbb0b42a789d96fd4448c6fe2a929e578860ccf 100644 (file)
@@ -25,7 +25,7 @@
 #include <i2c.h>
 #include <dtt.h>
 
-#define DTT_I2C_DEV_CODE 0x49          /* Dallas Semi's DS1775 device code */
+#define DTT_I2C_DEV_CODE       CFG_I2C_DTT_ADDR /* Dallas Semi's DS1775 device code */
 
 int dtt_read(int sensor, int reg)
 {
diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c
new file mode 100644 (file)
index 0000000..db8ef66
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * (C) Copyright 2007
+ * Larry Johnson, lrj@acm.org
+ *
+ * based on dtt/lm75.c which is ...
+ *
+ * (C) Copyright 2001
+ * Bill Hunter,  Wave 7 Optics, williamhunter@mediaone.net
+ *
+ * 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
+ */
+
+/*
+ * National Semiconductor LM73 Temperature Sensor
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <dtt.h>
+
+/*
+ * Device code
+ */
+#define DTT_I2C_DEV_CODE 0x48  /* National Semi's LM73 device */
+
+int dtt_read(int sensor, int reg)
+{
+       int dlen;
+       uchar data[2];
+
+       /*
+        * Validate 'reg' param and get register size.
+        */
+       switch (reg) {
+       case DTT_CONFIG:
+       case DTT_CONTROL:
+               dlen = 1;
+               break;
+       case DTT_READ_TEMP:
+       case DTT_TEMP_HIGH:
+       case DTT_TEMP_LOW:
+       case DTT_ID:
+               dlen = 2;
+               break;
+       default:
+               return -1;
+       }
+       /*
+        * Calculate sensor address and register.
+        */
+       sensor = DTT_I2C_DEV_CODE + (sensor & 0x07);    /* calculate LM73 addr */
+       /*
+        * Now try to read the register.
+        */
+       if (i2c_read(sensor, reg, 1, data, dlen) != 0)
+               return -1;
+       /*
+        * Handle 2 byte result.
+        */
+       if (2 == dlen)
+               return ((int)((short)data[1] + (((short)data[0]) << 8)));
+
+       return (int)data[0];
+} /* dtt_read() */
+
+int dtt_write(int sensor, int reg, int val)
+{
+       int dlen;
+       uchar data[2];
+
+       /*
+        * Validate 'reg' param and handle register size
+        */
+       switch (reg) {
+       case DTT_CONFIG:
+       case DTT_CONTROL:
+               dlen = 1;
+               data[0] = (char)(val & 0xff);
+               break;
+       case DTT_TEMP_HIGH:
+       case DTT_TEMP_LOW:
+               dlen = 2;
+               data[0] = (char)((val >> 8) & 0xff);    /* MSB first */
+               data[1] = (char)(val & 0xff);
+               break;
+       default:
+               return -1;
+       }
+       /*
+        * Calculate sensor address and register.
+        */
+       sensor = DTT_I2C_DEV_CODE + (sensor & 0x07);    /* calculate LM73 addr */
+       /*
+        * Write value to register.
+        */
+       return i2c_write(sensor, reg, 1, data, dlen) != 0;
+} /* dtt_write() */
+
+static int _dtt_init(int sensor)
+{
+       int val;
+
+       /*
+        * Validate the Identification register
+        */
+       if (0x0190 != dtt_read(sensor, DTT_ID))
+               return 1;
+       /*
+        * Setup THIGH (upper-limit) and TLOW (lower-limit) registers
+        */
+       val = CFG_DTT_MAX_TEMP << 7;
+       if (dtt_write(sensor, DTT_TEMP_HIGH, val))
+               return 1;
+
+       val = CFG_DTT_MIN_TEMP << 7;
+       if (dtt_write(sensor, DTT_TEMP_LOW, val))
+               return 1;
+       /*
+        * Setup configuraton register
+        */
+       /* config = alert active low, disabled, and reset */
+       val = 0x64;
+       if (dtt_write(sensor, DTT_CONFIG, val))
+               return 1;
+       /*
+        * Setup control/status register
+        */
+       /* control = temp resolution 0.25C */
+       val = 0x00;
+       if (dtt_write(sensor, DTT_CONTROL, val))
+               return 1;
+
+       dtt_read(sensor, DTT_CONTROL);  /* clear temperature flags */
+       return 0;
+} /* _dtt_init() */
+
+int dtt_init(void)
+{
+       int i;
+       unsigned char sensors[] = CONFIG_DTT_SENSORS;
+       const char *const header = "DTT:   ";
+
+       for (i = 0; i < sizeof(sensors); i++) {
+               if (_dtt_init(sensors[i]) != 0)
+                       printf("%s%d FAILED INIT\n", header, i + 1);
+               else
+                       printf("%s%d is %i C\n", header, i + 1,
+                              dtt_get_temp(sensors[i]));
+       }
+       return 0;
+} /* dtt_init() */
+
+int dtt_get_temp(int sensor)
+{
+       return (dtt_read(sensor, DTT_READ_TEMP) + 0x0040) >> 7;
+} /* dtt_get_temp() */
index 4fd4e166e6ad6c36ed9d7ac9a8178b36e8ec6d9b..6c5624a49a4b5b7c8e7ad4f63f3f17feccbc1cdf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * drivers/nand/nand_util.c
+ * drivers/mtd/nand/nand_util.c
  *
  * Copyright (C) 2006 by Weiss-Electronic GmbH.
  * All rights reserved.
index d5275dceb0fb6a8603f4881b16d32d4dc40fe4f8..723892261466d60c364b8362ea00121b0bd3c82a 100644 (file)
@@ -332,7 +332,7 @@ static int dc21x4x_init(struct eth_device* dev, bd_t* bis)
 
        if ((INL(dev, DE4X5_STS) & (STS_TS | STS_RS)) != 0) {
                printf("Error: Cannot reset ethernet controller.\n");
-               return 0;
+               return -1;
        }
 
 #ifdef CONFIG_TULIP_SELECT_MEDIA
@@ -382,7 +382,7 @@ static int dc21x4x_init(struct eth_device* dev, bd_t* bis)
 
        send_setup_frame(dev, bis);
 
-       return 1;
+       return 0;
 }
 
 static int dc21x4x_send(struct eth_device* dev, volatile void *packet, int length)
index 738146e6618e08e05656ca28ab879e38e0ff6fb2..96ed2710c21419286ed0ae02ac6db893b8a23442 100644 (file)
@@ -485,7 +485,7 @@ int eepro100_initialize (bd_t * bis)
 
 static int eepro100_init (struct eth_device *dev, bd_t * bis)
 {
-       int i, status = 0;
+       int i, status = -1;
        int tx_cur;
        struct descriptor *ias_cmd, *cfg_cmd;
 
@@ -598,7 +598,7 @@ static int eepro100_init (struct eth_device *dev, bd_t * bis)
                goto Done;
        }
 
-       status = 1;
+       status = 0;
 
   Done:
        return status;
index 95cdc496cbac384e28c3a4b8ab090073a73248d7..6657d22926b55f4000c03095bb9b87af53247056 100644 (file)
@@ -423,12 +423,12 @@ static int macb_init(struct eth_device *netdev, bd_t *bd)
 #endif
 
        if (!macb_phy_init(macb))
-               return 0;
+               return -1;
 
        /* Enable TX and RX */
        macb_writel(macb, NCR, MACB_BIT(TE) | MACB_BIT(RE));
 
-       return 1;
+       return 0;
 }
 
 static void macb_halt(struct eth_device *netdev)
index c978d62ef30ff7c42332b291762165e5afcc6aca..b1006575394863288ab72737d7a60cba57847994 100644 (file)
@@ -839,7 +839,7 @@ void uboot_push_packet_len(int len) {
        }
        dp83902a_recv(&pbuf[0], len);
 
-       /*Just pass it to the upper layer*/
+       /* Just pass it to the upper layer */
        NetReceive(&pbuf[0], len);
 }
 
@@ -902,7 +902,6 @@ int eth_init(bd_t *bd) {
 }
 
 void eth_halt() {
-
        PRINTK("### eth_halt\n");
        if(initialized)
                dp83902a_stop();
@@ -910,8 +909,8 @@ void eth_halt() {
 }
 
 int eth_rx() {
-dp83902a_poll();
-return 1;
+       dp83902a_poll();
+       return 1;
 }
 
 int eth_send(volatile void *packet, int length) {
index 2af0e8f244f3384af18c67cb6df366c51fd43982..4e270c9f7b3f0fb15c3b853f15e748c60868892f 100644 (file)
@@ -402,7 +402,7 @@ static int pcnet_init(struct eth_device* dev, bd_t *bis)
     if (i <= 0) {
        printf("%s: TIMEOUT: controller init failed\n", dev->name);
        pcnet_reset (dev);
-       return 0;
+       return -1;
     }
 
     /*
@@ -410,7 +410,7 @@ static int pcnet_init(struct eth_device* dev, bd_t *bis)
      */
     pcnet_write_csr (dev, 0, 0x0002);
 
-    return 1;
+    return 0;
 }
 
 static int pcnet_send(struct eth_device* dev, volatile void *packet, int pkt_len)
index 23671800579a4119fafc9a13f42b7a35ed182850..4c248054c3eb7f76b1d9917ead2497617f193bf3 100644 (file)
@@ -273,10 +273,10 @@ static int rtl8139_probe(struct eth_device *dev, bd_t *bis)
 
        if (inb(ioaddr + MediaStatus) & MSRLinkFail) {
                printf("Cable not connected or other link failure\n");
-               return(0);
+               return -1 ;
        }
 
-       return 1;
+       return 0;
 }
 
 /* Serial EEPROM section. */
index 63ea2cca9b1090e8945d46ec35458d1da10d6535..57ccbd964f7e5e453ba7cf862e6f457d2995f9ed 100644 (file)
 *
 *    Indent Options: indent -kr -i8
 ***************************************************************************/
-
+/*
+ * 26 August 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
+ * Modified to use le32_to_cpu and cpu_to_le32 properly
+ */
 #include <common.h>
 #include <malloc.h>
 #include <net.h>
 static u32 ioaddr;
 
 /* Condensed operations for readability. */
-#define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr))
-#define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
-
 #define currticks()    get_timer(0)
-#define bus_to_phys(a) pci_mem_to_phys((pci_dev_t)dev->priv, a)
-#define phys_to_bus(a) pci_phys_to_mem((pci_dev_t)dev->priv, a)
 
 /* media options */
 #define MAX_UNITS 8
@@ -102,7 +100,7 @@ static int media[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 };
 #define RTL_MIN_IO_SIZE 0x80
 #define TX_TIMEOUT  (6*HZ)
 
-/* write/read MMIO register */
+/* write/read MMIO register. Notice: {read,write}[wl] do the necessary swapping */
 #define RTL_W8(reg, val8)      writeb ((val8), ioaddr + (reg))
 #define RTL_W16(reg, val16)    writew ((val16), ioaddr + (reg))
 #define RTL_W32(reg, val32)    writel ((val32), ioaddr + (reg))
@@ -218,7 +216,7 @@ enum RTL8169_register_content {
        PHY_Enable_Auto_Nego = 0x1000,
 
        /* PHY_STAT_REG = 1; */
-       PHY_Auto_Neco_Comp = 0x0020,
+       PHY_Auto_Nego_Comp = 0x0020,
 
        /* PHY_AUTO_NEGO_REG = 4; */
        PHY_Cap_10_Half = 0x0020,
@@ -413,23 +411,23 @@ static int rtl_recv(struct eth_device *dev)
        ioaddr = dev->iobase;
 
        cur_rx = tpc->cur_rx;
-       if ((tpc->RxDescArray[cur_rx].status & OWNbit) == 0) {
-               if (!(tpc->RxDescArray[cur_rx].status & RxRES)) {
+       if ((le32_to_cpu(tpc->RxDescArray[cur_rx].status) & OWNbit) == 0) {
+               if (!(le32_to_cpu(tpc->RxDescArray[cur_rx].status) & RxRES)) {
                        unsigned char rxdata[RX_BUF_LEN];
-                       length = (int) (tpc->RxDescArray[cur_rx].
-                                               status & 0x00001FFF) - 4;
+                       length = (int) (le32_to_cpu(tpc->RxDescArray[cur_rx].
+                                               status) & 0x00001FFF) - 4;
 
                        memcpy(rxdata, tpc->RxBufferRing[cur_rx], length);
                        NetReceive(rxdata, length);
 
                        if (cur_rx == NUM_RX_DESC - 1)
                                tpc->RxDescArray[cur_rx].status =
-                                   (OWNbit | EORbit) + RX_BUF_SIZE;
+                                       cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
                        else
                                tpc->RxDescArray[cur_rx].status =
-                                   OWNbit + RX_BUF_SIZE;
+                                       cpu_to_le32(OWNbit + RX_BUF_SIZE);
                        tpc->RxDescArray[cur_rx].buf_addr =
-                           virt_to_bus(tpc->RxBufferRing[cur_rx]);
+                               cpu_to_le32(tpc->RxBufferRing[cur_rx]);
                } else {
                        puts("Error Rx");
                }
@@ -454,6 +452,7 @@ static int rtl_send(struct eth_device *dev, volatile void *packet, int length)
        u8 *ptxb;
        int entry = tpc->cur_tx % NUM_TX_DESC;
        u32 len = length;
+       int ret;
 
 #ifdef DEBUG_RTL8169_TX
        int stime = currticks();
@@ -470,34 +469,38 @@ static int rtl_send(struct eth_device *dev, volatile void *packet, int length)
        while (len < ETH_ZLEN)
                ptxb[len++] = '\0';
 
-       tpc->TxDescArray[entry].buf_addr = virt_to_bus(ptxb);
+       tpc->TxDescArray[entry].buf_addr = cpu_to_le32(ptxb);
        if (entry != (NUM_TX_DESC - 1)) {
                tpc->TxDescArray[entry].status =
-                   (OWNbit | FSbit | LSbit) | ((len > ETH_ZLEN) ?
-                                               len : ETH_ZLEN);
+                       cpu_to_le32((OWNbit | FSbit | LSbit) |
+                                   ((len > ETH_ZLEN) ? len : ETH_ZLEN));
        } else {
                tpc->TxDescArray[entry].status =
-                   (OWNbit | EORbit | FSbit | LSbit) |
-                   ((len > ETH_ZLEN) ? length : ETH_ZLEN);
+                       cpu_to_le32((OWNbit | EORbit | FSbit | LSbit) |
+                                   ((len > ETH_ZLEN) ? len : ETH_ZLEN));
        }
        RTL_W8(TxPoll, 0x40);   /* set polling bit */
 
        tpc->cur_tx++;
        to = currticks() + TX_TIMEOUT;
-       while ((tpc->TxDescArray[entry].status & OWNbit) && (currticks() < to));        /* wait */
+       while ((le32_to_cpu(tpc->TxDescArray[entry].status) & OWNbit)
+                               && (currticks() < to)); /* wait */
 
        if (currticks() >= to) {
 #ifdef DEBUG_RTL8169_TX
                puts ("tx timeout/error\n");
                printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
 #endif
-               return 0;
+               ret = 0;
        } else {
 #ifdef DEBUG_RTL8169_TX
                puts("tx done\n");
 #endif
-               return length;
+               ret = length;
        }
+       /* Delay to make net console (nc) work properly */
+       udelay(20);
+       return ret;
 }
 
 static void rtl8169_set_rx_mode(struct eth_device *dev)
@@ -564,8 +567,8 @@ static void rtl8169_hw_start(struct eth_device *dev)
 
        tpc->cur_rx = 0;
 
-       RTL_W32(TxDescStartAddr, virt_to_le32desc(tpc->TxDescArray));
-       RTL_W32(RxDescStartAddr, virt_to_le32desc(tpc->RxDescArray));
+       RTL_W32(TxDescStartAddr, tpc->TxDescArray);
+       RTL_W32(RxDescStartAddr, tpc->RxDescArray);
        RTL_W8(Cfg9346, Cfg9346_Lock);
        udelay(10);
 
@@ -603,13 +606,14 @@ static void rtl8169_init_ring(struct eth_device *dev)
        for (i = 0; i < NUM_RX_DESC; i++) {
                if (i == (NUM_RX_DESC - 1))
                        tpc->RxDescArray[i].status =
-                           (OWNbit | EORbit) + RX_BUF_SIZE;
+                               cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
                else
-                       tpc->RxDescArray[i].status = OWNbit + RX_BUF_SIZE;
+                       tpc->RxDescArray[i].status =
+                               cpu_to_le32(OWNbit + RX_BUF_SIZE);
 
                tpc->RxBufferRing[i] = &rxb[i * RX_BUF_SIZE];
                tpc->RxDescArray[i].buf_addr =
-                   virt_to_bus(tpc->RxBufferRing[i]);
+                       cpu_to_le32(tpc->RxBufferRing[i]);
        }
 
 #ifdef DEBUG_RTL8169
@@ -620,11 +624,9 @@ static void rtl8169_init_ring(struct eth_device *dev)
 /**************************************************************************
 RESET - Finish setting up the ethernet interface
 ***************************************************************************/
-static void rtl_reset(struct eth_device *dev, bd_t *bis)
+static int rtl_reset(struct eth_device *dev, bd_t *bis)
 {
        int i;
-       u8 diff;
-       u32 TxPhyAddr, RxPhyAddr;
 
 #ifdef DEBUG_RTL8169
        int stime = currticks();
@@ -632,25 +634,14 @@ static void rtl_reset(struct eth_device *dev, bd_t *bis)
 #endif
 
        tpc->TxDescArrays = tx_ring;
-       if (tpc->TxDescArrays == 0)
-               puts("Allot Error");
        /* Tx Desscriptor needs 256 bytes alignment; */
-       TxPhyAddr = virt_to_bus(tpc->TxDescArrays);
-       diff = 256 - (TxPhyAddr - ((TxPhyAddr >> 8) << 8));
-       TxPhyAddr += diff;
-       tpc->TxDescArray = (struct TxDesc *) (tpc->TxDescArrays + diff);
+       tpc->TxDescArray = (struct TxDesc *) ((unsigned long)(tpc->TxDescArrays +
+                                                             255) & ~255);
 
        tpc->RxDescArrays = rx_ring;
        /* Rx Desscriptor needs 256 bytes alignment; */
-       RxPhyAddr = virt_to_bus(tpc->RxDescArrays);
-       diff = 256 - (RxPhyAddr - ((RxPhyAddr >> 8) << 8));
-       RxPhyAddr += diff;
-       tpc->RxDescArray = (struct RxDesc *) (tpc->RxDescArrays + diff);
-
-       if (tpc->TxDescArrays == NULL || tpc->RxDescArrays == NULL) {
-               puts("Allocate RxDescArray or TxDescArray failed\n");
-               return;
-       }
+       tpc->RxDescArray = (struct RxDesc *) ((unsigned long)(tpc->RxDescArrays +
+                                                             255) & ~255);
 
        rtl8169_init_ring(dev);
        rtl8169_hw_start(dev);
@@ -669,6 +660,7 @@ static void rtl_reset(struct eth_device *dev, bd_t *bis)
 #ifdef DEBUG_RTL8169
        printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
 #endif
+       return 0;
 }
 
 /**************************************************************************
@@ -733,7 +725,7 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)
 
        /* Get MAC address.  FIXME: read EEPROM */
        for (i = 0; i < MAC_ADDR_LEN; i++)
-               dev->enetaddr[i] = RTL_R8(MAC0 + i);
+               bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i);
 
 #ifdef DEBUG_RTL8169
        printf("MAC Address");
@@ -808,7 +800,7 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)
                /* wait for auto-negotiation process */
                for (i = 10000; i > 0; i--) {
                        /* check if auto-negotiation complete */
-                       if (mdio_read(PHY_STAT_REG) & PHY_Auto_Neco_Comp) {
+                       if (mdio_read(PHY_STAT_REG) & PHY_Auto_Nego_Comp) {
                                udelay(100);
                                option = RTL_R8(PHYstatus);
                                if (option & _1000bpsF) {
@@ -818,13 +810,12 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)
 #endif
                                } else {
 #ifdef DEBUG_RTL8169
-                                       printf
-                                           ("%s: %sMbps %s-duplex operation.\n",
-                                            dev->name,
-                                            (option & _100bps) ? "100" :
-                                            "10",
-                                            (option & FullDup) ? "Full" :
-                                            "Half");
+                                       printf("%s: %sMbps %s-duplex operation.\n",
+                                              dev->name,
+                                              (option & _100bps) ? "100" :
+                                              "10",
+                                              (option & FullDup) ? "Full" :
+                                              "Half");
 #endif
                                }
                                break;
@@ -869,7 +860,7 @@ int rtl8169_initialize(bd_t *bis)
                sprintf (dev->name, "RTL8169#%d", card_number);
 
                dev->priv = (void *) devno;
-               dev->iobase = (int)bus_to_phys(iobase);
+               dev->iobase = (int)pci_mem_to_phys(devno, iobase);
 
                dev->init = rtl_reset;
                dev->halt = rtl_halt;
index a7d4a3b7a7ea95dc3f22c46d3b9798731a347ccb..8b83faeb15e3bb547e9a57e62a2565b296b42741 100644 (file)
@@ -20,7 +20,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
 #
-# File: drivers/sk98lin/Makefile
+# File: drivers/net/sk98lin/Makefile
 #
 # Makefile for the SysKonnect SK-98xx device driver.
 #
index ca6284b72653c0febbebb9b89c7a791be0465d41..25392f6862296c88bbfbf0bba822024cd45cb793 100644 (file)
@@ -232,7 +232,7 @@ int tsec_init(struct eth_device *dev, bd_t * bd)
        startup_tsec(dev);
 
        /* If there's no link, fail */
-       return priv->link;
+       return (priv->link ? 0 : -1);
 
 }
 
@@ -674,6 +674,15 @@ uint mii_cis8204_setmode(uint mii_reg, struct tsec_private * priv)
                return MIIM_CIS8204_EPHYCON_INIT;
 }
 
+uint mii_m88e1111s_setmode(uint mii_reg, struct tsec_private *priv)
+{
+       uint mii_data = read_phy_reg(priv, mii_reg);
+
+       if (priv->flags & TSEC_REDUCED)
+               mii_data = (mii_data & 0xfff0) | 0x000b;
+       return mii_data;
+}
+
 /* Initialized required registers to appropriate values, zeroing
  * those we don't care about (unless zero is bad, in which case,
  * choose a more appropriate value)
@@ -1034,6 +1043,7 @@ struct phy_info phy_info_M88E1111S = {
        (struct phy_cmd[]){     /* config */
                           /* Reset and configure the PHY */
                           {MIIM_CONTROL, MIIM_CONTROL_RESET, NULL},
+                          {0x1b, 0x848f, &mii_m88e1111s_setmode},
                           {0x14, 0x0cd2, NULL}, /* Delay RGMII TX and RX */
                           {MIIM_GBIT_CONTROL, MIIM_GBIT_CONTROL_INIT, NULL},
                           {MIIM_ANAR, MIIM_ANAR_INIT, NULL},
index 524e9daa4cb4a79ec99a4ffaaf5bcfb7afbda8f4..a09115e6ddd01156abd394ff3896f1113e1d5f58 100644 (file)
@@ -792,7 +792,7 @@ static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis)
            (dev->enetaddr[0] << 16);
 
        if (marvell_88e_phy_config(dev, &speed, &duplex) == 0)
-               return 0;
+               return -1;
 
        value =
            MAC_CONFIG_2_PREAMBLE_LENGTH(7) | MAC_CONFIG_2_PAD_CRC |
@@ -864,7 +864,7 @@ static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis)
        /* enable TX queue */
        reg_TX_CONTROL(base) = TX_CONTROL_GO | 0x01;
 
-       return 1;
+       return 0;
 }
 
 /*
index 1267c5798f06774a2f10731c52f5bda3257afe1b..8460f6928de3ea5819623e0ab341a5d53e0550d7 100644 (file)
@@ -279,12 +279,12 @@ static int uli526x_init_one(struct eth_device *dev, bd_t *bis)
        db->desc_pool_ptr = (uchar *)&desc_pool_array[0];
        db->desc_pool_dma_ptr = (dma_addr_t)&desc_pool_array[0];
        if (db->desc_pool_ptr == NULL)
-               return 0;
+               return -1;
 
        db->buf_pool_ptr = &buf_pool[0];
        db->buf_pool_dma_ptr = (dma_addr_t)&buf_pool[0];
        if (db->buf_pool_ptr == NULL)
-               return 0;
+               return -1;
 
        db->first_tx_desc = (struct tx_desc *) db->desc_pool_ptr;
        db->first_tx_desc_dma = db->desc_pool_dma_ptr;
@@ -331,7 +331,7 @@ static int uli526x_init_one(struct eth_device *dev, bd_t *bis)
        db->cr6_data |= ULI526X_TXTH_256;
        db->cr0_data = CR0_DEFAULT;
        uli526x_init(dev);
-       return 1;
+       return 0;
 }
 
 static void uli526x_disable(struct eth_device *dev)
index 7559e922272eeaa95b3336cf6e06ceff39088d50..c802014a50bfc259a51fb6433019fce820d1eeb9 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include "common.h"
+#include <command.h>
 #include "asm/errno.h"
 #include "asm/io.h"
 #include "asm/immap_qe.h"
@@ -34,7 +35,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 void qe_issue_cmd(uint cmd, uint sbc, u8 mcn, u32 cmd_data)
 {
-       u32           cecr;
+       u32 cecr;
 
        if (cmd == QE_RESET) {
                out_be32(&qe_immr->cp.cecr,(u32) (cmd | QE_CR_FLG));
@@ -248,4 +249,222 @@ int qe_set_mii_clk_src(int ucc_num)
        return 0;
 }
 
+/* The maximum number of RISCs we support */
+#define MAX_QE_RISC     2
+
+/* Firmware information stored here for qe_get_firmware_info() */
+static struct qe_firmware_info qe_firmware_info;
+
+/*
+ * Set to 1 if QE firmware has been uploaded, and therefore
+ * qe_firmware_info contains valid data.
+ */
+static int qe_firmware_uploaded;
+
+/*
+ * Upload a QE microcode
+ *
+ * This function is a worker function for qe_upload_firmware().  It does
+ * the actual uploading of the microcode.
+ */
+static void qe_upload_microcode(const void *base,
+       const struct qe_microcode *ucode)
+{
+       const u32 *code = base + be32_to_cpu(ucode->code_offset);
+       unsigned int i;
+
+       if (ucode->major || ucode->minor || ucode->revision)
+               printf("QE: uploading microcode '%s' version %u.%u.%u\n",
+                       ucode->id, ucode->major, ucode->minor, ucode->revision);
+       else
+               printf("QE: uploading microcode '%s'\n", ucode->id);
+
+       /* Use auto-increment */
+       out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) |
+               QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR);
+
+       for (i = 0; i < be32_to_cpu(ucode->count); i++)
+               out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
+}
+
+/*
+ * Upload a microcode to the I-RAM at a specific address.
+ *
+ * See docs/README.qe_firmware for information on QE microcode uploading.
+ *
+ * Currently, only version 1 is supported, so the 'version' field must be
+ * set to 1.
+ *
+ * The SOC model and revision are not validated, they are only displayed for
+ * informational purposes.
+ *
+ * 'calc_size' is the calculated size, in bytes, of the firmware structure and
+ * all of the microcode structures, minus the CRC.
+ *
+ * 'length' is the size that the structure says it is, including the CRC.
+ */
+int qe_upload_firmware(const struct qe_firmware *firmware)
+{
+       unsigned int i;
+       unsigned int j;
+       u32 crc;
+       size_t calc_size = sizeof(struct qe_firmware);
+       size_t length;
+       const struct qe_header *hdr;
+
+       if (!firmware) {
+               printf("Invalid address\n");
+               return -EINVAL;
+       }
+
+       hdr = &firmware->header;
+       length = be32_to_cpu(hdr->length);
+
+       /* Check the magic */
+       if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') ||
+           (hdr->magic[2] != 'F')) {
+               printf("Not a microcode\n");
+               return -EPERM;
+       }
+
+       /* Check the version */
+       if (hdr->version != 1) {
+               printf("Unsupported version\n");
+               return -EPERM;
+       }
+
+       /* Validate some of the fields */
+       if ((firmware->count < 1) || (firmware->count >= MAX_QE_RISC)) {
+               printf("Invalid data\n");
+               return -EINVAL;
+       }
+
+       /* Validate the length and check if there's a CRC */
+       calc_size += (firmware->count - 1) * sizeof(struct qe_microcode);
+
+       for (i = 0; i < firmware->count; i++)
+               /*
+                * For situations where the second RISC uses the same microcode
+                * as the first, the 'code_offset' and 'count' fields will be
+                * zero, so it's okay to add those.
+                */
+               calc_size += sizeof(u32) *
+                       be32_to_cpu(firmware->microcode[i].count);
+
+       /* Validate the length */
+       if (length != calc_size + sizeof(u32)) {
+               printf("Invalid length\n");
+               return -EPERM;
+       }
+
+       /*
+        * Validate the CRC.  We would normally call crc32_no_comp(), but that
+        * function isn't available unless you turn on JFFS support.
+        */
+       crc = be32_to_cpu(*(u32 *)((void *)firmware + calc_size));
+       if (crc != (crc32(-1, (const void *) firmware, calc_size) ^ -1)) {
+               printf("Firmware CRC is invalid\n");
+               return -EIO;
+       }
+
+       /*
+        * If the microcode calls for it, split the I-RAM.
+        */
+       if (!firmware->split) {
+               out_be16(&qe_immr->cp.cercr,
+                       in_be16(&qe_immr->cp.cercr) | QE_CP_CERCR_CIR);
+       }
+
+       if (firmware->soc.model)
+               printf("Firmware '%s' for %u V%u.%u\n",
+                       firmware->id, be16_to_cpu(firmware->soc.model),
+                       firmware->soc.major, firmware->soc.minor);
+       else
+               printf("Firmware '%s'\n", firmware->id);
+
+       /*
+        * The QE only supports one microcode per RISC, so clear out all the
+        * saved microcode information and put in the new.
+        */
+       memset(&qe_firmware_info, 0, sizeof(qe_firmware_info));
+       strcpy(qe_firmware_info.id, firmware->id);
+       qe_firmware_info.extended_modes = firmware->extended_modes;
+       memcpy(qe_firmware_info.vtraps, firmware->vtraps,
+               sizeof(firmware->vtraps));
+       qe_firmware_uploaded = 1;
+
+       /* Loop through each microcode. */
+       for (i = 0; i < firmware->count; i++) {
+               const struct qe_microcode *ucode = &firmware->microcode[i];
+
+               /* Upload a microcode if it's present */
+               if (ucode->code_offset)
+                       qe_upload_microcode(firmware, ucode);
+
+               /* Program the traps for this processor */
+               for (j = 0; j < 16; j++) {
+                       u32 trap = be32_to_cpu(ucode->traps[j]);
+
+                       if (trap)
+                               out_be32(&qe_immr->rsp[i].tibcr[j], trap);
+               }
+
+               /* Enable traps */
+               out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr));
+       }
+
+       return 0;
+}
+
+struct qe_firmware_info *qe_get_firmware_info(void)
+{
+       return qe_firmware_uploaded ? &qe_firmware_info : NULL;
+}
+
+static int qe_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong addr;
+
+       if (argc < 3) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       if (strcmp(argv[1], "fw") == 0) {
+               addr = simple_strtoul(argv[2], NULL, 16);
+
+               if (!addr) {
+                       printf("Invalid address\n");
+                       return -EINVAL;
+               }
+
+               /*
+                * If a length was supplied, compare that with the 'length'
+                * field.
+                */
+
+               if (argc > 3) {
+                       ulong length = simple_strtoul(argv[3], NULL, 16);
+                       struct qe_firmware *firmware = (void *) addr;
+
+                       if (length != be32_to_cpu(firmware->header.length)) {
+                               printf("Length mismatch\n");
+                               return -EINVAL;
+                       }
+               }
+
+               return qe_upload_firmware((const struct qe_firmware *) addr);
+       }
+
+       printf ("Usage:\n%s\n", cmdtp->usage);
+       return 1;
+}
+
+U_BOOT_CMD(
+       qe, 4, 0, qe_cmd,
+       "qe      - QUICC Engine commands\n",
+       "fw <addr> [<length>] - Upload firmware binary at address <addr> to "
+               "the QE,\n\twith optional length <length> verification.\n"
+       );
+
 #endif /* CONFIG_QE */
index 400b1a6f603839444483f7f13c0022939277da08..4c96c67ff34521e5fc19bf1944062f52c1951392 100644 (file)
@@ -222,6 +222,60 @@ typedef enum qe_clock {
 
 #define QE_SDEBCR_BA_MASK              0x01FFFFFF
 
+/* Communication Processor */
+#define QE_CP_CERCR_MEE                0x8000  /* Multi-user RAM ECC enable */
+#define QE_CP_CERCR_IEE                0x4000  /* Instruction RAM ECC enable */
+#define QE_CP_CERCR_CIR                0x0800  /* Common instruction RAM */
+
+/* I-RAM */
+#define QE_IRAM_IADD_AIE       0x80000000      /* Auto Increment Enable */
+#define QE_IRAM_IADD_BADDR     0x00080000      /* Base Address */
+
+/* Structure that defines QE firmware binary files.
+ *
+ * See doc/README.qe_firmware for a description of these fields.
+ */
+struct qe_firmware {
+       struct qe_header {
+               u32 length;  /* Length of the entire structure, in bytes */
+               u8 magic[3];    /* Set to { 'Q', 'E', 'F' } */
+               u8 version;     /* Version of this layout. First ver is '1' */
+       } header;
+       u8 id[62];      /* Null-terminated identifier string */
+       u8 split;       /* 0 = shared I-RAM, 1 = split I-RAM */
+       u8 count;       /* Number of microcode[] structures */
+       struct {
+               u16 model;      /* The SOC model  */
+               u8 major;               /* The SOC revision major */
+               u8 minor;               /* The SOC revision minor */
+       } __attribute__ ((packed)) soc;
+       u8 padding[4];                  /* Reserved, for alignment */
+       u64 extended_modes;             /* Extended modes */
+       u32 vtraps[8];          /* Virtual trap addresses */
+       u8 reserved[4];                 /* Reserved, for future expansion */
+       struct qe_microcode {
+               u8 id[32];              /* Null-terminated identifier */
+               u32 traps[16];       /* Trap addresses, 0 == ignore */
+               u32 eccr;       /* The value for the ECCR register */
+               u32 iram_offset;     /* Offset into I-RAM for the code */
+               u32 count;      /* Number of 32-bit words of the code */
+               u32 code_offset;     /* Offset of the actual microcode */
+               u8 major;               /* The microcode version major */
+               u8 minor;               /* The microcode version minor */
+               u8 revision;            /* The microcode version revision */
+               u8 padding;             /* Reserved, for alignment */
+               u8 reserved[4];         /* Reserved, for future expansion */
+       } __attribute__ ((packed)) microcode[1];
+       /* All microcode binaries should be located here */
+       /* CRC32 should be located here, after the microcode binaries */
+} __attribute__ ((packed));
+
+struct qe_firmware_info {
+       char id[64];            /* Firmware name */
+       u32 vtraps[8];          /* Virtual trap addresses */
+       u64 extended_modes;     /* Extended modes */
+};
+
 void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign);
 void qe_issue_cmd(uint cmd, uint sbc, u8 mcn, u32 cmd_data);
 uint qe_muram_alloc(uint size, uint align);
@@ -233,5 +287,7 @@ void qe_reset(void);
 void qe_assign_page(uint snum, uint para_ram_base);
 int qe_set_brg(uint brg, uint rate);
 int qe_set_mii_clk_src(int ucc_num);
+int qe_upload_firmware(const struct qe_firmware *firmware);
+struct qe_firmware_info *qe_get_firmware_info(void);
 
 #endif /* __QE_H__ */
index dc2765bb09e6c6e981433f5fd0f6a5c43cc8e450..44cbea5785623d040a3bf432e47027db34c4edc3 100644 (file)
@@ -69,6 +69,25 @@ static uec_info_t eth2_uec_info = {
 };
 #endif
 
+#ifdef CONFIG_UEC_ETH3
+static uec_info_t eth3_uec_info = {
+       .uf_info                = {
+               .ucc_num        = CFG_UEC3_UCC_NUM,
+               .rx_clock       = CFG_UEC3_RX_CLK,
+               .tx_clock       = CFG_UEC3_TX_CLK,
+               .eth_type       = CFG_UEC3_ETH_TYPE,
+       },
+       .num_threads_tx         = UEC_NUM_OF_THREADS_4,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_4,
+       .riscTx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+       .riscRx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+       .tx_bd_ring_len         = 16,
+       .rx_bd_ring_len         = 16,
+       .phy_address            = CFG_UEC3_PHY_ADDR,
+       .enet_interface         = CFG_UEC3_INTERFACE_MODE,
+};
+#endif
+
 static int uec_mac_enable(uec_private_t *uec, comm_dir_e mode)
 {
        uec_t           *uec_regs;
@@ -1110,7 +1129,7 @@ static int uec_init(struct eth_device* dev, bd_t *bd)
                if (dev->enetaddr[0] & 0x01) {
                        printf("%s: MacAddress is multcast address\n",
                                 __FUNCTION__);
-                       return 0;
+                       return -1;
                }
                uec_set_mac_address(uec, dev->enetaddr);
                uec->the_first_run = 1;
@@ -1119,10 +1138,10 @@ static int uec_init(struct eth_device* dev, bd_t *bd)
        err = uec_open(uec, COMM_DIR_RX_AND_TX);
        if (err) {
                printf("%s: cannot enable UEC device\n", dev->name);
-               return 0;
+               return -1;
        }
 
-       return uec->mii_info->link;
+       return (uec->mii_info->link ? 0 : -1);
 }
 
 static void uec_halt(struct eth_device* dev)
@@ -1237,6 +1256,10 @@ int uec_initialize(int index)
        } else if (index == 1) {
 #ifdef CONFIG_UEC_ETH2
                uec_info = &eth2_uec_info;
+#endif
+       } else if (index == 2) {
+#ifdef CONFIG_UEC_ETH3
+               uec_info = &eth3_uec_info;
 #endif
        } else {
                printf("%s: index is illegal.\n", __FUNCTION__);
index 4a22b0d94ff853952d031cca8da46b247f96e909..8c7f1484b65f1b8dec4deb7d8751e1a61d445634 100644 (file)
@@ -40,6 +40,7 @@ COBJS-y += ds164x.o
 COBJS-y += ds174x.o
 COBJS-y += ds3231.o
 COBJS-y += m41t11.o
+COBJS-y += m41t60.o
 COBJS-y += max6900.o
 COBJS-y += m48t35ax.o
 COBJS-y += mc146818.o
@@ -49,7 +50,9 @@ COBJS-y += mpc8xx.o
 COBJS-y += pcf8563.o
 COBJS-y += s3c24x0_rtc.o
 COBJS-y += rs5c372.o
+COBJS-y += rx8025.o
 COBJS-y += mcfrtc.o
+COBJS-y += x1205.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/rtc/m41t60.c b/drivers/rtc/m41t60.c
new file mode 100644 (file)
index 0000000..7c80143
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * (C) Copyright 2007
+ * Larry Johnson, lrj@acm.org
+ *
+ * based on rtc/m41t11.c which is ...
+ *
+ * (C) Copyright 2002
+ * Andrew May, Viasat Inc, amay@viasat.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
+ */
+
+/*
+ * STMicroelectronics M41T60 serial access real-time clock
+ */
+
+/* #define DEBUG 1 */
+
+#include <common.h>
+#include <command.h>
+#include <rtc.h>
+#include <i2c.h>
+
+#if defined(CONFIG_RTC_M41T60) && defined(CFG_I2C_RTC_ADDR) && \
+       defined(CONFIG_CMD_DATE)
+
+static unsigned bcd2bin(uchar n)
+{
+       return ((((n >> 4) & 0x0F) * 10) + (n & 0x0F));
+}
+
+static unsigned char bin2bcd(unsigned int n)
+{
+       return (((n / 10) << 4) | (n % 10));
+}
+
+/*
+ * Convert between century and "century bits" (CB1 and CB0).  These routines
+ * assume years are in the range 1900 - 2299.
+ */
+
+static unsigned char year2cb(unsigned const year)
+{
+       if (year < 1900 || year >= 2300)
+               printf("M41T60 RTC: year %d out of range\n", year);
+
+       return (year / 100) & 0x3;
+}
+
+static unsigned cb2year(unsigned const cb)
+{
+       return 1900 + 100 * ((cb + 1) & 0x3);
+}
+
+/*
+ * These are simple defines for the chip local to here so they aren't too
+ * verbose.  DAY/DATE aren't nice but that is how they are on the data sheet.
+ */
+#define RTC_SEC                0x0
+#define RTC_MIN                0x1
+#define RTC_HOUR       0x2
+#define RTC_DAY                0x3
+#define RTC_DATE       0x4
+#define RTC_MONTH      0x5
+#define RTC_YEAR       0x6
+
+#define RTC_REG_CNT    7
+
+#define RTC_CTRL       0x7
+
+#if defined(DEBUG)
+static void rtc_dump(char const *const label)
+{
+       uchar data[8];
+
+       if (i2c_read(CFG_I2C_RTC_ADDR, 0, 1, data, sizeof(data))) {
+               printf("I2C read failed in rtc_dump()\n");
+               return;
+       }
+       printf("RTC dump %s: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n",
+              label, data[0], data[1], data[2], data[3],
+              data[4], data[5], data[6], data[7]);
+}
+#else
+#define rtc_dump(label)
+#endif
+
+static uchar *rtc_validate(void)
+{
+       /*
+        * This routine uses the OUT bit and the validity of the time values to
+        * determine whether there has been an initial power-up since the last
+        * time the routine was run.  It assumes that the OUT bit is not being
+        * used for any other purpose.
+        */
+       static const uchar daysInMonth[0x13] = {
+               0x00, 0x31, 0x29, 0x31, 0x30, 0x31, 0x30, 0x31,
+               0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+               0x31, 0x30, 0x31
+       };
+       static uchar data[8];
+       uchar min, date, month, years;
+
+       rtc_dump("begin validate");
+       if (i2c_read(CFG_I2C_RTC_ADDR, 0, 1, data, sizeof(data))) {
+               printf("I2C read failed in rtc_validate()\n");
+               return 0;
+       }
+       /*
+        * If the OUT bit is "1", there has been a loss of power, so stop the
+        * oscillator so it can be "kick-started" as per data sheet.
+        */
+       if (0x00 != (data[RTC_CTRL] & 0x80)) {
+               printf("M41T60 RTC clock lost power.\n");
+               data[RTC_SEC] = 0x80;
+               if (i2c_write(CFG_I2C_RTC_ADDR, RTC_SEC, 1, data, 1)) {
+                       printf("I2C write failed in rtc_validate()\n");
+                       return 0;
+               }
+       }
+       /*
+        * If the oscillator is stopped or the date is invalid, then reset the
+        * OUT bit to "0", reset the date registers, and start the oscillator.
+        */
+       min = data[RTC_MIN] & 0x7F;
+       date = data[RTC_DATE];
+       month = data[RTC_MONTH] & 0x3F;
+       years = data[RTC_YEAR];
+       if (0x59 < data[RTC_SEC] || 0x09 < (data[RTC_SEC] & 0x0F) ||
+           0x59 < min || 0x09 < (min & 0x0F) ||
+           0x23 < data[RTC_HOUR] || 0x09 < (data[RTC_HOUR] & 0x0F) ||
+           0x07 < data[RTC_DAY] || 0x00 == data[RTC_DAY] ||
+           0x12 < month ||
+           0x99 < years || 0x09 < (years & 0x0F) ||
+           daysInMonth[month] < date || 0x09 < (date & 0x0F) || 0x00 == date ||
+           (0x29 == date && 0x02 == month &&
+            ((0x00 != (years & 0x03)) ||
+             (0x00 == years && 0x00 != (data[RTC_MONTH] & 0xC0))))) {
+               printf("Resetting M41T60 RTC clock.\n");
+               /*
+                * Set to 00:00:00 1900-01-01 (Monday)
+                */
+               data[RTC_SEC] = 0x00;
+               data[RTC_MIN] &= 0x80;  /* preserve OFIE bit */
+               data[RTC_HOUR] = 0x00;
+               data[RTC_DAY] = 0x02;
+               data[RTC_DATE] = 0x01;
+               data[RTC_MONTH] = 0xC1;
+               data[RTC_YEAR] = 0x00;
+               data[RTC_CTRL] &= 0x7F; /* reset OUT bit */
+
+               if (i2c_write(CFG_I2C_RTC_ADDR, 0, 1, data, sizeof(data))) {
+                       printf("I2C write failed in rtc_validate()\n");
+                       return 0;
+               }
+       }
+       return data;
+}
+
+void rtc_get(struct rtc_time *tmp)
+{
+       uchar const *const data = rtc_validate();
+
+       if (!data)
+               return;
+
+       tmp->tm_sec = bcd2bin(data[RTC_SEC] & 0x7F);
+       tmp->tm_min = bcd2bin(data[RTC_MIN] & 0x7F);
+       tmp->tm_hour = bcd2bin(data[RTC_HOUR] & 0x3F);
+       tmp->tm_mday = bcd2bin(data[RTC_DATE] & 0x3F);
+       tmp->tm_mon = bcd2bin(data[RTC_MONTH] & 0x1F);
+       tmp->tm_year = cb2year(data[RTC_MONTH] >> 6) + bcd2bin(data[RTC_YEAR]);
+       tmp->tm_wday = bcd2bin(data[RTC_DAY] & 0x07) - 1;
+       tmp->tm_yday = 0;
+       tmp->tm_isdst = 0;
+
+       debug("Get DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+             tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+             tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+}
+
+void rtc_set(struct rtc_time *tmp)
+{
+       uchar *const data = rtc_validate();
+
+       if (!data)
+               return;
+
+       debug("Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+             tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+             tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+
+       data[RTC_SEC] = (data[RTC_SEC] & 0x80) | (bin2bcd(tmp->tm_sec) & 0x7F);
+       data[RTC_MIN] = (data[RTC_MIN] & 0X80) | (bin2bcd(tmp->tm_min) & 0X7F);
+       data[RTC_HOUR] = bin2bcd(tmp->tm_hour) & 0x3F;
+       data[RTC_DATE] = bin2bcd(tmp->tm_mday) & 0x3F;
+       data[RTC_MONTH] = bin2bcd(tmp->tm_mon) & 0x1F;
+       data[RTC_YEAR] = bin2bcd(tmp->tm_year % 100);
+       data[RTC_MONTH] |= year2cb(tmp->tm_year) << 6;
+       data[RTC_DAY] = bin2bcd(tmp->tm_wday + 1) & 0x07;
+       if (i2c_write(CFG_I2C_RTC_ADDR, 0, 1, data, RTC_REG_CNT)) {
+               printf("I2C write failed in rtc_set()\n");
+               return;
+       }
+}
+
+void rtc_reset(void)
+{
+       uchar *const data = rtc_validate();
+       char const *const s = getenv("rtccal");
+
+       if (!data)
+               return;
+
+       rtc_dump("begin reset");
+       /*
+        * If environmental variable "rtccal" is present, it must be a hex value
+        * between 0x00 and 0x3F, inclusive.  The five least-significan bits
+        * represent the calibration magnitude, and the sixth bit the sign bit.
+        * If these do not match the contents of the hardware register, that
+        * register is updated.  The value 0x00 imples no correction.  Consult
+        * the M41T60 documentation for further details.
+        */
+       if (s) {
+               unsigned long const l = simple_strtoul(s, 0, 16);
+
+               if (l <= 0x3F) {
+                       if ((data[RTC_CTRL] & 0x3F) != l) {
+                               printf("Setting RTC calibration to 0x%02X\n",
+                                      l);
+                               data[RTC_CTRL] &= 0xC0;
+                               data[RTC_CTRL] |= (uchar) l;
+                       }
+               } else
+                       printf("environment parameter \"rtccal\" not valid: "
+                              "ignoring\n");
+       }
+       /*
+        * Turn off frequency test.
+        */
+       data[RTC_CTRL] &= 0xBF;
+       if (i2c_write(CFG_I2C_RTC_ADDR, RTC_CTRL, 1, data + RTC_CTRL, 1)) {
+               printf("I2C write failed in rtc_reset()\n");
+               return;
+       }
+       rtc_dump("end reset");
+}
+#endif /* CONFIG_RTC_M41T60 && CFG_I2C_RTC_ADDR && CONFIG_CMD_DATE */
diff --git a/drivers/rtc/rx8025.c b/drivers/rtc/rx8025.c
new file mode 100644 (file)
index 0000000..6c94ae1
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Epson RX8025 RTC driver.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <rtc.h>
+#include <i2c.h>
+
+#if defined(CONFIG_RTC_RX8025) && defined(CONFIG_CMD_DATE)
+
+/*---------------------------------------------------------------------*/
+#undef DEBUG_RTC
+
+#ifdef DEBUG_RTC
+#define DEBUGR(fmt,args...) printf(fmt ,##args)
+#else
+#define DEBUGR(fmt,args...)
+#endif
+/*---------------------------------------------------------------------*/
+
+#ifndef CFG_I2C_RTC_ADDR
+# define CFG_I2C_RTC_ADDR      0x32
+#endif
+
+/*
+ * RTC register addresses
+ */
+#define RTC_SEC_REG_ADDR       0x00
+#define RTC_MIN_REG_ADDR       0x01
+#define RTC_HR_REG_ADDR                0x02
+#define RTC_DAY_REG_ADDR       0x03
+#define RTC_DATE_REG_ADDR      0x04
+#define RTC_MON_REG_ADDR       0x05
+#define RTC_YR_REG_ADDR                0x06
+
+#define RTC_CTL1_REG_ADDR      0x0e
+#define RTC_CTL2_REG_ADDR      0x0f
+
+/*
+ * Control register 1 bits
+ */
+#define RTC_CTL1_BIT_2412      0x20
+
+/*
+ * Control register 2 bits
+ */
+#define RTC_CTL2_BIT_PON       0x10
+#define RTC_CTL2_BIT_VDET      0x40
+#define RTC_CTL2_BIT_XST       0x20
+#define RTC_CTL2_BIT_VDSL      0x80
+
+/*
+ * Note: the RX8025 I2C RTC requires register
+ * reads and write to consist of a single bus
+ * cycle. It is not allowed to write the register
+ * address in a first cycle that is terminated by
+ * a STOP condition. The chips needs a 'restart'
+ * sequence (start sequence without a prior stop).
+ * This driver has been written for a 4xx board.
+ * U-Boot's 4xx i2c driver is currently not capable
+ * to generate such cycles to some work arounds
+ * are used.
+ */
+
+/* static uchar rtc_read (uchar reg); */
+#define rtc_read(reg) buf[((reg) + 1) & 0xf]
+
+static void rtc_write (uchar reg, uchar val);
+static uchar bin2bcd (unsigned int n);
+static unsigned bcd2bin (uchar c);
+
+/*
+ * Get the current time from the RTC
+ */
+void rtc_get (struct rtc_time *tmp)
+{
+       uchar sec, min, hour, mday, wday, mon, year, ctl2;
+       uchar buf[16];
+
+       if (i2c_read(CFG_I2C_RTC_ADDR, 0, 0, buf, 16))
+               printf("Error reading from RTC\n");
+
+       sec = rtc_read(RTC_SEC_REG_ADDR);
+       min = rtc_read(RTC_MIN_REG_ADDR);
+       hour = rtc_read(RTC_HR_REG_ADDR);
+       wday = rtc_read(RTC_DAY_REG_ADDR);
+       mday = rtc_read(RTC_DATE_REG_ADDR);
+       mon = rtc_read(RTC_MON_REG_ADDR);
+       year = rtc_read(RTC_YR_REG_ADDR);
+
+       DEBUGR ("Get RTC year: %02x mon: %02x mday: %02x wday: %02x "
+               "hr: %02x min: %02x sec: %02x\n",
+               year, mon, mday, wday, hour, min, sec);
+
+       /* dump status */
+       ctl2 = rtc_read(RTC_CTL2_REG_ADDR);
+       if (ctl2 & RTC_CTL2_BIT_PON)
+               printf("RTC: power-on detected\n");
+
+       if (ctl2 & RTC_CTL2_BIT_VDET)
+               printf("RTC: voltage drop detected\n");
+
+       if (!(ctl2 & RTC_CTL2_BIT_XST))
+               printf("RTC: oscillator stop detected\n");
+
+       tmp->tm_sec  = bcd2bin (sec & 0x7F);
+       tmp->tm_min  = bcd2bin (min & 0x7F);
+       tmp->tm_hour = bcd2bin (hour & 0x3F);
+       tmp->tm_mday = bcd2bin (mday & 0x3F);
+       tmp->tm_mon  = bcd2bin (mon & 0x1F);
+       tmp->tm_year = bcd2bin (year) + ( bcd2bin (year) >= 70 ? 1900 : 2000);
+       tmp->tm_wday = bcd2bin (wday & 0x07);
+       tmp->tm_yday = 0;
+       tmp->tm_isdst= 0;
+
+       DEBUGR ("Get DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+               tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+               tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+}
+
+
+/*
+ * Set the RTC
+ */
+void rtc_set (struct rtc_time *tmp)
+{
+       DEBUGR ("Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+               tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
+               tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+
+       if (tmp->tm_year < 1970 || tmp->tm_year > 2069)
+               printf("WARNING: year should be between 1970 and 2069!\n");
+
+       rtc_write (RTC_YR_REG_ADDR, bin2bcd (tmp->tm_year % 100));
+       rtc_write (RTC_MON_REG_ADDR, bin2bcd (tmp->tm_mon));
+       rtc_write (RTC_DAY_REG_ADDR, bin2bcd (tmp->tm_wday));
+       rtc_write (RTC_DATE_REG_ADDR, bin2bcd (tmp->tm_mday));
+       rtc_write (RTC_HR_REG_ADDR, bin2bcd (tmp->tm_hour));
+       rtc_write (RTC_MIN_REG_ADDR, bin2bcd (tmp->tm_min));
+       rtc_write (RTC_SEC_REG_ADDR, bin2bcd (tmp->tm_sec));
+
+       rtc_write (RTC_CTL1_REG_ADDR, RTC_CTL1_BIT_2412);
+}
+
+
+/*
+ * Reset the RTC. We setting the date back to 1970-01-01.
+ */
+void rtc_reset (void)
+{
+       struct rtc_time tmp;
+       uchar buf[16];
+       uchar ctl2;
+
+       if (i2c_read(CFG_I2C_RTC_ADDR, 0,    0,   buf, 16))
+               printf("Error reading from RTC\n");
+
+       ctl2 = rtc_read(RTC_CTL2_REG_ADDR);
+       ctl2 &= ~(RTC_CTL2_BIT_PON | RTC_CTL2_BIT_VDET);
+       ctl2 |= RTC_CTL2_BIT_XST | RTC_CTL2_BIT_VDSL;
+       rtc_write (RTC_CTL2_REG_ADDR, ctl2);
+
+       tmp.tm_year = 1970;
+       tmp.tm_mon = 1;
+       tmp.tm_mday= 1;
+       tmp.tm_hour = 0;
+       tmp.tm_min = 0;
+       tmp.tm_sec = 0;
+
+       rtc_set(&tmp);
+
+       printf ( "RTC:   %4d-%02d-%02d %2d:%02d:%02d UTC\n",
+               tmp.tm_year, tmp.tm_mon, tmp.tm_mday,
+               tmp.tm_hour, tmp.tm_min, tmp.tm_sec);
+
+       return;
+}
+
+
+/*
+ * Helper functions
+ */
+static void rtc_write (uchar reg, uchar val)
+{
+       uchar buf[2];
+       buf[0] = reg << 4;
+       buf[1] = val;
+       if (i2c_write(CFG_I2C_RTC_ADDR, 0, 0, buf, 2) != 0)
+               printf("Error writing to RTC\n");
+
+}
+
+static unsigned bcd2bin (uchar n)
+{
+       return ((((n >> 4) & 0x0F) * 10) + (n & 0x0F));
+}
+
+static unsigned char bin2bcd (unsigned int n)
+{
+       return (((n / 10) << 4) | (n % 10));
+}
+
+#endif /* CONFIG_RTC_RX8025 && (CFG_COMMANDS & CFG_CMD_DATE) */
diff --git a/drivers/rtc/x1205.c b/drivers/rtc/x1205.c
new file mode 100644 (file)
index 0000000..319f051
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * based on a the Linux rtc-x1207.c driver which is:
+ *     Copyright 2004 Karen Spearel
+ *     Copyright 2005 Alessandro Zummo
+ *
+ * Information and datasheet:
+ * http://www.intersil.com/cda/deviceinfo/0,1477,X1205,00.html
+ *
+ * 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
+ */
+
+/*
+ * Date & Time support for Xicor/Intersil X1205 RTC
+ */
+
+/* #define     DEBUG   */
+
+#include <common.h>
+#include <command.h>
+#include <rtc.h>
+#include <i2c.h>
+#include <bcd.h>
+
+#if defined(CONFIG_RTC_X1205) && defined(CONFIG_CMD_DATE)
+
+#define CCR_SEC                        0
+#define CCR_MIN                        1
+#define CCR_HOUR               2
+#define CCR_MDAY               3
+#define CCR_MONTH              4
+#define CCR_YEAR               5
+#define CCR_WDAY               6
+#define CCR_Y2K                        7
+
+#define X1205_REG_SR           0x3F    /* status register */
+#define X1205_REG_Y2K          0x37
+#define X1205_REG_DW           0x36
+#define X1205_REG_YR           0x35
+#define X1205_REG_MO           0x34
+#define X1205_REG_DT           0x33
+#define X1205_REG_HR           0x32
+#define X1205_REG_MN           0x31
+#define X1205_REG_SC           0x30
+#define X1205_REG_DTR          0x13
+#define X1205_REG_ATR          0x12
+#define X1205_REG_INT          0x11
+#define X1205_REG_0            0x10
+#define X1205_REG_Y2K1         0x0F
+#define X1205_REG_DWA1         0x0E
+#define X1205_REG_YRA1         0x0D
+#define X1205_REG_MOA1         0x0C
+#define X1205_REG_DTA1         0x0B
+#define X1205_REG_HRA1         0x0A
+#define X1205_REG_MNA1         0x09
+#define X1205_REG_SCA1         0x08
+#define X1205_REG_Y2K0         0x07
+#define X1205_REG_DWA0         0x06
+#define X1205_REG_YRA0         0x05
+#define X1205_REG_MOA0         0x04
+#define X1205_REG_DTA0         0x03
+#define X1205_REG_HRA0         0x02
+#define X1205_REG_MNA0         0x01
+#define X1205_REG_SCA0         0x00
+
+#define X1205_CCR_BASE         0x30    /* Base address of CCR */
+#define X1205_ALM0_BASE                0x00    /* Base address of ALARM0 */
+
+#define X1205_SR_RTCF          0x01    /* Clock failure */
+#define X1205_SR_WEL           0x02    /* Write Enable Latch */
+#define X1205_SR_RWEL          0x04    /* Register Write Enable */
+
+#define X1205_DTR_DTR0         0x01
+#define X1205_DTR_DTR1         0x02
+#define X1205_DTR_DTR2         0x04
+
+#define X1205_HR_MIL           0x80    /* Set in ccr.hour for 24 hr mode */
+
+static void rtc_write(int reg, u8 val)
+{
+       i2c_write(CFG_I2C_RTC_ADDR, reg, 2, &val, 1);
+}
+
+/*
+ * In the routines that deal directly with the x1205 hardware, we use
+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
+ * Epoch is initialized as 2000. Time is set to UTC.
+ */
+void rtc_get(struct rtc_time *tm)
+{
+       u8 buf[8];
+
+       i2c_read(CFG_I2C_RTC_ADDR, X1205_CCR_BASE, 2, buf, 8);
+
+       debug("%s: raw read data - sec=%02x, min=%02x, hr=%02x, "
+             "mday=%02x, mon=%02x, year=%02x, wday=%02x, y2k=%02x\n",
+             __FUNCTION__,
+             buf[0], buf[1], buf[2], buf[3],
+             buf[4], buf[5], buf[6], buf[7]);
+
+       tm->tm_sec = BCD2BIN(buf[CCR_SEC]);
+       tm->tm_min = BCD2BIN(buf[CCR_MIN]);
+       tm->tm_hour = BCD2BIN(buf[CCR_HOUR] & 0x3F); /* hr is 0-23 */
+       tm->tm_mday = BCD2BIN(buf[CCR_MDAY]);
+       tm->tm_mon = BCD2BIN(buf[CCR_MONTH]); /* mon is 0-11 */
+       tm->tm_year = BCD2BIN(buf[CCR_YEAR])
+               + (BCD2BIN(buf[CCR_Y2K]) * 100);
+       tm->tm_wday = buf[CCR_WDAY];
+
+       debug("%s: tm is secs=%d, mins=%d, hours=%d, "
+             "mday=%d, mon=%d, year=%d, wday=%d\n",
+             __FUNCTION__,
+             tm->tm_sec, tm->tm_min, tm->tm_hour,
+             tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
+}
+
+void rtc_set(struct rtc_time *tm)
+{
+       int i;
+       u8 buf[8];
+
+       debug("Set DATE: %4d-%02d-%02d (wday=%d)  TIME: %2d:%02d:%02d\n",
+             tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_wday,
+             tm->tm_hour, tm->tm_min, tm->tm_sec);
+
+       buf[CCR_SEC] = BIN2BCD(tm->tm_sec);
+       buf[CCR_MIN] = BIN2BCD(tm->tm_min);
+
+       /* set hour and 24hr bit */
+       buf[CCR_HOUR] = BIN2BCD(tm->tm_hour) | X1205_HR_MIL;
+
+       buf[CCR_MDAY] = BIN2BCD(tm->tm_mday);
+
+       /* month, 1 - 12 */
+       buf[CCR_MONTH] = BIN2BCD(tm->tm_mon);
+
+       /* year, since the rtc epoch*/
+       buf[CCR_YEAR] = BIN2BCD(tm->tm_year % 100);
+       buf[CCR_WDAY] = tm->tm_wday & 0x07;
+       buf[CCR_Y2K] = BIN2BCD(tm->tm_year / 100);
+
+       /* this sequence is required to unlock the chip */
+       rtc_write(X1205_REG_SR, X1205_SR_WEL);
+       rtc_write(X1205_REG_SR, X1205_SR_WEL | X1205_SR_RWEL);
+
+       /* write register's data */
+       for (i = 0; i < 8; i++)
+               rtc_write(X1205_CCR_BASE + i, buf[i]);
+
+       rtc_write(X1205_REG_SR, 0);
+}
+
+void rtc_reset(void)
+{
+       /*
+        * Nothing to do
+        */
+}
+
+#endif
index b21af10d0ba090ef504911befa970ec96133b4d4..ac6703056c901d6be2e4d3be6fd03156a3bfb6ce 100644 (file)
@@ -20,7 +20,7 @@
  * MA 02111-1307 USA
  *
  *
- * Derived in part from the SL811 HCD driver "u-boot/drivers/sl811_usb.c"
+ * Derived in part from the SL811 HCD driver "u-boot/drivers/usb/sl811_usb.c"
  * (original copyright message follows):
  *
  *    (C) Copyright 2004
index cfa384eff6f4ac67e41beae6772a7b3a62c9b55f..fb4726f28390d96b209e0f8d1b68d5f29d545c70 100644 (file)
@@ -98,6 +98,7 @@
 static struct pci_device_id ohci_pci_ids[] = {
        {0x10b9, 0x5237},       /* ULI1575 PCI OHCI module ids */
        {0x1033, 0x0035},       /* NEC PCI OHCI module ids */
+       {0x1131, 0x1561},       /* Philips 1561 PCI OHCI module ids */
        /* Please add supported PCI OHCI controller ids here */
        {0, 0}
 };
index d4c409656565bf61fb59c5754f0b563b35afc60e..122793c023cfcddb6508f308f48c1bb7dfabbdd1 100644 (file)
@@ -3,7 +3,8 @@
  * bodonoghue@CodeHermit.ie
  *
  * References
- * DasUBoot/drivers/usbdcore_omap1510.c, for design and implementation ideas.
+ * DasUBoot/drivers/usb/usbdcore_omap1510.c, for design and implementation
+ * ideas.
  *
  * 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 36611ecdda9303f98c337827d0f5fd5a19b28c2d..0e40f2afa98811c10da5e683dbc976c6d1c10420 100644 (file)
@@ -28,6 +28,7 @@ LIB   := $(obj)libvideo.a
 COBJS-y += ati_radeon_fb.o
 COBJS-y += cfb_console.o
 COBJS-y += ct69000.o
+COBJS-y += mb862xx.o
 COBJS-y += sed13806.o
 COBJS-y += sed156x.o
 COBJS-y += sm501.o
index bcf877194e0fdbc5b08514f017c33de8e7decf19..4f73067251e9152fd74e9e00509789ea1e29b538 100644 (file)
@@ -140,6 +140,18 @@ CONFIG_VIDEO_HW_CURSOR:         - Uses the hardware cursor capability of the
 #endif
 #endif
 
+/*****************************************************************************/
+/* Defines for the MB862xx driver                                           */
+/*****************************************************************************/
+#ifdef CONFIG_VIDEO_MB862xx
+
+#ifdef CONFIG_VIDEO_CORALP
+#define VIDEO_FB_LITTLE_ENDIAN
+#endif
+#define VIDEO_HW_RECTFILL
+#define VIDEO_HW_BITBLT
+#endif
+
 /*****************************************************************************/
 /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc            */
 /*****************************************************************************/
@@ -187,9 +199,9 @@ CONFIG_VIDEO_HW_CURSOR:          - Uses the hardware cursor capability of the
 
 /*****************************************************************************/
 /* Cursor definition:                                                       */
-/* CONFIG_CONSOLE_CURSOR:  Uses a timer function (see drivers/i8042.c) to    */
-/*                        let the cursor blink. Uses the macros CURSOR_OFF  */
-/*                        and CURSOR_ON.                                    */
+/* CONFIG_CONSOLE_CURSOR:  Uses a timer function (see drivers/input/i8042.c) */
+/*                         to let the cursor blink. Uses the macros         */
+/*                         CURSOR_OFF and CURSOR_ON.                        */
 /* CONFIG_VIDEO_SW_CURSOR: Draws a cursor after the last character. No      */
 /*                        blinking is provided. Uses the macros CURSOR_SET  */
 /*                        and CURSOR_OFF.                                   */
@@ -217,7 +229,7 @@ void        console_cursor (int state);
 #define CURSOR_OFF console_cursor(0);
 #define CURSOR_SET
 #ifndef CONFIG_I8042_KBD
-#warning Cursor drawing on/off needs timer function s.a. drivers/i8042.c
+#warning Cursor drawing on/off needs timer function s.a. drivers/input/i8042.c
 #endif
 #else
 #ifdef CONFIG_CONSOLE_TIME
@@ -304,7 +316,11 @@ void       console_cursor (int state);
 #else
 #define SWAP16(x)       (x)
 #define SWAP32(x)       (x)
+#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)
 #define SHORTSWAP32(x)  (x)
+#else
+#define SHORTSWAP32(x)  ( ((x) >> 16) | ((x) << 16) )
+#endif
 #endif
 
 #if defined(DEBUG) || defined(DEBUG_CFB_CONSOLE)
@@ -647,7 +663,14 @@ static void console_back (void)
 
 static void console_newline (void)
 {
-       CURSOR_OFF console_row++;
+       /* Check if last character in the line was just drawn. If so, cursor was
+          overwriten and need not to be cleared. Cursor clearing without this
+          check causes overwriting the 1st character of the line if line lenght
+          is >= CONSOLE_COLS
+        */
+       if (console_col < CONSOLE_COLS)
+               CURSOR_OFF
+       console_row++;
        console_col = 0;
 
        /* Check if we need to scroll the terminal */
@@ -660,16 +683,26 @@ static void console_newline (void)
        }
 }
 
+static void console_cr (void)
+{
+       CURSOR_OFF console_col = 0;
+}
+
 /*****************************************************************************/
 
 void video_putc (const char c)
 {
+       static int nl = 1;
+
        switch (c) {
-       case 13:                /* ignore */
+       case 13:                /* back to first column */
+               console_cr ();
                break;
 
        case '\n':              /* next line */
-               console_newline ();
+               if (console_col || (!console_col && nl))
+                       console_newline ();
+               nl = 1;
                break;
 
        case 9:         /* tab 8 */
@@ -691,8 +724,10 @@ void video_putc (const char c)
                console_col++;
 
                /* check for newline */
-               if (console_col >= CONSOLE_COLS)
+               if (console_col >= CONSOLE_COLS) {
                        console_newline ();
+                       nl = 0;
+               }
        }
 CURSOR_SET}
 
@@ -716,10 +751,24 @@ void video_puts (const char *s)
        fb ++;                                          \
 }
 
+#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)
 #define FILL_15BIT_555RGB(r,g,b) {                     \
        *(unsigned short *)fb = SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3))); \
        fb += 2;                                        \
 }
+#else
+static int tgl;
+static unsigned short p0;
+#define FILL_15BIT_555RGB(r,g,b) {                     \
+       if (!tgl++) {                                   \
+               p0 = SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3))); \
+       } else {                                        \
+               tgl=0;                                  \
+               *(unsigned long *)(fb-2) = (SWAP16((unsigned short)(((r>>3)<<10) | ((g>>3)<<5) | (b>>3)))<<16) | p0; \
+       }                                               \
+       fb += 2;                                        \
+}
+#endif
 
 #define FILL_16BIT_565RGB(r,g,b) {                     \
        *(unsigned short *)fb = SWAP16((unsigned short)((((r)>>3)<<11) | (((g)>>2)<<5) | ((b)>>3))); \
@@ -1061,8 +1110,20 @@ void logo_plot (void *screen, int width, int x, int y)
                                *dest = ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
                                break;
                        case GDF_15BIT_555RGB:
+#if !defined(VIDEO_FB_16BPP_PIXEL_SWAP)
                                *(unsigned short *) dest =
                                        SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)));
+#else
+                               {
+                                       if (!tgl++) {
+                                               p0 = SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)));
+                                       } else {
+                                               *(unsigned long *)(dest-2) =
+                                                       (SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)))<<16) | p0;
+                                               tgl=0;
+                                       }
+                               }
+#endif
                                break;
                        case GDF_16BIT_565RGB:
                                *(unsigned short *) dest =
diff --git a/drivers/video/mb862xx.c b/drivers/video/mb862xx.c
new file mode 100644 (file)
index 0000000..bfb057f
--- /dev/null
@@ -0,0 +1,414 @@
+/*
+ * (C) Copyright 2007
+ * DENX Software Engineering, Anatolij Gustschin, agust@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
+ */
+
+/*
+ * mb862xx.c - Graphic interface for Fujitsu CoralP/Lime
+ * PCI and video mode code was derived from smiLynxEM driver.
+ */
+
+#include <common.h>
+
+#if defined(CONFIG_VIDEO_MB862xx)
+
+#include <asm/io.h>
+#include <pci.h>
+#include <video_fb.h>
+#include "videomodes.h"
+#include <mb862xx.h>
+
+/*
+ * Graphic Device
+ */
+GraphicDevice mb862xx;
+
+/*
+ * 32MB external RAM - 256K Chip MMIO = 0x1FC0000 ;
+ */
+#define VIDEO_MEM_SIZE 0x01FC0000
+
+#if defined(CONFIG_PCI)
+#if defined(CONFIG_VIDEO_CORALP)
+
+static struct pci_device_id supported[] = {
+       { PCI_VENDOR_ID_FUJITSU, PCI_DEVICE_ID_CORAL_P },
+       { PCI_VENDOR_ID_FUJITSU, PCI_DEVICE_ID_CORAL_PA },
+       { }
+};
+
+/* Internal clock frequency divider table, index is mode number */
+unsigned int fr_div[] = { 0x00000f00, 0x00000900, 0x00000500 };
+#endif
+#endif
+
+#if defined(CONFIG_VIDEO_CORALP)
+#define        rd_io           in32r
+#define        wr_io           out32r
+#else
+#define        rd_io(addr)     in_be32((volatile unsigned*)(addr))
+#define        wr_io(addr,val) out_be32((volatile unsigned*)(addr), (val))
+#endif
+
+#define HOST_RD_REG(off)       rd_io((pGD->frameAdrs + 0x01fc0000 + (off)))
+#define HOST_WR_REG(off, val)  wr_io((pGD->frameAdrs + 0x01fc0000 + (off)), (val))
+#define DISP_RD_REG(off)       rd_io((pGD->frameAdrs + 0x01fd0000 + (off)))
+#define DISP_WR_REG(off, val)  wr_io((pGD->frameAdrs + 0x01fd0000 + (off)), (val))
+#define DE_RD_REG(off)         rd_io((pGD->dprBase + (off)))
+#define DE_WR_REG(off, val)    wr_io((pGD->dprBase + (off)), (val))
+
+#if defined(CONFIG_VIDEO_CORALP)
+#define DE_WR_FIFO(val)                wr_io((pGD->dprBase + (0x8400)), (val))
+#else
+#define DE_WR_FIFO(val)                wr_io((pGD->dprBase + (0x04a0)), (val))
+#endif
+
+#define L0PAL_RD_REG(idx, val) rd_io((pGD->frameAdrs + 0x01fd0400 + ((idx)<<2)))
+#define L0PAL_WR_REG(idx, val) wr_io((pGD->frameAdrs + 0x01fd0400 + ((idx)<<2)), (val))
+#define L1PAL_RD_REG(idx, val) rd_io((pGD->frameAdrs + 0x01fd0800 + ((idx)<<2)))
+#define L1PAL_WR_REG(idx, val) wr_io((pGD->frameAdrs + 0x01fd0800 + ((idx)<<2)), (val))
+#define L2PAL_RD_REG(idx, val) rd_io((pGD->frameAdrs + 0x01fd1000 + ((idx)<<2)))
+#define L2PAL_WR_REG(idx, val) wr_io((pGD->frameAdrs + 0x01fd1000 + ((idx)<<2)), (val))
+#define L3PAL_RD_REG(idx, val) rd_io((pGD->frameAdrs + 0x01fd1400 + ((idx)<<2)))
+#define L3PAL_WR_REG(idx, val) wr_io((pGD->frameAdrs + 0x01fd1400 + ((idx)<<2)), (val))
+
+static void gdc_sw_reset(void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       HOST_WR_REG (0x002c, 0x00000001);
+       udelay (500);
+       video_hw_init ();
+}
+
+
+static void de_wait(void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       int lc = 0x10000;
+
+       /* Sync with software writes to framebuffer,
+          try to reset if engine locked */
+       while (DE_RD_REG (0x0400) & 0x00000131)
+               if (lc-- < 0) {
+                       gdc_sw_reset ();
+                       printf ("gdc reset done after drawing engine lock...\n");
+                       break;
+               }
+}
+
+static void de_wait_slots(int slots)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       int lc = 0x10000;
+
+       /* Wait for free fifo slots */
+       while (DE_RD_REG (0x0408) < slots)
+               if (lc-- < 0) {
+                       gdc_sw_reset ();
+                       printf ("gdc reset done after drawing engine lock...\n");
+                       break;
+               }
+}
+
+#if !defined(CONFIG_VIDEO_CORALP)
+static void board_disp_init(void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       const gdc_regs *regs = board_get_regs ();
+
+       while (regs->index) {
+               DISP_WR_REG (regs->index, regs->value);
+               regs++;
+       }
+}
+#endif
+
+/*
+ * Init drawing engine
+ */
+static void de_init (void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       int cf = (pGD->gdfBytesPP == 1) ? 0x0000 : 0x8000;
+
+       pGD->dprBase = pGD->frameAdrs + 0x01ff0000;
+
+       /* Setup mode and fbbase, xres, fg, bg */
+       de_wait_slots (2);
+       DE_WR_FIFO (0xf1010108);
+       DE_WR_FIFO (cf | 0x0300);
+       DE_WR_REG (0x0440, 0x0000);
+       DE_WR_REG (0x0444, pGD->winSizeX);
+       DE_WR_REG (0x0480, 0x0000);
+       DE_WR_REG (0x0484, 0x0000);
+       /* Reset clipping */
+       DE_WR_REG (0x0454, 0x0000);
+       DE_WR_REG (0x0458, pGD->winSizeX);
+       DE_WR_REG (0x045c, 0x0000);
+       DE_WR_REG (0x0460, pGD->winSizeY);
+
+       /* Clear framebuffer using drawing engine */
+       de_wait_slots (3);
+       DE_WR_FIFO (0x09410000);
+       DE_WR_FIFO (0x00000000);
+       DE_WR_FIFO (pGD->winSizeY<<16 | pGD->winSizeX);
+}
+
+#if defined(CONFIG_VIDEO_CORALP)
+unsigned int pci_video_init(void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       pci_dev_t devbusfn;
+
+       if ((devbusfn = pci_find_devices(supported, 0)) < 0)
+       {
+               printf ("PCI video controller not found!\n");
+               return 0;
+       }
+
+       /* PCI setup */
+       pci_write_config_dword (devbusfn, PCI_COMMAND, (PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
+       pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0, &pGD->frameAdrs);
+       pGD->frameAdrs = pci_mem_to_phys (devbusfn, pGD->frameAdrs);
+
+       if (pGD->frameAdrs == 0) {
+               printf ("PCI config: failed to get base address\n");
+               return 0;
+       }
+
+       pGD->pciBase = pGD->frameAdrs;
+
+       /* Setup clocks and memory mode for Coral-P Eval. Board */
+       HOST_WR_REG (0x0038, 0x00090000);
+       udelay (200);
+       HOST_WR_REG (0xfffc, 0x11d7fa13);
+       udelay (100);
+       return pGD->frameAdrs;
+}
+
+unsigned int card_init (void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       unsigned int cf, videomode, div = 0;
+       unsigned long t1, hsync, vsync;
+       char *penv;
+       int tmp, i, bpp;
+       struct ctfb_res_modes *res_mode;
+       struct ctfb_res_modes var_mode;
+
+       memset (pGD, 0, sizeof (GraphicDevice));
+
+       if (!pci_video_init ()) {
+               return 0;
+       }
+
+       printf ("CoralP\n");
+
+       tmp = 0;
+       videomode = 0x310;
+       /* get video mode via environment */
+       if ((penv = getenv ("videomode")) != NULL) {
+               /* deceide if it is a string */
+               if (penv[0] <= '9') {
+                       videomode = (int) simple_strtoul (penv, NULL, 16);
+                       tmp = 1;
+               }
+       } else {
+               tmp = 1;
+       }
+       if (tmp) {
+               /* parameter are vesa modes */
+               /* search params */
+               for (i = 0; i < VESA_MODES_COUNT; i++) {
+                       if (vesa_modes[i].vesanr == videomode)
+                               break;
+               }
+               if (i == VESA_MODES_COUNT) {
+                       printf ("\tno VESA Mode found, switching to mode 0x%x \n", videomode);
+                       i = 0;
+               }
+               res_mode =
+                       (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].resindex];
+               if (vesa_modes[i].resindex > 2) {
+                       printf ("\tUnsupported resolution, switching to default\n");
+                       bpp = vesa_modes[1].bits_per_pixel;
+                       div = fr_div[1];
+               }
+               bpp = vesa_modes[i].bits_per_pixel;
+               div = fr_div[vesa_modes[i].resindex];
+       } else {
+
+               res_mode = (struct ctfb_res_modes *) &var_mode;
+               bpp = video_get_params (res_mode, penv);
+       }
+
+       /* calculate hsync and vsync freq (info only) */
+       t1 = (res_mode->left_margin + res_mode->xres +
+             res_mode->right_margin + res_mode->hsync_len) / 8;
+       t1 *= 8;
+       t1 *= res_mode->pixclock;
+       t1 /= 1000;
+       hsync = 1000000000L / t1;
+       t1 *= (res_mode->upper_margin + res_mode->yres +
+              res_mode->lower_margin + res_mode->vsync_len);
+       t1 /= 1000;
+       vsync = 1000000000L / t1;
+
+       /* fill in Graphic device struct */
+       sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres,
+                res_mode->yres, bpp, (hsync / 1000), (vsync / 1000));
+       printf ("\t%s\n", pGD->modeIdent);
+       pGD->winSizeX = res_mode->xres;
+       pGD->winSizeY = res_mode->yres;
+       pGD->memSize = VIDEO_MEM_SIZE;
+
+       switch (bpp) {
+       case 8:
+               pGD->gdfIndex = GDF__8BIT_INDEX;
+               pGD->gdfBytesPP = 1;
+               break;
+       case 15:
+       case 16:
+               pGD->gdfIndex = GDF_15BIT_555RGB;
+               pGD->gdfBytesPP = 2;
+               break;
+       default:
+               printf ("\t%d bpp configured, but only 8,15 and 16 supported.\n", bpp);
+               printf ("\tSwitching back to 15bpp\n");
+               pGD->gdfIndex = GDF_15BIT_555RGB;
+               pGD->gdfBytesPP = 2;
+       }
+
+       /* Setup dot clock (internal pll, division rate) */
+       DISP_WR_REG (0x0100, div);
+       /* L0 init */
+       cf = (pGD->gdfBytesPP == 1) ? 0x00000000 : 0x80000000;
+       DISP_WR_REG (0x0020, ((pGD->winSizeX * pGD->gdfBytesPP)/64)<<16 |
+                            (pGD->winSizeY-1) |
+                            cf);
+       DISP_WR_REG (0x0024, 0x00000000);
+       DISP_WR_REG (0x0028, 0x00000000);
+       DISP_WR_REG (0x002c, 0x00000000);
+       DISP_WR_REG (0x0110, 0x00000000);
+       DISP_WR_REG (0x0114, 0x00000000);
+       DISP_WR_REG (0x0118, (pGD->winSizeY-1)<<16 | pGD->winSizeX);
+
+       /* Display timing init */
+       DISP_WR_REG (0x0004, (pGD->winSizeX+res_mode->left_margin+res_mode->right_margin+res_mode->hsync_len-1)<<16);
+       DISP_WR_REG (0x0008, (pGD->winSizeX-1) << 16 | (pGD->winSizeX-1));
+       DISP_WR_REG (0x000c, (res_mode->vsync_len-1)<<24|(res_mode->hsync_len-1)<<16|(pGD->winSizeX+res_mode->right_margin-1));
+       DISP_WR_REG (0x0010, (pGD->winSizeY+res_mode->lower_margin+res_mode->upper_margin+res_mode->vsync_len-1)<<16);
+       DISP_WR_REG (0x0014, (pGD->winSizeY-1) << 16 | (pGD->winSizeY+res_mode->lower_margin-1));
+       DISP_WR_REG (0x0018, 0x00000000);
+       DISP_WR_REG (0x001c, pGD->winSizeY << 16 | pGD->winSizeX);
+       /* Display enable, L0 layer */
+       DISP_WR_REG (0x0100, 0x80010000 | div);
+
+       return pGD->frameAdrs;
+}
+#endif
+
+void *video_hw_init (void)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+
+       printf ("Video: Fujitsu ");
+
+       memset (pGD, 0, sizeof (GraphicDevice));
+
+#if defined(CONFIG_VIDEO_CORALP)
+       if (card_init () == 0) {
+               return (NULL);
+       }
+#else
+       /* Preliminary init of the onboard graphic controller,
+          retrieve base address */
+       if ((pGD->frameAdrs = board_video_init ()) == 0) {
+               printf ("Controller not found!\n");
+               return (NULL);
+       } else
+               printf("Lime\n");
+#endif
+
+       de_init ();
+
+#if !defined(CONFIG_VIDEO_CORALP)
+       board_disp_init();
+#endif
+
+#if defined(CONFIG_LWMON5)
+       /* Lamp on */
+       board_backlight_switch (1);
+#endif
+
+       return pGD;
+}
+
+/*
+ * Set a RGB color in the LUT
+ */
+void video_set_lut (unsigned int index, unsigned char r, unsigned char g, unsigned char b)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+
+       L0PAL_WR_REG (index, (r << 16) | (g << 8) | (b));
+}
+
+/*
+ * Drawing engine Fill and BitBlt screen region
+ */
+void video_hw_rectfill (unsigned int bpp, unsigned int dst_x, unsigned int dst_y,
+                       unsigned int dim_x, unsigned int dim_y, unsigned int color)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+
+       de_wait_slots (3);
+       DE_WR_REG (0x0480, color);
+       DE_WR_FIFO (0x09410000);
+       DE_WR_FIFO ((dst_y << 16) | dst_x);
+       DE_WR_FIFO ((dim_y << 16) | dim_x);
+       de_wait ();
+}
+
+void video_hw_bitblt (unsigned int bpp, unsigned int src_x, unsigned int src_y,
+                     unsigned int dst_x, unsigned int dst_y, unsigned int width,
+                     unsigned int height)
+{
+       GraphicDevice *pGD = (GraphicDevice *)&mb862xx;
+       unsigned int ctrl = 0x0d000000L;
+
+       if (src_x >= dst_x && src_y >= dst_y)
+               ctrl |= 0x00440000L;
+       else if (src_x >= dst_x && src_y <= dst_y)
+               ctrl |= 0x00460000L;
+       else if (src_x <= dst_x && src_y >= dst_y)
+               ctrl |= 0x00450000L;
+       else
+               ctrl |= 0x00470000L;
+
+       de_wait_slots (4);
+       DE_WR_FIFO (ctrl);
+       DE_WR_FIFO ((src_y << 16) | src_x);
+       DE_WR_FIFO ((dst_y << 16) | dst_x);
+       DE_WR_FIFO ((height << 16) | width);
+       de_wait (); /* sync */
+}
+#endif /* CONFIG_VIDEO_MB862xx */
index a7707287a2412f130643aae165dab7fc2a07011b..aceb6e90025f64a2de8f8e72af03feeabc1385a7 100644 (file)
@@ -52,8 +52,8 @@ SECTIONS
 
        . = ALIGN(4);
        __bss_start = .;
-       .sbss  : { *(.sbss) }
-       .bss  : { *(.bss) }
+       .sbss (NOLOAD) : { *(.sbss) }
+       .bss (NOLOAD)  : { *(.bss) }
 
        _end = .;
 }
index dd5bfad7b1141e2e5dda8cf91deb6c5f087dd484..18072f71b1e48d70f5d26b39700e02e3bfcf91fc 100644 (file)
@@ -51,7 +51,7 @@ SECTIONS
 
        __bss_start = .;
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
        }
index 277a0a7a673c367d29be5c1c8d5e9408b58ad03d..6a100dc2f74a21d33866611f9cc090b74f73b259 100644 (file)
@@ -74,7 +74,7 @@ SECTIONS
         * bss follows. We keep it adjacent to simplify init code.
         */
        __bss_start = .;
-       .sbss :
+       .sbss (NOLOAD) :
        {
          *(.sbss)
          *(.sbss.*)
@@ -82,7 +82,7 @@ SECTIONS
          *(.scommon)
        }
        . = ALIGN(4);
-       .bss :
+       .bss (NOLOAD) :
        {
          *(.bss)
          *(.bss.*)
index 369d1f16740a2abbb040842f994c694f966f8234..e53c783e5a4bed7a2c95452b15ffbf973abdc2d4 100644 (file)
@@ -27,7 +27,7 @@
 #include <common.h>
 #include <malloc.h>
 
-#if defined(CONFIG_CMD_JFFS2)
+#if defined(CONFIG_CMD_CRAMFS)
 
 #include <asm/byteorder.h>
 #include <linux/stat.h>
index 513a2f9e3201fb78f9c068f9277ee134ba98ad18..78335510e2ba58a08bdd754050cdbd62f8c14add 100644 (file)
@@ -436,7 +436,7 @@ int ext2fs_read_file
                                return (-1);
                        }
                } else {
-                       memset (buf, blocksize - skipfirst, 0);
+                       memset (buf, 0, blocksize - skipfirst);
                }
                buf += blocksize - skipfirst;
        }
index e98e50ae774bc2802d183e5888f26ec7b9b8fef1..ee8b5fe47edbb0b5d284e0cf78a2f54a949dbd44 100644 (file)
@@ -85,46 +85,41 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)
                /* no signature found */
                return -1;
        }
-       if(!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) {
-               /* ok, we assume we are on a PBR only */
-               cur_part = 1;
-               part_offset=0;
-       } else {
 #if (defined(CONFIG_CMD_IDE) || \
      defined(CONFIG_CMD_SCSI) || \
      defined(CONFIG_CMD_USB) || \
-     (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \
-     defined(CONFIG_SYSTEMACE)          )
-               /* First we assume, there is a MBR */
-               if (!get_partition_info (dev_desc, part_no, &info)) {
-                       part_offset = info.start;
-                       cur_part = part_no;
-               } else if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)) {
-                       /* ok, we assume we are on a PBR only */
-                       cur_part = 1;
-                       part_offset = 0;
-               } else {
-                       printf ("** Partition %d not valid on device %d **\n",
+     defined(CONFIG_MMC) || \
+     defined(CONFIG_SYSTEMACE) )
+       /* First we assume, there is a MBR */
+       if (!get_partition_info (dev_desc, part_no, &info)) {
+               part_offset = info.start;
+               cur_part = part_no;
+       } else if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)) {
+               /* ok, we assume we are on a PBR only */
+               cur_part = 1;
+               part_offset = 0;
+       } else {
+               printf ("** Partition %d not valid on device %d **\n",
                                part_no, dev_desc->dev);
-                       return -1;
-               }
+               return -1;
+       }
+
 #else
-               if(!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) {
-                       /* ok, we assume we are on a PBR only */
-                       cur_part = 1;
-                       part_offset = 0;
-                       info.start = part_offset;
-               } else {
-                       /* FIXME we need to determine the start block of the
-                        * partition where the DOS FS resides. This can be done
-                        * by using the get_partition_info routine. For this
-                        * purpose the libpart must be included.
-                        */
-                       part_offset = 32;
-                       cur_part = 1;
-               }
-#endif
+       if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) {
+               /* ok, we assume we are on a PBR only */
+               cur_part = 1;
+               part_offset = 0;
+               info.start = part_offset;
+       } else {
+               /* FIXME we need to determine the start block of the
+                * partition where the DOS FS resides. This can be done
+                * by using the get_partition_info routine. For this
+                * purpose the libpart must be included.
+                */
+               part_offset = 32;
+               cur_part = 1;
        }
+#endif
        return 0;
 }
 
index 53166683fd07b4266c41cec782002b404b64c816..69f53eabcf0e39d1573009b984523d0c8e961b6b 100644 (file)
@@ -165,7 +165,7 @@ static struct part_info *current_part;
 int read_jffs2_nand(size_t start, size_t len,
                size_t * retlen, u_char * buf, int nanddev);
 #else
-/* info for NAND chips, defined in drivers/nand/nand.c */
+/* info for NAND chips, defined in drivers/mtd/nand/nand.c */
 extern nand_info_t nand_info[];
 #endif
 
index d8fda80d5ead1c25ee6b00978b80004d9cada134..ab7d4c76f4b355fa0da85c8fe5e1f45f27ce5188 100644 (file)
@@ -1,3 +1,4 @@
+/autoconf.mk*
 /asm
 /asm-ppc/arch
 /bmp_logo.h
index 2a421848b4b17d733de66a009fc76f9de793a12b..7ea4eb1cc489356f378988dc28422afb5cb20f74 100644 (file)
@@ -92,7 +92,9 @@
 #define MAL_ESR_PBEI     0x00000001
       /* ^^                     ^^   */
       /* Mal IER                     */
-#if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440SPE) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define MAL_IER_PT       0x00000080
 #define MAL_IER_PRE      0x00000040
 #define MAL_IER_PWE      0x00000020
index 66b7997419b26f06e97110a552e789d5792d96bc..7c79bd153ec5ec8966c403c8d7068e97600e535f 100644 (file)
@@ -43,7 +43,7 @@
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define I2C_BASE_ADDR  (CFG_PERIPHERAL_BASE + 0x00000700 + I2C_BUS_OFFS)
-#elif defined(CONFIG_440)
+#elif defined(CONFIG_440) || defined(CONFIG_405EX)
 /* all remaining 440 variants */
 #define I2C_BASE_ADDR  (CFG_PERIPHERAL_BASE + 0x00000400 + I2C_BUS_OFFS)
 #else
diff --git a/include/api_public.h b/include/api_public.h
new file mode 100644 (file)
index 0000000..690975e
--- /dev/null
@@ -0,0 +1,102 @@
+#ifndef _API_PUBLIC_H_
+#define _API_PUBLIC_H_
+
+#define API_EINVAL             1       /* invalid argument(s)  */
+#define API_ENODEV             2       /* no device            */
+#define API_ENOMEM             3       /* no memory            */
+#define API_EBUSY              4       /* busy, occupied etc.  */
+#define API_EIO                        5       /* I/O error            */
+
+typedef        int (*scp_t)(int, int *, ...);
+
+#define API_SIG_VERSION        1
+#define API_SIG_MAGIC  "UBootAPI"
+#define API_SIG_MAGLEN 8
+
+struct api_signature {
+       char            magic[API_SIG_MAGLEN];  /* magic string */
+       uint16_t        version;                /* API version */
+       uint32_t        checksum;               /* checksum of this sig struct */
+       scp_t           syscall;                /* entry point to the API */
+};
+
+enum {
+       API_RSVD = 0,
+       API_GETC,
+       API_PUTC,
+       API_TSTC,
+       API_PUTS,
+       API_RESET,
+       API_GET_SYS_INFO,
+       API_UDELAY,
+       API_GET_TIMER,
+       API_DEV_ENUM,
+       API_DEV_OPEN,
+       API_DEV_CLOSE,
+       API_DEV_READ,
+       API_DEV_WRITE,
+       API_ENV_ENUM,
+       API_ENV_GET,
+       API_ENV_SET,
+       API_MAXCALL
+};
+
+#define MR_ATTR_FLASH  0x0001
+#define MR_ATTR_DRAM   0x0002
+#define MR_ATTR_SRAM   0x0003
+
+struct mem_region {
+       unsigned long   start;
+       unsigned long   size;
+       int             flags;
+};
+
+struct sys_info {
+       unsigned long           clk_bus;
+       unsigned long           clk_cpu;
+       unsigned long           bar;
+       struct mem_region       *mr;
+       int                     mr_no;  /* number of memory regions */
+};
+
+#undef CFG_64BIT_LBA
+#ifdef CFG_64BIT_LBA
+typedef        u_int64_t lbasize_t;
+#else
+typedef unsigned long lbasize_t;
+#endif
+typedef unsigned long lbastart_t;
+
+#define DEV_TYP_NONE   0x0000
+#define DEV_TYP_NET    0x0001
+
+#define DEV_TYP_STOR   0x0002
+#define DT_STOR_IDE    0x0010
+#define DT_STOR_SCSI   0x0020
+#define DT_STOR_USB    0x0040
+#define DT_STOR_MMC    0x0080
+
+#define DEV_STA_CLOSED 0x0000          /* invalid, closed */
+#define DEV_STA_OPEN   0x0001          /* open i.e. active */
+
+struct device_info {
+       int     type;
+       void    *cookie;
+
+       union {
+               struct {
+                       lbasize_t       block_count;    /* no of blocks */
+                       unsigned long   block_size;     /* size of one block */
+               } storage;
+
+               struct {
+                       unsigned char   hwaddr[6];
+               } net;
+       } info;
+#define di_stor info.storage
+#define di_net info.net
+
+       int     state;
+};
+
+#endif /* _API_PUBLIC_H_ */
index 67c84190867213c70050c0f086867284d241ad4b..4fdb9c635fd5576749393ae6818bcca1ffe488ed 100644 (file)
@@ -28,6 +28,7 @@ typedef  unsigned int uint32;
 void muxSetupSDRC(void);
 void muxSetupGPMC(void);
 void muxSetupUsb0(void);
+void muxSetupUsbHost(void);
 void muxSetupUart3(void);
 void muxSetupI2C1(void);
 void muxSetupUART1(void);
@@ -53,6 +54,10 @@ void muxSetupHDQ(void);
 #define CONTROL_PADCONF_GPMC_NCS0_BYTE1        ((volatile unsigned char *)0x4800008D)
 #define CONTROL_PADCONF_GPMC_NCS0_BYTE2        ((volatile unsigned char *)0x4800008E)
 #define CONTROL_PADCONF_GPMC_NCS0_BYTE3        ((volatile unsigned char *)0x4800008F)
+#define CONTROL_PADCONF_GPMC_NCS0_BYTE4        (0x48000090)
+#define CONTROL_PADCONF_GPMC_NCS0_BYTE5        (0x48000091)
+#define CONTROL_PADCONF_GPMC_NCS0_BYTE6        (0x48000092)
+#define CONTROL_PADCONF_GPMC_NCS0_BYTE7        (0x48000093)
 
 /* Pin Muxing registers used for SDRC */
 #define CONTROL_PADCONF_SDRC_NCS0_BYTE0 ((volatile unsigned char *)0x480000A0)
@@ -70,6 +75,7 @@ void muxSetupHDQ(void);
 #define CONTROL_PADCONF_SPI1_SIMO       ((volatile unsigned char *)0x48000100)
 #define CONTROL_PADCONF_SPI1_SOMI       ((volatile unsigned char *)0x48000101)
 #define CONTROL_PADCONF_SPI1_NCS0       ((volatile unsigned char *)0x48000102)
+#define CONTROL_PADCONF_SPI1_NCS1       (0x48000103)
 
 #define CONTROL_PADCONF_MCBSP1_FSR      ((volatile unsigned char *)0x4800010B)
 
@@ -151,8 +157,20 @@ void muxSetupHDQ(void);
 #define CONTROL_PADCONF_USB0_SE0               ((volatile uint8 *)0x48000122)
 #define CONTROL_PADCONF_USB0_DAT               ((volatile uint8 *)0x48000123)
 
+/* Pin Muxing registres used for USB1. */
+#define CONTROL_PADCONF_USB1_RCV       (0x480000EB)
+#define CONTROL_PADCONF_USB1_TXEN      (0x480000EC)
+
 /* Pin Muxing registers used for UART3/IRDA */
 #define CONTROL_PADCONF_UART3_TX_IRTX  ((volatile uint8 *)0x48000118)
 #define CONTROL_PADCONF_UART3_RX_IRRX  ((volatile uint8 *)0x48000119)
 
+/* Pin Muxing registers used for GPIO */
+#define CONTROL_PADCONF_GPIO69         (0x480000ED)
+#define CONTROL_PADCONF_GPIO70         (0x480000EE)
+#define CONTROL_PADCONF_GPIO102                (0x48000116)
+#define CONTROL_PADCONF_GPIO103                (0x48000117)
+#define CONTROL_PADCONF_GPIO104                (0x48000118)
+#define CONTROL_PADCONF_GPIO105                (0x48000119)
+
 #endif
index d833035a4b34cb157921faf476cf2a5414ec3e54..0c11beccf68e5f8ae7367f89739faf5642fa8d50 100644 (file)
 #define GPMC_CONFIG5_1        (OMAP2420_GPMC_BASE+0xA0)
 #define GPMC_CONFIG6_1        (OMAP2420_GPMC_BASE+0xA4)
 #define GPMC_CONFIG7_1       (OMAP2420_GPMC_BASE+0xA8)
+#define GPMC_CONFIG1_2        (OMAP2420_GPMC_BASE+0xC0)
+#define GPMC_CONFIG2_2        (OMAP2420_GPMC_BASE+0xC4)
+#define GPMC_CONFIG3_2        (OMAP2420_GPMC_BASE+0xC8)
+#define GPMC_CONFIG4_2        (OMAP2420_GPMC_BASE+0xCC)
+#define GPMC_CONFIG5_2        (OMAP2420_GPMC_BASE+0xD0)
+#define GPMC_CONFIG6_2        (OMAP2420_GPMC_BASE+0xD4)
+#define GPMC_CONFIG7_2        (OMAP2420_GPMC_BASE+0xD8)
+#define GPMC_CONFIG1_3        (OMAP2420_GPMC_BASE+0xF0)
+#define GPMC_CONFIG2_3        (OMAP2420_GPMC_BASE+0xF4)
+#define GPMC_CONFIG3_3        (OMAP2420_GPMC_BASE+0xF8)
+#define GPMC_CONFIG4_3        (OMAP2420_GPMC_BASE+0xFC)
+#define GPMC_CONFIG5_3        (OMAP2420_GPMC_BASE+0x100)
+#define GPMC_CONFIG6_3        (OMAP2420_GPMC_BASE+0x104)
+#define GPMC_CONFIG7_3       (OMAP2420_GPMC_BASE+0x108)
 
 /* SMS */
 #define OMAP2420_SMS_BASE 0x68008000
 #define SRAM_OFFSET2          0x0000F800
 #define SRAM_VECT_CODE       (SRAM_OFFSET0|SRAM_OFFSET1|SRAM_OFFSET2)
 
-#define LOW_LEVEL_SRAM_STACK  0x4020FFFC
-
-#define PERIFERAL_PORT_BASE   0x480FE003
-
 /* FPGA on Debug board.*/
 #define ETH_CONTROL_REG       (H4_CS1_BASE+0x30b)
 #define LAN_RESET_REGISTER    (H4_CS1_BASE+0x1c)
 #endif  /* endif CONFIG_2420H4 */
 
+#if defined(CONFIG_APOLLON)
+#define APOLLON_CS0_BASE       0x00000000      /* OneNAND */
+#define APOLLON_CS1_BASE       0x08000000      /* ethernet */
+#define APOLLON_CS2_BASE       0x10000000      /* OneNAND */
+#define APOLLON_CS3_BASE       0x18000000      /* NOR */
+
+#define ETH_CONTROL_REG                (APOLLON_CS1_BASE + 0x30b)
+#define LAN_RESET_REGISTER     (APOLLON_CS1_BASE + 0x1c)
+#endif /* endif CONFIG_APOLLON */
+
+/* Common */
+#define LOW_LEVEL_SRAM_STACK  0x4020FFFC
+
+#define PERIFERAL_PORT_BASE   0x480FE003
+
 #endif
index f6a5b4f16114253c06da21d6d0fffc54d9b2293b..ab19047d059a10cfef443479c5a6c8922c8d3130 100644 (file)
@@ -737,6 +737,7 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_CB3RUFC              726
 #define MACH_TYPE_MP2USB               727
 #define MACH_TYPE_AT91SAM9261EK        848
+#define MACH_TYPE_OMAP_APOLLON         919
 #define MACH_TYPE_PDNB3               1002
 #define MACH_TYPE_AT91SAM9260EK       1099
 #define MACH_TYPE_AT91RM9200DF        1119
@@ -6826,6 +6827,18 @@ extern unsigned int __machine_arch_type;
 # define machine_is_omap_h4()  (0)
 #endif
 
+#ifdef CONFIG_MACH_OMAP_APOLLON
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_OMAP_APOLLON
+# endif
+# define machine_is_omap_apollon()     (machine_arch_type == MACH_TYPE_OMAP_APOLLON)
+#else
+# define machine_is_omap_apollon()     (0)
+#endif
+
 #ifdef CONFIG_MACH_N10
 # ifdef machine_arch_type
 #  undef machine_arch_type
similarity index 53%
rename from cpu/ppc4xx/440spe_pcie.h
rename to include/asm-ppc/4xx_pcie.h
index 38745eb797cdafa230c93cedd32db04bd12fa21a..4c03b050fef28d689f8fe4089cd983d76e8e2fb2 100644 (file)
@@ -9,17 +9,38 @@
  */
 
 #include <ppc4xx.h>
-#ifndef __440SPE_PCIE_H
-#define __440SPE_PCIE_H
-
-#define mdelay(n) ({unsigned long __ms=(n); while (__ms--) udelay(1000);})
+#ifndef __4XX_PCIE_H
+#define __4XX_PCIE_H
 
 #define DCRN_SDR0_CFGADDR      0x00e
 #define DCRN_SDR0_CFGDATA      0x00f
 
+#if defined(CONFIG_440SPE)
+#define CFG_PCIE_NR_PORTS      3
+
+#define CFG_PCIE_ADDR_HIGH     0x0000000d
+
 #define DCRN_PCIE0_BASE                0x100
 #define DCRN_PCIE1_BASE                0x120
 #define DCRN_PCIE2_BASE                0x140
+
+#define PCIE0_SDR              0x300
+#define PCIE1_SDR              0x340
+#define PCIE2_SDR              0x370
+#endif
+
+#if defined(CONFIG_405EX)
+#define CFG_PCIE_NR_PORTS      2
+
+#define CFG_PCIE_ADDR_HIGH     0x00000000
+
+#define        DCRN_PCIE0_BASE         0x040
+#define        DCRN_PCIE1_BASE         0x060
+
+#define PCIE0_SDR              0x400
+#define PCIE1_SDR              0x440
+#endif
+
 #define PCIE0                  DCRN_PCIE0_BASE
 #define PCIE1                  DCRN_PCIE1_BASE
 #define PCIE2                  DCRN_PCIE2_BASE
 #define PESDR0_PLLLCT2         0x03a1
 #define PESDR0_PLLLCT3         0x03a2
 
+/* common regs, at least for 405EX and 440SPe */
+#define SDRN_PESDR_UTLSET1(n)          (sdr_base(n) + 0x00)
+#define SDRN_PESDR_UTLSET2(n)          (sdr_base(n) + 0x01)
+#define SDRN_PESDR_DLPSET(n)           (sdr_base(n) + 0x02)
+#define SDRN_PESDR_LOOP(n)             (sdr_base(n) + 0x03)
+#define SDRN_PESDR_RCSSET(n)           (sdr_base(n) + 0x04)
+#define SDRN_PESDR_RCSSTS(n)           (sdr_base(n) + 0x05)
+
+#if defined(CONFIG_440SPE)
+#define SDRN_PESDR_HSSL0SET1(n)                (sdr_base(n) + 0x06)
+#define SDRN_PESDR_HSSL0SET2(n)                (sdr_base(n) + 0x07)
+#define SDRN_PESDR_HSSL0STS(n)         (sdr_base(n) + 0x08)
+#define SDRN_PESDR_HSSL1SET1(n)                (sdr_base(n) + 0x09)
+#define SDRN_PESDR_HSSL1SET2(n)                (sdr_base(n) + 0x0a)
+#define SDRN_PESDR_HSSL1STS(n)         (sdr_base(n) + 0x0b)
+#define SDRN_PESDR_HSSL2SET1(n)                (sdr_base(n) + 0x0c)
+#define SDRN_PESDR_HSSL2SET2(n)                (sdr_base(n) + 0x0d)
+#define SDRN_PESDR_HSSL2STS(n)         (sdr_base(n) + 0x0e)
+#define SDRN_PESDR_HSSL3SET1(n)                (sdr_base(n) + 0x0f)
+#define SDRN_PESDR_HSSL3SET2(n)                (sdr_base(n) + 0x10)
+#define SDRN_PESDR_HSSL3STS(n)         (sdr_base(n) + 0x11)
+
 #define PESDR0_UTLSET1         0x0300
 #define PESDR0_UTLSET2         0x0301
 #define PESDR0_DLPSET          0x0302
 #define PESDR2_HSSCTLSET       0x0382
 #define PESDR2_LANE_ABCD       0x0383
 
+#elif defined(CONFIG_405EX)
+
+#define SDRN_PESDR_PHYSET1(n)          (sdr_base(n) + 0x06)
+#define SDRN_PESDR_PHYSET2(n)          (sdr_base(n) + 0x07)
+#define SDRN_PESDR_BIST(n)             (sdr_base(n) + 0x08)
+#define SDRN_PESDR_LPB(n)              (sdr_base(n) + 0x0b)
+#define SDRN_PESDR_PHYSTA(n)           (sdr_base(n) + 0x0c)
+
+#define PESDR0_UTLSET1         0x0400
+#define PESDR0_UTLSET2         0x0401
+#define PESDR0_DLPSET          0x0402
+#define PESDR0_LOOP            0x0403
+#define PESDR0_RCSSET          0x0404
+#define PESDR0_RCSSTS          0x0405
+#define PESDR0_PHYSET1         0x0406
+#define PESDR0_PHYSET2         0x0407
+#define PESDR0_BIST            0x0408
+#define PESDR0_LPB             0x040B
+#define PESDR0_PHYSTA          0x040C
+
+#define PESDR1_UTLSET1         0x0440
+#define PESDR1_UTLSET2         0x0441
+#define PESDR1_DLPSET          0x0442
+#define PESDR1_LOOP            0x0443
+#define PESDR1_RCSSET          0x0444
+#define PESDR1_RCSSTS          0x0445
+#define PESDR1_PHYSET1         0x0446
+#define PESDR1_PHYSET2         0x0447
+#define PESDR1_BIST            0x0448
+#define PESDR1_LPB             0x044B
+#define PESDR1_PHYSTA          0x044C
+
+#endif
+
 /*
  * UTL register offsets
  */
+#define        PEUTL_PBCTL             0x00
 #define PEUTL_PBBSZ            0x20
 #define PEUTL_OPDBSZ           0x68
 #define PEUTL_IPHBSZ           0x70
 #define PEUTL_OUTTR            0x90
 #define PEUTL_INTR             0x98
 #define PEUTL_PCTL             0xa0
+#define        PEUTL_RCSTA             0xb0
 #define PEUTL_RCIRQEN          0xb8
 
 /*
 #define PECFG_BAR0LMPA         0x210
 #define PECFG_BAR0HMPA         0x214
 #define PECFG_BAR1MPA          0x218
-#define PECFG_BAR2MPA          0x220
+#define PECFG_BAR2LMPA         0x220
+#define PECFG_BAR2HMPA         0x224
 
 #define PECFG_PIMEN            0x33c
 #define PECFG_PIM0LAL          0x340
 
 #define GPL_DMER_MASK_DISA     0x02000000
 
-int ppc440spe_init_pcie(void);
-int ppc440spe_init_pcie_rootport(int port);
-void yucca_setup_pcie_fpga_rootpoint(int port);
-void ppc440spe_setup_pcie_rootpoint(struct pci_controller *hose, int port);
-int ppc440spe_setup_pcie_endpoint(struct pci_controller *hose, int port);
-int yucca_pcie_card_present(int port);
+#define U64_TO_U32_LOW(val)    ((u32)((val) & 0x00000000ffffffffULL))
+#define U64_TO_U32_HIGH(val)   ((u32)((val) >> 32))
+
+/*
+ * Prototypes
+ */
+int ppc4xx_init_pcie(void);
+int ppc4xx_init_pcie_rootport(int port);
+int ppc4xx_init_pcie_endport(int port);
+void ppc4xx_setup_pcie_rootpoint(struct pci_controller *hose, int port);
+int ppc4xx_setup_pcie_endpoint(struct pci_controller *hose, int port);
 int pcie_hose_scan(struct pci_controller *hose, int bus);
-#endif /* __440SPE_PCIE_H */
+
+/*
+ * Function to determine root port or endport from env variable.
+ */
+static inline int is_end_point(int port)
+{
+       char s[10], *tk;
+       char *pcie_mode = getenv("pcie_mode");
+
+       if (pcie_mode == NULL)
+               return 0;
+
+       strcpy(s, pcie_mode);
+       tk = strtok(s, ":");
+
+       switch (port) {
+       case 0:
+               if (tk != NULL) {
+                       if (!(strcmp(tk, "ep") && strcmp(tk, "EP")))
+                               return 1;
+                       else
+                               return 0;
+               }
+               else
+                       return 0;
+
+       case 1:
+               tk = strtok(NULL, ":");
+               if (tk != NULL) {
+                       if (!(strcmp(tk, "ep") && strcmp(tk, "EP")))
+                               return 1;
+                       else
+                               return 0;
+               }
+               else
+                       return 0;
+
+       case 2:
+               tk = strtok(NULL, ":");
+               if (tk != NULL)
+                       tk = strtok(NULL, ":");
+               if (tk != NULL) {
+                       if (!(strcmp(tk, "ep") && strcmp(tk, "EP")))
+                               return 1;
+                       else
+                               return 0;
+               }
+               else
+                       return 0;
+       }
+
+       return 0;
+}
+
+static inline void mdelay(int n)
+{
+       u32 ms = n;
+
+       while (ms--)
+               udelay(1000);
+}
+
+static inline u32 sdr_base(int port)
+{
+       switch (port) {
+       default:        /* to satisfy compiler */
+       case 0:
+               return PCIE0_SDR;
+       case 1:
+               return PCIE1_SDR;
+#if CFG_PCIE_NR_PORTS > 2
+       case 2:
+               return PCIE2_SDR;
+#endif
+       }
+}
+
+#endif /* __4XX_PCIE_H */
index 5befab4d536894040b45939a259217e6e93ba688..9d9b9717ddedbb1910b0a5ea8d09bef807e4d71c 100644 (file)
@@ -8,15 +8,22 @@
 #include <asm/processor.h>
 
 /* bytes per L1 cache line */
-#if !defined(CONFIG_8xx) || defined(CONFIG_8260)
-#if defined(CONFIG_PPC64BRIDGE)
-#define L1_CACHE_BYTES 128
+#if defined(CONFIG_8xx) || defined(CONFIG_IOP480)
+#define        L1_CACHE_SHIFT  4
+#elif defined(CONFIG_PPC64BRIDGE)
+#define L1_CACHE_SHIFT 7
 #else
-#define        L1_CACHE_BYTES  32
-#endif /* PPC64 */
-#else
-#define        L1_CACHE_BYTES  16
-#endif /* !8xx || 8260 */
+#define        L1_CACHE_SHIFT  5
+#endif
+
+#define L1_CACHE_BYTES          (1 << L1_CACHE_SHIFT)
+
+/*
+ * For compatibility reasons support the CFG_CACHELINE_SIZE too
+ */
+#ifndef CFG_CACHELINE_SIZE
+#define CFG_CACHELINE_SIZE     L1_CACHE_BYTES
+#endif
 
 #define        L1_CACHE_ALIGN(x)       (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
 #define        L1_CACHE_PAGES          8
@@ -35,6 +42,8 @@
 extern void flush_dcache_range(unsigned long start, unsigned long stop);
 extern void clean_dcache_range(unsigned long start, unsigned long stop);
 extern void invalidate_dcache_range(unsigned long start, unsigned long stop);
+extern void flush_dcache(void);
+extern void invalidate_dcache(void);
 #ifdef CFG_INIT_RAM_LOCK
 extern void unlock_ram_in_cache(void);
 #endif /* CFG_INIT_RAM_LOCK */
index 4676e2c40893be60a83022bc92875a8cc1d0df25..aa6384c15249e93e8a534a6a1f6da24d65f4f239 100644 (file)
@@ -55,7 +55,7 @@ typedef       struct  global_data {
 #if defined(CONFIG_MPC83XX)
        /* There are other clocks in the MPC83XX */
        u32 csb_clk;
-#if defined (CONFIG_MPC834X) || defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
        u32 tsec1_clk;
        u32 tsec2_clk;
        u32 usbdr_clk;
@@ -63,6 +63,12 @@ typedef      struct  global_data {
 #if defined (CONFIG_MPC834X)
        u32 usbmph_clk;
 #endif /* CONFIG_MPC834X */
+#if defined(CONFIG_MPC8315)
+       u32 tdm_clk;
+#endif
+#if defined(CONFIG_MPC837X)
+       u32 sdhc_clk;
+#endif
        u32 core_clk;
        u32 i2c1_clk;
        u32 i2c2_clk;
@@ -71,6 +77,13 @@ typedef      struct  global_data {
        u32 lclk_clk;
        u32 ddr_clk;
        u32 pci_clk;
+#if defined(CONFIG_MPC837X)
+       u32 pciexp1_clk;
+       u32 pciexp2_clk;
+#endif
+#if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
+       u32 sata_clk;
+#endif
 #if defined(CONFIG_MPC8360)
        u32  ddr_sec_clk;
 #endif /* CONFIG_MPC8360 */
@@ -86,7 +99,7 @@ typedef       struct  global_data {
        unsigned long   pci_clk;
 #endif
 #if defined(CONFIG_MPC512X)
-       u32 ipb_clk;
+       u32 ips_clk;
        u32 csb_clk;
 #endif /* CONFIG_MPC512X */
 #if defined(CONFIG_MPC8220)
@@ -107,6 +120,9 @@ typedef     struct  global_data {
        unsigned int    dp_alloc_base;
        unsigned int    dp_alloc_top;
 #endif
+#if defined(CONFIG_4xx)
+       u32  uart_clk;
+#endif /* CONFIG_4xx */
 #if defined(CFG_GT_6426x)
        unsigned int    mirror_hack[16];
 #endif
index c9b6a36b4f95a3934041d9ba713e1b5033deda26..c3a4a88d581e5027aed23c1f072305f834b313ec 100644 (file)
@@ -21,6 +21,9 @@
  * MA 02111-1307 USA
  */
 
+#ifndef __ASM_PPC_GPIO_H
+#define __ASM_PPC_GPIO_H
+
 /* 4xx PPC's have 2 GPIO controllers */
 #if defined(CONFIG_405EZ) ||                                   \
        defined(CONFIG_440EP) || defined(CONFIG_440GR) ||       \
 #define GPIO_GROUP_MAX 1
 #endif
 
+/* Offsets */
+#define GPIOx_OR       0x00            /* GPIO Output Register */
+#define GPIOx_TCR      0x04            /* GPIO Three-State Control Register */
+#define GPIOx_OSL      0x08            /* GPIO Output Select Register (Bits 0-31) */
+#define GPIOx_OSH      0x0C            /* GPIO Ouput Select Register (Bits 32-63) */
+#define GPIOx_TSL      0x10            /* GPIO Three-State Select Register (Bits 0-31) */
+#define GPIOx_TSH      0x14            /* GPIO Three-State Select Register  (Bits 32-63) */
+#define GPIOx_ODR      0x18            /* GPIO Open drain Register */
+#define GPIOx_IR       0x1C            /* GPIO Input Register */
+#define GPIOx_RR1      0x20            /* GPIO Receive Register 1 */
+#define GPIOx_RR2      0x24            /* GPIO Receive Register 2 */
+#define GPIOx_RR3      0x28            /* GPIO Receive Register 3 */
+#define GPIOx_IS1L     0x30            /* GPIO Input Select Register 1 (Bits 0-31) */
+#define GPIOx_IS1H     0x34            /* GPIO Input Select Register 1 (Bits 32-63) */
+#define GPIOx_IS2L     0x38            /* GPIO Input Select Register 2 (Bits 0-31) */
+#define GPIOx_IS2H     0x3C            /* GPIO Input Select Register 2 (Bits 32-63) */
+#define GPIOx_IS3L     0x40            /* GPIO Input Select Register 3 (Bits 0-31) */
+#define GPIOx_IS3H     0x44            /* GPIO Input Select Register 3 (Bits 32-63) */
+
+#define GPIO_OR(x)     (x+GPIOx_OR)    /* GPIO Output Register */
+#define GPIO_TCR(x)    (x+GPIOx_TCR)   /* GPIO Three-State Control Register */
+#define GPIO_OS(x)     (x+GPIOx_OSL)   /* GPIO Output Select Register High or Low */
+#define GPIO_TS(x)     (x+GPIOx_TSL)   /* GPIO Three-state Control Reg High or Low */
+#define GPIO_IS1(x)    (x+GPIOx_IS1L)  /* GPIO Input register1 High or Low */
+#define GPIO_IS2(x)    (x+GPIOx_IS2L)  /* GPIO Input register2 High or Low */
+#define GPIO_IS3(x)    (x+GPIOx_IS3L)  /* GPIO Input register3 High or Low */
+
+#define GPIO0          0
+#define GPIO1          1
+
 #define GPIO_MAX       32
 #define GPIO_ALT1_SEL  0x40000000
 #define GPIO_ALT2_SEL  0x80000000
@@ -55,4 +88,7 @@ typedef struct {
 void gpio_config(int pin, int in_out, int gpio_alt, int out_val);
 void gpio_write_bit(int pin, int val);
 int gpio_read_out_bit(int pin);
+int gpio_read_in_bit(int pin);
 void gpio_set_chip_configuration(void);
+
+#endif /* __ASM_PPC_GPIO_H */
index 0de93385f3f43dc8d7b1552c02422d7b9fe0276b..34ea2959902eba1a6bedb332e56d8bd33cacd23e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2004-2006 Freescale Semiconductor, Inc.
+ * (C) Copyright 2004-2007 Freescale Semiconductor, Inc.
  *
  * MPC83xx Internal Memory Map
  *
@@ -63,7 +63,8 @@ typedef struct sysconf83xx {
        u8 res6[0x0C];
        u32 ddrcdr;             /* DDR Control Driver Register */
        u32 ddrdsr;             /* DDR Debug Status Register */
-       u8 res7[0xD0];
+       u32 obir;               /* Output Buffer Impedance Register */
+       u8 res7[0xCC];
 } sysconf83xx_t;
 
 /*
@@ -553,6 +554,55 @@ typedef struct security83xx {
        u8 fixme[0x10000];
 } security83xx_t;
 
+/*
+ *  PCI Express
+ */
+typedef struct pex83xx {
+       u8 fixme[0x1000];
+} pex83xx_t;
+
+/*
+ * SATA
+ */
+typedef struct sata83xx {
+       u8 fixme[0x1000];
+} sata83xx_t;
+
+/*
+ * eSDHC
+ */
+typedef struct sdhc83xx {
+       u8 fixme[0x1000];
+} sdhc83xx_t;
+
+/*
+ * SerDes
+ */
+typedef struct serdes83xx {
+       u8 fixme[0x100];
+} serdes83xx_t;
+
+/*
+ * On Chip ROM
+ */
+typedef struct rom83xx {
+       u8 mem[0x10000];
+} rom83xx_t;
+
+/*
+ * TDM
+ */
+typedef struct tdm83xx {
+       u8 fixme[0x200];
+} tdm83xx_t;
+
+/*
+ * TDM DMAC
+ */
+typedef struct tdmdmac83xx {
+       u8 fixme[0x2000];
+} tdmdmac83xx_t;
+
 #if defined(CONFIG_MPC834X)
 typedef struct immap {
        sysconf83xx_t           sysconf;        /* System configuration */
@@ -590,7 +640,7 @@ typedef struct immap {
        u8                      res7[0xC0000];
 } immap_t;
 
-#elif defined(CONFIG_MPC831X)
+#elif defined(CONFIG_MPC8313)
 typedef struct immap {
        sysconf83xx_t           sysconf;        /* System configuration */
        wdt83xx_t               wdt;            /* Watch Dog Timer (WDT) Registers */
@@ -625,6 +675,95 @@ typedef struct immap {
        u8                      res7[0xC0000];
 } immap_t;
 
+#elif defined(CONFIG_MPC8315)
+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[0xa00];
+       pex83xx_t               pciexp[2];      /* PCI Express Controller */
+       u8                      res6[0xb000];
+       tdm83xx_t               tdm;            /* TDM Controller */
+       u8                      res7[0x1e00];
+       sata83xx_t              sata[2];        /* SATA Controller */
+       u8                      res8[0x9000];
+       usb83xx_t               usb[1];         /* USB DR Controller */
+       tsec83xx_t              tsec[2];
+       u8                      res9[0x6000];
+       tdmdmac83xx_t           tdmdmac;        /* TDM DMAC */
+       u8                      res10[0x2000];
+       security83xx_t          security;
+       u8                      res11[0xA3000];
+       serdes83xx_t            serdes[1];      /* SerDes Registers */
+       u8                      res12[0x1CF00];
+} immap_t;
+
+#elif defined(CONFIG_MPC837X)
+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[2];        /* General purpose I/O module */
+       u8                      res0[0x1200];
+       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[0xa00];
+       pex83xx_t               pciexp[2];      /* PCI Express Controller */
+       u8                      res6[0xd000];
+       sata83xx_t              sata[4];        /* SATA Controller */
+       u8                      res7[0x7000];
+       usb83xx_t               usb[1];         /* USB DR Controller */
+       tsec83xx_t              tsec[2];
+       u8                      res8[0x8000];
+       sdhc83xx_t              sdhc;           /* SDHC Controller */
+       u8                      res9[0x1000];
+       security83xx_t          security;
+       u8                      res10[0xA3000];
+       serdes83xx_t            serdes[2];      /* SerDes Registers */
+       u8                      res11[0xCE00];
+       rom83xx_t               rom;            /* On Chip ROM */
+} immap_t;
+
 #elif defined(CONFIG_MPC8360)
 typedef struct immap {
        sysconf83xx_t           sysconf;        /* System configuration */
index a16a6d3fc5fb29ddbce9495a5c411a6e86fe3c05..39da3771c9539e81ae8cfd56e4f6563fc0758106 100644 (file)
@@ -513,10 +513,39 @@ typedef struct dbg {
        u8 res2[0x48];
 } __attribute__ ((packed)) dbg_t;
 
-/* RISC Special Registers (Trap and Breakpoint)
+/*
+ * RISC Special Registers (Trap and Breakpoint).  These are described in
+ * the QE Developer's Handbook.
 */
 typedef struct rsp {
-       u8 fixme[0x100];
+       u32 tibcr[16];  /* Trap/instruction breakpoint control regs */
+       u8 res0[64];
+       u32 ibcr0;
+       u32 ibs0;
+       u32 ibcnr0;
+       u8 res1[4];
+       u32 ibcr1;
+       u32 ibs1;
+       u32 ibcnr1;
+       u32 npcr;
+       u32 dbcr;
+       u32 dbar;
+       u32 dbamr;
+       u32 dbsr;
+       u32 dbcnr;
+       u8 res2[12];
+       u32 dbdr_h;
+       u32 dbdr_l;
+       u32 dbdmr_h;
+       u32 dbdmr_l;
+       u32 bsr;
+       u32 bor;
+       u32 bior;
+       u8 res3[4];
+       u32 iatr[4];
+       u32 eccr;               /* Exception control configuration register */
+       u32 eicr;
+       u8 res4[0x100-0xf8];
 } __attribute__ ((packed)) rsp_t;
 
 typedef struct qe_immap {
index 3d403327e0ef509434d43d34b54ff41948918404..45a47645edfc388c9fd3d3bca5bac4a442e12b41 100644 (file)
@@ -336,55 +336,70 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);
  */
 
 /*
- * e500 support
+ * FSL Book-E support
  */
 
-#define MAS0_TLBSEL     0x10000000
-#define MAS0_ESEL       0x000F0000
-#define MAS0_NV         0x00000001
-
-#define MAS1_VALID      0x80000000
-#define MAS1_IPROT      0x40000000
-#define MAS1_TID        0x00FF0000
-#define MAS1_TS         0x00001000
-#define MAS1_TSIZE     0x00000F00
-
-#define MAS2_EPN        0xFFFFF000
-#define MAS2_SHAREN     0x00000200
-#define MAS2_X0         0x00000040
-#define MAS2_X1         0x00000020
-#define MAS2_W          0x00000010
-#define MAS2_I          0x00000008
-#define MAS2_M          0x00000004
-#define MAS2_G          0x00000002
-#define MAS2_E          0x00000001
-
-#define MAS3_RPN        0xFFFFF000
-#define MAS3_U0         0x00000200
-#define MAS3_U1         0x00000100
-#define MAS3_U2         0x00000080
-#define MAS3_U3         0x00000040
-#define MAS3_UX         0x00000020
-#define MAS3_SX         0x00000010
-#define MAS3_UW         0x00000008
-#define MAS3_SW         0x00000004
-#define MAS3_UR         0x00000002
-#define MAS3_SR         0x00000001
-
-#define MAS4_TLBSELD    0x10000000
-#define MAS4_TIDDSEL    0x00030000
-#define MAS4_DSHAREN    0x00001000
-#define MAS4_TSIZED(x)  (x << 8)
-#define MAS4_X0D        0x00000040
-#define MAS4_X1D        0x00000020
-#define MAS4_WD         0x00000010
-#define MAS4_ID         0x00000008
-#define MAS4_MD         0x00000004
-#define MAS4_GD         0x00000002
-#define MAS4_ED         0x00000001
-
-#define MAS6_SPID       0x00FF0000
-#define MAS6_SAS        0x00000001
+#define MAS0_TLBSEL(x) ((x << 28) & 0x30000000)
+#define MAS0_ESEL(x)   ((x << 16) & 0x0FFF0000)
+#define MAS0_NV(x)     ((x) & 0x00000FFF)
+
+#define MAS1_VALID     0x80000000
+#define MAS1_IPROT     0x40000000
+#define MAS1_TID(x)    ((x << 16) & 0x3FFF0000)
+#define MAS1_TS                0x00001000
+#define MAS1_TSIZE(x)  ((x << 8) & 0x00000F00)
+
+#define MAS2_EPN       0xFFFFF000
+#define MAS2_X0                0x00000040
+#define MAS2_X1                0x00000020
+#define MAS2_W         0x00000010
+#define MAS2_I         0x00000008
+#define MAS2_M         0x00000004
+#define MAS2_G         0x00000002
+#define MAS2_E         0x00000001
+
+#define MAS3_RPN       0xFFFFF000
+#define MAS3_U0                0x00000200
+#define MAS3_U1                0x00000100
+#define MAS3_U2                0x00000080
+#define MAS3_U3                0x00000040
+#define MAS3_UX                0x00000020
+#define MAS3_SX                0x00000010
+#define MAS3_UW                0x00000008
+#define MAS3_SW                0x00000004
+#define MAS3_UR                0x00000002
+#define MAS3_SR                0x00000001
+
+#define MAS4_TLBSELD(x) MAS0_TLBSEL(x)
+#define MAS4_TIDDSEL   0x000F0000
+#define MAS4_TSIZED(x) MAS1_TSIZE(x)
+#define MAS4_X0D       0x00000040
+#define MAS4_X1D       0x00000020
+#define MAS4_WD                0x00000010
+#define MAS4_ID                0x00000008
+#define MAS4_MD                0x00000004
+#define MAS4_GD                0x00000002
+#define MAS4_ED                0x00000001
+
+#define MAS6_SPID0     0x3FFF0000
+#define MAS6_SPID1     0x00007FFE
+#define MAS6_SAS       0x00000001
+#define MAS6_SPID      MAS6_SPID0
+
+#define MAS7_RPN       0xFFFFFFFF
+
+#define FSL_BOOKE_MAS0(tlbsel,esel,nv) \
+               (MAS0_TLBSEL(tlbsel) | MAS0_ESEL(esel) | MAS0_NV(nv))
+#define FSL_BOOKE_MAS1(v,iprot,tid,ts,tsize) \
+               ((((v) << 31) & MAS1_VALID)             |\
+               (((iprot) << 30) & MAS1_IPROT)          |\
+               (MAS1_TID(tid))                         |\
+               (((ts) << 12) & MAS1_TS)                |\
+               (MAS1_TSIZE(tsize)))
+#define FSL_BOOKE_MAS2(epn, wimge) \
+               (((epn) & MAS3_RPN) | (wimge))
+#define FSL_BOOKE_MAS3(rpn, user, perms) \
+               (((rpn) & MAS3_RPN) | (user) | (perms))
 
 #define BOOKE_PAGESZ_1K         0
 #define BOOKE_PAGESZ_4K         1
@@ -398,6 +413,10 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);
 #define BOOKE_PAGESZ_256M       9
 #define BOOKE_PAGESZ_1G                10
 #define BOOKE_PAGESZ_4G                11
+#define BOOKE_PAGESZ_16GB      12
+#define BOOKE_PAGESZ_64GB      13
+#define BOOKE_PAGESZ_256GB     14
+#define BOOKE_PAGESZ_1TB       15
 
 #if defined(CONFIG_MPC86xx)
 #define LAWBAR_BASE_ADDR       0x00FFFFFF
@@ -650,6 +669,7 @@ unsigned long mftlb3(unsigned long index);
 
 void program_tlb(u32 phys_addr, u32 virt_addr, u32 size, u32 tlb_word2_i_value);
 void remove_tlb(u32 vaddr, u32 size);
+void change_tlb(u32 vaddr, u32 size, u32 tlb_word2_i_value);
 #endif /* __ASSEMBLY__ */
 
 #endif /* CONFIG_440 */
similarity index 77%
rename from cpu/ppc4xx/vecnum.h
rename to include/asm-ppc/ppc4xx-intvec.h
index bddf9e5daa95191fc52ccfc5a882da3a3a678180..8d04b690632a5e59ac6f3008119310ef6d2b9e98 100644 (file)
 #define VECNUM_RXDE         VECNUM_MRDE
 
 /* UIC 2 */
-#define VECNUM_EIR5         (62 +  0)  /* External interrupt 5          */
-#define VECNUM_EIR6         (62 +  1)  /* External interrupt 6          */
-#define VECNUM_OPB          (62 +  2)  /* OPB to PLB bridge int stat    */
-#define VECNUM_EIR2         (62 +  3)  /* External interrupt 2          */
-#define VECNUM_EIR3         (62 +  4)  /* External interrupt 3          */
-#define VECNUM_DDR2         (62 +  5)  /* DDR2 sdram                    */
-#define VECNUM_MCTX0        (62 +  6)  /* MAl intp coalescence TX0      */
-#define VECNUM_MCTX1        (62 +  7)  /* MAl intp coalescence TX1      */
-#define VECNUM_MCTR0        (62 +  8)  /* MAl intp coalescence TR0      */
-#define VECNUM_MCTR1        (62 +  9)  /* MAl intp coalescence TR1      */
+#define VECNUM_EIR5         (64 +  0)  /* External interrupt 5          */
+#define VECNUM_EIR6         (64 +  1)  /* External interrupt 6          */
+#define VECNUM_OPB          (64 +  2)  /* OPB to PLB bridge int stat    */
+#define VECNUM_EIR2         (64 +  3)  /* External interrupt 2          */
+#define VECNUM_EIR3         (64 +  4)  /* External interrupt 3          */
+#define VECNUM_DDR2         (64 +  5)  /* DDR2 sdram                    */
+#define VECNUM_MCTX0        (64 +  6)  /* MAl intp coalescence TX0      */
+#define VECNUM_MCTX1        (64 +  7)  /* MAl intp coalescence TX1      */
+#define VECNUM_MCTR0        (64 +  8)  /* MAl intp coalescence TR0      */
+#define VECNUM_MCTR1        (64 +  9)  /* MAl intp coalescence TR1      */
 
 #elif defined(CONFIG_440SPE)
 
 #define VECNUM_EWU0         (32 + 29)   /* Emac  wakeup                 */
 
 /* UIC 2 */
-#define VECNUM_EIR5         (62 + 24)   /* External interrupt 5         */
-#define VECNUM_EIR4         (62 + 25)   /* External interrupt 4         */
-#define VECNUM_EIR3         (62 + 26)   /* External interrupt 3         */
-#define VECNUM_EIR2         (62 + 27)   /* External interrupt 2         */
-#define VECNUM_EIR1         (62 + 28)   /* External interrupt 1         */
-#define VECNUM_EIR0         (62 + 29)   /* External interrupt 0         */
+#define VECNUM_EIR5         (64 + 24)   /* External interrupt 5         */
+#define VECNUM_EIR4         (64 + 25)   /* External interrupt 4         */
+#define VECNUM_EIR3         (64 + 26)   /* External interrupt 3         */
+#define VECNUM_EIR2         (64 + 27)   /* External interrupt 2         */
+#define VECNUM_EIR1         (64 + 28)   /* External interrupt 1         */
+#define VECNUM_EIR0         (64 + 29)   /* External interrupt 0         */
 
 #elif defined(CONFIG_440SP)
 
 #define VECNUM_EIR3            30      /* External interrupt 3         */
 #define VECNUM_EIR4            31      /* External interrupt 4         */
 
+#elif defined(CONFIG_405EX)
+
+/* UIC 0 */
+#define VECNUM_U0              00
+#define VECNUM_U1              01
+#define VECNUM_IIC0            02
+#define VECNUM_PKA             03
+#define VECNUM_TRNG            04
+#define VECNUM_EBM             05
+#define VECNUM_BGI             06
+#define VECNUM_IIC1            07
+#define VECNUM_SPI             08
+#define VECNUM_EIR0            09
+#define VECNUM_MTE             10      /* MAL Tx EOB */
+#define VECNUM_MRE             11      /* MAL Rx EOB */
+#define VECNUM_DMA0            12
+#define VECNUM_DMA1            13
+#define VECNUM_DMA2            14
+#define VECNUM_DMA3            15
+#define VECNUM_PCIE0AL         16
+#define VECNUM_PCIE0VPD                17
+#define VECNUM_RPCIE0HRST      18
+#define VECNUM_FPCIE0HRST      19
+#define VECNUM_PCIE0TCR                20
+#define VECNUM_PCIEMSI0                21
+#define VECNUM_PCIEMSI1                22
+#define VECNUM_SECURITY                23
+#define VECNUM_ETH0            24
+#define VECNUM_ETH1            25
+#define VECNUM_PCIEMSI2                26
+#define VECNUM_EIR4            27
+#define VECNUM_UIC2NC          28
+#define VECNUM_UIC2C           29
+#define VECNUM_UIC1NC          30
+#define VECNUM_UIC1C           31
+
+/* UIC 1 */
+#define VECNUM_MS              (32 + 00)       /* MAL SERR */
+#define VECNUM_TXDE            (32 + 01)       /* MAL TXDE */
+#define VECNUM_RXDE            (32 + 02)       /* MAL RXDE */
+#define VECNUM_PCIE0BMVC0      (32 + 03)
+#define VECNUM_PCIE0DCRERR     (32 + 04)
+#define VECNUM_EBC             (32 + 05)
+#define VECNUM_NDFC            (32 + 06)
+#define VECNUM_PCEI1DCRERR     (32 + 07)
+#define VECNUM_CT8             (32 + 08)
+#define VECNUM_CT9             (32 + 09)
+#define VECNUM_PCIE1AL         (32 + 10)
+#define VECNUM_PCIE1VPD                (32 + 11)
+#define VECNUM_RPCE1HRST       (32 + 12)
+#define VECNUM_FPCE1HRST       (32 + 13)
+#define VECNUM_PCIE1TCR                (32 + 14)
+#define VECNUM_PCIE1VC0                (32 + 15)
+#define VECNUM_CT3             (32 + 16)
+#define VECNUM_CT4             (32 + 17)
+#define VECNUM_EIR7            (32 + 18)
+#define VECNUM_EIR8            (32 + 19)
+#define VECNUM_EIR9            (32 + 20)
+#define VECNUM_CT5             (32 + 21)
+#define VECNUM_CT6             (32 + 22)
+#define VECNUM_CT7             (32 + 23)
+#define VECNUM_SROM            (32 + 24)       /* SERIAL ROM */
+#define VECNUM_GPTDECPULS      (32 + 25)       /* GPT Decrement pulse */
+#define VECNUM_EIR2            (32 + 26)
+#define VECNUM_EIR5            (32 + 27)
+#define VECNUM_EIR6            (32 + 28)
+#define VECNUM_EMAC0WAKE       (32 + 29)
+#define VECNUM_EIR1            (32 + 30)
+#define VECNUM_EMAC1WAKE       (32 + 31)
+
+/* UIC 2 */
+#define VECNUM_PCIE0INTA       (64 + 00)       /* PCIE0 INTA */
+#define VECNUM_PCIE0INTB       (64 + 01)       /* PCIE0 INTB */
+#define VECNUM_PCIE0INTC       (64 + 02)       /* PCIE0 INTC */
+#define VECNUM_PCIE0INTD       (64 + 03)       /* PCIE0 INTD */
+#define VECNUM_EIR3            (64 + 04)       /* External IRQ 3 */
+#define VECNUM_DDRMCUE         (64 + 05)
+#define VECNUM_DDRMCCE         (64 + 06)
+#define VECNUM_MALINTCOATX0    (64 + 07)       /* Interrupt coalecence TX0 */
+#define VECNUM_MALINTCOATX1    (64 + 08)       /* Interrupt coalecence TX1 */
+#define VECNUM_MALINTCOARX0    (64 + 09)       /* Interrupt coalecence RX0 */
+#define VECNUM_MALINTCOARX1    (64 + 10)       /* Interrupt coalecence RX1 */
+#define VECNUM_PCIE1INTA       (64 + 11)       /* PCIE0 INTA */
+#define VECNUM_PCIE1INTB       (64 + 12)       /* PCIE0 INTB */
+#define VECNUM_PCIE1INTC       (64 + 13)       /* PCIE0 INTC */
+#define VECNUM_PCIE1INTD       (64 + 14)       /* PCIE0 INTD */
+#define VECNUM_RPCIEMSI2       (64 + 15)       /* MSI level 2 */
+#define VECNUM_PCIEMSI3                (64 + 16)       /* MSI level 2 */
+#define VECNUM_PCIEMSI4                (64 + 17)       /* MSI level 2 */
+#define VECNUM_PCIEMSI5                (64 + 18)       /* MSI level 2 */
+#define VECNUM_PCIEMSI6                (64 + 19)       /* MSI level 2 */
+#define VECNUM_PCIEMSI7                (64 + 20)       /* MSI level 2 */
+#define VECNUM_PCIEMSI8                (64 + 21)       /* MSI level 2 */
+#define VECNUM_PCIEMSI9                (64 + 22)       /* MSI level 2 */
+#define VECNUM_PCIEMSI10       (64 + 23)       /* MSI level 2 */
+#define VECNUM_PCIEMSI11       (64 + 24)       /* MSI level 2 */
+#define VECNUM_PCIEMSI12       (64 + 25)       /* MSI level 2 */
+#define VECNUM_PCIEMSI13       (64 + 26)       /* MSI level 2 */
+#define VECNUM_PCIEMSI14       (64 + 27)       /* MSI level 2 */
+#define VECNUM_PCIEMSI15       (64 + 28)       /* MSI level 2 */
+#define VECNUM_PLB4XAHB                (64 + 29)       /* PLBxAHB bridge */
+#define VECNUM_USBWAKE         (64 + 30)       /* USB wakup */
+#define VECNUM_USBOTG          (64 + 31)       /* USB OTG */
+
 #else  /* !CONFIG_405EZ */
 
 #define VECNUM_U0           0           /* UART0                        */
index 0a160e2513aabb5e50f76c28ce524930d37553e5..86c5df2dbaadafcabfe539b9b35cb7f256814a01 100644 (file)
 
 /* Special Purpose Registers (SPRNs)*/
 
+/* PPC440 Architecture is BOOK-E */
+#ifdef CONFIG_440
+#define CONFIG_BOOKE
+#endif
+
 #define SPRN_CDBCR     0x3D7   /* Cache Debug Control Register */
 #define SPRN_CTR       0x009   /* Count Register */
 #define SPRN_DABR      0x3F5   /* Data Address Breakpoint Register */
 #define SPRN_IVOR15    0x19f   /* Interrupt Vector Offset Register 15 */
 
 /* e500 definitions */
+#define SPRN_L1CFG0     0x203   /* L1 Cache Configuration Register 0 */
+#define SPRN_L1CFG1     0x204   /* L1 Cache Configuration Register 1 */
 #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 MCSRR1 SPRN_MCSRR1
 #define L1CSR0 SPRN_L1CSR0
 #define L1CSR1 SPRN_L1CSR1
+#define L1CFG0 SPRN_L1CFG0
+#define L1CFG1 SPRN_L1CFG1
 #define MCSR   SPRN_MCSR
 #define MMUCSR0        SPRN_MMUCSR0
 #define BUCSR  SPRN_BUCSR
 #define PVR_405EP_RA   0x51210950
 #define PVR_405GPR_RB  0x50910951
 #define PVR_405EZ_RA   0x41511460
+#define PVR_405EXR1_RA 0x12911473 /* 405EXr rev A with Security */
+#define PVR_405EXR2_RA 0x12911471 /* 405EXr rev A without Security */
+#define PVR_405EX1_RA  0x12911477 /* 405EX rev A with Security */
+#define PVR_405EX2_RA  0x12911475 /* 405EX rev A without Security */
 #define PVR_440GP_RB   0x40120440
 #define PVR_440GP_RC   0x40120481
 #define PVR_440EP_RA   0x42221850
 #define SVR_8544_E     0x803C
 #define SVR_8548       0x8031
 #define SVR_8548_E     0x8039
+#define SVR_8610       0x80A0
 #define SVR_8641       0x8090
 #define SVR_8568_E     0x807D
 
index 464f6b5756e2f04a03dbcf15404eb4fc470e83c6..2b31814b6665fcd81aafc5656b0a6ff6982a126f 100644 (file)
@@ -74,6 +74,9 @@ typedef struct bd_info {
        unsigned long   bi_sccfreq;     /* SCC_CLK Freq, in MHz */
        unsigned long   bi_vco;         /* VCO Out from PLL, in MHz */
 #endif
+#if defined(CONFIG_MPC512X)
+       unsigned long   bi_ipsfreq;     /* IPS Bus Freq, in MHz */
+#endif /* CONFIG_MPC512X */
 #if defined(CONFIG_MPC5xxx)
        unsigned long   bi_ipbfreq;     /* IPB Bus Freq, in MHz */
        unsigned long   bi_pcifreq;     /* PCI Bus Freq, in MHz */
@@ -84,6 +87,7 @@ typedef struct bd_info {
     defined(CONFIG_405CR) || \
     defined(CONFIG_405EP) || \
     defined(CONFIG_405EZ) || \
+    defined(CONFIG_405EX) || \
     defined(CONFIG_440)
        unsigned char   bi_s_version[4];        /* Version of this structure */
        unsigned char   bi_r_version[32];       /* Version of the ROM (AMCC) */
diff --git a/include/bcd.h b/include/bcd.h
new file mode 100644 (file)
index 0000000..c545308
--- /dev/null
@@ -0,0 +1,20 @@
+/* Permission is hereby granted to copy, modify and redistribute this code
+ * in terms of the GNU Library General Public License, Version 2 or later,
+ * at your option.
+ */
+
+/* macros to translate to/from binary and binary-coded decimal (frequently
+ * found in RTC chips).
+ */
+
+#ifndef _BCD_H
+#define _BCD_H
+
+#define BCD2BIN(val)   (((val) & 0x0f) + ((val)>>4)*10)
+#define BIN2BCD(val)   ((((val)/10)<<4) + (val)%10)
+
+/* backwards compat */
+#define BCD_TO_BIN(val) ((val)=BCD2BIN(val))
+#define BIN_TO_BCD(val) ((val)=BIN2BCD(val))
+
+#endif /* _BCD_H */
index 22e80bb9b3aa3647c14bd043c99cc0543c736d12..54083f10c5428232818c31fc1f8fe777e2eefa19 100644 (file)
@@ -197,6 +197,8 @@ int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen);
 void   main_loop       (void);
 int    run_command     (const char *cmd, int flag);
 int    readline        (const char *const prompt);
+int    readline_into_buffer    (const char *const prompt, char * buffer);
+int    parse_line (char *, char *[]);
 void   init_cmd_timeout(void);
 void   reset_cmd_timeout(void);
 
@@ -227,6 +229,7 @@ extern ulong load_addr;             /* Default Load Address */
 /* common/cmd_nvedit.c */
 int    env_init     (void);
 void   env_relocate (void);
+int    envmatch     (uchar *, int);
 char   *getenv      (char *);
 int    getenv_r     (char *name, char *buf, unsigned len);
 int    saveenv      (void);
@@ -259,7 +262,7 @@ void        pciinfo       (int, int);
     int           pci_pre_init        (struct pci_controller * );
 #endif
 
-#if defined(CONFIG_PCI) && defined(CONFIG_440)
+#if defined(CONFIG_PCI) && (defined(CONFIG_440) || defined(CONFIG_405EX))
 #   if defined(CFG_PCI_TARGET_INIT)
        void    pci_target_init      (struct pci_controller *);
 #   endif
@@ -267,7 +270,7 @@ void        pciinfo       (int, int);
        void    pci_master_init      (struct pci_controller *);
 #   endif
     int            is_pci_host         (struct pci_controller *);
-#if defined(CONFIG_440SPE)
+#if defined(CONFIG_440SPE) || defined(CONFIG_405EX)
    void pcie_setup_hoses(int busno);
 #endif
 #endif
@@ -278,6 +281,9 @@ int misc_init_r   (void);
 /* common/exports.c */
 void   jumptable_init(void);
 
+/* api/api.c */
+void   api_init (void);
+
 /* common/memsize.c */
 long   get_ram_size  (volatile long *, long);
 
@@ -462,7 +468,7 @@ int prt_8260_clks (void);
 #elif defined(CONFIG_MPC5xxx)
 int    prt_mpc5xxx_clks (void);
 #endif
-#if defined(CONFIG_MPC512x)
+#if defined(CONFIG_MPC512X)
 int    prt_mpc512xxx_clks (void);
 #endif
 #if defined(CONFIG_MPC8220)
@@ -507,15 +513,13 @@ void   get_sys_info  ( sys_info_t * );
 
 #if defined(CONFIG_4xx) || defined(CONFIG_IOP480)
 #  if defined(CONFIG_440)
-    typedef PPC440_SYS_INFO sys_info_t;
 #      if defined(CONFIG_440SPE)
         unsigned long determine_sysper(void);
         unsigned long determine_pci_clock_per(void);
-        int ppc440spe_revB(void);
 #      endif
-#  else
-    typedef PPC405_SYS_INFO sys_info_t;
 #  endif
+typedef PPC4xx_SYS_INFO sys_info_t;
+int    ppc440spe_revB(void);
 void   get_sys_info  ( sys_info_t * );
 #endif
 
index 12400e3eddbd9b232b2a3248511393fd2cdadbf8..6b1b4e8fffbd96af363bcf2490b1fbeac2726a05 100644 (file)
@@ -159,6 +159,8 @@ typedef struct smc_uart {
        ushort  smc_brkec;      /* rcv'd break condition counter */
        ushort  smc_brkcr;      /* xmt break count register */
        ushort  smc_rmask;      /* Temporary bit mask */
+       u_char  res1[8];
+       ushort  smc_rpbase;     /* Relocation pointer */
 } smc_uart_t;
 
 /* Function code bits.
@@ -1120,6 +1122,32 @@ typedef struct scc_enet {
 #define SICR_ENET_CLKRT        ((uint)0x0000003d)
 #endif /* CONFIG_MBX */
 
+/***  MGSUVD  *********************************************************/
+
+/* The MGSUVD Service Module uses SCC3 for Ethernet */
+
+#ifdef CONFIG_MGSUVD
+#define PROFF_ENET     PROFF_SCC3              /* Ethernet on SCC3 */
+#define CPM_CR_ENET    CPM_CR_CH_SCC3
+#define SCC_ENET       2
+#define PA_ENET_RXD    ((ushort)0x0010)        /* PA 11 */
+#define PA_ENET_TXD    ((ushort)0x0020)        /* PA 10 */
+#define PA_ENET_RCLK   ((ushort)0x1000)        /* PA  3 CLK 5 */
+#define PA_ENET_TCLK   ((ushort)0x2000)        /* PA  2 CLK 6 */
+
+#define PC_ENET_TENA   ((ushort)0x0004)        /* PC 13 */
+
+#define PC_ENET_RENA   ((ushort)0x0200)        /* PC  6 */
+#define PC_ENET_CLSN   ((ushort)0x0100)        /* PC  7 */
+
+/* Control bits in the SICR to route TCLK (CLK6) and RCLK (CLK5) to
+ * SCC3.  Also, make sure GR3 (bit 8) and SC3 (bit 9) are zero.
+ */
+#define SICR_ENET_MASK ((uint)0x00FF0000)
+#define SICR_ENET_CLKRT        ((uint)0x00250000)
+#endif /* CONFIG_MGSUVD */
+
+
 /***  MHPC  ********************************************************/
 
 #if defined(CONFIG_MHPC)
index d7ef65d5ddef775b1cecc118ff475198551d6286..f3965efe953f3584349299d90ad915fdc59b985a 100644 (file)
@@ -73,6 +73,7 @@
 #define CONFIG_CMD_SETGETDCR   /* DCR support on 4xx           */
 #define CONFIG_CMD_SNTP                /* SNTP support                 */
 #define CONFIG_CMD_SPI         /* SPI utility                  */
+#define CONFIG_CMD_TERMINAL    /* built-in Serial Terminal     */
 #define CONFIG_CMD_UNIVERSE    /* Tundra Universe Support      */
 #define CONFIG_CMD_USB         /* USB Support                  */
 #define CONFIG_CMD_VFD         /* VFD support (TRAB)           */
index 46329918ef1cb4a9c20cb830bbb048a9a2e8a4b6..5d28168fbcbef42301ba7b6f09a09e85d8c87896 100644 (file)
 #define CFG_ETH_DEV_FN      0x0000
 #define CFG_ETH_IOBASE      0x0fff0000
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                2048    /* For PLX IOP480                       */
-#define CFG_CACHELINE_SIZE     16      /* For AMCC 401/403 CPUs                */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index d25aa74a4527df8019842e7d51d00a2c88baebad..d490b33bd4c71e5eb93da78b4ac6981c739b4f9d 100644 (file)
 #define CFG_ENV_ADDR       \
     (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)  /* Env  */
 #endif
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value    */
-#endif
 
 /*
  * Init Memory Controller:
index 0f301ec0c6af4d6419e5be09945b3913d2a29330..50f09b03f3b6b19d95c7d250490051ed3a93a258 100644 (file)
 #define CFG_ENV_ADDR_REDUND     0xFFFA0000
 #define CFG_ENV_SIZE_REDUND    CFG_ENV_SIZE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 9adbba954418fb4a26c8215829138b945ded77c3..85c6a992d7bfa64b7542e9dc1d48467bc987acc8 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
diff --git a/include/configs/ATUM8548.h b/include/configs/ATUM8548.h
new file mode 100644 (file)
index 0000000..f7020b4
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ * Copyright 2007
+ * Robert Lazarski, Instituto Atlantico, robertlazarski@gmail.com
+ *
+ * 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
+ */
+
+/*
+ * atum8548 board configuration file
+ *
+ * Please refer to doc/README.atum8548 for more info.
+ *
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* Debug Options, Disable in production
+#define ET_DEBUG               1
+#define CONFIG_PANIC_HANG      1
+#define DEBUG                  1
+*/
+
+/* CPLD Configuration Options */
+#define MPC85xx_ATUM_CLKOCR            0x80000002
+
+/* 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_MPC8548         1       /* MPC8548 specific */
+
+#define CONFIG_PCI             1       /* enable any pci type devices */
+#define CONFIG_PCI1            1       /* PCI controller 1 */
+#define CONFIG_PCIE1           1       /* PCIE controler 1 (slot 1) */
+#define CONFIG_PCI2             1      /* PCI controller 2 */
+#define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
+
+#define CONFIG_TSEC_ENET       1       /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_SPD_EEPROM      1       /* Use SPD EEPROM for DDR setup*/
+#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? */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+#define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
+
+#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
+
+#define CONFIG_SYS_CLK_FREQ    33000000
+
+/*
+ * 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 */
+
+#define CONFIG_CMD_SDRAM               1       /* SDRAM DIMM SPD info printout */
+#define CONFIG_ENABLE_36BIT_PHYS       1
+#undef CFG_DRAM_TEST
+#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 */
+
+#define PCI_SPEED              33333000        /* CPLD currenlty does not have PCI setup info */
+#define CFG_PCI1_ADDR  (CFG_CCSRBAR+0x8000)
+#define CFG_PCI2_ADDR  (CFG_CCSRBAR+0x9000)
+#define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#if defined(CONFIG_SPD_EEPROM)
+    /*
+     * Determine DDR configuration from I2C interface.
+     */
+    #define SPD_EEPROM_ADDRESS 0x51            /* DDR DIMM */
+
+#else
+    /*
+     * Manually set up DDR parameters
+     */
+    #define CFG_SDRAM_SIZE     1024            /* DDR is 1024MB */
+    #define CFG_DDR_CS0_BNDS   0x0000000f      /* 0-1024 */
+    #define CFG_DDR_CS0_CONFIG 0x80000102
+    #define CFG_DDR_TIMING_0   0x00260802
+    #define CFG_DDR_TIMING_1   0x38355322
+    #define CFG_DDR_TIMING_2   0x039048c7
+    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
+    #define CFG_DDR_MODE       0x00000432
+    #define CFG_DDR_INTERVAL   0x05150100
+    #define DDR_SDRAM_CFG      0x43000000
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+/*
+ * Local Bus Definitions
+ */
+
+/*
+ * FLASH on the Local Bus
+ * based on flash chip S29GL01GP
+ * One bank, 128M, using the CFI driver.
+ * Boot from BR0 bank at 0xf800_0000
+ *
+ * BR0:
+ *    Base address 0 = 0xF8000000 = BR0[0:16] = 1111 1000 0000 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 1000 0000 0000 0001 0000 0000 0001 = f8001001    BR0
+ *
+ * OR0:
+ *    Addr Mask = 128M = ORx[0:16] = 1111 1000 0000 0000 0
+ *    Reserved ORx[17:18] = 00
+ *    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 1000 0000 0000 0000 1110 0110 0101 = f8000E65    ORx
+ */
+
+#define CFG_BOOT_BLOCK         0xf8000000      /* boot TLB block */
+#define CFG_FLASH_BASE         CFG_BOOT_BLOCK  /* start of FLASH 128M */
+
+#define CFG_BR0_PRELIM         0xf8001001
+
+#define        CFG_OR0_PRELIM          0xf8000E65
+
+#define CFG_MAX_FLASH_BANKS    1               /* number of banks      */
+#define CFG_MAX_FLASH_SECT     1024            /* sectors per device */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   512000  /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   8000    /* Flash Write Timeout (ms) */
+
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#define CFG_FLASH_CFI_DRIVER    1
+#define CFG_FLASH_CFI           1
+#define CFG_FLASH_EMPTY_INFO
+
+/*
+ * Flash on the LocalBus
+ */
+#define CFG_LBC_CACHE_BASE     0xf0000000      /* Localbus cacheable    */
+
+/* Memory */
+#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_INIT_L2_ADDR       0xf8f80000      /* relocate boot L2SRAM */
+
+#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_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+
+/*
+ * 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 space is mapped 1-1, but I/O space must start from 0.
+ */
+#define CFG_PCI_PHYS           0x80000000      /* 1G PCI TLB */
+
+#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       0x00100000      /* 1M */
+
+#ifdef CONFIG_PCI2
+#define CFG_PCI2_MEM_BASE      0xC0000000
+#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       0xe2800000
+#define CFG_PCI2_IO_SIZE       0x00100000      /* 1M */
+#endif
+
+#ifdef CONFIG_PCIE1
+#define CFG_PCIE1_MEM_BASE     0xa0000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE1_IO_BASE      0x00000000
+#define CFG_PCIE1_IO_PHYS      0xe3000000
+#define CFG_PCIE1_IO_SIZE      0x00100000      /*   1M */
+#endif
+
+
+#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
+
+#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 */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+#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_TSEC1   1
+#define CONFIG_TSEC1_NAME      "eTSEC0"
+#define CONFIG_TSEC2   1
+#define CONFIG_TSEC2_NAME      "eTSEC1"
+#define CONFIG_TSEC3   1
+#define CONFIG_TSEC3_NAME      "eTSEC2"
+#define CONFIG_TSEC4   1
+#define CONFIG_TSEC4_NAME      "eTSEC3"
+#undef CONFIG_MPC85XX_FEC
+
+#define TSEC1_PHY_ADDR         0
+#define TSEC2_PHY_ADDR         1
+#define TSEC3_PHY_ADDR         2
+#define TSEC4_PHY_ADDR         3
+
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define TSEC3_PHYIDX           0
+#define TSEC4_PHYIDX           0
+#define TSEC1_FLAGS            TSEC_GIGABIT
+#define TSEC2_FLAGS            TSEC_GIGABIT
+#define TSEC3_FLAGS            TSEC_GIGABIT
+#define TSEC4_FLAGS            TSEC_GIGABIT
+
+/* Options are: eTSEC[0-3] */
+#define CONFIG_ETHPRIME                "eTSEC2"
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+#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 */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+
+#if defined(CONFIG_PCI)
+    #define CONFIG_CMD_PCI
+#endif
+
+
+#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 defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_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*/
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#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
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETH3ADDR         00:E0:0C:00:03:FD
+#endif
+
+#define CONFIG_IPADDR   10.101.43.142
+
+#define CONFIG_HOSTNAME         atum
+#define CONFIG_ROOTPATH         /nfsroot
+#define CONFIG_BOOTFILE         /tftpboot/uImage.atum
+#define CONFIG_UBOOTPATH       /tftpboot/uboot.bin     /* TFTP server */
+
+#define CONFIG_SERVERIP         10.101.43.10
+#define CONFIG_GATEWAYIP 10.101.45.1
+#define CONFIG_NETMASK  255.255.248.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
+
+#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 $dtbaddr $dtbfile;"                                           \
+   "bootm $loadaddr - $dtbaddr"
+
+
+#define CONFIG_RAMBOOTCOMMAND \
+   "setenv bootargs root=/dev/ram rw "                                 \
+      "console=$consoledev,$baudrate $othbootargs;"                    \
+   "tftp $ramdiskaddr $ramdiskfile;"                                   \
+   "tftp $loadaddr $bootfile;"                                         \
+   "tftp $dtbaddr $dtbfile;"                                           \
+   "bootm $loadaddr $ramdiskaddr $dtbaddr"
+
+#define CONFIG_BOOTCOMMAND     CONFIG_NFSBOOTCOMMAND
+
+#endif /* __CONFIG_H */
index ae32f6b14acd393b21569e54a9b378335de04c1a..7029dbddef2c48aa294d3cbdf0cbeadcad63db08 100644 (file)
 /* mask of address bits that overflow into the "EEPROM chip address"   */
 #define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 0321650f3d2103e69fdc047af57ae7e1e32e5e4b..1603c9c0bdada1f4a7865f1f57226906681690cd 100644 (file)
 #define CONFIG_VGA_AS_SINGLE_DEVICE
 /* This is the base address (on 405EP-side) used to generate I/O accesses on PCI bus */
 #define CFG_ISA_IO 0xE8000000
-/* see also drivers/videomodes.c */
+/* see also drivers/video/videomodes.c */
 #define CFG_DEFAULT_VIDEO_MODE 0x303
 #endif
 
index 21cd9c1f261c842332630a5455ee25a78c1f1c53..285cd5c0e8e90527ce9522eeead20beab91ecb74 100644 (file)
 
 #define CFG_EEPROM_WREN         1
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index a3717b9052f5802006e8cd8e733738f7fe7f936a..58900c3091d4385941a9f086f67024a07e535c32 100644 (file)
 
 #define CFG_EEPROM_WREN         1
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 1b948f6382a2cc6b4119544fda76d98c1b3ea906..bd43e1dc9aaf02407a402f8e448fb176c385bf60 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index fb71c5fb040fe89a0182107adb2ad77ee4252de3..b248639fd0d2ebac843c7b1969152f757b7b3bcd 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 49943195b72234abc47cd519de3f2df2a86a411d..1e9597dc619420bb4fb92ae8930c77f6e34cf864 100644 (file)
 #define CFG_NVRAM_SIZE         (32*1024)               /* NVRAM size           */
 #define CFG_VXWORKS_MAC_PTR     (CFG_NVRAM_BASE_ADDR+0x6900) /* VxWorks eth-addr*/
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 29f9292447871fed426c0d2ee4dba894c66fb7ab..a8029eae9d18fb43d7f0f6f54f204cac85e3ce74 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
diff --git a/include/configs/CPCI440.h b/include/configs/CPCI440.h
deleted file mode 100644 (file)
index 318ada1..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * (C) Copyright 2002
- * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/************************************************************************
- * board/config_CPCI440.h - configuration for esd CPCI-440 board
- ***********************************************************************/
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/*-----------------------------------------------------------------------
- * High Level Configuration Options
- *----------------------------------------------------------------------*/
-#define CONFIG_CPCI440         1           /* Board is ebony           */
-#define CONFIG_440GP           1           /* Specifc GP support       */
-#define CONFIG_440             1           /* ... PPC440 family        */
-#define CONFIG_4xx             1           /* ... PPC4xx family        */
-#define CONFIG_BOARD_EARLY_INIT_F 1        /* Call board_early_init_f  */
-#undef CFG_DRAM_TEST                       /* Disable-takes long time! */
-#define CONFIG_SYS_CLK_FREQ    33330000 /* external frequency to pll   */
-
-/*-----------------------------------------------------------------------
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- *----------------------------------------------------------------------*/
-#define CFG_SDRAM_BASE     0x00000000      /* _must_ be 0              */
-#define CFG_FLASH_BASE     0xff800000      /* start of FLASH           */
-#if 1
-#define CFG_MONITOR_BASE    0xfffc0000     /* start of monitor         */
-#else
-#define CFG_MONITOR_BASE    0x01fc0000     /* start of monitor         */
-#endif
-#define CFG_PERIPHERAL_BASE 0xe0000000     /* internal peripherals     */
-#define CFG_ISRAM_BASE     0xc0000000      /* internal SRAM            */
-
-#define CFG_FPGA_BASE      (CFG_PERIPHERAL_BASE + 0x08300000)
-#define CFG_NVRAM_BASE_ADDR (CFG_PERIPHERAL_BASE + 0x08000000)
-
-/*-----------------------------------------------------------------------
- * Initial RAM & stack pointer (placed in internal SRAM)
- *----------------------------------------------------------------------*/
-#define CFG_INIT_RAM_ADDR   CFG_ISRAM_BASE  /* Initial RAM address     */
-#define CFG_INIT_RAM_END    0x2000         /* 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            (192 * 1024)    /* Reserve 192 kB for Mon   */
-#define CFG_MALLOC_LEN     (128 * 1024)    /* Reserve 128 kB for malloc*/
-
-/*-----------------------------------------------------------------------
- * Serial Port
- *----------------------------------------------------------------------*/
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
-#undef CFG_EXT_SERIAL_CLOCK /*  (1843200 * 6)   / * Ext clk @ 11.059 MHz */
-#define CONFIG_BAUDRATE                9600
-
-#define CFG_BAUDRATE_TABLE  \
-    {300, 600, 1200, 2400, 4800, 9600, 19200, 38400}
-
-/*-----------------------------------------------------------------------
- * NVRAM/RTC
- *
- * NOTE: Upper 8 bytes of NVRAM is where the RTC registers are located.
- * The DS1743 code assumes this condition (i.e. -- it assumes the base
- * address for the RTC registers is:
- *
- *     CFG_NVRAM_BASE_ADDR + CFG_NVRAM_SIZE
- *
- *----------------------------------------------------------------------*/
-#define CFG_NVRAM_SIZE     (0x2000 - 8)    /* NVRAM size(8k)- RTC regs */
-#define CONFIG_RTC_DS174x      1                   /* DS1743 RTC               */
-
-/*-----------------------------------------------------------------------
- * FLASH related
- *----------------------------------------------------------------------*/
-#if 1 /* test-only */
-
-#define CFG_FLASH_CFI          1       /* Flash is CFI conformant              */
-#define CFG_MAX_FLASH_SECT     128     /* max number of sectors on one chip    */
-#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
-#define CFG_FLASH_INCREMENT    0       /* there is only one bank               */
-#define CFG_FLASH_PROTECTION   1       /* use hardware protection              */
-#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
-#undef CFG_FLASH_BASE
-#define CFG_FLASH_BASE         0xFF800000 /* test-only...*/
-
-#else /* test-only */
-
-#define CFG_MAX_FLASH_BANKS    3                   /* number of banks      */
-#define CFG_MAX_FLASH_SECT     32                  /* sectors per device   */
-
-#undef CFG_FLASH_CHECKSUM
-#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
-#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
-
-#endif
-
-/*-----------------------------------------------------------------------
- * Environment
- *----------------------------------------------------------------------*/
-#if 0 /* test-only */
-#define CFG_ENV_IS_IN_NVRAM    1           /* Environment uses NVRAM   */
-#undef CFG_ENV_IS_IN_FLASH                 /* ... not in flash         */
-#undef CFG_ENV_IS_IN_EEPROM                /* ... not in EEPROM        */
-
-#define CFG_ENV_SIZE           0x1000      /* Size of Environment vars */
-#define CFG_ENV_ADDR           \
-       (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)
-#else
-
-#if 0 /* test-only */
-#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars */
-#define CFG_ENV_OFFSET         0x010   /* environment starts at the beginning of the EEPROM */
-#define CFG_ENV_SIZE           0x800   /* 2048 bytes may be used for env vars*/
-                                  /* total size of a CAT24WC16 is 2048 bytes */
-#else
-#define CFG_ENV_IS_IN_FLASH    1
-#define CFG_ENV_OFFSET         0x8000  /*   Offset   of Environment Sector     */
-#define CFG_ENV_SIZE           0x4000  /* Total Size of Environment Sector     */
-#endif
-
-/*-----------------------------------------------------------------------
- * I2C EEPROM (CAT24WC16) for environment
- */
-#define CONFIG_HARD_I2C                        /* I2c with hardware support */
-#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
-#define CFG_I2C_SLAVE          0x7F
-
-#define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT28WC08             */
-#define CFG_I2C_EEPROM_ADDR_LEN 1      /* Bytes of address             */
-/* mask of address bits that overflow into the "EEPROM chip address"   */
-#define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
-#define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
-                                       /* 16 byte page write mode using*/
-                                       /* last 4 bits of the address   */
-#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
-#define CFG_EEPROM_PAGE_WRITE_ENABLE
-
-#endif
-
-#undef CONFIG_BOOTARGS
-#undef CONFIG_BOOTCOMMAND
-
-#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds     */
-#define CONFIG_BAUDRATE                9600
-
-#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
-
-#define CONFIG_MII             1       /* MII PHY management           */
-#define CONFIG_PHY_ADDR                1       /* PHY address                  */
-#define CONFIG_LXT971_NO_SLEEP  1       /* disable sleep mode in LXT971 */
-
-
-/*
- * BOOTP options
- */
-#define CONFIG_BOOTP_BOOTFILESIZE
-#define CONFIG_BOOTP_BOOTPATH
-#define CONFIG_BOOTP_GATEWAY
-#define CONFIG_BOOTP_HOSTNAME
-
-
-/*
- * Command line configuration.
- */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_ELF
-#define CONFIG_CMD_DATE
-#define CONFIG_CMD_I2C
-#define CONFIG_CMD_EEPROM
-
-
-#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
-
-#undef CONFIG_SPD_EEPROM       /* don't use SPD EEPROM for setup    */
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP                   /* undef to save memory         */
-#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CBSIZE     1024            /* Console I/O Buffer Size      */
-#else
-#define CFG_CBSIZE     256             /* Console I/O Buffer Size      */
-#endif
-#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      0x0400000       /* memtest works on     */
-#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
-
-#define CFG_LOAD_ADDR          0x100000        /* default load address */
-#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
-
-#define CFG_HZ         1000            /* decrementer freq: 1 ms ticks */
-
-#if 0 /* test-only */
-#define CONFIG_HARD_I2C                1       /* 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
-#endif
-
-
-/*-----------------------------------------------------------------------
- * PCI stuff
- *-----------------------------------------------------------------------
- */
-#if 0
-#define PCI_HOST_ADAPTER 0             /* configure ar pci adapter     */
-#define PCI_HOST_FORCE 1               /* configure as pci host        */
-#define PCI_HOST_AUTO  2               /* detected via arbiter enable  */
-
-#define CONFIG_PCI                     /* include pci support          */
-#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function     */
-#define CONFIG_PCI_PNP                 /* do pci plug-and-play         */
-                                       /* resource configuration       */
-
-#define CONFIG_PCI_SCAN_SHOW            /* print pci devices @ startup  */
-
-#define CONFIG_PCI_BOOTDELAY    0       /* enable pci bootdelay variable*/
-
-#define CFG_PCI_SUBSYS_VENDORID 0x0000 /* PCI Vendor ID: to-do!!!      */
-#define CFG_PCI_SUBSYS_DEVICEID 0x0000 /* PCI Device ID: to-do!!!      */
-#define CFG_PCI_PTM1LA 0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS 0x80000001      /* 2GB, enable hard-wired to 1  */
-#define CFG_PCI_PTM1PCI 0x00000000     /* Host: use this pci address   */
-#define CFG_PCI_PTM2LA 0x00000000      /* disabled                     */
-#define CFG_PCI_PTM2MS 0x00000000      /* disabled                     */
-#define CFG_PCI_PTM2PCI 0x04000000     /* Host: use this pci address   */
-#endif
-
-/*
- * 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   /* For AMCC 440 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
-
-/* Configuration Port location */
-#define CONFIG_PORT_ADDR       0xF0000500
-
-/*-----------------------------------------------------------------------
- * Definitions for Serial Presence Detect EEPROM address
- * (to get SDRAM settings)
- */
-#define SPD_EEPROM_ADDRESS     0x50
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
-#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
-
-#if defined(CONFIG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
-#endif
-#endif /* __CONFIG_H */
index c7b623a1d6d0d3dfe69a4ac2deb3b7d3a351b8a8..78b754c19df1bcb02b8dd4610268c1f1c29b4603 100644 (file)
 #define CFG_ENV_SIZE           0x300   /* 768 bytes may be used for env vars */
                                   /* total size of a CAT24WC08 is 1024 bytes */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index a965c125f3fbf31ab46a9ebcb69637216a06c010..2356858d8c7325b0a919f1bc34b0a386b0c42761 100644 (file)
 #define CFG_MEMTEST_END                (CFG_SDRAM_SIZE * 1024 * 1024 - CFG_MEM_END_USAGE)
 /* END ENVIRONNEMENT FLASH */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration.  Only used to ..?? clear it, I guess..
- */
-#define CFG_DCACHE_SIZE                16384
-#define CFG_CACHELINE_SIZE     32
-
 /*
  * Init Memory Controller:
  *
index 627ea14826bea26312614a1826cb0dc7962d4e70..117a1367c1d519f5ffff51c6b3b8e0f7575b64ea 100644 (file)
 #define CFG_PCI9054_DEV_FN   0x0800
 #define CFG_PCI9054_IOBASE   0x0eff0000
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                2048    /* For PLX IOP480                       */
-#define CFG_CACHELINE_SIZE     16      /* For AMCC 401/403 CPUs                */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 2eadbea35d6968c2322f13b9ec6ac96932f380f3..912fb2af1c059828259fc64a72795e7454448622 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index 5c595f57d264c2f0a1bb769774d1633eba4006b4..c8bf67fe964ddad52cc8944669ac1e60ac7700f0 100644 (file)
 #define CFG_ENV_SIZE           0x400   /* 1024 bytes may be used for env vars */
                                   /* total size of a CAT24WC08 is 1024 bytes */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 5d48d2bbb6888d0973c2e1f849fe1c360c17595e..dc15b0c3498e442d40ec97e13276b4f9c7bffc3a 100644 (file)
 #define CFG_ENV_ADDR           \
        (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)       /* Env  */
 #endif
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Init Memory Controller:
index a3f38bb3a3237e542581cdbc596117ad6d7b7230..251227c7ff2546ff5402a3877b1244ed07547c71 100644 (file)
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
-/* Cache configuration */
-#define CFG_DCACHE_SIZE                8192
-#define CFG_CACHELINE_SIZE     32
-
 /*
  * Internal Definitions
  *
index 9c713c6c26f2fdca67f67efa14b4a59744cb34f1..c12ce48b6f3833160767026c92cc71b56db1aae7 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index bfbf3a839cf7cbfe2b29c0b4f22017dd3e548367..3eb3131d4d8637d8e2483a4765046aec5b0b95eb 100644 (file)
  * Virtex2 FPGA configuration support
  */
 #define CONFIG_FPGA_COUNT              1
-#define CONFIG_FPGA                            CFG_XILINX_VIRTEX2
+#define CONFIG_FPGA
+#define CONFIG_FPGA_XILINX
+#define CONFIG_FPGA_VIRTEX2
 #define CFG_FPGA_PROG_FEEDBACK
 
 
index 8967b3fc601ffe7141ee93852bf2a293f2d0c33c..18e5b3c2883f8cfa264dac6abf0c2c1b2dcf7693 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's    */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index 1ff710813022ec96225882d7e4f5bcb1c92909da..a389d582dfc2f13a257e76b97aeee5d386ca41b4 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index ea3b0b4a3256020ecf226501709fe2602c59edb4..5b40ef6b42fb92ef3418a96940349f54b774b606 100644 (file)
 #define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
 #define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405GPr CPUs */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 3644e43885e70f8b6792fd5ddcff4d681b6caf50..816e63ba2abcff504fa55025fd8648fadf51cd73 100644 (file)
  * 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              8192           /* For AMCC 405 CPUs       */
-#define CFG_CACHELINE_SIZE    32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT   5                     /* log base 2 of the above */
-#endif
 
 /*
  * Internal Definitions
index db309584b9a26138cb55926f3bbdd59956ef3c31..211f11d604633737e99d2dc5184b4b08df12d075 100644 (file)
 
 /* FPGA - Spartan 2 */
 /* experiment
-#define CONFIG_FPGA            CFG_SPARTAN3
+#define CONFIG_FPGA
+#define CONFIG_FPGA_XILINX
+#define CONFIG_FPGA_SPARTAN3
 #define CONFIG_FPGA_COUNT      1
 #define CFG_FPGA_PROG_FEEDBACK
 #define CFG_FPGA_CHECK_CTRLC
 #      define CFG_ENV_SECT_SIZE        0x20000
 #endif
 
-/* M54455EVB has one non CFI flash, defined CFG_FLASH_CFI will cause the system
 /* M54455EVB has one non CFI flash, defined CFG_FLASH_CFI will cause the system
    keep reset. */
 #undef CFG_FLASH_CFI
index 8d7ec5926bc7267815678d930b3449be61f6c2e3..d61b49eeecd5261ccb1332340b8bbc46b83d0523 100644 (file)
  * 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              8192           /* For AMCC 405 CPUs       */
-#define CFG_CACHELINE_SIZE    32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT   5                     /* log base 2 of the above */
-#endif
 
 /*
  * Internal Definitions
index 5b526a0993f84a2f8918c49c9a340461702c4aa7..9ddf82b3e06cb8dbfaadd6547cf184b524781932 100644 (file)
 #define MTDPARTS_DEFAULT       "mtdparts=mip405-0:-(jffs2)"
 */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                0x4000  /* For AMCC 405GPr CPUs                 */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * Logbuffer Configuration
  */
index f488275f239d7911b9475680b259567e5f49ff3f..66dae21924d1047ad79e73f17b62f83eeffb8cfc 100644 (file)
 #define CFG_ENV_ADDR           \
        (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)       /* Env  */
 #endif
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Init Memory Controller:
index 6568fe13b85b5743db8823bf4a24ead7cc00bf67..455bbe0cf7da3173a83f5af79377f598f2698f0c 100644 (file)
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
 #define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
 #define CFG_MALLOC_LEN         (512 * 1024)    /* Reserved for malloc */
 
 
 #define CFG_LBC_MRTPR  0x20000000  /*TODO */   /* LB refresh timer prescal, 266MHz/32 */
 
-/* drivers/nand/nand.c */
+/* drivers/mtd/nand/nand.c */
 #define CFG_NAND_BASE          0xE2800000      /* 0xF0000000 */
 #define CFG_MAX_NAND_DEVICE    1
 #define NAND_MAX_CHIPS         1
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
 #define CONFIG_OF_BOARD_SETUP  1
-
-#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"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /*
  * Serial Port
  */
 #ifndef CFG_RAMBOOT
        #define CFG_ENV_IS_IN_FLASH     1
-       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + 0x40000)
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
        #define CFG_ENV_SECT_SIZE       0x10000 /* 64K(one sector) for env */
        #define CFG_ENV_SIZE            0x2000
 
  */
 #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
index 376973b94da0b06e4b7570c31a982e25112a1810..4ea87090c6e9821d3c46eadf91f338f90921118c 100644 (file)
 #undef  CFG_RAMBOOT
 #endif
 
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
 #define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
 #define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
 
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
 #define CONFIG_OF_BOARD_SETUP  1
-
-#define OF_CPU                 "PowerPC,8323@0"
-#define OF_SOC                 "soc8323@e0000000"
-#define OF_QE                  "qe@e0100000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8323@e0000000/serial@4500"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /* I2C */
 #define CONFIG_HARD_I2C                /* I2C with hardware support */
  */
 #ifndef CFG_RAMBOOT
        #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_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+       #define CFG_ENV_SECT_SIZE       0x20000
        #define CFG_ENV_SIZE            0x2000
 #else
        #define CFG_NO_FLASH            1       /* Flash is not usable now */
 #define CFG_HID0_FINAL         HID0_ENABLE_MACHINE_CHECK
 #define CFG_HID2               HID2_HBE
 
-/*
- * Cache Config
- */
-#define CFG_DCACHE_SIZE                16384
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value */
-#endif
-
 /*
  * MMU Setup
  */
  */
 #define CONFIG_ENV_OVERWRITE
 
+#define CONFIG_HAS_ETH0                                /* add support for "ethaddr" */
 #define CONFIG_ETHADDR 00:04:9f:ef:03:01
 #define CONFIG_HAS_ETH1                                /* add support for "eth1addr" */
 #define CONFIG_ETH1ADDR        00:04:9f:ef:03:02
index c9c6d88cf01f490c393d74282cb57fa89adc17a7..25ac58c571115ee8f853d0d3d1d329ff59e7ca86 100644 (file)
 #undef  CFG_RAMBOOT
 #endif
 
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
 #define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
 #define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
 
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
 #define CONFIG_OF_BOARD_SETUP  1
-
-#define OF_CPU                 "PowerPC,8323@0"
-#define OF_SOC                 "soc8323@e0000000"
-#define OF_QE                  "qe@e0100000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8323@e0000000/serial@4500"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /* I2C */
 #define CONFIG_HARD_I2C                /* I2C with hardware support */
  */
 #ifndef CFG_RAMBOOT
        #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_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+       #define CFG_ENV_SECT_SIZE       0x20000
        #define CFG_ENV_SIZE            0x2000
 #else
        #define CFG_NO_FLASH            1       /* Flash is not usable now */
 #define CFG_HID0_FINAL         HID0_ENABLE_MACHINE_CHECK
 #define CFG_HID2               HID2_HBE
 
-/*
- * Cache Config
- */
-#define CFG_DCACHE_SIZE                16384
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value */
-#endif
-
 /*
  * MMU Setup
  */
 #define CONFIG_ENV_OVERWRITE
 
 #if defined(CONFIG_UEC_ETH)
+#define CONFIG_HAS_ETH0
 #define CONFIG_ETHADDR 00:04:9f:ef:03:01
 #define CONFIG_HAS_ETH1
 #define CONFIG_ETH1ADDR        00:04:9f:ef:03:02
index 92555bac42245d37e0eda1e840fd40ae30cf99cb..437a9a5f7bfb1b7afcdf48be5d05010ca177109d 100644 (file)
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
 #define CONFIG_OF_BOARD_SETUP  1
-
-#define OF_CPU                 "PowerPC,8349@0"
-#define OF_SOC                 "soc8349@e0000000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8349@e0000000/serial@4500"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /* I2C */
 #define CONFIG_HARD_I2C                        /* I2C with hardware support*/
  */
 #ifndef CFG_RAMBOOT
        #define CFG_ENV_IS_IN_FLASH     1
-       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + 0x40000)
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
        #define CFG_ENV_SECT_SIZE       0x20000 /* 128K(one sector) for env */
        #define CFG_ENV_SIZE            0x2000
 
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 #define CFG_RCWH_PCIHOST 0x80000000 /* PCIHOST  */
 
 #if 1 /*528/264*/
index 54cab528bde3fea1919fa03f08b0cb3908c3049e..48c2736fcbe56b7d16672217a41c69a9e1d90e70 100644 (file)
@@ -261,6 +261,7 @@ boards, we say we have two, but don't display a message if we find only one. */
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
 #define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
 #define CFG_MALLOC_LEN         (128 * 1024) /* Reserved for malloc */
 
@@ -297,12 +298,8 @@ boards, we say we have two, but don't display a message if we find only one. */
 
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
-#define CONFIG_OF_BOARD_SETUP
-
-#define OF_CPU                 "PowerPC,8349@0"
-#define OF_SOC                 "soc8349@e0000000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8349@e0000000/serial@4500"
+#define CONFIG_OF_BOARD_SETUP  1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /*
  * PCI
@@ -404,8 +401,8 @@ boards, we say we have two, but don't display a message if we find only one. */
 
 #ifndef CFG_RAMBOOT
   #define CFG_ENV_IS_IN_FLASH
+  #define CFG_ENV_ADDR         (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
   #define CFG_ENV_SECT_SIZE    0x10000 /* 64K (one sector) for environment */
-  #define CFG_ENV_ADDR         (CFG_MONITOR_BASE + (4 * CFG_ENV_SECT_SIZE))
   #define CFG_ENV_SIZE         0x2000
 #else
   #define CFG_NO_FLASH         /* Flash is not usable now */
@@ -490,15 +487,6 @@ boards, we say we have two, but don't display a message if we find only one. */
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/*
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log2 of the above value */
-#endif
-
 #define CFG_HRCW_LOW (\
        HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
        HRCWL_DDR_TO_SCB_CLK_1X1 |\
index 41f062ce72e3937f57f72e1eb38b931bbaba3fec..fdacb904e560654f11bc1c9a0e349c57c88fd86a 100644 (file)
 #undef CFG_RAMBOOT
 #endif
 
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
 #define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
 #define CFG_MALLOC_LEN         (128 * 1024) /* Reserved for malloc */
 
 
 /* pass open firmware flat tree */
 #define CONFIG_OF_LIBFDT       1
-#undef  CONFIG_OF_FLAT_TREE
 #define CONFIG_OF_BOARD_SETUP  1
-#define CONFIG_OF_HAS_BD_T     1
-#define CONFIG_OF_HAS_UBOOT_ENV        1
-
-#define OF_CPU                 "PowerPC,8360@0"
-#define OF_SOC                 "soc8360@e0000000"
-#define OF_QE                  "qe@e0100000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8360@e0000000/serial@4500"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /* I2C */
 #define CONFIG_HARD_I2C                /* I2C with hardware support */
 
 #ifndef CFG_RAMBOOT
        #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_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+       #define CFG_ENV_SECT_SIZE       0x20000
        #define CFG_ENV_SIZE            0x2000
 #else
        #define CFG_NO_FLASH            1       /* Flash is not usable now */
 #define CFG_HID0_FINAL         HID0_ENABLE_MACHINE_CHECK
 #define CFG_HID2               HID2_HBE
 
-/*
- * Cache Config
- */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5 /*log base 2 of the above value */
-#endif
-
 /*
  * MMU Setup
  */
 #define CONFIG_ENV_OVERWRITE
 
 #if defined(CONFIG_UEC_ETH)
+#define CONFIG_HAS_ETH0
 #define CONFIG_ETHADDR 00:04:9f:ef:01:01
 #define CONFIG_HAS_ETH1
 #define CONFIG_ETH1ADDR 00:04:9f:ef:01:02
diff --git a/include/configs/MPC8360ERDK.h b/include/configs/MPC8360ERDK.h
new file mode 100644 (file)
index 0000000..0f6f8f1
--- /dev/null
@@ -0,0 +1,538 @@
+/*
+ * Copyright (C) 2006 Freescale Semiconductor, Inc.
+ *                    Dave Liu <daveliu@freescale.com>
+ *
+ * Copyright (C) 2007 Logic Product Development, Inc.
+ *                    Peter Barada <peterb@logicpd.com>
+ *
+ * Copyright (C) 2007 MontaVista Software, Inc.
+ *                    Anton Vorontsov <avorontsov@ru.mvista.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.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#undef DEBUG
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_E300            1 /* E300 family */
+#define CONFIG_QE              1 /* Has QE */
+#define CONFIG_MPC83XX         1 /* MPC83XX family */
+#define CONFIG_MPC8360         1 /* MPC8360 CPU specific */
+#define CONFIG_MPC8360ERDK     1 /* MPC8360ERDK board specific */
+
+/*
+ * System Clock Setup
+ */
+#ifdef CONFIG_CLKIN_33MHZ
+#define CONFIG_83XX_CLKIN              33000000
+#define CONFIG_SYS_CLK_FREQ            33000000
+#define PCI_33M                                1
+#define HRCWL_CSB_TO_CLKIN_MPC8360ERDK HRCWL_CSB_TO_CLKIN_10X1
+#else
+#define CONFIG_83XX_CLKIN              66000000
+#define CONFIG_SYS_CLK_FREQ            66000000
+#define PCI_66M                                1
+#define HRCWL_CSB_TO_CLKIN_MPC8360ERDK HRCWL_CSB_TO_CLKIN_5X1
+#endif /* CONFIG_CLKIN_33MHZ */
+
+/*
+ * Hardware Reset Configuration Word
+ */
+#define CFG_HRCW_LOW (\
+       HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
+       HRCWL_DDR_TO_SCB_CLK_1X1 |\
+       HRCWL_CSB_TO_CLKIN_MPC8360ERDK |\
+       HRCWL_CORE_TO_CSB_2X1 |\
+       HRCWL_CE_TO_PLL_1X15)
+
+#define CFG_HRCW_HIGH (\
+       HRCWH_PCI_HOST |\
+       HRCWH_PCI1_ARBITER_ENABLE |\
+       HRCWH_PCICKDRV_ENABLE |\
+       HRCWH_CORE_ENABLE |\
+       HRCWH_FROM_0X00000100 |\
+       HRCWH_BOOTSEQ_DISABLE |\
+       HRCWH_SW_WATCHDOG_DISABLE |\
+       HRCWH_ROM_LOC_LOCAL_16BIT |\
+       HRCWH_SECONDARY_DDR_DISABLE |\
+       HRCWH_BIG_ENDIAN |\
+       HRCWH_LALE_EARLY)
+
+/*
+ * System IO Config
+ */
+#define CFG_SICRH              0x00000000
+#define CFG_SICRL              0x40000000
+
+#define CONFIG_BOARD_EARLY_INIT_F /* call board_pre_init */
+#define CONFIG_BOARD_EARLY_INIT_R
+
+/*
+ * IMMR new address
+ */
+#define CFG_IMMR               0xE0000000
+
+/*
+ * 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
+#define CFG_DDR_SDRAM_CLK_CNTL (DDR_SDRAM_CLK_CNTL_SS_EN | \
+                               DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05)
+
+#define CFG_83XX_DDR_USES_CS0
+
+#undef CONFIG_DDR_ECC          /* support DDR ECC function */
+#undef CONFIG_DDR_ECC_CMD      /* Use DDR ECC user commands */
+
+/*
+ * DDRCDR - DDR Control Driver Register
+ */
+#define CFG_DDRCDR_VALUE       0x80080001
+
+#undef CONFIG_SPD_EEPROM       /* Do not use SPD EEPROM for DDR setup */
+
+/*
+ * Manually set up DDR parameters
+ */
+#define CONFIG_DDR_II
+#define CFG_DDR_SIZE           256 /* MB */
+#define CFG_DDRCDR             0x80080001
+#define CFG_DDR_CS0_BNDS       0x0000000f
+#define CFG_DDR_CS0_CONFIG     (CSCONFIG_EN | CSCONFIG_ROW_BIT_13 | \
+                                CSCONFIG_COL_BIT_10)
+#define CFG_DDR_TIMING_0       0x00330903
+#define CFG_DDR_TIMING_1       0x3835a322
+#define CFG_DDR_TIMING_2       0x00104909
+#define CFG_DDR_TIMING_3       0x00000000
+#define CFG_DDR_CLK_CNTL       0x02000000
+#define CFG_DDR_MODE           0x47800432
+#define CFG_DDR_MODE2          0x8000c000
+#define CFG_DDR_INTERVAL       0x045b0100
+#define CFG_DDR_SDRAM_CFG      0x03000000
+#define CFG_DDR_SDRAM_CFG2     0x00001000
+
+/*
+ * Memory test
+ */
+#undef CFG_DRAM_TEST           /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00000000 /* memtest region */
+#define CFG_MEMTEST_END                0x00100000
+
+/*
+ * The reserved memory
+ */
+#define CFG_MONITOR_BASE       TEXT_BASE /* start of monitor */
+#define CFG_FLASH_BASE         0xFF800000 /* FLASH base address */
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#else
+#undef CFG_RAMBOOT
+#endif
+
+#define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (128 * 1024) /* Reserved for malloc */
+
+/*
+ * Initial RAM Base Address Setup
+ */
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xE6000000 /* 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)
+
+/*
+ * Local Bus Configuration & Clock Setup
+ */
+#define CFG_LCRR               (LCRR_DBYP | LCRR_CLKDIV_4)
+#define CFG_LBC_LBCR           0x00000000
+
+/*
+ * 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_SIZE         8 /* max FLASH size is 32M */
+#define CFG_FLASH_PROTECTION   1 /* Use intel Flash protection. */
+
+#define CFG_LBLAWBAR0_PRELIM   CFG_FLASH_BASE /* Window base at flash base */
+#define CFG_LBLAWAR0_PRELIM    0x80000018 /* 32MB window size */
+
+#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         ((~(CFG_FLASH_SIZE - 1) << 20) | OR_UPM_XAM | \
+                               OR_GPCM_CSNT | OR_GPCM_ACS_0b11 | \
+                               OR_GPCM_XACS | OR_GPCM_SCY_15 | \
+                               OR_GPCM_TRLX | OR_GPCM_EHTR | OR_GPCM_EAD)
+
+#define CFG_MAX_FLASH_BANKS    1 /* number of banks */
+#define CFG_MAX_FLASH_SECT     256 /* max sectors per device */
+
+#undef CFG_FLASH_CHECKSUM
+
+/*
+ * NAND flash on the local bus
+ */
+#define CFG_NAND_BASE          0x60000000
+
+#define CFG_LBLAWBAR1_PRELIM   CFG_NAND_BASE
+#define CFG_LBLAWAR1_PRELIM    0x8000001b /* Access window size 4K */
+
+/* Port size 8 bit, UPMA */
+#define CFG_BR1_PRELIM         (CFG_NAND_BASE | 0x00000881)
+#define CFG_OR1_PRELIM         0xfc000001
+
+/*
+ * Fujitsu MB86277 (MINT) graphics controller
+ */
+#define CFG_VIDEO_BASE         0x70000000
+
+#define CFG_LBLAWBAR2_PRELIM   CFG_VIDEO_BASE
+#define CFG_LBLAWAR2_PRELIM    0x80000019 /* Access window size 64MB */
+
+/* Port size 32 bit, UPMB */
+#define CFG_BR2_PRELIM         (CFG_VIDEO_BASE | 0x000018a1) /* PS=11, UPMB */
+#define CFG_OR2_PRELIM         0xfc000001 /* (64MB, EAD=1) */
+
+/*
+ * 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_IMMR+0x4500)
+#define CFG_NS16550_COM2       (CFG_IMMR+0x4600)
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history */
+/* 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_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* I2C */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#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       {{0x52}} /* Don't probe these addrs */
+#define CFG_I2C_OFFSET 0x3000
+#define CFG_I2C2_OFFSET 0x3100
+
+/*
+ * General PCI
+ * Addresses are mapped 1-1.
+ */
+#define CONFIG_PCI
+#define CONFIG_83XX_GENERIC_PCI        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       0xE0300000
+#define CFG_PCI1_IO_PHYS       0xE0300000
+#define CFG_PCI1_IO_SIZE       0x100000 /* 1M */
+
+#ifdef CONFIG_PCI
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_PCI_SCAN_SHOW    /* show pci devices on startup */
+#define CFG_PCI_SUBSYS_VENDORID 0x1957 /* Freescale */
+
+#endif /* CONFIG_PCI */
+
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+/*
+ * QE UEC ethernet configuration
+ */
+#define CONFIG_UEC_ETH
+#define CONFIG_ETHPRIME                "Freescale GETH"
+
+#define CONFIG_UEC_ETH1                /* GETH1 */
+
+#ifdef CONFIG_UEC_ETH1
+#define CFG_UEC1_UCC_NUM       0       /* UCC1 */
+#define CFG_UEC1_RX_CLK                QE_CLK_NONE
+#define CFG_UEC1_TX_CLK                QE_CLK9
+#define CFG_UEC1_ETH_TYPE      GIGA_ETH
+#define CFG_UEC1_PHY_ADDR      2
+#define CFG_UEC1_INTERFACE_MODE ENET_1000_GMII
+#endif
+
+#define CONFIG_UEC_ETH2                /* GETH2 */
+
+#ifdef CONFIG_UEC_ETH2
+#define CFG_UEC2_UCC_NUM       1       /* UCC2 */
+#define CFG_UEC2_RX_CLK                QE_CLK_NONE
+#define CFG_UEC2_TX_CLK                QE_CLK4
+#define CFG_UEC2_ETH_TYPE      GIGA_ETH
+#define CFG_UEC2_PHY_ADDR      4
+#define CFG_UEC2_INTERFACE_MODE ENET_1000_GMII
+#endif
+
+/*
+ * Environment
+ */
+
+#ifndef CFG_RAMBOOT
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + 0x40000)
+#define CFG_ENV_SECT_SIZE      0x20000 /* 128K(one sector) for env */
+#define CFG_ENV_SIZE           0x20000
+#else /* CFG_RAMBOOT */
+#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 /* CFG_RAMBOOT */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_ASKENV
+
+#if defined(CONFIG_PCI)
+#define CONFIG_CMD_PCI
+#endif
+
+#if defined(CFG_RAMBOOT)
+#undef CONFIG_CMD_ENV
+#undef CONFIG_CMD_LOADS
+#endif
+
+#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 defined(CONFIG_CMD_KGDB)
+       #define CFG_CBSIZE      1024 /* Console I/O Buffer Size */
+#else
+       #define CFG_CBSIZE      256 /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_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 */
+
+/*
+ * Core HID Setup
+ */
+#define CFG_HID0_INIT          0x000000000
+#define CFG_HID0_FINAL         HID0_ENABLE_MACHINE_CHECK
+#define CFG_HID2               HID2_HBE
+
+/*
+ * Cache Config
+ */
+#define CFG_DCACHE_SIZE                32768
+#define CFG_CACHELINE_SIZE     32
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5 /*log base 2 of the above value */
+#endif
+
+/*
+ * MMU Setup
+ */
+
+/* DDR: cache cacheable */
+#define CFG_IBAT0L     (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT0U     (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT0L     CFG_IBAT0L
+#define CFG_DBAT0U     CFG_IBAT0U
+
+/* IMMRBAR & PCI IO: cache-inhibit and guarded */
+#define CFG_IBAT1L     (CFG_IMMR | BATL_PP_10 | \
+                       BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT1U     (CFG_IMMR | BATU_BL_4M | BATU_VS | BATU_VP)
+#define CFG_DBAT1L     CFG_IBAT1L
+#define CFG_DBAT1U     CFG_IBAT1U
+
+/* NAND: cache-inhibit and guarded */
+#define CFG_IBAT2L     (CFG_NAND_BASE | BATL_PP_10 | BATL_CACHEINHIBIT |\
+                        BATL_GUARDEDSTORAGE)
+#define CFG_IBAT2U     (CFG_NAND_BASE | BATU_BL_64M | BATU_VS | BATU_VP)
+#define CFG_DBAT2L     CFG_IBAT2L
+#define CFG_DBAT2U     CFG_IBAT2U
+
+/* FLASH: icache cacheable, but dcache-inhibit and guarded */
+#define CFG_IBAT3L     (CFG_FLASH_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT3U     (CFG_FLASH_BASE | BATU_BL_32M | BATU_VS | BATU_VP)
+#define CFG_DBAT3L     (CFG_FLASH_BASE | BATL_PP_10 | \
+                        BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT3U     CFG_IBAT3U
+
+/* Stack in dcache: cacheable, no memory coherence */
+#define CFG_IBAT4L     (CFG_INIT_RAM_ADDR | BATL_PP_10)
+#define CFG_IBAT4U     (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
+#define CFG_DBAT4L     CFG_IBAT4L
+#define CFG_DBAT4U     CFG_IBAT4U
+
+#define CFG_IBAT5L     (CFG_VIDEO_BASE | BATL_PP_10 | BATL_CACHEINHIBIT | \
+                        BATL_GUARDEDSTORAGE)
+#define CFG_IBAT5U     (CFG_VIDEO_BASE | BATU_BL_64M | BATU_VS | BATU_VP)
+#define CFG_DBAT5L     CFG_IBAT5L
+#define CFG_DBAT5U     CFG_IBAT5U
+
+#ifdef CONFIG_PCI
+/* PCI MEM space: cacheable */
+#define CFG_IBAT6L     (CFG_PCI1_MEM_PHYS | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT6U     (CFG_PCI1_MEM_PHYS | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT6L     CFG_IBAT6L
+#define CFG_DBAT6U     CFG_IBAT6U
+/* PCI MMIO space: cache-inhibit and guarded */
+#define CFG_IBAT7L     (CFG_PCI1_MMIO_PHYS | BATL_PP_10 | \
+                        BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT7U     (CFG_PCI1_MMIO_PHYS | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT7L     CFG_IBAT7L
+#define CFG_DBAT7U     CFG_IBAT7U
+#else /* CONFIG_PCI */
+#define CFG_IBAT6L     (0)
+#define CFG_IBAT6U     (0)
+#define CFG_IBAT7L     (0)
+#define CFG_IBAT7U     (0)
+#define CFG_DBAT6L     CFG_IBAT6L
+#define CFG_DBAT6U     CFG_IBAT6U
+#define CFG_DBAT7L     CFG_IBAT7L
+#define CFG_DBAT7U     CFG_IBAT7U
+#endif /* CONFIG_PCI */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02 /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed of kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#if defined(CONFIG_UEC_ETH)
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETHADDR 00:04:9f:ef:01:01
+#define CONFIG_ETH1ADDR        00:04:9f:ef:01:02
+#define CONFIG_ETH2ADDR        00:04:9f:ef:01:03
+#define CONFIG_ETH3ADDR        00:04:9f:ef:01:04
+#endif
+
+#define CONFIG_BAUDRATE 115200
+
+#define CONFIG_LOADADDR        a00000
+#define CONFIG_HOSTNAME        mpc8360erdk
+#define CONFIG_BOOTFILE        uImage
+
+#define CONFIG_IPADDR          10.0.0.99
+#define CONFIG_SERVERIP                10.0.0.2
+#define CONFIG_GATEWAYIP       10.0.0.2
+#define CONFIG_NETMASK         255.255.255.0
+#define CONFIG_ROOTPATH                /nfsroot/
+
+#define        CONFIG_BOOTDELAY 2      /* -1 disables auto-boot */
+#undef CONFIG_BOOTARGS         /* the boot command will set bootargs */
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+   "netdev=eth0\0"\
+   "consoledev=ttyS0\0"\
+   "loadaddr=a00000\0"\
+   "fdtaddr=900000\0"\
+   "bootfile=uImage\0"\
+   "fdtfile=dtb\0"\
+   "fsfile=fs\0"\
+   "ubootfile=u-boot.bin\0"\
+   "setbootargs=setenv bootargs console=$consoledev,$baudrate "\
+               "$mtdparts panic=1\0"\
+   "adddhcpargs=setenv bootargs $bootargs ip=on\0"\
+   "addnfsargs=setenv bootargs $bootargs ip=$ipaddr:$serverip:"\
+               "$gatewayip:$netmask:$hostname:$netdev:off "\
+               "root=/dev/nfs rw nfsroot=$serverip:$rootpath\0"\
+   "tftp_get_uboot=tftp 100000 $ubootfile\0"\
+   "tftp_get_kernel=tftp $loadaddr $bootfile\0"\
+   "tftp_get_dtb=tftp $fdtaddr $fdtfile\0"\
+   "tftp_get_fs=tftp c00000 $fsfile\0"\
+   "nor_reflash=protect off ff800000 ff87ffff ; erase ff800000 ff87ffff ; "\
+               "cp.b 100000 ff800000 $filesize\0"\
+   "boot_m=bootm $loadaddr - $fdtaddr\0"\
+   "dhcpboot=run setbootargs adddhcpargs tftp_get_kernel tftp_get_dtb "\
+               "boot_m\0"\
+   "nfsboot=run setbootargs addnfsargs tftp_get_kernel tftp_get_dtb "\
+               "boot_m\0"\
+   ""
+
+#define CONFIG_BOOTCOMMAND "run dhcpboot"
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/MPC837XEMDS.h b/include/configs/MPC837XEMDS.h
new file mode 100644 (file)
index 0000000..2b84e9c
--- /dev/null
@@ -0,0 +1,598 @@
+/*
+ * Copyright (C) 2007 Freescale Semiconductor, Inc.
+ * Dave Liu <daveliu@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
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#undef DEBUG
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_E300            1 /* E300 family */
+#define CONFIG_MPC83XX         1 /* MPC83XX family */
+#define CONFIG_MPC837X         1 /* MPC837X CPU specific */
+#define CONFIG_MPC837XEMDS     1 /* MPC837XEMDS board specific */
+
+/*
+ * System Clock Setup
+ */
+#ifdef CONFIG_PCISLAVE
+#define CONFIG_83XX_PCICLK     66000000 /* in HZ */
+#else
+#define CONFIG_83XX_CLKIN      66000000 /* in Hz */
+#endif
+
+#ifndef CONFIG_SYS_CLK_FREQ
+#define CONFIG_SYS_CLK_FREQ    66000000
+#endif
+
+/*
+ * Hardware Reset Configuration Word
+ * if CLKIN is 66MHz, then
+ * CSB = 396MHz, CORE = 594MHz, DDRC = 396MHz, LBC = 396MHz
+ */
+#define CFG_HRCW_LOW (\
+       HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
+       HRCWL_DDR_TO_SCB_CLK_1X1 |\
+       HRCWL_SVCOD_DIV_2 |\
+       HRCWL_CSB_TO_CLKIN_6X1 |\
+       HRCWL_CORE_TO_CSB_1_5X1)
+
+#ifdef CONFIG_PCISLAVE
+#define CFG_HRCW_HIGH (\
+       HRCWH_PCI_AGENT |\
+       HRCWH_PCI1_ARBITER_DISABLE |\
+       HRCWH_CORE_ENABLE |\
+       HRCWH_FROM_0XFFF00100 |\
+       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_LDP_CLEAR)
+#else
+#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_LDP_CLEAR)
+#endif
+
+/*
+ * eTSEC Clock Config
+ */
+#define CFG_SCCR_TSEC1CM       1       /* CSB:eTSEC1 = 1:1 */
+#define CFG_SCCR_TSEC2CM       1       /* CSB:eTSEC2 = 1:1 */
+
+/*
+ * System IO Config
+ */
+#define CFG_SICRH              0x00000000
+#define CFG_SICRL              0x00000000
+
+/*
+ * Output Buffer Impedance
+ */
+#define CFG_OBIR               0x31100000
+
+#define CONFIG_BOARD_EARLY_INIT_F /* call board_pre_init */
+#define CONFIG_BOARD_EARLY_INIT_R
+
+/*
+ * IMMR new address
+ */
+#define CFG_IMMR               0xE0000000
+
+/*
+ * 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
+#define CFG_DDR_SDRAM_CLK_CNTL DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05
+#define CFG_83XX_DDR_USES_CS0
+#define CFG_DDRCDR_VALUE       0x80080001 /* ODT 150ohm on SoC */
+
+#undef CONFIG_DDR_ECC          /* support DDR ECC function */
+#undef CONFIG_DDR_ECC_CMD      /* Use DDR ECC user commands */
+
+#define CONFIG_SPD_EEPROM      /* Use SPD EEPROM for DDR setup */
+#define CONFIG_NEVER_ASSERT_ODT_TO_CPU /* Never assert ODT to internal IOs */
+
+#if defined(CONFIG_SPD_EEPROM)
+#define SPD_EEPROM_ADDRESS     0x51 /* I2C address of DDR SODIMM SPD */
+#else
+/*
+ * Manually set up DDR parameters
+ * WHITE ELECTRONIC DESIGNS - W3HG64M72EEU403PD4 SO-DIMM
+ * consist of nine chips from SAMSUNG K4T51083QE-ZC(L)D5
+ */
+#define CFG_DDR_SIZE           512 /* MB */
+#define CFG_DDR_CS0_BNDS       0x0000001f
+#define CFG_DDR_CS0_CONFIG     ( CSCONFIG_EN \
+                               | 0x00010000  /* ODT_WR to CSn */ \
+                               | CSCONFIG_ROW_BIT_14 | CSCONFIG_COL_BIT_10 )
+                               /* 0x80010202 */
+#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 ) \
+                               | ( 6 << 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 ) )
+                               /* 0x00620802 */
+#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       ( ( 1 << TIMING_CFG2_ADD_LAT_SHIFT ) \
+                               | ( 6 << TIMING_CFG2_CPO_SHIFT ) \
+                               | ( 2 << TIMING_CFG2_WR_LAT_DELAY_SHIFT ) \
+                               | ( 4 << TIMING_CFG2_RD_TO_PRE_SHIFT ) \
+                               | ( 2 << TIMING_CFG2_WR_DATA_DELAY_SHIFT ) \
+                               | ( 3 << TIMING_CFG2_CKE_PLS_SHIFT ) \
+                               | ( 8 << TIMING_CFG2_FOUR_ACT_SHIFT) )
+                               /* 0x131088c8 */
+#define CFG_DDR_INTERVAL       ( ( 0x03E0 << SDRAM_INTERVAL_REFINT_SHIFT ) \
+                               | ( 0x0100 << SDRAM_INTERVAL_BSTOPRE_SHIFT ) )
+                               /* 0x03E00100 */
+#define CFG_DDR_SDRAM_CFG      0x43000000
+#define CFG_DDR_SDRAM_CFG2     0x00001000 /* 1 posted refresh */
+#define CFG_DDR_MODE           ( ( 0x0448 << SDRAM_MODE_ESD_SHIFT ) \
+                               | ( 0x1432 << SDRAM_MODE_SD_SHIFT ) )
+                               /* ODT 150ohm CL=3, AL=1 on SDRAM */
+#define CFG_DDR_MODE2          0x00000000
+#endif
+
+/*
+ * Memory test
+ */
+#undef CFG_DRAM_TEST           /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00040000 /* memtest region */
+#define CFG_MEMTEST_END                0x00140000
+
+/*
+ * The reserved memory
+ */
+#define CFG_MONITOR_BASE       TEXT_BASE /* start of monitor */
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#else
+#undef CFG_RAMBOOT
+#endif
+
+/* CFG_MONITOR_LEN must be a multiple of CFG_ENV_SECT_SIZE */
+#define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (512 * 1024) /* Reserved for malloc */
+
+/*
+ * Initial RAM Base Address Setup
+ */
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xE6000000 /* 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)
+
+/*
+ * Local Bus Configuration & Clock Setup
+ */
+#define CFG_LCRR               (LCRR_DBYP | LCRR_CLKDIV_8)
+#define CFG_LBC_LBCR           0x00000000
+
+/*
+ * 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 /* FLASH base address */
+#define CFG_FLASH_SIZE         32 /* max FLASH size is 32M */
+
+#define CFG_LBLAWBAR0_PRELIM   CFG_FLASH_BASE /* Window base at flash base */
+#define CFG_LBLAWAR0_PRELIM    0x80000018 /* 32MB window size */
+
+#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         ( (~(CFG_FLASH_SIZE - 1) << 20) \
+                               | OR_UPM_XAM \
+                               | OR_GPCM_CSNT \
+                               | OR_GPCM_ACS_0b11 \
+                               | OR_GPCM_XACS \
+                               | OR_GPCM_SCY_15 \
+                               | OR_GPCM_TRLX \
+                               | OR_GPCM_EHTR \
+                               | OR_GPCM_EAD )
+                               /* 0xFE000FF7 */
+
+#define CFG_MAX_FLASH_BANKS    1 /* number of banks */
+#define CFG_MAX_FLASH_SECT     256 /* max 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) */
+
+/*
+ * BCSR on the Local Bus
+ */
+#define CFG_BCSR               0xF8000000
+#define CFG_LBLAWBAR1_PRELIM   CFG_BCSR /* Access window base at BCSR base */
+#define CFG_LBLAWAR1_PRELIM    0x8000000E /* Access window size 32K */
+
+#define CFG_BR1_PRELIM         (CFG_BCSR | 0x00000801) /* Port size=8bit, MSEL=GPCM */
+#define CFG_OR1_PRELIM         0xFFFFE9f7 /* length 32K */
+
+/*
+ * NAND Flash on the Local Bus
+ */
+#define CFG_NAND_BASE          0xE0600000      /* 0xE0600000 */
+#define CFG_BR3_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_OR3_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_LBLAWBAR3_PRELIM   CFG_NAND_BASE
+#define CFG_LBLAWAR3_PRELIM    0x8000000E      /* 32KB  */
+
+/*
+ * 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, 57600, 115200}
+
+#define CFG_NS16550_COM1       (CFG_IMMR+0x4500)
+#define CFG_NS16550_COM2       (CFG_IMMR+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_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+/* I2C */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CONFIG_FSL_I2C
+#define CFG_I2C_SPEED          400000 /* I2C speed and slave address */
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {0x51} /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3000
+#define CFG_I2C2_OFFSET                0x3100
+
+/*
+ * Config on-board RTC
+ */
+#define CONFIG_RTC_DS1374      /* use ds1374 rtc via i2c */
+#define CFG_I2C_RTC_ADDR       0x68 /* at address 0x68 */
+
+/*
+ * General PCI
+ * Addresses are mapped 1-1.
+ */
+#define CFG_PCI_MEM_BASE       0x80000000
+#define CFG_PCI_MEM_PHYS       CFG_PCI_MEM_BASE
+#define CFG_PCI_MEM_SIZE       0x10000000 /* 256M */
+#define CFG_PCI_MMIO_BASE      0x90000000
+#define CFG_PCI_MMIO_PHYS      CFG_PCI_MMIO_BASE
+#define CFG_PCI_MMIO_SIZE      0x10000000 /* 256M */
+#define CFG_PCI_IO_BASE                0xE0300000
+#define CFG_PCI_IO_PHYS                0xE0300000
+#define CFG_PCI_IO_SIZE                0x100000 /* 1M */
+
+#define CFG_PCI_SLV_MEM_LOCAL  CFG_SDRAM_BASE
+#define CFG_PCI_SLV_MEM_BUS    0x00000000
+#define CFG_PCI_SLV_MEM_SIZE   0x80000000
+
+#ifdef CONFIG_PCI
+#define CONFIG_83XX_GENERIC_PCI        1 /* Use generic PCI setup */
+#define CONFIG_PQ_MDS_PIB      1 /* PQ MDS Platform IO Board */
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_PCI_SCAN_SHOW    /* show pci devices on startup */
+#define CFG_PCI_SUBSYS_VENDORID 0x1957 /* Freescale */
+#endif /* CONFIG_PCI */
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+/*
+ * TSEC
+ */
+#define CONFIG_TSEC_ENET       /* TSEC ethernet support */
+#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)
+
+/*
+ * TSEC ethernet configuration
+ */
+#define CONFIG_MII             1 /* MII PHY management */
+#define CONFIG_TSEC1           1
+#define CONFIG_TSEC1_NAME      "eTSEC0"
+#define CONFIG_TSEC2           1
+#define CONFIG_TSEC2_NAME      "eTSEC1"
+#define TSEC1_PHY_ADDR         2
+#define TSEC2_PHY_ADDR         3
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define TSEC1_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC2_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+/* Options are: TSEC[0-1] */
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+/*
+ * Environment
+ */
+#ifndef CFG_RAMBOOT
+       #define CFG_ENV_IS_IN_FLASH     1
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+       #define CFG_ENV_SECT_SIZE       0x20000 /* 128K(one sector) for env */
+       #define CFG_ENV_SIZE            0x2000
+#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_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_DATE
+
+#if defined(CONFIG_PCI)
+    #define CONFIG_CMD_PCI
+#endif
+
+#if defined(CFG_RAMBOOT)
+    #undef CONFIG_CMD_ENV
+    #undef CONFIG_CMD_LOADS
+#endif
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history */
+
+#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 defined(CONFIG_CMD_KGDB)
+       #define CFG_CBSIZE      1024 /* Console I/O Buffer Size */
+#else
+       #define CFG_CBSIZE      256 /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_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 */
+
+/*
+ * Core HID Setup
+ */
+#define CFG_HID0_INIT          0x000000000
+#define CFG_HID0_FINAL         HID0_ENABLE_MACHINE_CHECK
+#define CFG_HID2               HID2_HBE
+
+/*
+ * MMU Setup
+ */
+
+/* DDR: cache cacheable */
+#define CFG_SDRAM_LOWER                CFG_SDRAM_BASE
+#define CFG_SDRAM_UPPER                (CFG_SDRAM_BASE + 0x10000000)
+
+#define CFG_IBAT0L     (CFG_SDRAM_LOWER | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT0U     (CFG_SDRAM_LOWER | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT0L     CFG_IBAT0L
+#define CFG_DBAT0U     CFG_IBAT0U
+
+#define CFG_IBAT1L     (CFG_SDRAM_UPPER | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT1U     (CFG_SDRAM_UPPER | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT1L     CFG_IBAT1L
+#define CFG_DBAT1U     CFG_IBAT1U
+
+/* IMMRBAR, PCI IO and NAND: cache-inhibit and guarded */
+#define CFG_IBAT2L     (CFG_IMMR | BATL_PP_10 | \
+                       BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT2U     (CFG_IMMR | BATU_BL_8M | BATU_VS | BATU_VP)
+#define CFG_DBAT2L     CFG_IBAT2L
+#define CFG_DBAT2U     CFG_IBAT2U
+
+/* BCSR: cache-inhibit and guarded */
+#define CFG_IBAT3L     (CFG_BCSR | BATL_PP_10 | \
+                       BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT3U     (CFG_BCSR | BATU_BL_128K | BATU_VS | BATU_VP)
+#define CFG_DBAT3L     CFG_IBAT3L
+#define CFG_DBAT3U     CFG_IBAT3U
+
+/* FLASH: icache cacheable, but dcache-inhibit and guarded */
+#define CFG_IBAT4L     (CFG_FLASH_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT4U     (CFG_FLASH_BASE | BATU_BL_32M | BATU_VS | BATU_VP)
+#define CFG_DBAT4L     (CFG_FLASH_BASE | BATL_PP_10 | \
+                       BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT4U     CFG_IBAT4U
+
+/* Stack in dcache: cacheable, no memory coherence */
+#define CFG_IBAT5L     (CFG_INIT_RAM_ADDR | BATL_PP_10)
+#define CFG_IBAT5U     (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
+#define CFG_DBAT5L     CFG_IBAT5L
+#define CFG_DBAT5U     CFG_IBAT5U
+
+#ifdef CONFIG_PCI
+/* PCI MEM space: cacheable */
+#define CFG_IBAT6L     (CFG_PCI_MEM_PHYS | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT6U     (CFG_PCI_MEM_PHYS | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT6L     CFG_IBAT6L
+#define CFG_DBAT6U     CFG_IBAT6U
+/* PCI MMIO space: cache-inhibit and guarded */
+#define CFG_IBAT7L     (CFG_PCI_MMIO_PHYS | BATL_PP_10 | \
+                       BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT7U     (CFG_PCI_MMIO_PHYS | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_DBAT7L     CFG_IBAT7L
+#define CFG_DBAT7U     CFG_IBAT7U
+#else
+#define CFG_IBAT6L     (0)
+#define CFG_IBAT6U     (0)
+#define CFG_IBAT7L     (0)
+#define CFG_IBAT7U     (0)
+#define CFG_DBAT6L     CFG_IBAT6L
+#define CFG_DBAT6U     CFG_IBAT6U
+#define CFG_DBAT7L     CFG_IBAT7L
+#define CFG_DBAT7U     CFG_IBAT7U
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02 /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed of kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+#define CONFIG_ENV_OVERWRITE
+
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#define CONFIG_ETHADDR         00:E0:0C:00:83:79
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR                00:E0:0C:00:83:78
+#endif
+
+#define CONFIG_BAUDRATE 115200
+
+#define CONFIG_LOADADDR 200000 /* default location for tftp and bootm */
+
+#define CONFIG_BOOTDELAY 6     /* -1 disables auto-boot */
+#undef CONFIG_BOOTARGS         /* the boot command will set bootargs */
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+   "netdev=eth0\0"                                                     \
+   "consoledev=ttyS0\0"                                                        \
+   "ramdiskaddr=1000000\0"                                             \
+   "ramdiskfile=ramfs.83xx\0"                                          \
+   "fdtaddr=400000\0"                                                  \
+   "fdtfile=mpc837xemds.dtb\0"                                         \
+   ""
+
+#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 CONFIG_NFSBOOTCOMMAND
+
+#endif /* __CONFIG_H */
index 35e1d6306663c4ca58d1d659839e763d180120bd..afce7fb78fe605b3ca5b5de88dc218b575e0dcdb 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index e376c11656b61878072e21a6a54dd089039553b0..2868dcb8ad6484482d1065ef129a4de102c7cb3a 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE        32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index d2e7237895e29acbd2850e0cc45b7dd91c54ba33..c83382f0df63468eedef2184c6b8fed5ed76dace 100644 (file)
@@ -450,13 +450,6 @@ extern unsigned long get_clock_freq(void);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE        32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index 545a76cc62154c1050dcd70db70bbcb3b24f936d..5a96db5ab2517193b6adbcf696e0a50d6f32cfb2 100644 (file)
@@ -444,13 +444,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index 3f382e59a6b5053d11778e91b193dd6094d058ab..90beb252138583542f37716bcc7b89981a395c05 100644 (file)
@@ -512,13 +512,6 @@ extern unsigned long get_clock_freq(void);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE        32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index 90ef3d6b6738e2844f5e065e531e376f2458e438..76d673cd0d65cc1ba2c6867841fcf1ae894f1e60 100644 (file)
@@ -450,13 +450,6 @@ extern unsigned long get_clock_freq(void);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE        32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index d4e0de0d32b433363fc3e32f104a9adf9494eef7..5f105552f40b87d05137f64fa5f887fbc510dc3f 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index 59f490e8566d73b8b0b293f91cafa3d517c471c6..2b089d90d6869d03457e8c01116cedc7689ff73e 100644 (file)
@@ -480,13 +480,6 @@ extern unsigned long get_clock_freq(void);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE        32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
diff --git a/include/configs/MPC8610HPCD.h b/include/configs/MPC8610HPCD.h
new file mode 100644 (file)
index 0000000..eb6ccb6
--- /dev/null
@@ -0,0 +1,682 @@
+/*
+ * Copyright 2007 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ */
+
+/*
+ * MPC8610HPCD board configuration file
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_MPC86xx         1       /* MPC86xx */
+#define CONFIG_MPC8610         1       /* MPC8610 specific */
+#define CONFIG_MPC8610HPCD     1       /* MPC8610HPCD board specific */
+#define CONFIG_NUM_CPUS                1       /* Number of CPUs in the system */
+#define CONFIG_LINUX_RESET_VEC 0x100   /* Reset vector used by Linux */
+
+#define CONFIG_FSL_DIU_FB      1       /* FSL DIU */
+
+/* video */
+#define CONFIG_VIDEO
+
+#if defined(CONFIG_VIDEO)
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#endif
+
+#ifdef RUN_DIAG
+#define CFG_DIAG_ADDR          0xff800000
+#endif
+
+#define CFG_RESET_ADDRESS      0xfff00100
+
+#define CONFIG_PCI             1       /* Enable PCI/PCIE*/
+#define CONFIG_PCI1            1       /* PCI controler 1 */
+#define CONFIG_PCIE1           1       /* PCIe 1 connected to ULI bridge */
+#define CONFIG_PCIE2           1       /* PCIe 2 connected to slot */
+#define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
+
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_SPD_EEPROM              /* Use SPD for DDR */
+#undef CONFIG_DDR_DLL                  /* possible DLL fix needed */
+#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
+#undef  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_NUM_DDR_CONTROLLERS     1
+#define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
+
+#define CONFIG_ALTIVEC         1
+
+/*
+ * L2CR setup -- make sure this is right for your board!
+ */
+#define CFG_L2
+#define L2_INIT                0
+#define L2_ENABLE      (L2CR_L2E |0x00100000 )
+
+#ifndef CONFIG_SYS_CLK_FREQ
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0)
+#endif
+
+#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
+#define CONFIG_MISC_INIT_R             1
+
+#undef CFG_DRAM_TEST                   /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00200000      /* memtest region */
+#define CFG_MEMTEST_END                0x00400000
+#define CFG_ALT_MEMTEST
+
+/*
+ * 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_DIU_ADDR           (CFG_CCSRBAR+0x2c000)
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_VERY_BIG_RAM
+
+#define MPC86xx_DDR_SDRAM_CLK_CNTL
+
+#if defined(CONFIG_SPD_EEPROM)
+/*
+ * Determine DDR configuration from I2C interface.
+ */
+#define SPD_EEPROM_ADDRESS1            0x51            /* DDR DIMM */
+#else
+/*
+ * Manually set up DDR1 parameters
+ */
+
+#define CFG_SDRAM_SIZE 256             /* DDR is 256MB */
+
+#if 0 /* TODO */
+#define CFG_DDR_CS0_BNDS       0x0000000F
+#define CFG_DDR_CS0_CONFIG     0x80010202      /* Enable, no interleaving */
+#define CFG_DDR_EXT_REFRESH    0x00000000
+#define CFG_DDR_TIMING_0       0x00260802
+#define CFG_DDR_TIMING_1       0x3935d322
+#define CFG_DDR_TIMING_2       0x14904cc8
+#define CFG_DDR_MODE_1         0x00480432
+#define CFG_DDR_MODE_2         0x00000000
+#define CFG_DDR_INTERVAL       0x06180100
+#define CFG_DDR_DATA_INIT      0xdeadbeef
+#define CFG_DDR_CLK_CTRL       0x03800000
+#define CFG_DDR_OCD_CTRL       0x00000000
+#define CFG_DDR_OCD_STATUS     0x00000000
+#define CFG_DDR_CONTROL                0xe3008000      /* Type = DDR2 */
+#define CFG_DDR_CONTROL2       0x04400010
+
+#define CFG_DDR_ERR_INT_EN     0x00000000
+#define CFG_DDR_ERR_DIS                0x00000000
+#define CFG_DDR_SBE            0x000f0000
+ /* Not used in fixed_sdram function */
+#define CFG_DDR_MODE           0x00000022
+#define CFG_DDR_CS1_BNDS       0x00000000
+#define CFG_DDR_CS2_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS3_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS4_BNDS       0x00000FFF      /* Not done */
+#define CFG_DDR_CS5_BNDS       0x00000FFF      /* Not done */
+#endif
+#endif
+
+#define CFG_ID_EEPROM
+#define ID_EEPROM_ADDR         0x57
+
+
+#define CFG_FLASH_BASE         0xf0000000 /* start of FLASH 128M */
+#define CFG_FLASH_BASE2                0xf8000000
+
+#define CFG_FLASH_BANKS_LIST {CFG_FLASH_BASE, CFG_FLASH_BASE2}
+
+#define CFG_BR0_PRELIM         0xf8001001 /* port size 16bit */
+#define CFG_OR0_PRELIM         0xf8006e65 /* 128MB NOR Flash*/
+
+#define CFG_BR1_PRELIM         0xf0001001 /* port size 16bit */
+#define CFG_OR1_PRELIM         0xf8006e65 /* 128MB Promjet */
+#if 0 /* TODO */
+#define CFG_BR2_PRELIM         0xf0000000
+#define CFG_OR2_PRELIM         0xf0000000 /* 256MB NAND Flash - bank 1 */
+#endif
+#define CFG_BR3_PRELIM         0xe8000801 /* port size 8bit */
+#define CFG_OR3_PRELIM         0xfff06ff7 /* 1MB PIXIS area*/
+
+
+#define CONFIG_FSL_PIXIS       1       /* use common PIXIS code */
+#define PIXIS_BASE     0xe8000000      /* 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 */
+#define PIXIS_SPD              0x7     /* Register for SYSCLK speed */
+#define PIXIS_BRDCFG0          0x8     /* PIXIS Board Configuration Register0*/
+#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 CFG_PIXIS_VBOOT_MASK   0x0C    /* Reset altbank mask*/
+
+#define CFG_MAX_FLASH_BANKS    2               /* number of banks */
+#define CFG_MAX_FLASH_SECT     1024            /* 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
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#else
+#undef CFG_RAMBOOT
+#endif
+
+#if defined(CFG_RAMBOOT)
+#undef CONFIG_SPD_EEPROM
+#define CFG_SDRAM_SIZE 256
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#ifndef CFG_INIT_RAM_LOCK
+#define CFG_INIT_RAM_ADDR      0xe4010000      /* Initial RAM address */
+#else
+#define CFG_INIT_RAM_ADDR      0xe4000000      /* Initial RAM address */
+#endif
+#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                (512 * 1024)    /* Reserve 512 KB for Mon */
+#define CFG_MALLOC_LEN         (6 * 1024 * 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 to kernel
+ */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+
+#define CFG_64BIT_VSPRINTF     1
+#define CFG_64BIT_STRTOUL      1
+
+/*
+ * 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
+#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3000
+
+/*
+ * 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_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
+
+/* For RTL8139 */
+#define KSEG1ADDR(x)   ({u32 _x = le32_to_cpu(*(u32 *)(x)); (&_x); })
+#define _IO_BASE               0x00000000
+
+/* controller 1, Base address 0xa000 */
+#define CFG_PCIE1_MEM_BASE     0xa0000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x10000000      /* 256M */
+#define CFG_PCIE1_IO_BASE      0x00000000
+#define CFG_PCIE1_IO_PHYS      0xe3000000
+#define CFG_PCIE1_IO_SIZE      0x00100000      /* 1M */
+
+/* controller 2, Base Address 0x9000 */
+#define CFG_PCIE2_MEM_BASE     0x90000000
+#define CFG_PCIE2_MEM_PHYS     CFG_PCIE2_MEM_BASE
+#define CFG_PCIE2_MEM_SIZE     0x10000000      /* 256M */
+#define CFG_PCIE2_IO_BASE      0x00000000      /* reuse mem LAW */
+#define CFG_PCIE2_IO_PHYS      0xe2000000
+#define CFG_PCIE2_IO_SIZE      0x00100000      /* 1M */
+
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+
+#define CONFIG_NET_MULTI
+#define CONFIG_CMD_NET
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
+
+#define CONFIG_RTL8139
+#define CONFIG_SK98
+#define CONFIG_EEPRO100
+#define CONFIG_TULIP
+#ifdef CONFIG_TULIP
+#define CONFIG_ETHADDR   00:E0:0C:00:00:01
+#endif
+
+/************************************************************
+ * USB support
+ ************************************************************/
+#define CONFIG_PCI_OHCI                1
+#define CONFIG_USB_OHCI_NEW            1
+#define CONFIG_USB_KEYBOARD    1
+#define CFG_DEVICE_DEREGISTER
+#define CFG_USB_EVENT_POLL     1
+#define CFG_USB_OHCI_SLOT_NAME         "ohci_pci"
+#define CFG_USB_OHCI_MAX_ROOT_PORTS 15
+#define CFG_OHCI_SWAP_REG_ACCESS       1
+
+#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
+
+#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
+
+#endif /* CONFIG_PCI */
+
+/*
+ * BAT0                2G      Cacheable, non-guarded
+ * 0x0000_0000 2G      DDR
+ */
+#define CFG_DBAT0L     (BATL_PP_RW | BATL_MEMCOHERENCE)
+#define CFG_DBAT0U     (BATU_BL_2G | BATU_VS | BATU_VP)
+#define CFG_IBAT0L     (BATL_PP_RW | BATL_MEMCOHERENCE )
+#define CFG_IBAT0U     CFG_DBAT0U
+
+/*
+ * BAT1                1G      Cache-inhibited, guarded
+ * 0x8000_0000 256M    PCI-1 Memory
+ * 0xa000_0000 256M    PCI-Express 1 Memory
+ * 0x9000_0000 256M    PCI-Express 2 Memory
+ */
+
+#define CFG_DBAT1L     (CFG_PCI1_MEM_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT1U     (CFG_PCI1_MEM_PHYS | BATU_BL_1G | BATU_VS | BATU_VP)
+#define CFG_IBAT1L     (CFG_PCI1_MEM_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CFG_IBAT1U     CFG_DBAT1U
+
+/*
+ * BAT2                16M     Cache-inhibited, guarded
+ * 0xe100_0000 1M      PCI-1 I/O
+ */
+
+#define CFG_DBAT2L     (CFG_PCI1_IO_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT2U     (CFG_PCI1_IO_PHYS | BATU_BL_16M | BATU_VS | BATU_VP)
+#define CFG_IBAT2L     (CFG_PCI1_IO_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CFG_IBAT2U     CFG_DBAT2U
+
+/*
+ * BAT3                32M     Cache-inhibited, guarded
+ * 0xe200_0000 1M      PCI-Express 2 I/O
+ * 0xe300_0000 1M      PCI-Express 1 I/O
+ */
+
+#define CFG_DBAT3L     (CFG_PCIE2_IO_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT3U     (CFG_PCIE2_IO_PHYS | BATU_BL_32M | BATU_VS | BATU_VP)
+#define CFG_IBAT3L     (CFG_PCIE2_IO_PHYS | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CFG_IBAT3U     CFG_DBAT3U
+
+/*
+ * BAT4                4M      Cache-inhibited, guarded
+ * 0xe000_0000 4M      CCSR
+ */
+#define CFG_DBAT4L     (CFG_CCSRBAR | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT4U     (CFG_CCSRBAR | BATU_BL_1M | BATU_VS | BATU_VP)
+#define CFG_IBAT4L     (CFG_CCSRBAR | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CFG_IBAT4U     CFG_DBAT4U
+
+/*
+ * BAT5                128K    Cacheable, non-guarded
+ * 0xe400_0000 128K    Init RAM for stack in the CPU DCache (no backing memory)
+ */
+#define CFG_DBAT5L     (CFG_INIT_RAM_ADDR | BATL_PP_RW | BATL_MEMCOHERENCE)
+#define CFG_DBAT5U     (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
+#define CFG_IBAT5L     CFG_DBAT5L
+#define CFG_IBAT5U     CFG_DBAT5U
+
+/*
+ * BAT6                256M    Cache-inhibited, guarded
+ * 0xf000_0000 256M    FLASH
+ */
+#define CFG_DBAT6L     (CFG_FLASH_BASE  | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT6U     (CFG_FLASH_BASE  | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_IBAT6L     (CFG_FLASH_BASE | BATL_PP_RW | BATL_MEMCOHERENCE)
+#define CFG_IBAT6U     CFG_DBAT6U
+
+/*
+ * BAT7                4M      Cache-inhibited, guarded
+ * 0xe800_0000 4M      PIXIS
+ */
+#define CFG_DBAT7L     (PIXIS_BASE | BATL_PP_RW | BATL_CACHEINHIBIT \
+                       | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT7U     (PIXIS_BASE | BATU_BL_1M | BATU_VS | BATU_VP)
+#define CFG_IBAT7L     (PIXIS_BASE | BATL_PP_RW | BATL_CACHEINHIBIT)
+#define CFG_IBAT7U     CFG_DBAT7U
+
+
+/*
+ * Environment
+ */
+#ifndef CFG_RAMBOOT
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+#define CFG_ENV_SECT_SIZE      0x20000 /* 126k (one sector) for env */
+#define CFG_ENV_SIZE           0x2000
+#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 */
+
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+
+#if defined(CFG_RAMBOOT)
+#undef CONFIG_CMD_ENV
+#endif
+
+#if defined(CONFIG_PCI)
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_SCSI
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_USB
+#endif
+
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+/*DIU Configuration*/
+#define DIU_CONNECT_TO_DVI             /* DIU controller connects to DVI encoder*/
+
+/*
+ * 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 defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_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*/
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+#define CONFIG_IPADDR          192.168.1.100
+
+#define CONFIG_HOSTNAME                unknown
+#define CONFIG_ROOTPATH                /opt/nfsroot
+#define CONFIG_BOOTFILE                uImage
+#define CONFIG_UBOOTPATH       8610hpcd/u-boot.bin
+
+#define CONFIG_SERVERIP                192.168.1.1
+#define CONFIG_GATEWAYIP       192.168.1.1
+#define CONFIG_NETMASK         255.255.255.0
+
+/* default location for tftp and bootm */
+#define CONFIG_LOADADDR                1000000
+
+#define CONFIG_BOOTDELAY 10    /* -1 disables auto-boot */
+#undef CONFIG_BOOTARGS         /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE        115200
+
+#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_PCIE1) || defined(CONFIG_PCIE2)
+#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"     \
+ "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"      \
+ "pcie1errc=setenv a e000a; run pcieerrc\0"    \
+ "pcie2errc=setenv a e0009; run pcieerrc\0"
+#else
+#define        PCIE_ENV ""
+#endif
+
+#define DMA_ENV \
+ "dma0=mw ${d}104 ffffffff;mw ${d}110 50000;mw ${d}114 $sad0;mw ${d}118 50000;"\
+       "mw ${d}120 $bc0;mw ${d}100 f03c404; mw ${d}11c $dad0; md ${d}100 9\0" \
+ "dma1=mw ${d}184 ffffffff;mw ${d}190 50000;mw ${d}194 $sad1;mw ${d}198 50000;"\
+       "mw ${d}1a0 $bc1;mw ${d}180 f03c404; mw ${d}19c $dad1; md ${d}180 9\0" \
+ "dma2=mw ${d}204 ffffffff;mw ${d}210 50000;mw ${d}214 $sad2;mw ${d}218 50000;"\
+       "mw ${d}220 $bc2;mw ${d}200 f03c404; mw ${d}21c $dad2; md ${d}200 9\0" \
+ "dma3=mw ${d}284 ffffffff;mw ${d}290 50000;mw ${d}294 $sad3;mw ${d}298 50000;"\
+       "mw ${d}2a0 $bc3;mw ${d}280 f03c404; mw ${d}29c $dad3; md ${d}280 9\0"
+
+#ifdef ENV_DEBUG
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+ "netdev=eth0\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"     \
+ "consoledev=ttyS0\0"                                          \
+ "ramdiskaddr=2000000\0"                                       \
+ "ramdiskfile=8610hpcd/ramdisk.uboot\0"                                \
+ "fdtaddr=c00000\0"                                            \
+ "fdtfile=8610hpcd/mpc8610_hpcd.dtb\0"                         \
+ "bdev=sda3\0"                                 \
+ "en-wd=mw.b f8100010 0x08; echo -expect:- 08; md.b f8100010 1\0" \
+ "dis-wd=mw.b f8100010 0x00; echo -expect:- 00; md.b f8100010 1\0" \
+ "maxcpus=1"   \
+ "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" \
+ "ddr1regs=setenv a e0002; run ddrreg\0" \
+ "gureg=md ${a}000 2c; md ${a}0b0 1; md ${a}0c0 1; md ${a}800 1;" \
+       "md ${a}900 6; md ${a}a00 1; md ${a}b20 3; md ${a}e00 1;" \
+       "md ${a}e60 1; md ${a}ef0 1d\0" \
+ "guregs=setenv a e00e0; run gureg\0" \
+ "mcmreg=md ${a}000 1b; md ${a}bf8 2; md ${a}e00 5\0" \
+ "mcmregs=setenv a e0001; run mcmreg\0" \
+ "diuregs=md e002c000 1d\0" \
+ "dium=mw e002c01c\0" \
+ "diuerr=md e002c014 1\0" \
+ "othbootargs=diufb=15M video=fslfb:1280x1024-32@60,monitor=0 debug\0" \
+ "monitor=0-DVI\0" \
+ "pmregs=md e00e1000 2b\0" \
+ "lawregs=md e0000c08 4b\0" \
+ "lbcregs=md e0005000 36\0" \
+ "dma0regs=md e0021100 12\0" \
+ "dma1regs=md e0021180 12\0" \
+ "dma2regs=md e0021200 12\0" \
+ "dma3regs=md e0021280 12\0" \
+ PCI_ENV \
+ PCIE_ENV \
+ DMA_ENV
+#else
+#define CONFIG_EXTRA_ENV_SETTINGS                               \
+ "netdev=eth0\0"                                                \
+ "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0"                         \
+ "consoledev=ttyS0\0"                                           \
+ "ramdiskaddr=2000000\0"                                        \
+ "ramdiskfile=8610hpcd/ramdisk.uboot\0"                         \
+ "fdtaddr=c00000\0"                                             \
+ "fdtfile=8610hpcd/mpc8610_hpcd.dtb\0"                          \
+ "bdev=sda3\0"                                                 \
+ "othbootargs=diufb=15M video=fslfb:1280x1024-32@60,monitor=0\0"\
+ "monitor=0-DVI\0"
+#endif
+
+#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/$bdev rw " \
+       "console=$consoledev,$baudrate $othbootargs;"   \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr - $fdtaddr"
+
+#endif /* __CONFIG_H */
index 6f8724026333015a119001749448497e729e1a63..7f485c68f6c8e40feb907cffc0d909d7479a6159 100644 (file)
@@ -38,7 +38,6 @@
 #define CONFIG_MPC8641HPCN     1       /* MPC8641HPCN board specific */
 #define CONFIG_NUM_CPUS         2       /* Number of CPUs in the system */
 #define CONFIG_LINUX_RESET_VEC  0x100   /* Reset vector used by Linux */
-#undef DEBUG
 
 #ifdef RUN_DIAG
 #define CFG_DIAG_ADDR        0xff800000
@@ -267,13 +266,10 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 /*
  * Pass open firmware flat tree to kernel
  */
-#define CONFIG_OF_FLAT_TREE    1
-#define CONFIG_OF_BOARD_SETUP  1
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
-#define OF_CPU         "PowerPC,8641@0"
-#define OF_SOC         "soc8641@f8000000"
-#define OF_TBCLK       (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH "/soc8641@f8000000/serial@4500"
 
 #define CFG_64BIT_VSPRINTF     1
 #define CFG_64BIT_STRTOUL      1
@@ -577,13 +573,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-    #define CFG_CACHELINE_SHIFT        5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
@@ -645,8 +634,8 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
    "consoledev=ttyS0\0"                                                 \
    "ramdiskaddr=2000000\0"                                             \
    "ramdiskfile=your.ramdisk.u-boot\0"                                  \
-   "dtbaddr=c00000\0"                                          \
-   "dtbfile=mpc8641_hpcn.dtb\0"                                  \
+   "fdtaddr=c00000\0"                                          \
+   "fdtfile=mpc8641_hpcn.dtb\0"                                  \
    "en-wd=mw.b f8100010 0x08; echo -expect:- 08; md.b f8100010 1\0" \
    "dis-wd=mw.b f8100010 0x00; echo -expect:- 00; md.b f8100010 1\0" \
    "maxcpus=2"
@@ -658,16 +647,16 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
       "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
       "console=$consoledev,$baudrate $othbootargs;"                     \
    "tftp $loadaddr $bootfile;"                                          \
-   "tftp $dtbaddr $dtbfile;"                                          \
-   "bootm $loadaddr - $dtbaddr"
+   "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 $dtbaddr $dtbfile;"                                          \
-   "bootm $loadaddr $ramdiskaddr $dtbaddr"
+   "tftp $fdtaddr $fdtfile;"                                          \
+   "bootm $loadaddr $ramdiskaddr $fdtaddr"
 
 #define CONFIG_BOOTCOMMAND  CONFIG_NFSBOOTCOMMAND
 
index 5840ea25f4bf42aebc0f659030f3cc9db43a396a..94b5bc965e054f9bae954fa6f4c13c7e70e7722a 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 937df229f1609b29a83f292087b945f3eee4bd87..4e030885fea72e1f2c6c656eb3992b5cfed5ca7c 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index d6e7082f6a95e924e2932e37de414d2ce3c2b5f6..e70c0d3d4d62d4610939468f2d6ea2c78f72df12 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index efa015746e164cc8a6fe788e6d07f735106857ae..b83520d7c1fde822f6b2034c2b9b70832150194a 100644 (file)
 #define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
 #define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  */
index 652210c19daf6899c66e0292771a50d689d44e9a..0bd77c07b653711a4ddcb57f773644d56a27cdc2 100644 (file)
 #define CFG_I2C_SLAVE          0x7F
 
 #define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT24WC08             */
+#define CFG_EEPROM_WREN         1
 
 /* CAT24WC08/16... */
 #define CFG_I2C_EEPROM_ADDR_LEN 1      /* Bytes of address             */
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
  * GPIO0[28-29] - UART1 data signal input/output
  * GPIO0[30-31] - EMAC0 and EMAC1 reject packet inputs
  */
-#define CFG_GPIO0_OSRH         0x40000550
+#define CFG_GPIO0_OSRH         0x00000550
 #define CFG_GPIO0_OSRL         0x00000110
 #define CFG_GPIO0_ISR1H                0x00000000
 #define CFG_GPIO0_ISR1L                0x15555445
 #define CFG_GPIO0_TSRH         0x00000000
 #define CFG_GPIO0_TSRL         0x00000000
-#define CFG_GPIO0_TCR          0xF7FE0014
+#define CFG_GPIO0_TCR          0x77FE0014
 
 #define CFG_DUART_RST          (0x80000000 >> 14)
+#define CFG_EEPROM_WP          (0x80000000 >> 0)
 
 /*
  * Internal Definitions
index a6a1e738a806e6074c9aad6601b65e20796b6a05..f0d0399a9d08a6d6b41c64c0233edaf2c24575b2 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index 9a17e3d7333523cd01ce0d4cb3c0acac8b9024e8..ae2645c079c897e55eb4430bbd7a2c781bc860d2 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 /*
  * Internal Definitions
  *
index b29f368f57c252aa1686718c90ec943002e69e8d..adbe8a9fba6d2ede7e3ee6d0d1de2d0b184b563e 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
diff --git a/include/configs/PMC440.h b/include/configs/PMC440.h
new file mode 100644 (file)
index 0000000..67bf4b1
--- /dev/null
@@ -0,0 +1,515 @@
+/*
+ * (C) Copyright 2007
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com.
+ * Based on the sequoia configuration file.
+ *
+ * (C) Copyright 2006-2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2006
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
+ *
+ * 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
+ */
+
+/************************************************************************
+ * PMC440.h - configuration for esd PMC440 boards
+ ***********************************************************************/
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_440EPX          1       /* Specific PPC440EPx   */
+#define CONFIG_440             1       /* ... PPC440 family    */
+#define CONFIG_4xx             1       /* ... PPC4xx family    */
+
+#define CONFIG_SYS_CLK_FREQ    33333400
+
+#if 0 /* temporary disabled because OS/9 does not like dcache on startup */
+#define CONFIG_4xx_DCACHE              /* enable dcache        */
+#endif
+
+#define CONFIG_BOARD_EARLY_INIT_F 1    /* Call board_early_init_f */
+#define CONFIG_MISC_INIT_R     1       /* Call misc_init_r     */
+#define CONFIG_BOARD_TYPES     1       /* support board types  */
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CFG_MONITOR_LEN                (384  * 1024)   /* Reserve 384 kB for Monitor   */
+#define CFG_MALLOC_LEN         (1024 * 1024)   /* Reserve 256 kB for malloc()  */
+
+#define CONFIG_PRAM            0       /* use pram variable to overwrite */
+
+#define CFG_BOOT_BASE_ADDR     0xf0000000
+#define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
+#define CFG_FLASH_BASE         0xfc000000      /* start of FLASH       */
+#define CFG_MONITOR_BASE       TEXT_BASE
+#define CFG_NAND_ADDR          0xd0000000      /* NAND Flash           */
+#define CFG_OCM_BASE           0xe0010000      /* ocm                  */
+#define CFG_OCM_DATA_ADDR      CFG_OCM_BASE
+#define CFG_PCI_BASE           0xe0000000      /* Internal PCI regs    */
+#define CFG_PCI_MEMBASE                0x80000000      /* mapped pci memory    */
+#define CFG_PCI_MEMBASE1       CFG_PCI_MEMBASE  + 0x10000000
+#define CFG_PCI_MEMBASE2       CFG_PCI_MEMBASE1 + 0x10000000
+#define CFG_PCI_MEMBASE3       CFG_PCI_MEMBASE2 + 0x10000000
+#define CFG_PCI_MEMSIZE                0x80000000      /* 2GB! */
+
+/* Don't change either of these */
+#define CFG_PERIPHERAL_BASE    0xef600000      /* internal peripherals */
+
+#define CFG_USB2D0_BASE                0xe0000100
+#define CFG_USB_DEVICE         0xe0000000
+#define CFG_USB_HOST           0xe0000400
+#define CFG_FPGA_BASE0         0xef000000      /* 32 bit */
+#define CFG_FPGA_BASE1         0xef100000      /* 16 bit */
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer
+ *----------------------------------------------------------------------*/
+/* 440EPx/440GRx have 16KB of internal SRAM, so no need for D-Cache    */
+#define CFG_INIT_RAM_ADDR      CFG_OCM_BASE    /* OCM                  */
+#define CFG_INIT_RAM_END       (4 << 10)
+#define CFG_GBL_DATA_SIZE      256     /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_POST_WORD_ADDR
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#undef CFG_EXT_SERIAL_CLOCK
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI    1
+#undef CONFIG_UART1_CONSOLE    /* console on front panel */
+
+#define CFG_BAUDRATE_TABLE                                             \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CFG_ENV_IS_IN_EEPROM   1       /* use FLASH for environment vars */
+#else
+#define CFG_ENV_IS_IN_NAND     1       /* use NAND for environment vars */
+#define CFG_ENV_IS_EMBEDDED    1       /* use embedded environment */
+#endif
+
+/*-----------------------------------------------------------------------
+ * RTC
+ *----------------------------------------------------------------------*/
+#define CONFIG_RTC_RX8025
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CFG_FLASH_CFI          /* The flash is CFI compatible  */
+#define CFG_FLASH_CFI_DRIVER   /* Use common CFI driver        */
+
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
+#define CFG_FLASH_PROTECTION   1       /* use hardware flash protection        */
+
+#define CFG_FLASH_EMPTY_INFO   /* print 'E' for empty sector on flinfo */
+#define CFG_FLASH_QUIET_TEST   1       /* don't warn upon unknown flash        */
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x20000 /* size of one complete sector          */
+#define CFG_ENV_ADDR           ((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x2000  /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+#endif
+
+#ifdef CFG_ENV_IS_IN_EEPROM
+#define CFG_ENV_OFFSET         0       /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x1000  /* 4096 bytes may be used for env vars */
+#endif
+
+/*
+ * IPL (Initial Program Loader, integrated inside CPU)
+ * Will load first 4k from NAND (SPL) into cache and execute it from there.
+ *
+ * SPL (Secondary Program Loader)
+ * Will load special U-Boot version (NUB) from NAND and execute it. This SPL
+ * has to fit into 4kByte. It sets up the CPU and configures the SDRAM
+ * controller and the NAND controller so that the special U-Boot image can be
+ * loaded from NAND to SDRAM.
+ *
+ * NUB (NAND U-Boot)
+ * This NAND U-Boot (NUB) is a special U-Boot version which can be started
+ * from RAM. Therefore it mustn't (re-)configure the SDRAM controller.
+ *
+ * On 440EPx the SPL is copied to SDRAM before the NAND controller is
+ * set up. While still running from cache, I experienced problems accessing
+ * the NAND controller.        sr - 2006-08-25
+ */
+#if defined (CONFIG_NAND_U_BOOT)
+#define CFG_NAND_BOOT_SPL_SRC  0xfffff000      /* SPL location                 */
+#define CFG_NAND_BOOT_SPL_SIZE (4 << 10)       /* SPL size                     */
+#define CFG_NAND_BOOT_SPL_DST  (CFG_OCM_BASE + (12 << 10)) /* Copy SPL here    */
+#define CFG_NAND_U_BOOT_DST    0x01000000      /* Load NUB to this addr        */
+#define CFG_NAND_U_BOOT_START  CFG_NAND_U_BOOT_DST /* Start NUB from this addr */
+#define CFG_NAND_BOOT_SPL_DELTA        (CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST)
+
+/*
+ * Define the partitioning of the NAND chip (only RAM U-Boot is needed here)
+ */
+#define CFG_NAND_U_BOOT_OFFS   (16 << 10)      /* Offset to RAM U-Boot image   */
+#define CFG_NAND_U_BOOT_SIZE   (384 << 10)     /* Size of RAM U-Boot image     */
+
+/*
+ * Now the NAND chip has to be defined (no autodetection used!)
+ */
+#define CFG_NAND_PAGE_SIZE     512     /* NAND chip page size          */
+#define CFG_NAND_BLOCK_SIZE    (16 << 10) /* NAND chip block size      */
+#define CFG_NAND_PAGE_COUNT    32      /* NAND chip page count         */
+#define CFG_NAND_BAD_BLOCK_POS 5       /* Location of bad block marker */
+#undef CFG_NAND_4_ADDR_CYCLE           /* No fourth addr used (<=32MB) */
+
+#define CFG_NAND_ECCSIZE       256
+#define CFG_NAND_ECCBYTES      3
+#define CFG_NAND_ECCSTEPS      (CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE)
+#define CFG_NAND_OOBSIZE       16
+#define CFG_NAND_ECCTOTAL      (CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS)
+#define CFG_NAND_ECCPOS                {0, 1, 2, 3, 6, 7}
+#endif
+
+#ifdef CFG_ENV_IS_IN_NAND
+/*
+ * For NAND booting the environment is embedded in the U-Boot image. Please take
+ * look at the file board/amcc/sequoia/u-boot-nand.lds for details.
+ */
+#define CFG_ENV_SIZE           CFG_NAND_BLOCK_SIZE
+#define CFG_ENV_OFFSET         (CFG_NAND_U_BOOT_OFFS + CFG_ENV_SIZE)
+#define CFG_ENV_OFFSET_REDUND  (CFG_ENV_OFFSET + CFG_ENV_SIZE)
+#endif
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CFG_MBYTES_SDRAM       (256)   /* 256MB                        */
+#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CONFIG_DDR_DATA_EYE    /* use DDR2 optimization        */
+#endif
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support    */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged               */
+#define CFG_I2C_SPEED          100000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+
+#define CONFIG_I2C_CMD_TREE    1
+#define CONFIG_I2C_MULTI_BUS   1
+
+#define CFG_I2C_MULTI_EEPROMS
+
+#define CFG_I2C_EEPROM_ADDR            0x54
+#define CFG_I2C_EEPROM_ADDR_LEN                2
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+#define CFG_EEPROM_PAGE_WRITE_BITS     5
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
+#define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x01
+
+#define CFG_EEPROM_WREN                        1
+#define CFG_I2C_BOOT_EEPROM_ADDR       0x52
+
+/*
+ * standard dtt sensor configuration - bottom bit will determine local or
+ * remote sensor of the TMP401
+ */
+#define CONFIG_DTT_SENSORS             { 0, 1 }
+
+/*
+ * The PMC440 uses a TI TMP401 temperature sensor. This part
+ * is basically compatible to the ADM1021 that is supported
+ * by U-Boot.
+ *
+ * - i2c addr 0x4c
+ * - conversion rate 0x02 = 0.25 conversions/second
+ * - ALERT ouput disabled
+ * - local temp sensor enabled, min set to 0 deg, max set to 70 deg
+ * - remote temp sensor enabled, min set to 0 deg, max set to 70 deg
+ */
+#define CONFIG_DTT_ADM1021
+#define CFG_DTT_ADM1021                { { 0x4c, 0x02, 0, 1, 70, 0, 1, 70, 0} }
+
+#define CONFIG_PREBOOT         /* enable preboot variable */
+
+#undef CONFIG_BOOTARGS
+
+/* Setup some board specific values for the default environment variables */
+#define CONFIG_HOSTNAME                pmc440
+#define CFG_BOOTFILE           "bootfile=/tftpboot/pmc440/uImage\0"
+#define CFG_ROOTPATH           "rootpath=/opt/eldk_410/ppc_4xx\0"
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       CFG_BOOTFILE                                                    \
+       CFG_ROOTPATH                                                    \
+       "netdev=eth0\0"                                                 \
+       "ethrotate=no\0"                                                \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+       "nfsroot=${serverip}:${rootpath}\0"                             \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs ${bootargs} "                            \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"              \
+       ":${hostname}:${netdev}:off panic=1\0"                          \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0" \
+       "flash_nfs=run nfsargs addip addtty;"                           \
+       "bootm ${kernel_addr}\0"                                        \
+       "flash_self=run ramargs addip addtty;"                          \
+       "bootm ${kernel_addr} ${ramdisk_addr}\0"                        \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
+       "bootm\0"                                                       \
+       "kernel_addr=FC000000\0"                                        \
+       "ramdisk_addr=FC180000\0"                                       \
+       "load=tftp 200000 /tftpboot/pmc440/u-boot.bin\0"                \
+       "update=protect off FFFA0000 FFFFFFFF;era FFFA0000 FFFFFFFF;"   \
+       "cp.b 200000 FFFA0000 60000\0"                                  \
+       ""
+
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds     */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_IBM_EMAC4_V4    1
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                0       /* PHY address, See schematics  */
+
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CONFIG_HAS_ETH0
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       1
+#define CONFIG_RESET_PHY_R     1
+
+/* USB */
+#define CONFIG_USB_OHCI_NEW
+#define CONFIG_USB_STORAGE
+#define CFG_OHCI_BE_CONTROLLER
+
+#define CFG_USB_OHCI_BOARD_INIT 1
+#define CFG_USB_OHCI_CPU_INIT  1
+#define CFG_USB_OHCI_REGS_BASE CFG_USB_HOST
+#define CFG_USB_OHCI_SLOT_NAME "ppc440"
+#define CFG_USB_OHCI_MAX_ROOT_PORTS    15
+
+/* Comment this out to enable USB 1.1 device */
+#define USB_2_0_DEVICE
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_BSP
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DTT
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_SDRAM
+
+/* POST support */
+#define CONFIG_POST            (CFG_POST_MEMORY |      \
+                                CFG_POST_CPU    |      \
+                                CFG_POST_UART   |      \
+                                CFG_POST_I2C    |      \
+                                CFG_POST_CACHE  |      \
+                                CFG_POST_FPU    |      \
+                                CFG_POST_ETHER  |      \
+                                CFG_POST_SPR)
+
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
+
+/* esd expects pram at end of physical memory.
+ * So no logbuffer at the moment.
+ */
+#if 0
+#define CONFIG_LOGBUFFER
+#endif
+#define CFG_POST_CACHE_ADDR    0x10000000      /* free virtual address     */
+
+#define CFG_CONSOLE_IS_IN_ENV  /* Otherwise it catches logbuffer as output */
+
+#define CONFIG_SUPPORT_VFAT
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#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      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
+#define CFG_MAXARGS            16      /* max number of command args   */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START      0x0400000       /* memtest works on          */
+#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM       */
+
+#define CFG_LOAD_ADDR          0x100000        /* default load address      */
+#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CONFIG_LOOPW           1       /* enable loopw command         */
+#define CONFIG_MX_CYCLIC       1       /* enable mdc/mwc commands      */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+#define CONFIG_AUTOBOOT_KEYED  1
+#define CONFIG_AUTOBOOT_PROMPT "Press SPACE to abort autoboot in %d seconds\n"
+#undef CONFIG_AUTOBOOT_DELAY_STR
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *----------------------------------------------------------------------*/
+/* General PCI */
+#define CONFIG_PCI             /* include pci support          */
+#define CONFIG_PCI_PNP         /* do (not) pci plug-and-play   */
+#define CFG_PCI_CACHE_LINE_SIZE        0       /* to avoid problems with PNP   */
+#define CONFIG_PCI_SCAN_SHOW   /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE       0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE */
+
+/* Board-specific PCI */
+#define CFG_PCI_TARGET_INIT
+#define CFG_PCI_MASTER_INIT
+
+/* PCI identification */
+#define CFG_PCI_SUBSYS_VENDORID 0x12FE /* PCI Vendor ID: esd gmbh      */
+#define CFG_PCI_SUBSYS_ID_NONMONARCH 0x0441    /* PCI Device ID: Non-Monarch */
+#define CFG_PCI_SUBSYS_ID_MONARCH 0x0440       /* PCI Device ID: Monarch */
+#define CFG_PCI_CLASSCODE_NONMONARCH   PCI_CLASS_PROCESSOR_POWERPC
+#define CFG_PCI_CLASSCODE_MONARCH      PCI_CLASS_BRIDGE_HOST
+
+/*
+ * 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 */
+
+/*-----------------------------------------------------------------------
+ * FPGA stuff
+ *----------------------------------------------------------------------*/
+#define CONFIG_FPGA
+#define CONFIG_FPGA_XILINX
+#define CONFIG_FPGA_SPARTAN2
+#define CONFIG_FPGA_SPARTAN3
+
+#define CONFIG_FPGA_COUNT      2
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+
+/*
+ * On Sequoia CS0 and CS3 are switched when configuring for NAND booting
+ */
+#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CFG_NAND_CS            2       /* NAND chip connected to CSx   */
+
+/* Memory Bank 0 (NOR-FLASH) initialization */
+#define CFG_EBC_PB0AP          0x03017200
+#define CFG_EBC_PB0CR          (CFG_FLASH_BASE | 0xda000)
+
+/* Memory Bank 2 (NAND-FLASH) initialization */
+#define CFG_EBC_PB2AP          0x018003c0
+#define CFG_EBC_PB2CR          (CFG_NAND_ADDR | 0x1c000)
+#else
+#define CFG_NAND_CS            0       /* NAND chip connected to CSx   */
+/* Memory Bank 2 (NOR-FLASH) initialization */
+#define CFG_EBC_PB2AP          0x03017200
+#define CFG_EBC_PB2CR          (CFG_FLASH_BASE | 0xda000)
+
+/* Memory Bank 0 (NAND-FLASH) initialization */
+#define CFG_EBC_PB0AP          0x018003c0
+#define CFG_EBC_PB0CR          (CFG_NAND_ADDR | 0x1c000)
+#endif
+
+/* Memory Bank 4 (FPGA / 32Bit) initialization */
+#define CFG_EBC_PB4AP          0x03840f40      /* BME=0,TWT=7,CSN=1,TH=7,RE=1,SOR=0,BEM=1 */
+#define CFG_EBC_PB4CR          (CFG_FPGA_BASE0 | 0x1c000)      /* BS=1M,BU=R/W,BW=32bit */
+
+/* Memory Bank 5 (FPGA / 16Bit) initialization */
+#define CFG_EBC_PB5AP          0x03840f40      /* BME=0,TWT=3,CSN=1,TH=0,RE=1,SOR=0,BEM=1 */
+#define CFG_EBC_PB5CR          (CFG_FPGA_BASE1 | 0x1a000)      /* BS=1M,BU=R/W,BW=16bit */
+
+/*-----------------------------------------------------------------------
+ * NAND FLASH
+ *----------------------------------------------------------------------*/
+#define CFG_MAX_NAND_DEVICE    1
+#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 */
+#define CFG_NAND_QUIET_TEST    1
+
+/*
+ * 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
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#endif /* __CONFIG_H */
index 8a74c4f5c907195b9f875940ed6ac2f5016414c0..cf98324344c06cbed4f27c77cfb0393a5e2d8537 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
 #define CONFIG_VGA_AS_SINGLE_DEVICE
 /* This is the base address (on 405EP-side) used to generate I/O accesses on PCI bus */
 #define CFG_ISA_IO 0xE8000000
-/* see also drivers/videomodes.c */
+/* see also drivers/video/videomodes.c */
 #define CFG_DEFAULT_VIDEO_MODE 0x303
 #endif
 
index f2c3699ab744a48fda1f5ea0c87e645fb79c4dfc..3ca85b8a9fe90264efe728f9d62b35be2462a07a 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-  #define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index 05cef873e5febc3536b13aaaf1d78435fc6ece3b..50ad7dd598de2d18806a2dc0ef1191ffae3eabbe 100644 (file)
  * FLASH driver setup
  */
 #define CFG_FLASH_CFI          1       /* Flash memory is CFI compliant */
-#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/cfi_flash.c */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/mtd/cfi_flash.c */
 #define CFG_FLASH_USE_BUFFER_WRITE 1   /* Use buffered writes (~10x faster) */
 #define CFG_FLASH_PROTECTION   1       /* Use hardware sector protection */
 
diff --git a/include/configs/TK885D.h b/include/configs/TK885D.h
new file mode 100644 (file)
index 0000000..761a352
--- /dev/null
@@ -0,0 +1,513 @@
+/*
+ * (C) Copyright 2000-2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2006
+ * Martin Krause, TQ-Systems GmBH, martin.krause@tqs.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
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC885          1       /* This is a MPC885 CPU         */
+#define CONFIG_TQM885D         1       /* ...on a TQM88D module        */
+#define CONFIG_TK885D          1       /* ...in a TK885D base board    */
+
+#define CONFIG_8xx_OSCLK               10000000        /*  10 MHz - PLL input clock    */
+#define CFG_8xx_CPUCLK_MIN             15000000        /*  15 MHz - CPU minimum clock  */
+#define CFG_8xx_CPUCLK_MAX             133000000       /* 133 MHz - CPU maximum clock  */
+#define CONFIG_8xx_CPUCLK_DEFAULT      66000000        /*  66 MHz - CPU default clock  */
+                                               /* (it will be used if there is no      */
+                                               /* 'cpuclk' variable with valid value)  */
+
+#define CONFIG_8xx_CONS_SMC1   1       /* Console is on SMC1           */
+
+#define CONFIG_BAUDRATE                115200  /* console baudrate = 115kbps   */
+
+#define CONFIG_BOOTCOUNT_LIMIT
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_BOARD_TYPES     1       /* support board types          */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "netdev=eth0\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"                  \
+       "flash_nfs=run nfsargs addip;"                                  \
+               "bootm ${kernel_addr}\0"                                \
+       "flash_self=run ramargs addip;"                                 \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
+       "rootpath=/opt/eldk/ppc_8xx\0"                                  \
+       "bootfile=/tftpboot/TQM885D/uImage\0"                           \
+       "kernel_addr=40080000\0"                                        \
+       "ramdisk_addr=40180000\0"                                       \
+       "load=tftp 200000 ${u-boot}\0"                                  \
+       "update=protect off 40000000 +${filesize};"                     \
+               "erase 40000000 +${filesize};"                          \
+               "cp.b 200000 40000000 ${filesize};"                     \
+               "protect on 40000000 +${filesize}\0"                    \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#undef CFG_LOADS_BAUD_CHANGE           /* don't allow baudrate change  */
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+#define CONFIG_STATUS_LED      1       /* Status LED enabled           */
+
+#undef CONFIG_CAN_DRIVER               /* CAN Driver support disabled  */
+
+/* enable I2C and select the hardware/software driver */
+#undef CONFIG_HARD_I2C                 /* I2C with hardware support    */
+#define CONFIG_SOFT_I2C                1       /* I2C bit-banged               */
+
+#define CFG_I2C_SPEED          93000   /* 93 kHz is supposed to work   */
+#define CFG_I2C_SLAVE          0xFE
+
+#ifdef CONFIG_SOFT_I2C
+/*
+ * Software (bit-bang) I2C driver configuration
+ */
+#define PB_SCL         0x00000020      /* PB 26 */
+#define PB_SDA         0x00000010      /* PB 27 */
+
+#define I2C_INIT       (immr->im_cpm.cp_pbdir |=  PB_SCL)
+#define I2C_ACTIVE     (immr->im_cpm.cp_pbdir |=  PB_SDA)
+#define I2C_TRISTATE   (immr->im_cpm.cp_pbdir &= ~PB_SDA)
+#define I2C_READ       ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
+#define I2C_SDA(bit)   if(bit) immr->im_cpm.cp_pbdat |=  PB_SDA; \
+                       else    immr->im_cpm.cp_pbdat &= ~PB_SDA
+#define I2C_SCL(bit)   if(bit) immr->im_cpm.cp_pbdat |=  PB_SCL; \
+                       else    immr->im_cpm.cp_pbdat &= ~PB_SCL
+#define I2C_DELAY      udelay(2)       /* 1/4 I2C clock duration */
+#endif /* CONFIG_SOFT_I2C */
+
+#define CFG_I2C_EEPROM_ADDR    0x50            /* EEPROM AT24C??       */
+#define CFG_I2C_EEPROM_ADDR_LEN 2              /* two byte address     */
+#define CFG_EEPROM_PAGE_WRITE_BITS     4
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10      /* and takes up to 10 msec */
+
+# define CONFIG_RTC_DS1337 1
+# define CFG_I2C_RTC_ADDR 0x68
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_BOOTFILESIZE
+
+
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+
+#undef CONFIG_RTC_MPC8xx               /* MPC885 does not support RTC  */
+
+#define        CONFIG_TIMESTAMP                /* but print image timestmps    */
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PING
+
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+
+#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
+
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_MEMTEST_START      0x0100000       /* memtest works on     */
+#define CFG_MEMTEST_END                0x0300000       /* 1 ... 3 MB in DRAM   */
+#define CFG_ALT_MEMTEST                                /* alternate, more extensive
+                                                  memory test.*/
+
+#define CFG_LOAD_ADDR          0x100000        /* default load address */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+/*
+ * Enable loopw command.
+ */
+#define CONFIG_LOOPW
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+/*-----------------------------------------------------------------------
+ * Internal Memory Mapped Register
+ */
+#define CFG_IMMR               0xFFF00000
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      CFG_IMMR
+#define CFG_INIT_RAM_END       0x2F00  /* End of used area in DPRAM    */
+#define CFG_GBL_DATA_SIZE      64  /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0x40000000
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor   */
+#define CFG_MONITOR_BASE       CFG_FLASH_BASE
+#define CFG_MALLOC_LEN         (256 << 10)     /* Reserve 128 kB for malloc()  */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+
+/* use CFI flash driver */
+#define CFG_FLASH_CFI          1       /* Flash is CFI conformant */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use the common driver */
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_USE_BUFFER_WRITE     1
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip */
+
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_OFFSET         0x40000 /*   Offset   of Environment Sector     */
+#define CFG_ENV_SIZE           0x08000 /* Total Size of Environment            */
+#define CFG_ENV_SECT_SIZE      0x20000 /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_OFFSET_REDUND  (CFG_ENV_OFFSET+CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+
+/*-----------------------------------------------------------------------
+ * Hardware Information Block
+ */
+#define CFG_HWINFO_OFFSET      0x0003FFC0      /* offset of HW Info block */
+#define CFG_HWINFO_SIZE                0x00000040      /* size   of HW Info block */
+#define CFG_HWINFO_MAGIC       0x54514D38      /* 'TQM8' */
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     16      /* For all MPC8xx CPUs                  */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
+#endif
+
+/*-----------------------------------------------------------------------
+ * SYPCR - System Protection Control                           11-9
+ * SYPCR can only be written once after reset!
+ *-----------------------------------------------------------------------
+ * Software & Bus Monitor Timer max, Bus Monitor enable, SW Watchdog freeze
+ */
+#if defined(CONFIG_WATCHDOG)
+#define CFG_SYPCR      (SYPCR_SWTC | SYPCR_BMT | SYPCR_BME | SYPCR_SWF | \
+                        SYPCR_SWE  | SYPCR_SWRI| SYPCR_SWP)
+#else
+#define CFG_SYPCR      (SYPCR_SWTC | SYPCR_BMT | SYPCR_BME | SYPCR_SWF | SYPCR_SWP)
+#endif
+
+/*-----------------------------------------------------------------------
+ * SIUMCR - SIU Module Configuration                           11-6
+ *-----------------------------------------------------------------------
+ * PCMCIA config., multi-function pin tri-state
+ */
+#ifndef CONFIG_CAN_DRIVER
+#define CFG_SIUMCR     (SIUMCR_DBGC00 | SIUMCR_DBPC00 | SIUMCR_MLRC01)
+#else  /* we must activate GPL5 in the SIUMCR for CAN */
+#define CFG_SIUMCR     (SIUMCR_DBGC11 | SIUMCR_DBPC00 | SIUMCR_MLRC01)
+#endif /* CONFIG_CAN_DRIVER */
+
+/*-----------------------------------------------------------------------
+ * TBSCR - Time Base Status and Control                                11-26
+ *-----------------------------------------------------------------------
+ * Clear Reference Interrupt Status, Timebase freezing enabled
+ */
+#define CFG_TBSCR      (TBSCR_REFA | TBSCR_REFB | TBSCR_TBF)
+
+/*-----------------------------------------------------------------------
+ * PISCR - Periodic Interrupt Status and Control               11-31
+ *-----------------------------------------------------------------------
+ * Clear Periodic Interrupt Status, Interrupt Timer freezing enabled
+ */
+#define CFG_PISCR      (PISCR_PS | PISCR_PITF)
+
+/*-----------------------------------------------------------------------
+ * SCCR - System Clock and reset Control Register              15-27
+ *-----------------------------------------------------------------------
+ * Set clock output, timebase and RTC source and divider,
+ * power management and some other internal clocks
+ */
+#define SCCR_MASK      SCCR_EBDF11
+#define CFG_SCCR       (SCCR_COM00   | SCCR_DFSYNC00 | SCCR_DFBRG00  | \
+                        SCCR_DFNL000 | SCCR_DFNH000  | SCCR_DFLCD000 | \
+                        SCCR_DFALCD00)
+
+/*-----------------------------------------------------------------------
+ * PCMCIA stuff
+ *-----------------------------------------------------------------------
+ *
+ */
+#define CFG_PCMCIA_MEM_ADDR    (0xE0000000)
+#define CFG_PCMCIA_MEM_SIZE    ( 64 << 20 )
+#define CFG_PCMCIA_DMA_ADDR    (0xE4000000)
+#define CFG_PCMCIA_DMA_SIZE    ( 64 << 20 )
+#define CFG_PCMCIA_ATTRB_ADDR  (0xE8000000)
+#define CFG_PCMCIA_ATTRB_SIZE  ( 64 << 20 )
+#define CFG_PCMCIA_IO_ADDR     (0xEC000000)
+#define CFG_PCMCIA_IO_SIZE     ( 64 << 20 )
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA stuff (Supports IDE harddisk on PCMCIA Adapter)
+ *-----------------------------------------------------------------------
+ */
+
+#define CONFIG_IDE_8xx_PCCARD  1       /* Use IDE with PC Card Adapter */
+
+#undef CONFIG_IDE_8xx_DIRECT           /* Direct IDE    not supported  */
+#undef CONFIG_IDE_LED                  /* LED   for ide not supported  */
+#undef CONFIG_IDE_RESET                /* reset for ide not supported  */
+
+#define CFG_IDE_MAXBUS         1       /* max. 1 IDE bus               */
+#define CFG_IDE_MAXDEVICE      1       /* max. 1 drive per IDE bus     */
+
+#define CFG_ATA_IDE0_OFFSET    0x0000
+
+#define CFG_ATA_BASE_ADDR      CFG_PCMCIA_MEM_ADDR
+
+/* Offset for data I/O                 */
+#define CFG_ATA_DATA_OFFSET    (CFG_PCMCIA_MEM_SIZE + 0x320)
+
+/* Offset for normal register accesses */
+#define CFG_ATA_REG_OFFSET     (2 * CFG_PCMCIA_MEM_SIZE + 0x320)
+
+/* Offset for alternate registers      */
+#define CFG_ATA_ALT_OFFSET     0x0100
+
+/*-----------------------------------------------------------------------
+ *
+ *-----------------------------------------------------------------------
+ *
+ */
+#define CFG_DER 0
+
+/*
+ * Init Memory Controller:
+ *
+ * BR0/1 and OR0/1 (FLASH)
+ */
+
+#define FLASH_BASE0_PRELIM     0x40000000      /* FLASH bank #0        */
+#define FLASH_BASE1_PRELIM     0x60000000      /* FLASH bank #0        */
+
+/* used to re-map FLASH both when starting from SRAM or FLASH:
+ * restrict access enough to keep SRAM working (if any)
+ * but not too much to meddle with FLASH accesses
+ */
+#define CFG_REMAP_OR_AM                0x80000000      /* OR addr mask */
+#define CFG_PRELIM_OR_AM       0xE0000000      /* OR addr mask */
+
+/*
+ * FLASH timing: Default value of OR0 after reset
+ */
+#define CFG_OR_TIMING_FLASH    (OR_CSNT_SAM | OR_ACS_MSK | OR_BI | \
+                                OR_SCY_6_CLK | OR_TRLX)
+
+#define CFG_OR0_REMAP  (CFG_REMAP_OR_AM  | CFG_OR_TIMING_FLASH)
+#define CFG_OR0_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_FLASH)
+#define CFG_BR0_PRELIM ((FLASH_BASE0_PRELIM & BR_BA_MSK) | BR_V )
+
+#define CFG_OR1_REMAP  CFG_OR0_REMAP
+#define CFG_OR1_PRELIM CFG_OR0_PRELIM
+#define CFG_BR1_PRELIM ((FLASH_BASE1_PRELIM & BR_BA_MSK) | BR_V )
+
+/*
+ * BR2/3 and OR2/3 (SDRAM)
+ *
+ */
+#define SDRAM_BASE2_PRELIM     0x00000000      /* SDRAM bank #0        */
+#define SDRAM_BASE3_PRELIM     0x20000000      /* SDRAM bank #1        */
+#define SDRAM_MAX_SIZE         (256 << 20)     /* max 256 MB per bank  */
+
+/* SDRAM timing: Multiplexed addresses, GPL5 output to GPL5_A (don't care)     */
+#define CFG_OR_TIMING_SDRAM    0x00000A00
+
+#define CFG_OR2_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_SDRAM )
+#define CFG_BR2_PRELIM ((SDRAM_BASE2_PRELIM & BR_BA_MSK) | BR_MS_UPMA | BR_V )
+
+#ifndef CONFIG_CAN_DRIVER
+#define CFG_OR3_PRELIM CFG_OR2_PRELIM
+#define CFG_BR3_PRELIM ((SDRAM_BASE3_PRELIM & BR_BA_MSK) | BR_MS_UPMA | BR_V )
+#else  /* CAN uses CS3#, so we can have only one SDRAM bank anyway */
+#define CFG_CAN_BASE           0xC0000000      /* CAN mapped at 0xC0000000     */
+#define CFG_CAN_OR_AM          0xFFFF8000      /* 32 kB address mask           */
+#define CFG_OR3_CAN            (CFG_CAN_OR_AM | OR_G5LA | OR_BI)
+#define CFG_BR3_CAN            ((CFG_CAN_BASE & BR_BA_MSK) | \
+                                       BR_PS_8 | BR_MS_UPMB | BR_V )
+#endif /* CONFIG_CAN_DRIVER */
+
+/*
+ * 4096        Rows from SDRAM example configuration
+ * 1000        factor s -> ms
+ * 64  PTP (pre-divider from MPTPR) from SDRAM example configuration
+ * 4   Number of refresh cycles per period
+ * 64  Refresh cycle in ms per number of rows
+ */
+#define CFG_PTA_PER_CLK        ((4096 * 64 * 1000) / (4 * 64))
+
+/*
+ * Periodic timer (MAMR[PTx]) for 4 * 7.8 us refresh (= 31.2 us per quad)
+ *
+ *                        CPUclock(MHz) * 31.2
+ * CFG_MAMR_PTA = -----------------------------------     with DFBRG = 0
+ *                2^(2*SCCR[DFBRG]) * MPTPR_PTP_DIV16
+ *
+ * CPU clock =  15 MHz:  CFG_MAMR_PTA =  29   ->  4 * 7.73 us
+ * CPU clock =  50 MHz:  CFG_MAMR_PTA =  97   ->  4 * 7.76 us
+ * CPU clock =  66 MHz:  CFG_MAMR_PTA = 128   ->  4 * 7.75 us
+ * CPU clock = 133 MHz:  CFG_MAMR_PTA = 255   ->  4 * 7.67 us
+ *
+ * Value 97 is for 4 * 7.8 us at 50 MHz. So the refresh cycle requirement will
+ * be met also in the default configuration, i.e. if environment variable
+ * 'cpuclk' is not set.
+ */
+#define CFG_MAMR_PTA           128
+
+/*
+ * Memory Periodic Timer Prescaler Register (MPTPR) values.
+ */
+/* 4 * 7.8 us refresh (= 31.2 us per quad) at 50 MHz and PTA = 97 */
+#define CFG_MPTPR_2BK_4K       MPTPR_PTP_DIV16
+/* 4 * 3.9 us refresh (= 15.6 us per quad) at 50 MHz and PTA = 97 */
+#define CFG_MPTPR_2BK_8K       MPTPR_PTP_DIV8
+
+/*
+ * MAMR settings for SDRAM
+ */
+
+/* 8 column SDRAM */
+#define CFG_MAMR_8COL  ((CFG_MAMR_PTA << MAMR_PTA_SHIFT)  | MAMR_PTAE      |   \
+                        MAMR_AMA_TYPE_0 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A11 |   \
+                        MAMR_RLFA_1X    | MAMR_WLFA_1X    | MAMR_TLFA_4X)
+/* 9 column SDRAM */
+#define CFG_MAMR_9COL  ((CFG_MAMR_PTA << MAMR_PTA_SHIFT)  | MAMR_PTAE      |   \
+                        MAMR_AMA_TYPE_1 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A10 |   \
+                        MAMR_RLFA_1X    | MAMR_WLFA_1X    | MAMR_TLFA_4X)
+/* 10 column SDRAM */
+#define CFG_MAMR_10COL ((CFG_MAMR_PTA << MAMR_PTA_SHIFT)  | MAMR_PTAE      |   \
+                        MAMR_AMA_TYPE_2 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A9  |   \
+                        MAMR_RLFA_1X    | MAMR_WLFA_1X    | MAMR_TLFA_4X)
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+/*
+ * Network configuration
+ */
+#define CONFIG_FEC_ENET                        /* enable ethernet on FEC */
+#define CONFIG_ETHER_ON_FEC1           /* ... for FEC1 */
+#define CONFIG_ETHER_ON_FEC2           /* ... for FEC2 */
+
+#define CONFIG_LAST_STAGE_INIT         1 /* Have to configure PHYs for Linux */
+
+/* CFG_DISCOVER_PHY only works with FEC if only one interface is enabled */
+#if (!defined(CONFIG_ETHER_ON_FEC1) || !defined(CONFIG_ETHER_ON_FEC2))
+#define CFG_DISCOVER_PHY
+#endif
+
+#ifndef CFG_DISCOVER_PHY
+/* PHY addresses - hard wired in hardware */
+#define CONFIG_FEC1_PHY        1
+#define CONFIG_FEC2_PHY        2
+#endif
+
+#define CONFIG_NET_RETRY_COUNT 3
+#define CONFIG_ETHPRIME                "FEC ETHERNET"
+
+#endif /* __CONFIG_H */
index 7ecc275a1cdcd303a1d5983747775603eb918087..9a0e9b84afab72f9d6f5c87ff9d86091fe3ed273 100644 (file)
 /* USB */
 #if defined(CONFIG_STK52XX) || defined(CONFIG_FO300)
 #define CONFIG_USB_OHCI_NEW
+#define CFG_OHCI_BE_CONTROLLER
 #define CONFIG_USB_STORAGE
 #define CONFIG_CMD_FAT
 #define CONFIG_CMD_USB
index 01472529d0465ae8a9ced74f785ad2f07126ef3f..8ef3f09085566fc8c7998f09d843012fc79b8254 100644 (file)
@@ -378,15 +378,6 @@ extern int tqm834x_num_flash_banks;
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/*
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 #define CFG_HRCW_LOW (\
        HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
        HRCWL_DDR_TO_SCB_CLK_1X1 |\
index 6dbd3924bdd45c0061b3a0b9011a2ef4b9eadec3..f3b1a53fe9c4342754f2733c39e6065fe39cecc6 100644 (file)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index 14848abe5b2aa57d27db42c86b18d64609f5b629..3ca928ec93192180a4eef3f9e743b2255794a934 100644 (file)
 
 #define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
 
+#define CONFIG_NET_MULTI       1
+#undef  CONFIG_HAS_ETH1
+
 #define CONFIG_MII             1       /* MII PHY management           */
 #define CONFIG_PHY_ADDR                0       /* PHY address                  */
 #define CONFIG_LXT971_NO_SLEEP  1       /* disable sleep mode in LXT971 */
+#define CONFIG_RESET_PHY_R      1       /* use reset_phy() to disable phy sleep mode */
 
 #define CONFIG_PHY_CLK_FREQ    EMAC_STACR_CLK_66MHZ /* 66 MHz OPB clock*/
 
 #define CFG_IDE_MAXBUS         2               /* max. 2 IDE busses    */
 #define CFG_IDE_MAXDEVICE      (CFG_IDE_MAXBUS*2) /* max. 2 drives per IDE bus */
 
-#define CONFIG_ATAPI           1       /* ATAPI for Travelstar         */
-
 #define CFG_ATA_BASE_ADDR      0xF0100000
 #define CFG_ATA_IDE0_OFFSET    0x0000
 #define CFG_ATA_IDE1_OFFSET    0x0010
 
 #define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
 
-#if 0 /* test-only */
-#define CFG_JFFS2_FIRST_BANK   0           /* use for JFFS2 */
-#define CFG_JFFS2_NUM_BANKS    1           /* ! second bank contains U-Boot */
-#endif
-
 /*-----------------------------------------------------------------------
  * Start addresses for the final memory configuration
  * (Set up by the startup code)
  * I2C EEPROM (CAT24WC16) for environment
  */
 #define CONFIG_HARD_I2C                        /* I2c with hardware support */
-#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_SPEED          100000  /* I2C speed and slave address */
 #define CFG_I2C_SLAVE          0x7F
 
 #define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT24WC08             */
-#if 0 /* test-only */
-/* CAT24WC08/16... */
-#define CFG_I2C_EEPROM_ADDR_LEN 1      /* Bytes of address             */
-/* mask of address bits that overflow into the "EEPROM chip address"   */
-#define CFG_I2C_EEPROM_ADDR_OVERFLOW   0x07
-#define CFG_EEPROM_PAGE_WRITE_BITS 4   /* The Catalyst CAT24WC08 has   */
-                                       /* 16 byte page write mode using*/
-                                       /* last 4 bits of the address   */
-#else
+#define CFG_EEPROM_WREN         1
+
 /* CAT24WC32/64... */
 #define CFG_I2C_EEPROM_ADDR_LEN 2      /* Bytes of address             */
 /* mask of address bits that overflow into the "EEPROM chip address"   */
 #define CFG_EEPROM_PAGE_WRITE_BITS 5   /* The Catalyst CAT24WC32 has   */
                                        /* 32 byte page write mode using*/
                                        /* last 5 bits of the address   */
-#endif
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
  * GPIO0[28-29] - UART1 data signal input/output
  * GPIO0[30-31] - EMAC0 and EMAC1 reject packet inputs -> GPIO
  */
-#define CFG_GPIO0_OSRH         0x40000550
+#define CFG_GPIO0_OSRH         0x00000550
 #define CFG_GPIO0_OSRL         0x00000110
 #define CFG_GPIO0_ISR1H                0x00000000
 #define CFG_GPIO0_ISR1L                0x15555440
 #define CFG_GPIO0_TSRH         0x00000000
 #define CFG_GPIO0_TSRL         0x00000000
-#define CFG_GPIO0_TCR          0xF7FE0017
+#define CFG_GPIO0_TCR          0x777E0017
 
 #define CFG_DUART_RST          (0x80000000 >> 14)
 #define CFG_LCD_ENDIAN         (0x80000000 >> 7)
+#define CFG_IIC_ON             (0x80000000 >> 8)
 #define CFG_LCD0_RST           (0x80000000 >> 30)
 #define CFG_LCD1_RST           (0x80000000 >> 31)
+#define CFG_EEPROM_WP          (0x80000000 >> 0)
 
 /*
  * Internal Definitions
index 5512f4be21a83846d113e1aec6f27cbb5aa728af..ec6f205540c0fe92baed4a8b1e2f9251a14fcebb 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index fc177fb1f560a5e52eadab8c9630452d88b0e1a3..7017fff5de7c3acf4b4d203e21c3f0bb786ea89d 100644 (file)
  */
 #define SPD_EEPROM_ADDRESS      0x50   /* XXX conflicting address!!! XXX */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192            /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32              /* ...          */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5               /* log base 2 of the above val. */
-#endif
-
 /*
  * Init Memory Controller:
  */
index 20d693fa478e7a6383ac95d82557704df553c857..bfb3156f6f672fa6b39c41f624e0a28692b65661 100644 (file)
  */
 #define SPD_EEPROM_ADDRESS      0x50   /* XXX conflicting address!!! XXX */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                8192            /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32              /* ...          */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5               /* log base 2 of the above val. */
-#endif
-
 /*
  * Init Memory Controller:
  */
index 656784aa0cc03766d00614cc07470301da8d3f2d..582d8cf8640061e5b7d5b475b6654bc93bd7c3b2 100644 (file)
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10   /* and takes up to 10 msec */
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 611f5a62caa385af584ec79529a5a9b89ff1ba8b..38ea576a6e804f4785ca7df0cbdd276c2a41a511 100644 (file)
@@ -257,14 +257,6 @@ extern void out32(unsigned int, unsigned long);
  * 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                8192 /* For AMCC 440GX CPUs */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Internal Definitions
index e3f6e2c8b34afdd83fd0a631b872b316c48f3eb5..dc322dd55b00a8114432f5c4667a8fa5b3242a63 100644 (file)
 #define CFG_NAND_BASE          (CFG_NAND_ADDR + CFG_NAND_CS)
 #define CFG_NAND_SELECT_DEVICE  1      /* nand driver supports mutipl. chips   */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384           /* For AMCC 405EZ CPU           */
-#define CFG_CACHELINE_SIZE     32              /* ...                          */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5               /* log base 2 of the above value*/
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  *----------------------------------------------------------------------*/
index 58060a8c8a5a5830ebc2cdbf5945b1de3e413127..11e7e4431ef9d09e794fd6bf50ece86bf0513a82 100644 (file)
 
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#define OF_CPU                 "PowerPC,5121@0"
+#define OF_SOC                 "soc5121@80000000"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_STDOUT_PATH         "/soc5121@80000000/serial@11300"
+
 #endif /* __CONFIG_H */
index d88c3ad43b0ec63d3d6a2debb7badd0e7efb0ab5..cfe08c85647fe960153ca23832e193bb709ba497 100644 (file)
 /*-----------------------------------------------------------------------
  * FPGA stuff
  *-----------------------------------------------------------------------*/
-#define CONFIG_FPGA             CFG_ALTERA_CYCLON2
+#define CONFIG_FPGA
+#define CONFIG_FPGA_ALTERA
+#define CONFIG_FPGA_CYCLON2
 #define CFG_FPGA_CHECK_CTRLC
 #define CFG_FPGA_PROG_FEEDBACK
 #define CONFIG_FPGA_COUNT       1              /* Ich habe 2 ... aber in
  * 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   /* For AMCC 440 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
 
 /*
  * Internal Definitions
diff --git a/include/configs/apollon.h b/include/configs/apollon.h
new file mode 100755 (executable)
index 0000000..f101206
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * (C) Copyright 2005-2007
+ * Samsung Electronics,
+ * Kyungmin Park <kyungmin.park@samsung.com>
+ *
+ * Configuration settings for the 2420 Samsung Apollon 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
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_ARM1136         1 /* This is an arm1136 CPU core */
+#define CONFIG_OMAP            1 /* in a TI OMAP core */
+#define CONFIG_OMAP2420                1 /* which is in a 2420 */
+#define CONFIG_OMAP2420_APOLLON        1
+#define CONFIG_APOLLON         1
+#define CONFIG_APOLLON_PLUS    1 /* If you have apollon plus 1.x */
+
+/* Clock config to target*/
+#define PRCM_CONFIG_I          1
+/* #define PRCM_CONFIG_II      1 */
+
+/* Boot method */
+/* uncomment if you use NOR boot */
+/* #define CFG_NOR_BOOT                1 */
+
+/* uncomment if you use NOR on CS3 */
+/* #define CFG_USE_NOR         1 */
+
+#ifdef CFG_NOR_BOOT
+#undef CFG_USE_NOR
+#define CFG_USE_NOR            1
+#endif
+
+#include <asm/arch/omap2420.h> /* get chip and board defs */
+
+#define        V_SCLK  12000000
+
+/* input clock of PLL */
+/* the OMAP2420 H4 has 12MHz, 13MHz, or 19.2Mhz crystal input */
+#define        CONFIG_SYS_CLK_FREQ     V_SCLK
+
+#undef CONFIG_USE_IRQ  /* no support for IRQs */
+#define        CONFIG_MISC_INIT_R
+
+#define        CONFIG_CMDLINE_TAG      1       /* enable passing of ATAGs */
+#define        CONFIG_SETUP_MEMORY_TAGS        1
+#define        CONFIG_INITRD_TAG       1
+#define        CONFIG_REVISION_TAG     1
+
+/*
+ * Size of malloc() pool
+ */
+#define        CFG_ENV_SIZE SZ_128K    /* Total Size of Environment Sector */
+#define        CFG_MALLOC_LEN  (CFG_ENV_SIZE + SZ_128K)
+#define        CFG_GBL_DATA_SIZE       128     /* bytes reserved for initial data */
+
+/*
+ * Hardware drivers
+ */
+
+/*
+ * SMC91c96 Etherent
+ */
+#define        CONFIG_DRIVER_LAN91C96
+#define        CONFIG_LAN91C96_BASE    (APOLLON_CS1_BASE+0x300)
+#define        CONFIG_LAN91C96_EXT_PHY
+
+/*
+ * NS16550 Configuration
+ */
+#define        V_NS16550_CLK   (48000000)      /* 48MHz (APLL96/2) */
+
+#define        CFG_NS16550
+#define        CFG_NS16550_SERIAL
+#define        CFG_NS16550_REG_SIZE    (-4)
+#define        CFG_NS16550_CLK V_NS16550_CLK   /* 3MHz (1.5MHz*2) */
+#define        CFG_NS16550_COM1        OMAP2420_UART1
+
+/*
+ * select serial console configuration
+ */
+#define        CONFIG_SERIAL1  1       /* UART1 on H4 */
+
+ /*
+ * I2C configuration
+ */
+#define        CONFIG_HARD_I2C
+#define        CFG_I2C_SPEED   100000
+#define        CFG_I2C_SLAVE   1
+#define        CONFIG_DRIVER_OMAP24XX_I2C
+
+/* allow to overwrite serial and ethaddr */
+#define        CONFIG_ENV_OVERWRITE
+#define        CONFIG_CONS_INDEX       1
+#define        CONFIG_BAUDRATE         115200
+#define        CFG_BAUDRATE_TABLE      {9600, 19200, 38400, 57600, 115200}
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include       <config_cmd_default.h>
+
+#define        CONFIG_CMD_DHCP
+#define        CONFIG_CMD_DIAG
+#define        CONFIG_CMD_ONENAND
+
+#undef CONFIG_CMD_AUTOSCRIPT
+
+#ifndef        CFG_USE_NOR
+# undef        CONFIG_CMD_FLASH
+# undef        CONFIG_CMD_IMLS
+#endif
+
+#define        CONFIG_BOOTP_MASK       CONFIG_BOOTP_DEFAULT
+
+#define        CONFIG_BOOTDELAY        1
+
+#define        CONFIG_NETMASK  255.255.255.0
+#define        CONFIG_IPADDR   192.168.116.25
+#define        CONFIG_SERVERIP 192.168.116.1
+#define        CONFIG_BOOTFILE "uImage"
+#define        CONFIG_ETHADDR  00:0E:99:00:24:20
+
+#ifdef CONFIG_APOLLON_PLUS
+# define       CONFIG_BOOTARGS "root=/dev/nfs rw mem=64M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2"
+#else
+# define       CONFIG_BOOTARGS "root=/dev/nfs rw mem=128M console=ttyS0,115200n8 ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2"
+#endif
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "Image=tftp 0x80008000 Image; go 0x80008000\0"                  \
+       "zImage=tftp 0x80180000 zImage; go 0x80180000\0"                \
+       "uImage=tftp 0x80180000 uImage; bootm 0x80180000\0"             \
+       "uboot=tftp 0x80008000 u-boot.bin; go 0x80008000\0"             \
+       "xloader=tftp 0x80180000 x-load.bin; cp.w 0x80180000 0x00000400 0x1000; go 0x00000400\0"        \
+       "syncmode50=mw.w 0x1e442 0xc0c4; mw 0x6800a060 0xe30d1201\0"    \
+       "syncmode=mw.w 0x1e442 0xe0f4; mw 0x6800a060 0xe30d1201\0"      \
+       "norboot=cp32 0x18040000 0x80008000 0x200000; go 0x80008000\0"  \
+       "oneboot=onenand read 0x80008000 0x40000 0x200000; go 0x80008000\0"\
+       "onesyncboot=run syncmode oneboot\0"                            \
+       "bootcmd=run uboot\0"
+
+/*
+ * Miscellaneous configurable options
+ */
+#define        V_PROMPT        "Apollon # "
+
+#define        CFG_LONGHELP    /* undef to save memory */
+#define        CFG_PROMPT      V_PROMPT
+#define        CFG_CBSIZE      256     /* Console I/O Buffer Size */
+/* Print Buffer Size */
+#define        CFG_PBSIZE      (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
+#define        CFG_MAXARGS     16      /* max number of command args */
+#define        CFG_BARGSIZE    CFG_CBSIZE      /* Boot Argument Buffer Size */
+
+#define        CFG_MEMTEST_START       (OMAP2420_SDRC_CS0)     /* memtest works on */
+#define        CFG_MEMTEST_END         (OMAP2420_SDRC_CS0+SZ_31M)
+
+#undef CFG_CLKS_IN_HZ  /* everything, incl board info, in Hz */
+
+#define        CFG_LOAD_ADDR   (OMAP2420_SDRC_CS0)     /* default load address */
+
+/* The 2420 has 12 GP timers, they can be driven by the SysClk (12/13/19.2)
+ * or by 32KHz clk, or from external sig. This rate is divided by a local
+ * divisor.
+ */
+#define        V_PVT   7       /* use with 12MHz/128 */
+
+#define        CFG_TIMERBASE   OMAP2420_GPT2
+#define        CFG_PVT V_PVT   /* 2^(pvt+1) */
+#define        CFG_HZ          ((CONFIG_SYS_CLK_FREQ)/(2 << CFG_PVT))
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define        CONFIG_STACKSIZE SZ_128K        /* regular stack */
+#ifdef CONFIG_USE_IRQ
+# define       CONFIG_STACKSIZE_IRQ SZ_4K      /* IRQ stack */
+# define       CONFIG_STACKSIZE_FIQ SZ_4K      /* FIQ stack */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define        CONFIG_NR_DRAM_BANKS    1       /* CS1 may or may not be populated */
+#define        PHYS_SDRAM_1            OMAP2420_SDRC_CS0
+#define        PHYS_SDRAM_1_SIZE       SZ_128M
+#define        PHYS_SDRAM_2            OMAP2420_SDRC_CS1
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+#ifdef CFG_USE_NOR
+/* OneNAND boot, NOR has CS3, But NOR has CS0 when NOR boot */
+# define       CFG_FLASH_BASE          0x18000000
+# define       CFG_MAX_FLASH_BANKS     1
+# define       CFG_MAX_FLASH_SECT      1024
+/*-----------------------------------------------------------------------
+
+ * CFI FLASH driver setup
+ */
+# define       CFG_FLASH_CFI   1       /* Flash memory is CFI compliant */
+# define       CFG_FLASH_CFI_DRIVER    1       /* Use drivers/cfi_flash.c */
+/* #define CFG_FLASH_USE_BUFFER_WRITE 1 */ /* Use buffered writes (~10x faster) */
+# define       CFG_FLASH_PROTECTION    1       /* Use h/w sector protection*/
+
+#else  /* !CFG_USE_NOR */
+# define       CFG_NO_FLASH    1
+#endif /* CFG_USE_NOR */
+
+/* OneNAND boot, OneNAND has CS0, NOR boot ONeNAND has CS2 */
+#define        CFG_ONENAND_BASE        0x00000000
+#define        CFG_ENV_IS_IN_ONENAND   1
+#define CFG_ENV_ADDR           0x00020000
+
+#endif /* __CONFIG_H */
index 14c563808bb5c6f7b3750dadf0fbcfce1aa5466e..d57744855c84845ba76153e646fcae1849058751 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Internal Definitions
  *
index 7736a1e32d0668a986dd7729689d8448d892dc6c..eca195a9f753714a1c8fe575af8ff609ea1d2ff5 100644 (file)
 #define CFG_ENV_ADDR           \
        (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)       /* Env  */
 #endif
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405EP CPU                   */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Init Memory Controller:
index c43b49737d92c0fcf6cf7d6f727eeb3444841b6e..a24478d0b395b2239171b95dc1a89f10b28f5f55 100644 (file)
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
-/*
- * Cache configuration
- *
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's */
-                                       /* have only 8kB, 16kB is save here  */
-#define CFG_CACHELINE_SIZE     32
-
 /*
  * Miscellaneous board specific definitions
  *
index a7120aa57f9d07d28ea4eb1d22ee18638d9d0416..064650cfca736405542a9b52b70c03f2452e8489 100644 (file)
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
-/*
- * Cache configuration
- *
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's */
-                                       /* have only 8kB, 16kB is save here  */
-#define CFG_CACHELINE_SIZE     32
-
 /*
  * Miscellaneous board specific definitions
  *
index 2c626a0328881cfd9d611ea01101f36d246fa391..5faa9ebcda10de36b973031e404e76034e71416a 100644 (file)
  * 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                8192    /* For AMCC 405 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Internal Definitions
index 577f459e29e9a0787a9644ed11dfec28d7fa426d..b43b228fba95739d21e389f5e89b4546e9c1a551 100644 (file)
 #define CONFIG_PORT_ADDR       0xF0000500
 
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- *----------------------------------------------------------------------*/
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405GPr CPUs  */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#define CFG_CACHELINE_SHIFT    5             /* log base 2 of the above value  */
-
 /*
  * Internal Definitions
  *
index 90858819b67258d178b17b9340529e7480b24d80..1214bc31b59e6ff6fdab72db72be2c10eaefea0a 100644 (file)
 #define HCU_CPLD_VERSION_REGISTER ( CFG_CPLD + 0x0F00000 )
 #define HCU_HW_VERSION_REGISTER   ( CFG_CPLD + 0x1400000 )
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- *----------------------------------------------------------------------*/
-#define CFG_DCACHE_SIZE                (32<<10)  /* For AMCC 440 CPUs                  */
-#define CFG_CACHELINE_SIZE     32            /* ...                                */
-#define CFG_CACHELINE_SHIFT    5             /* log base 2 of the above value  */
-
 /*
  * Internal Definitions
  *
index 0fac28fadd70d128cb799b9d811ad2cec26ef0d0..206007d884667a7d02156178ee2cd70590364a41 100644 (file)
                "cp.l 100000 f0000b28 1\0"                              \
        "ideargs=setenv bootargs root=/dev/hda1 rw\0"                   \
        "ide_boot=ext2load ide 0:1 200000 uImage;"                      \
-               "run ideargs addip addcons enable_disp;bootm"           \
+               "run ideargs addip addcons enable_disp;bootm\0"         \
        "brightness=255\0"                                              \
        ""
 
 /*
  * Flash configuration
  */
-#define CFG_FLASH_BASE         0xFFE00000
-
-#define CFG_FLASH_SIZE         0x00200000 /* 2 MByte */
-#define CFG_MAX_FLASH_SECT     35      /* max num of sects on one chip */
-
-#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x4000) /* second sector */
-#define CFG_MAX_FLASH_BANKS    1       /* max num of flash banks
-                                          (= chip selects) */
-#define CFG_FLASH_ERASE_TOUT   240000  /* Flash Erase Timeout (in ms)  */
-#define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (in ms)  */
+#define CFG_FLASH_CFI          1       /* Flash is CFI conformant */
+#define CFG_FLASH_CFI_DRIVER   1
+#define CFG_FLASH_BASE         0xffe00000
+#define CFG_FLASH_SIZE         0x00200000
+#define CFG_MAX_FLASH_BANKS    1       /* max num of memory banks */
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+#define CFG_MAX_FLASH_SECT     128     /* max num of sects on one chip */
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster) */
 
 /*
  * Environment settings
  */
 #define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x4000)
 #define CFG_ENV_SIZE           0x2000
 #define CFG_ENV_SECT_SIZE      0x2000
 #define CONFIG_ENV_OVERWRITE   1
+#define CFG_USE_PPCENV                 /* Environment embedded in sect .ppcenv */
 
 /*
  * Memory map
 #define CFG_SDRAM_BASE         0x00000000
 #define CFG_DEFAULT_MBAR       0x80000000
 
-#define CONFIG_MPC5200_DDR
+/*
+ * SDRAM controller configuration
+ */
+#undef CONFIG_SDR_MT48LC16M16A2
+#undef CONFIG_DDR_MT46V16M16
+#undef CONFIG_DDR_MT46V32M16
+#undef CONFIG_DDR_HYB25D512160BF
+#define CONFIG_DDR_K4H511638C
 
 /* Use ON-Chip SRAM until RAM will be available */
 #define CFG_INIT_RAM_ADDR      MPC5XXX_SRAM
 #   define CFG_RAMBOOT         1
 #endif
 
-#define CFG_MONITOR_LEN                (192 << 10)     /* Reserve 192 kB for Monitor   */
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor   */
 #define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc()  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
index 69310d4dfbc56aaab0f0808c52e61dadbb9e592f..e1d1483b719d583e77e14b477f74e13dbaf3f9e0 100644 (file)
@@ -168,7 +168,7 @@ SIB at Block62 End Block62 address 0x24f80000
 /*
  * Move up the U-Boot & monitor area if more flash is fitted.
  * If this U-Boot is to be run on Integrators with varying flash sizes,
- * drivers/cfi_flash.c::flash_init() can read the Integrator CP_FLASHPROG
+ * drivers/mtd/cfi_flash.c::flash_init() can read the Integrator CP_FLASHPROG
  * register and dynamically assign CFG_ENV_ADDR & CFG_MONITOR_BASE
  * - CFG_MONITOR_BASE is set to indicate that the environment is not
  * embedded in the boot monitor(s) area
index 7908e5a4743b2a23bbe84fc735d4d97bc7588114..78c794a05de0b3e79eaad0368d9d5ebed06bd9aa 100644 (file)
@@ -62,7 +62,7 @@
 #define CFG_PCI_TARGBASE       CFG_PCI_MEMBASE
 
 #define CFG_PCIE_MEMBASE       0xb0000000      /* mapped PCIe memory   */
-#define CFG_PCIE_MEMSIZE       0x01000000
+#define CFG_PCIE_MEMSIZE       0x08000000      /* smallest incr for PCIe port */
 #define CFG_PCIE_BASE          0xe0000000      /* PCIe UTL regs */
 
 #define CFG_PCIE0_CFGBASE      0xc0000000
@@ -72,6 +72,9 @@
 #define CFG_PCIE1_XCFGBASE     0xc3001000
 #define CFG_PCIE2_XCFGBASE     0xc3002000
 
+/* base address of inbound PCIe window */
+#define CFG_PCIE_INBOUND_BASE  0x0000000000000000ULL
+
 /* System RAM mapped to PCI space */
 #define CONFIG_PCI_SYS_MEM_BUS CFG_SDRAM_BASE
 #define CONFIG_PCI_SYS_MEM_PHYS        CFG_SDRAM_BASE
 #define CONFIG_SPD_EEPROM      1       /* Use SPD EEPROM for setup     */
 #define SPD_EEPROM_ADDRESS     {0x51, 0x52}    /* SPD i2c spd addresses*/
 #define CONFIG_DDR_ECC         1       /* with ECC support             */
+#define CONFIG_DDR_RQDC_FIXED  0x80000038 /* optimal value found by GDA*/
 #undef  CONFIG_STRESS
 
 /*-----------------------------------------------------------------------
                "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
-       "rootpath=/opt/eldk/ppc_4xx\0"                          \
+       "net_nfs_fdt=tftp 200000 ${bootfile};"                          \
+               "tftp ${fdt_addr} ${fdt_file};"                         \
+               "run nfsargs addip addtty;"                             \
+               "bootm 200000 - ${fdt_addr}\0"                          \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=katmai/uImage\0"                                      \
+       "fdt_file=katmai/katmai.dtb\0"                                  \
+       "fdt_addr=400000\0"                                             \
        "kernel_addr=fff10000\0"                                        \
        "ramdisk_addr=fff20000\0"                                       \
        "initrd_high=30000000\0"                                        \
        "upd=run load;run update\0"                                     \
        "kozio=bootm ffc60000\0"                                        \
        "pciconfighost=1\0"                                             \
+       "pcie_mode=RP:RP:RP\0"                                          \
        ""
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_REGINFO
 #define CONFIG_CMD_SDRAM
-
+#define CONFIG_CMD_SNTP
 
 #define        CONFIG_IBM_EMAC4_V4     1       /* 440SPe has this EMAC version */
 #define CONFIG_MII             1       /* MII PHY management           */
  * 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                8192    /* For AMCC 405 CPUs            */
-#define CFG_CACHELINE_SIZE     32      /* ...                          */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
 
 /*
  * Internal Definitions
 #define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
 #endif
 
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h
new file mode 100644 (file)
index 0000000..f3e8601
--- /dev/null
@@ -0,0 +1,523 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@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
+ */
+
+/************************************************************************
+ * kilauea.h - configuration for AMCC Kilauea (405EX)
+ ***********************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_KILAUEA         1               /* Board is Kilauea     */
+#define CONFIG_4xx             1               /* ... PPC4xx family    */
+#define CONFIG_405EX           1               /* Specifc 405EX support*/
+#define CONFIG_SYS_CLK_FREQ    33333333        /* ext frequency to pll */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
+#define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
+#define CONFIG_BOARD_EMAC_COUNT
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xFC000000
+#define CFG_NAND_ADDR          0xF8000000
+#define CFG_FPGA_BASE          0xF0000000
+#define CFG_PERIPHERAL_BASE    0xEF600000      /* internal peripherals*/
+#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
+#define CFG_MALLOC_LEN         (512 * 1024)    /* Reserve 512 kB for malloc()  */
+#define CFG_MONITOR_BASE       (TEXT_BASE)
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer
+ *----------------------------------------------------------------------*/
+#define CFG_INIT_RAM_ADDR      0x02000000      /* inside of SDRAM      */
+#define CFG_INIT_RAM_END       (4 << 10)
+#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+/* reserve some memory for POST and BOOT limit info */
+#define CFG_INIT_SP_OFFSET     (CFG_GBL_DATA_OFFSET - 16)
+
+/* extra data in init-ram */
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 4)
+#define CFG_POST_MAGIC         (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET - 8)
+#define CFG_POST_VAL           (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET - 12)
+#define CFG_OCM_DATA_ADDR      CFG_INIT_RAM_ADDR /* for commproc.c     */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#define CFG_EXT_SERIAL_CLOCK   11059200        /* ext. 11.059MHz clk   */
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI     1
+/* define this if you want console on UART1 */
+#undef CONFIG_UART1_CONSOLE
+
+#define CFG_BAUDRATE_TABLE                                             \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environment vars       */
+#else
+#define CFG_ENV_IS_IN_NAND     1       /* use NAND for environment vars        */
+#define CFG_ENV_IS_EMBEDDED    1       /* use embedded environment */
+#endif
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CFG_FLASH_CFI                  /* The flash is CFI compatible  */
+#define CFG_FLASH_CFI_DRIVER           /* Use common CFI driver        */
+
+#define CFG_FLASH_BANKS_LIST    {CFG_FLASH_BASE}
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
+#define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x20000         /* size of one complete sector  */
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE-CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x4000  /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+#endif /* CFG_ENV_IS_IN_FLASH */
+
+/*
+ * IPL (Initial Program Loader, integrated inside CPU)
+ * Will load first 4k from NAND (SPL) into cache and execute it from there.
+ *
+ * SPL (Secondary Program Loader)
+ * Will load special U-Boot version (NUB) from NAND and execute it. This SPL
+ * has to fit into 4kByte. It sets up the CPU and configures the SDRAM
+ * controller and the NAND controller so that the special U-Boot image can be
+ * loaded from NAND to SDRAM.
+ *
+ * NUB (NAND U-Boot)
+ * This NAND U-Boot (NUB) is a special U-Boot version which can be started
+ * from RAM. Therefore it mustn't (re-)configure the SDRAM controller.
+ *
+ * On 440EPx the SPL is copied to SDRAM before the NAND controller is
+ * set up. While still running from cache, I experienced problems accessing
+ * the NAND controller.        sr - 2006-08-25
+ */
+#define CFG_NAND_BOOT_SPL_SRC  0xfffff000      /* SPL location                 */
+#define CFG_NAND_BOOT_SPL_SIZE (4 << 10)       /* SPL size                     */
+#define CFG_NAND_BOOT_SPL_DST  0x00800000      /* Copy SPL here                */
+#define CFG_NAND_U_BOOT_DST    0x01000000      /* Load NUB to this addr        */
+#define CFG_NAND_U_BOOT_START  CFG_NAND_U_BOOT_DST /* Start NUB from this addr */
+#define CFG_NAND_BOOT_SPL_DELTA        (CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST)
+
+/*
+ * Define the partitioning of the NAND chip (only RAM U-Boot is needed here)
+ */
+#define CFG_NAND_U_BOOT_OFFS   (16 << 10)      /* Offset to RAM U-Boot image   */
+#define CFG_NAND_U_BOOT_SIZE   (384 << 10)     /* Size of RAM U-Boot image     */
+
+/*
+ * Now the NAND chip has to be defined (no autodetection used!)
+ */
+#define CFG_NAND_PAGE_SIZE     512             /* NAND chip page size          */
+#define CFG_NAND_BLOCK_SIZE    (16 << 10)      /* NAND chip block size         */
+#define CFG_NAND_PAGE_COUNT    32              /* NAND chip page count         */
+#define CFG_NAND_BAD_BLOCK_POS 5               /* Location of bad block marker */
+#define CFG_NAND_4_ADDR_CYCLE  1               /* Fourth addr used (>32MB)     */
+
+#define CFG_NAND_ECCSIZE       256
+#define CFG_NAND_ECCBYTES      3
+#define CFG_NAND_ECCSTEPS      (CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE)
+#define CFG_NAND_OOBSIZE       16
+#define CFG_NAND_ECCTOTAL      (CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS)
+#define CFG_NAND_ECCPOS                {0, 1, 2, 3, 6, 7}
+
+#ifdef CFG_ENV_IS_IN_NAND
+/*
+ * For NAND booting the environment is embedded in the U-Boot image. Please take
+ * look at the file board/amcc/sequoia/u-boot-nand.lds for details.
+ */
+#define CFG_ENV_SIZE           CFG_NAND_BLOCK_SIZE
+#define CFG_ENV_OFFSET         (CFG_NAND_U_BOOT_OFFS + CFG_ENV_SIZE)
+#define CFG_ENV_OFFSET_REDUND  (CFG_ENV_OFFSET + CFG_ENV_SIZE)
+#endif
+
+/*-----------------------------------------------------------------------
+ * NAND FLASH
+ *----------------------------------------------------------------------*/
+#define CFG_MAX_NAND_DEVICE    1
+#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   */
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CFG_MBYTES_SDRAM        (256)          /* 256MB                        */
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support    */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 6       /* 24C02 requires 5ms delay */
+#define CFG_I2C_EEPROM_ADDR    0x52    /* I2C boot EEPROM (24C02BN)    */
+#define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
+
+/* Standard DTT sensor configuration */
+#define CONFIG_DTT_DS1775      1
+#define CONFIG_DTT_SENSORS     { 0 }
+#define CFG_I2C_DTT_ADDR       0x48
+
+/* RTC configuration */
+#define CONFIG_RTC_DS1338      1
+#define CFG_I2C_RTC_ADDR       0x68
+
+/*-----------------------------------------------------------------------
+ * Ethernet
+ *----------------------------------------------------------------------*/
+#define CONFIG_M88E1111_PHY    1
+#define CONFIG_IBM_EMAC4_V4    1
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                1       /* PHY address, See schematics  */
+
+#define CONFIG_PHY_RESET       1       /* reset phy upon startup       */
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CONFIG_HAS_ETH0                1
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       2
+
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "logversion=2\0"                                                \
+       "netdev=eth0\0"                                                 \
+       "hostname=kilauea\0"                                            \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\
+       "net_nfs=tftp 200000 ${bootfile};"                              \
+               "run nfsargs addip addtty;"                             \
+               "bootm 200000\0"                                        \
+       "net_nfs_fdt=tftp 200000 ${bootfile};"                          \
+               "tftp ${fdt_addr} ${fdt_file};"                         \
+               "run nfsargs addip addtty;"                             \
+               "bootm 200000 - ${fdt_addr}\0"                          \
+       "flash_nfs=run nfsargs addip addtty;"                           \
+               "bootm ${kernel_addr}\0"                                \
+       "flash_self=run ramargs addip addtty;"                          \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
+       "bootfile=kilauea/uImage\0"                                     \
+       "fdt_file=kilauea/kilauea.dtb\0"                                \
+       "fdt_addr=400000\0"                                             \
+       "kernel_addr=fc000000\0"                                        \
+       "ramdisk_addr=fc200000\0"                                       \
+       "initrd_high=30000000\0"                                        \
+       "load=tftp 200000 kilauea/u-boot.bin\0"                         \
+       "update=protect off fffa0000 ffffffff;era fffa0000 ffffffff;"   \
+               "cp.b ${fileaddr} fffa0000 ${filesize};"                \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load update\0"                                         \
+       "nload=tftp 200000 kilauea/u-boot-nand.bin\0"                   \
+       "nupdate=nand erase 0 60000;nand write 200000 0 60000;"         \
+               "setenv filesize;saveenv\0"                             \
+       "nupd=run nload nupdate\0"                                      \
+       "pciconfighost=1\0"                                             \
+       "pcie_mode=RP:RP\0"                                             \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE          /* allow baudrate change        */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_DTT
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_LOG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_SNTP
+
+/* POST support */
+#define CONFIG_POST            (CFG_POST_MEMORY        | \
+                                CFG_POST_CACHE         | \
+                                CFG_POST_CPU           | \
+                                CFG_POST_ETHER         | \
+                                CFG_POST_I2C           | \
+                                CFG_POST_MEMORY        | \
+                                CFG_POST_UART)
+
+/* Define here the base-addresses of the UARTs to test in POST */
+#define CFG_POST_UART_TABLE    {UART0_BASE, UART1_BASE}
+
+#define CONFIG_LOGBUFFER
+#define CFG_POST_CACHE_ADDR    0x00800000 /* free virtual address      */
+
+#define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#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      0x0400000 /* memtest works on           */
+#define CFG_MEMTEST_END                0x0C00000 /* 4 ... 12 MB in DRAM        */
+
+#define CFG_LOAD_ADDR          0x100000  /* default load address       */
+#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CONFIG_LOOPW            1       /* enable loopw command         */
+#define CONFIG_MX_CYCLIC        1       /* enable mdc/mwc commands      */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+#define CFG_CONSOLE_INFO_QUIET 1       /* don't print console @ startup*/
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *----------------------------------------------------------------------*/
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_PNP         1       /* do pci plug-and-play         */
+#define CONFIG_PCI_SCAN_SHOW   1       /* show pci devices on startup  */
+#define CONFIG_PCI_CONFIG_HOST_BRIDGE
+
+/*-----------------------------------------------------------------------
+ * PCIe stuff
+ *----------------------------------------------------------------------*/
+#define CFG_PCIE_MEMBASE       0x90000000      /* mapped PCIe memory   */
+#define CFG_PCIE_MEMSIZE       0x08000000      /* 128 Meg, smallest incr per port */
+
+#define        CFG_PCIE0_CFGBASE       0xa0000000      /* remote access */
+#define        CFG_PCIE0_XCFGBASE      0xb0000000      /* local access */
+#define        CFG_PCIE0_CFGMASK       0xe0000001      /* 512 Meg */
+
+#define        CFG_PCIE1_CFGBASE       0xc0000000      /* remote access */
+#define        CFG_PCIE1_XCFGBASE      0xd0000000      /* local access */
+#define        CFG_PCIE1_CFGMASK       0xe0000001      /* 512 Meg */
+
+#define        CFG_PCIE0_UTLBASE       0xef502000
+#define        CFG_PCIE1_UTLBASE       0xef503000
+
+/* base address of inbound PCIe window */
+#define CFG_PCIE_INBOUND_BASE  0x0000000000000000ULL
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+#if defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
+/* booting from NAND, so NAND chips select has to be on CS 0 */
+#define CFG_NAND_CS            0               /* NAND chip connected to CSx   */
+
+/* Memory Bank 1 (NOR-FLASH) initialization                                    */
+#define CFG_EBC_PB1AP          0x05806500
+#define CFG_EBC_PB1CR           0xFC0DA000  /* BAS=0xFC0,BS=64MB,BU=R/W,BW=16bit*/
+
+/* Memory Bank 0 (NAND-FLASH) initialization                                   */
+#define CFG_EBC_PB0AP          0x018003c0
+#define CFG_EBC_PB0CR          (CFG_NAND_ADDR | 0x1e000)
+#else
+#define CFG_NAND_CS            1               /* NAND chip connected to CSx   */
+
+/* Memory Bank 0 (NOR-FLASH) initialization                                    */
+#define CFG_EBC_PB0AP          0x05806500
+#define CFG_EBC_PB0CR           0xFC0DA000  /* BAS=0xFC0,BS=64MB,BU=R/W,BW=16bit*/
+
+/* Memory Bank 1 (NAND-FLASH) initialization                                   */
+#define CFG_EBC_PB1AP          0x018003c0
+#define CFG_EBC_PB1CR          (CFG_NAND_ADDR | 0x1e000)
+#endif
+
+/* Memory Bank 2 (FPGA) initialization                                         */
+#define CFG_EBC_PB2AP           0x9400C800
+#define CFG_EBC_PB2CR           0xF0018000 /*  BAS=0x800,BS=1MB,BU=R/W,BW=8bit */
+
+#define CFG_EBC_CFG            0x7FC00000 /*  EBC0_CFG */
+
+/*-----------------------------------------------------------------------
+ * GPIO Setup
+ *----------------------------------------------------------------------*/
+#define CFG_4xx_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
+{                                                                                      \
+/* GPIO Core 0 */                                                                      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO0        EBC_DATA_PAR(0)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO1        EBC_DATA_PAR(1)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO2        EBC_DATA_PAR(2)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO3        EBC_DATA_PAR(3)                 */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO4        EBC_DATA(20)    USB2_DATA(4)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO5        EBC_DATA(21)    USB2_DATA(5)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO6        EBC_DATA(22)    USB2_DATA(6)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO7        EBC_DATA(23)    USB2_DATA(7)    */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO8        CS(1)/NFCE(1)   IRQ(7)          */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO9        CS(2)/NFCE(2)   IRQ(8)          */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO10 CS(3)/NFCE(3) IRQ(9)          */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0}, /* GPIO11 IRQ(6)                                */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO12 EBC_DATA(16)  USB2_DATA(0)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO13 EBC_DATA(17)  USB2_DATA(1)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO14 EBC_DATA(18)  USB2_DATA(2)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO15 EBC_DATA(19)  USB2_DATA(3)    */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0}, /* GPIO16 UART0_DCD     UART1_CTS       */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0}, /* GPIO17 UART0_DSR     UART1_RTS       */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0}, /* GPIO18 UART0_CTS                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO19 UART0_RTS                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_0}, /* GPIO20 UART0_DTR     UART1_TX        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO21 UART0_RI      UART1_RX        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO22 EBC_HOLD_REQ  DMA_ACK2        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO23 EBC_HOLD_ACK  DMA_REQ2        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO24 EBC_EXT_REQ   DMA_EOT2        IRQ(4) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO25 EBC_EXT_ACK   DMA_ACK3        IRQ(3) */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO26 EBC_ADDR(5)   DMA_EOT0        TS(3) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO27 EBC_BUS_REQ   DMA_EOT3        IRQ(5) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO28                               */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO29 DMA_EOT1      IRQ(2)          */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO30 DMA_REQ1      IRQ(1)          */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO31 DMA_ACK1      IRQ(0)          */      \
+}                                                                                              \
+}
+
+/*
+ * 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
+
+/*-----------------------------------------------------------------------
+ * Some Kilauea stuff..., mainly fpga registers
+ */
+#define CFG_FPGA_REG_BASE              CFG_FPGA_BASE
+#define CFG_FPGA_FIFO_BASE             (in32(CFG_FPGA_BASE) | (1 << 11))
+
+/* interrupt */
+#define CFG_FPGA_SLIC0_R_DPRAM_INT     0x80000000
+#define CFG_FPGA_SLIC0_W_DPRAM_INT     0x40000000
+#define CFG_FPGA_SLIC1_R_DPRAM_INT     0x20000000
+#define CFG_FPGA_SLIC1_W_DPRAM_INT     0x10000000
+#define CFG_FPGA_PHY0_INT              0x08000000
+#define CFG_FPGA_PHY1_INT              0x04000000
+#define CFG_FPGA_SLIC0_INT             0x02000000
+#define CFG_FPGA_SLIC1_INT             0x01000000
+
+/* DPRAM setting */
+/* 00: 32B; 01: 64B; 10: 128B; 11: 256B  */
+#define CFG_FPGA_DPRAM_R_INT_LINE      0x00400000      /* 64 B */
+#define CFG_FPGA_DPRAM_W_INT_LINE      0x00100000      /* 64 B */
+#define CFG_FPGA_DPRAM_RW_TYPE         0x00080000
+#define CFG_FPGA_DPRAM_RST             0x00040000
+#define CFG_FPGA_UART0_FO              0x00020000
+#define CFG_FPGA_UART1_FO              0x00010000
+
+/* loopback */
+#define CFG_FPGA_CHIPSIDE_LOOPBACK     0x00004000
+#define CFG_FPGA_LINESIDE_LOOPBACK     0x00008000
+#define CFG_FPGA_SLIC0_ENABLE          0x00002000
+#define CFG_FPGA_SLIC1_ENABLE          0x00001000
+#define CFG_FPGA_SLIC0_CS              0x00000800
+#define CFG_FPGA_SLIC1_CS              0x00000400
+#define CFG_FPGA_USER_LED0             0x00000200
+#define CFG_FPGA_USER_LED1             0x00000100
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/korat.h b/include/configs/korat.h
new file mode 100644 (file)
index 0000000..5182972
--- /dev/null
@@ -0,0 +1,526 @@
+/*
+ * (C) Copyright 2007-2008
+ * Larry Johnson, lrj@acm.org
+ *
+ * (C) Copyright 2006-2007
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2006
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
+ *
+ * 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
+ */
+
+/************************************************************************
+ * korat.h - configuration for Korat board
+ ***********************************************************************/
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_440EPX          1       /* Specific PPC440EPx           */
+#define CONFIG_4xx             1       /* ... PPC4xx family            */
+#define CONFIG_SYS_CLK_FREQ    33333333
+
+#define CONFIG_BOARD_EARLY_INIT_F 1    /* Call board_early_init_f      */
+#define CONFIG_MISC_INIT_R     1       /* Call misc_init_r             */
+
+/*-----------------------------------------------------------------------
+ * Manufacturer's information serial EEPROM parameters
+ *----------------------------------------------------------------------*/
+#define MAN_DATA_EEPROM_ADDR   0x53    /* EEPROM I2C address           */
+#define MAN_SERIAL_NO_FIELD    2
+#define MAN_SERIAL_NO_LENGTH   13
+#define MAN_MAC_ADDR_FIELD     3
+#define MAN_MAC_ADDR_LENGTH    17
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
+#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
+
+#define CFG_BOOT_BASE_ADDR     0xf0000000
+#define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
+#define CFG_FLASH_BASE         0xfc000000      /* start of FLASH       */
+#define CFG_MONITOR_BASE       TEXT_BASE
+#define CFG_OCM_BASE           0xe0010000      /* ocm                  */
+#define CFG_OCM_DATA_ADDR      CFG_OCM_BASE
+#define CFG_PCI_BASE           0xe0000000      /* Internal PCI regs    */
+#define CFG_PCI_MEMBASE                0x80000000      /* mapped pci memory    */
+#define CFG_PCI_MEMBASE1       CFG_PCI_MEMBASE  + 0x10000000
+#define CFG_PCI_MEMBASE2       CFG_PCI_MEMBASE1 + 0x10000000
+#define CFG_PCI_MEMBASE3       CFG_PCI_MEMBASE2 + 0x10000000
+
+/* Don't change either of these */
+#define CFG_PERIPHERAL_BASE    0xef600000      /* internal peripherals */
+
+#define CFG_USB2D0_BASE                0xe0000100
+#define CFG_USB_DEVICE         0xe0000000
+#define CFG_USB_HOST           0xe0000400
+#define CFG_CPLD_BASE          0xc0000000
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer
+ *----------------------------------------------------------------------*/
+/* 440EPx has 16KB of internal SRAM, so no need for D-Cache            */
+#undef CFG_INIT_RAM_DCACHE
+#define CFG_INIT_RAM_ADDR      CFG_OCM_BASE    /* OCM                  */
+#define CFG_INIT_RAM_END       (4 << 10)
+#define CFG_GBL_DATA_SIZE      256     /* num bytes initial data       */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_POST_WORD_ADDR
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#define CFG_EXT_SERIAL_CLOCK   11059200        /* ext. 11.059MHz clk   */
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI    1
+/* define this if you want console on UART1 */
+#undef CONFIG_UART1_CONSOLE
+
+#define CFG_BAUDRATE_TABLE                                             \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environ vars   */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CFG_FLASH_CFI                  /* The flash is CFI compatible  */
+#define CFG_FLASH_CFI_DRIVER           /* Use common CFI driver        */
+
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
+#define CFG_FLASH_PROTECTION   1       /* use hardware flash protection        */
+
+#define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+#define CFG_FLASH_QUIET_TEST   1       /* don't warn upon unknown flash        */
+
+#define CFG_ENV_SECT_SIZE      0x20000 /* size of one complete sector          */
+#define CFG_ENV_ADDR           ((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x2000  /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CFG_MBYTES_SDRAM        (512)  /* 512 MiB      TODO: remove    */
+#define CONFIG_DDR_DATA_EYE            /* use DDR2 optimization        */
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for setup     */
+#define CONFIG_ZERO_SDRAM              /* Zero SDRAM after setup       */
+#define CONFIG_DDR_ECC                 /* Use ECC when available       */
+#define SPD_EEPROM_ADDRESS     {0x50}
+#define CONFIG_PROG_SDRAM_TLB
+#define CFG_DRAM_TEST
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C                1       /* 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_MULTI_EEPROMS
+#define CFG_I2C_EEPROM_ADDR    (0xa8>>1)
+#define CFG_I2C_EEPROM_ADDR_LEN 1
+#define CFG_EEPROM_PAGE_WRITE_BITS 3
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
+
+/* I2C RTC */
+#define CONFIG_RTC_M41T60      1
+#define CFG_I2C_RTC_ADDR       0x68
+
+/* I2C SYSMON (LM73)                                                   */
+#define CONFIG_DTT_LM73                1       /* National Semi's LM73 */
+#define CONFIG_DTT_SENSORS     {2}     /* Sensor addresses     */
+#define CFG_DTT_MAX_TEMP       70
+#define CFG_DTT_MIN_TEMP       -30
+
+#define CONFIG_PREBOOT "echo;"                                         \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+/* Setup some board specific values for the default environment variables */
+#define CONFIG_HOSTNAME                korat
+#define CFG_BOOTFILE           "bootfile=/tftpboot/korat/uImage\0"
+#define CFG_ROOTPATH           "rootpath=/opt/eldk/ppc_4xxFP\0"
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       CFG_BOOTFILE                                                    \
+       CFG_ROOTPATH                                                    \
+       "netdev=eth0\0"                                                 \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\
+       "flash_nfs=run nfsargs addip addtty;"                           \
+               "bootm ${kernel_addr}\0"                                \
+       "flash_self=run ramargs addip addtty;"                          \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
+               "bootm\0"                                               \
+       "kernel_addr=FC000000\0"                                        \
+       "ramdisk_addr=FC180000\0"                                       \
+       "load=tftp 200000 /tftpboot/${hostname}/u-boot.bin\0"           \
+       "update=protect off FFFA0000 FFFFFFFF;era FFFA0000 FFFFFFFF;"   \
+               "cp.b 200000 FFFA0000 60000\0"                          \
+       "upd=run load;run update\0"                                     \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define        CONFIG_IBM_EMAC4_V4     1
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                2       /* PHY address, See schematics  */
+#define CONFIG_PHY_DYNAMIC_ANEG        1
+
+#define CONFIG_PHY_RESET        1      /* reset phy upon startup         */
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CONFIG_HAS_ETH0
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       3
+
+/* USB */
+#define CONFIG_USB_OHCI
+#define CONFIG_USB_STORAGE
+
+/* Comment this out to enable USB 1.1 device */
+#define USB_2_0_DEVICE
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_SUBNETMASK
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DTT
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_I2C
+#define CONFIG_I2C_CMD_TREE
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_SDRAM
+#define CONFIG_CMD_USB
+
+/* POST support */
+#define CONFIG_POST            (CFG_POST_CACHE    | \
+                                CFG_POST_CPU      | \
+                                CFG_POST_ECC      | \
+                                CFG_POST_ETHER    | \
+                                CFG_POST_FPU      | \
+                                CFG_POST_I2C      | \
+                                CFG_POST_MEMORY   | \
+                                CFG_POST_RTC      | \
+                                CFG_POST_SPR      | \
+                                CFG_POST_UART)
+
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
+#define CONFIG_LOGBUFFER
+#define CFG_POST_CACHE_ADDR    0xC8000000      /* free virtual address      */
+
+#define CFG_CONSOLE_IS_IN_ENV  /* Otherwise it catches logbuffer as output */
+
+#define CONFIG_SUPPORT_VFAT
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#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      0x0400000 /* memtest works on           */
+#define CFG_MEMTEST_END                0x0C00000 /* 4 ... 12 MB in DRAM        */
+
+#define CFG_LOAD_ADDR          0x100000  /* default load address       */
+#define CFG_EXTBDINFO          1  /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CONFIG_LOOPW            1      /* enable loopw command         */
+#define CONFIG_MX_CYCLIC        1      /* enable mdc/mwc commands      */
+#define CONFIG_ZERO_BOOTDELAY_CHECK /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *----------------------------------------------------------------------*/
+/* General PCI */
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play         */
+#define CFG_PCI_CACHE_LINE_SIZE        0       /* to avoid problems with PNP   */
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE        0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE */
+
+/* Board-specific PCI */
+#define CFG_PCI_TARGET_INIT
+#define CFG_PCI_MASTER_INIT
+
+#define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC                         */
+#define CFG_PCI_SUBSYS_ID       0xcafe /* Whatever                     */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+
+/* Memory Bank 0 (NOR-FLASH) initialization                            */
+#define CFG_EBC_PB0AP          0x04017300
+#define CFG_EBC_PB0CR          (CFG_FLASH_BASE | 0x000DA000)
+
+/* Memory Bank 1 (NOR-FLASH) initialization                            */
+#define CFG_EBC_PB1AP          0x04017300
+#define CFG_EBC_PB1CR          (0xF8000000 | 0x000DA000)
+
+/* Memory Bank 2 (CPLD) initialization                                 */
+#define CFG_EBC_PB2AP          0x04017300
+#define CFG_EBC_PB2CR          (CFG_CPLD_BASE | 0x00038000)
+
+/*-----------------------------------------------------------------------
+ * GPIO Setup
+ *
+ * Korat GPIO usage:
+ *
+ *                   Init.
+ * Pin    Source I/O value Function
+ * ------ ------ --- ----- ---------------------------------
+ * GPIO00  Alt1  I/O   x   PerAddr07
+ * GPIO01  Alt1  I/O   x   PerAddr06
+ * GPIO02  Alt1  I/O   x   PerAddr05
+ * GPIO03  GPIO   x    x   GPIO03 to expansion bus connector
+ * GPIO04  GPIO   x    x   GPIO04 to expansion bus connector
+ * GPIO05  GPIO   x    x   GPIO05 to expansion bus connector
+ * GPIO06  Alt1   O    x   PerCS1 (2nd NOR flash)
+ * GPIO07  Alt1   O    x   PerCS2 (CPLD)
+ * GPIO08  Alt1   O    x   PerCS3 to expansion bus connector
+ * GPIO09  Alt1   O    x   PerCS4 to expansion bus connector
+ * GPIO10  Alt1   O    x   PerCS5 to expansion bus connector
+ * GPIO11  Alt1   I    x   PerErr
+ * GPIO12  GPIO   O    0   ATMega !Reset
+ * GPIO13  GPIO   O    1   SPI Atmega !SS
+ * GPIO14  GPIO   O    1   Write protect EEPROM #1 (0xA8)
+ * GPIO15  GPIO   O    0   CPU Run LED !On
+ * GPIO16  Alt1   O    x   GMC1TxD0
+ * GPIO17  Alt1   O    x   GMC1TxD1
+ * GPIO18  Alt1   O    x   GMC1TxD2
+ * GPIO19  Alt1   O    x   GMC1TxD3
+ * GPIO20  Alt1   I    x   RejectPkt0
+ * GPIO21  Alt1   I    x   RejectPkt1
+ * GPIO22  GPIO   I    x   PGOOD_DDR
+ * GPIO23  Alt1   O    x   SCPD0
+ * GPIO24  Alt1   O    x   GMC0TxD2
+ * GPIO25  Alt1   O    x   GMC0TxD3
+ * GPIO26  GPIO? I/O   x   IIC0SDA (selected in SDR0_PFC4)
+ * GPIO27  GPIO   O    0   PHY #0 1000BASE-X select
+ * GPIO28  GPIO   O    0   PHY #1 1000BASE-X select
+ * GPIO29  GPIO   I    x   Test jumper !Present
+ * GPIO30  GPIO   I    x   SFP module #0 !Present
+ * GPIO31  GPIO   I    x   SFP module #1 !Present
+ *
+ * GPIO32  GPIO   O    1   SFP module #0 Tx !Enable
+ * GPIO33  GPIO   O    1   SFP module #1 Tx !Enable
+ * GPIO34  Alt2   I    x   !UART1_CTS
+ * GPIO35  Alt2   O    x   !UART1_RTS
+ * GPIO36  Alt1   I    x   !UART0_CTS
+ * GPIO37  Alt1   O    x   !UART0_RTS
+ * GPIO38  Alt2   O    x   UART1_Tx
+ * GPIO39  Alt2   I    x   UART1_Rx
+ * GPIO40  Alt1   I    x   IRQ0 (Ethernet 0)
+ * GPIO41  Alt1   I    x   IRQ1 (Ethernet 1)
+ * GPIO42  Alt1   I    x   IRQ2 (PCI interrupt)
+ * GPIO43  Alt1   I    x   IRQ3 (System Alert from CPLD)
+ * GPIO44  xxxx   x    x   (grounded through pulldown)
+ * GPIO45  GPIO   O    0   PHY #0 Enable
+ * GPIO46  GPIO   O    0   PHY #1 Enable
+ * GPIO47  GPIO   I    x   Reset switch !Pressed
+ * GPIO48  GPIO   I    x   Shutdown switch !Pressed
+ * GPIO49  xxxx   x    x   (reserved for trace port)
+ *   .      .     .    .               .
+ *   .      .     .    .               .
+ *   .      .     .    .               .
+ * GPIO63  xxxx   x    x   (reserved for trace port)
+*----------------------------------------------------------------------*/
+
+#define CFG_GPIO_ATMEGA_SS_    13
+#define CFG_GPIO_PHY0_FIBER_SEL        27
+#define CFG_GPIO_PHY1_FIBER_SEL        28
+#define CFG_GPIO_SFP0_PRESENT_ 30
+#define CFG_GPIO_SFP1_PRESENT_ 31
+#define CFG_GPIO_SFP0_TX_EN_   32
+#define CFG_GPIO_SFP1_TX_EN_   33
+#define CFG_GPIO_PHY0_EN       45
+#define CFG_GPIO_PHY1_EN       46
+
+/*-----------------------------------------------------------------------
+ * PPC440 GPIO Configuration
+ */
+#define CFG_4xx_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
+{                                                                                      \
+/* GPIO Core 0 */                                                                      \
+{GPIO0_BASE, GPIO_BI , GPIO_ALT1, GPIO_OUT_0}, /* GPIO0        EBC_ADDR(7)     DMA_REQ(2)      */      \
+{GPIO0_BASE, GPIO_BI , GPIO_ALT1, GPIO_OUT_0}, /* GPIO1        EBC_ADDR(6)     DMA_ACK(2)      */      \
+{GPIO0_BASE, GPIO_BI , GPIO_ALT1, GPIO_OUT_0}, /* GPIO2        EBC_ADDR(5)     DMA_EOT/TC(2)   */      \
+{GPIO0_BASE, GPIO_DIS, GPIO_SEL , GPIO_OUT_0}, /* GPIO3        EBC_ADDR(4)     DMA_REQ(3)      */      \
+{GPIO0_BASE, GPIO_DIS, GPIO_SEL , GPIO_OUT_0}, /* GPIO4        EBC_ADDR(3)     DMA_ACK(3)      */      \
+{GPIO0_BASE, GPIO_DIS, GPIO_SEL , GPIO_OUT_0}, /* GPIO5        EBC_ADDR(2)     DMA_EOT/TC(3)   */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO6        EBC_CS_N(1)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO7        EBC_CS_N(2)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO8        EBC_CS_N(3)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO9        EBC_CS_N(4)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO10 EBC_CS_N(5)                   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO11 EBC_BUS_ERR                   */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO12                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_1}, /* GPIO13                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_1}, /* GPIO14                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO15                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO16 GMCTxD(4)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO17 GMCTxD(5)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO18 GMCTxD(6)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO19 GMCTxD(7)                     */      \
+{GPIO0_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO20 RejectPkt0                    */      \
+{GPIO0_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO21 RejectPkt1                    */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO22                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO23 SCPD0                         */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO24 GMCTxD(2)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO25 GMCTxD(3)                     */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO26                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO27 EXT_EBC_REQ   USB2D_RXERROR   */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO28               USB2D_TXVALID   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO29 EBC_EXT_HDLA  USB2D_PAD_SUSPNDM */    \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO30 EBC_EXT_ACK   USB2D_XCVRSELECT*/      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO31 EBC_EXR_BUSREQ        USB2D_TERMSELECT*/      \
+},                                                                                     \
+{                                                                                      \
+/* GPIO Core 1 */                                                                      \
+{GPIO1_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_1}, /* GPIO32 USB2D_OPMODE0 EBC_DATA(2)     */      \
+{GPIO1_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_1}, /* GPIO33 USB2D_OPMODE1 EBC_DATA(3)     */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT2, GPIO_OUT_0}, /* GPIO34 UART0_DCD_N   UART1_DSR_CTS_N UART2_SOUT*/ \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO35 UART0_8PIN_DSR_N UART1_RTS_DTR_N UART2_SIN*/ \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO36 UART0_8PIN_CTS_N EBC_DATA(0)  UART3_SIN*/ \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO37 UART0_RTS_N   EBC_DATA(1)     UART3_SOUT*/ \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO38 UART0_DTR_N   UART1_SOUT      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT2, GPIO_OUT_0}, /* GPIO39 UART0_RI_N    UART1_SIN       */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO40 UIC_IRQ(0)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO41 UIC_IRQ(1)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO42 UIC_IRQ(2)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO43 UIC_IRQ(3)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO44 UIC_IRQ(4)    DMA_ACK(1)      */      \
+{GPIO1_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO45 UIC_IRQ(6)    DMA_EOT/TC(1)   */      \
+{GPIO1_BASE, GPIO_OUT, GPIO_SEL , GPIO_OUT_0}, /* GPIO46 UIC_IRQ(7)    DMA_REQ(0)      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO47 UIC_IRQ(8)    DMA_ACK(0)      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO48 UIC_IRQ(9)    DMA_EOT/TC(0)   */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO49  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO50  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO51  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO52  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO53  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO54  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO55  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO56  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO57  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO58  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO59  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO60  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO61  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO62  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO63  Unselect via TraceSelect Bit */      \
+}                                                                                      \
+}
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01    /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02    /* Software reboot                      */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400 /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use     */
+#endif
+#endif /* __CONFIG_H */
index a09dd74733e2d048e187f573011e6e369066e675..cba7295fe97219dbee6ef8de3e87fea685f196a4 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Internal Definitions
  *
index 52deab43f15129ffa2af8ca62a744f04d72f5889..c5c2724dd2d6ab29b7aaec44d5b37d817f2edb61 100644 (file)
 /*-----------------------------------------------------------------------
  * Initial RAM & stack pointer
  *----------------------------------------------------------------------*/
-/* 440EPx/440GRx have 16KB of internal SRAM, so no need for D-Cache    */
-#define CFG_INIT_RAM_ADDR      CFG_OCM_BASE    /* OCM                  */
-#define CFG_OCM_DATA_ADDR      CFG_OCM_BASE
-
+/*
+ * On LWMON5 we use D-cache as init-ram and stack pointer. We also move
+ * the POST_WORD from OCM to a 440EPx register that preserves it's
+ * content during reset (GPT0_COM6). This way we reserve the OCM (16k)
+ * for logbuffer only.
+ */
+#define CFG_INIT_RAM_DCACHE    1               /* d-cache as init ram  */
+#define CFG_INIT_RAM_ADDR      0x70000000              /* DCache       */
 #define CFG_INIT_RAM_END       (4 << 10)
-#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
+#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data*/
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
-#define CFG_INIT_SP_OFFSET     CFG_POST_WORD_ADDR
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+#define CFG_POST_ALT_WORD_ADDR (CFG_PERIPHERAL_BASE + GPT0_COMP6)
+                                               /* unused GPT0 COMP reg */
 
 /*-----------------------------------------------------------------------
  * Serial Port
                                 CFG_POST_SPR      | \
                                 CFG_POST_UART)
 
-#define CFG_POST_CACHE_ADDR    0x10000000      /* free virtual address         */
+#define CFG_POST_CACHE_ADDR    0x7fff0000 /* free virtual address      */
 #define CONFIG_LOGBUFFER
 #define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
 
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
 #define CONFIG_PHY1_ADDR       1
 
+/* Video console */
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_MB862xx
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_CONSOLE_EXTRA_INFO
+#define VIDEO_FB_16BPP_PIXEL_SWAP
+
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_SPLASH_SCREEN
+
 /* USB */
 #ifdef CONFIG_440EPX
 #define CONFIG_USB_OHCI
 #define CONFIG_CMD_REGINFO
 #define CONFIG_CMD_SDRAM
 
+#ifdef CONFIG_VIDEO
+#define CONFIG_CMD_BMP
+#endif
+
 #ifdef CONFIG_440EPX
 #define CONFIG_CMD_USB
 #endif
 /*-----------------------------------------------------------------------
  * PPC440 GPIO Configuration
  */
-#define CFG_440_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
+#define CFG_4xx_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
 {                                                                                      \
 /* GPIO Core 0 */                                                                      \
 {GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO0        EBC_ADDR(7)     DMA_REQ(2)      */      \
 }                                                                                      \
 }
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- *----------------------------------------------------------------------*/
-#define CFG_DCACHE_SIZE                (32<<10)  /* For AMCC 440 CPUs                  */
-#define CFG_CACHELINE_SIZE     32            /* ...                                */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5             /* log base 2 of the above value  */
-#endif
-
 /*
  * Internal Definitions
  *
diff --git a/include/configs/makalu.h b/include/configs/makalu.h
new file mode 100644 (file)
index 0000000..8f8e867
--- /dev/null
@@ -0,0 +1,397 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@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
+ */
+
+/************************************************************************
+ * makalu.h - configuration for AMCC Makalu (405EX)
+ ***********************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_MAKALU          1               /* Board is Makalu      */
+#define CONFIG_4xx             1               /* ... PPC4xx family    */
+#define CONFIG_405EX           1               /* Specifc 405EX support*/
+#define CONFIG_SYS_CLK_FREQ    33330000        /* ext frequency to pll */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
+#define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xFC000000
+#define CFG_FPGA_BASE          0xF0000000
+#define CFG_PERIPHERAL_BASE    0xEF600000      /* internal peripherals*/
+#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
+#define CFG_MALLOC_LEN         (512 * 1024)    /* Reserve 512 kB for malloc()  */
+#define CFG_MONITOR_BASE       (TEXT_BASE)
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer
+ *----------------------------------------------------------------------*/
+#define CFG_INIT_RAM_ADDR      0x02000000      /* inside of SDRAM      */
+#define CFG_INIT_RAM_END       (4 << 10)
+#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+/* reserve some memory for POST and BOOT limit info */
+#define CFG_INIT_SP_OFFSET     (CFG_GBL_DATA_OFFSET - 16)
+
+/* extra data in init-ram */
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 4)
+#define CFG_POST_MAGIC         (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET - 8)
+#define CFG_POST_VAL           (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET - 12)
+#define CFG_OCM_DATA_ADDR      CFG_INIT_RAM_ADDR /* for commproc.c     */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#undef CFG_EXT_SERIAL_CLOCK                    /* no ext. clk          */
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI     1
+/* define this if you want console on UART1 */
+#undef CONFIG_UART1_CONSOLE
+
+#define CFG_BAUDRATE_TABLE                                             \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environment vars       */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CFG_FLASH_CFI                  /* The flash is CFI compatible  */
+#define CFG_FLASH_CFI_DRIVER           /* Use common CFI driver        */
+
+#define CFG_FLASH_BANKS_LIST    {CFG_FLASH_BASE}
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
+#define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x20000         /* size of one complete sector  */
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE-CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x4000  /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+#endif /* CFG_ENV_IS_IN_FLASH */
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CFG_MBYTES_SDRAM       256
+
+/*-----------------------------------------------------------------------
+ * I2C
+ *----------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support    */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 6       /* 24C02 requires 5ms delay */
+#define CFG_I2C_EEPROM_ADDR    0x52    /* I2C boot EEPROM (24C02BN)    */
+#define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
+
+/* Standard DTT sensor configuration */
+#define CONFIG_DTT_DS1775      1
+#define CONFIG_DTT_SENSORS     { 0 }
+#define CFG_I2C_DTT_ADDR       0x48
+
+/* RTC configuration */
+#define CONFIG_RTC_X1205       1
+#define CFG_I2C_RTC_ADDR       0x6f
+
+/*-----------------------------------------------------------------------
+ * Ethernet
+ *----------------------------------------------------------------------*/
+#define CONFIG_M88E1111_PHY    1
+#define CONFIG_IBM_EMAC4_V4    1
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                6       /* PHY address, See schematics  */
+
+#define CONFIG_PHY_RESET       1       /* reset phy upon startup       */
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CONFIG_HAS_ETH0                1
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       0
+
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "logversion=2\0"                                                \
+       "netdev=eth0\0"                                                 \
+       "hostname=makalu\0"                                             \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\
+       "addmisc=setenv bootargs ${bootargs} rtc-x1205.probe=0,0x6f\0"  \
+       "net_nfs=tftp 200000 ${bootfile};"                              \
+               "run nfsargs addip addtty addmisc;"                     \
+               "bootm 200000\0"                                        \
+       "net_nfs_fdt=tftp 200000 ${bootfile};"                          \
+               "tftp ${fdt_addr} ${fdt_file};"                         \
+               "run nfsargs addip addtty addmisc;"                     \
+               "bootm 200000 - ${fdt_addr}\0"                          \
+       "flash_nfs=run nfsargs addip addtty addmisc;"                   \
+               "bootm ${kernel_addr}\0"                                \
+       "flash_self=run ramargs addip addtty addmisc;"                  \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
+       "bootfile=makalu/uImage\0"                                      \
+       "fdt_file=makalu/makalu.dtb\0"                                  \
+       "fdt_addr=400000\0"                                             \
+       "kernel_addr=fc000000\0"                                        \
+       "ramdisk_addr=fc200000\0"                                       \
+       "initrd_high=30000000\0"                                        \
+       "load=tftp 200000 makalu/u-boot.bin\0"                          \
+       "update=protect off fffa0000 ffffffff;era fffa0000 ffffffff;"   \
+               "cp.b ${fileaddr} fffa0000 ${filesize};"                \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load update\0"                                         \
+       "pciconfighost=1\0"                                             \
+       "pcie_mode=RP:RP\0"                                             \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE          /* allow baudrate change        */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_DTT
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_LOG
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_SNTP
+
+/* POST support */
+#define CONFIG_POST            (CFG_POST_MEMORY        | \
+                                CFG_POST_CACHE         | \
+                                CFG_POST_CPU           | \
+                                CFG_POST_ETHER         | \
+                                CFG_POST_I2C           | \
+                                CFG_POST_MEMORY        | \
+                                CFG_POST_UART)
+
+/* Define here the base-addresses of the UARTs to test in POST */
+#define CFG_POST_UART_TABLE    {UART0_BASE, UART1_BASE}
+
+#define CONFIG_LOGBUFFER
+#define CFG_POST_CACHE_ADDR    0x00800000 /* free virtual address      */
+
+#define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ *----------------------------------------------------------------------*/
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#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      0x0400000 /* memtest works on           */
+#define CFG_MEMTEST_END                0x0C00000 /* 4 ... 12 MB in DRAM        */
+
+#define CFG_LOAD_ADDR          0x100000  /* default load address       */
+#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CONFIG_LOOPW            1       /* enable loopw command         */
+#define CONFIG_MX_CYCLIC        1       /* enable mdc/mwc commands      */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+#define CFG_CONSOLE_INFO_QUIET 1       /* don't print console @ startup*/
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *----------------------------------------------------------------------*/
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_PNP         1       /* do pci plug-and-play         */
+#define CONFIG_PCI_SCAN_SHOW   1       /* show pci devices on startup  */
+#define CONFIG_PCI_CONFIG_HOST_BRIDGE
+
+/*-----------------------------------------------------------------------
+ * PCIe stuff
+ *----------------------------------------------------------------------*/
+#define CFG_PCIE_MEMBASE       0x90000000      /* mapped PCIe memory   */
+#define CFG_PCIE_MEMSIZE       0x08000000      /* 128 Meg, smallest incr per port */
+
+#define        CFG_PCIE0_CFGBASE       0xa0000000      /* remote access */
+#define        CFG_PCIE0_XCFGBASE      0xb0000000      /* local access */
+#define        CFG_PCIE0_CFGMASK       0xe0000001      /* 512 Meg */
+
+#define        CFG_PCIE1_CFGBASE       0xc0000000      /* remote access */
+#define        CFG_PCIE1_XCFGBASE      0xd0000000      /* local access */
+#define        CFG_PCIE1_CFGMASK       0xe0000001      /* 512 Meg */
+
+#define        CFG_PCIE0_UTLBASE       0xef502000
+#define        CFG_PCIE1_UTLBASE       0xef503000
+
+/* base address of inbound PCIe window */
+#define CFG_PCIE_INBOUND_BASE  0x0000000000000000ULL
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+/* Memory Bank 0 (NOR-FLASH) initialization                                    */
+#define CFG_EBC_PB0AP          0x08033700
+#define CFG_EBC_PB0CR          (CFG_FLASH_BASE | 0xda000)
+
+/* Memory Bank 2 (CPLD) initialization                                         */
+#define CFG_EBC_PB2AP           0x9400C800
+#define CFG_EBC_PB2CR           0xF0018000 /*  BAS=0x800,BS=1MB,BU=R/W,BW=8bit */
+
+#define CFG_EBC_CFG            0x7FC00000 /*  EBC0_CFG */
+
+/*-----------------------------------------------------------------------
+ * GPIO Setup
+ *----------------------------------------------------------------------*/
+#define CFG_4xx_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
+{                                                                                      \
+/* GPIO Core 0 */                                                                      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO0        EBC_DATA_PAR(0)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO1        EBC_DATA_PAR(1)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO2        EBC_DATA_PAR(2)                 */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO3        EBC_DATA_PAR(3)                 */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO4        EBC_DATA(20)    USB2_DATA(4)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO5        EBC_DATA(21)    USB2_DATA(5)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO6        EBC_DATA(22)    USB2_DATA(6)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO7        EBC_DATA(23)    USB2_DATA(7)    */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO8        CS(1)/NFCE(1)   IRQ(7)          */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO9        CS(2)/NFCE(2)   IRQ(8)          */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO10 CS(3)/NFCE(3) IRQ(9)          */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO11 IRQ(6)                                */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO12 EBC_DATA(16)  USB2_DATA(0)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO13 EBC_DATA(17)  USB2_DATA(1)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO14 EBC_DATA(18)  USB2_DATA(2)    */      \
+{GPIO0_BASE, GPIO_BI,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO15 EBC_DATA(19)  USB2_DATA(3)    */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO16 UART0_DCD     UART1_CTS       */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO17 UART0_DSR     UART1_RTS       */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT1, GPIO_OUT_0}, /* GPIO18 UART0_CTS                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO19 UART0_RTS                     */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO20 UART0_DTR     UART1_TX        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO21 UART0_RI      UART1_RX        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO22 EBC_HOLD_REQ  DMA_ACK2        */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_0}, /* GPIO23 EBC_HOLD_ACK  DMA_REQ2        */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO24 EBC_EXT_REQ   DMA_EOT2        IRQ(4) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO25 EBC_EXT_ACK   DMA_ACK3        IRQ(3) */ \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO26 EBC_ADDR(5)   DMA_EOT0        TS(3) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL , GPIO_OUT_0}, /* GPIO27 EBC_BUS_REQ   DMA_EOT3        IRQ(5) */ \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL , GPIO_OUT_0}, /* GPIO28                               */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO29 DMA_EOT1      IRQ(2)          */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_SEL,  GPIO_OUT_0}, /* GPIO30 DMA_REQ1      IRQ(1)          */      \
+{GPIO0_BASE, GPIO_IN,  GPIO_ALT2, GPIO_OUT_0}, /* GPIO31 DMA_ACK1      IRQ(0)          */      \
+}                                                                                              \
+}
+
+#define CFG_GPIO_PCIE_RST      23
+#define CFG_GPIO_PCIE_CLKREQ   27
+#define CFG_GPIO_PCIE_WAKE     28
+
+/*
+ * 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
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/mgcoge.h b/include/configs/mgcoge.h
new file mode 100644 (file)
index 0000000..3de2466
--- /dev/null
@@ -0,0 +1,317 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC8247         1
+#define CONFIG_MPC8272_FAMILY   1
+#define CONFIG_MGCOGE          1
+
+#define CONFIG_CPM2            1       /* Has a CPM2 */
+
+#undef DEBUG
+
+/*
+ * Select serial console configuration
+ *
+ * If either CONFIG_CONS_ON_SMC or CONFIG_CONS_ON_SCC is selected, then
+ * CONFIG_CONS_INDEX must be set to the channel number (1-2 for SMC, 1-4
+ * for SCC).
+ */
+#define        CONFIG_CONS_ON_SMC              /* Console is on SMC         */
+#undef  CONFIG_CONS_ON_SCC             /* It's not on SCC           */
+#undef CONFIG_CONS_NONE                /* It's not on external UART */
+#define CONFIG_CONS_INDEX      2       /* SMC2 is used for console  */
+
+/*
+ * Select ethernet configuration
+ *
+ * If either CONFIG_ETHER_ON_SCC or CONFIG_ETHER_ON_FCC is selected,
+ * then CONFIG_ETHER_INDEX must be set to the channel number (1-4 for
+ * SCC, 1-3 for FCC)
+ *
+ * If CONFIG_ETHER_NONE is defined, then either the ethernet routines
+ * must be defined elsewhere (as for the console), or CONFIG_CMD_NET
+ * must be unset.
+ */
+#define        CONFIG_ETHER_ON_SCC             /* Ethernet is on SCC */
+#undef CONFIG_ETHER_ON_FCC             /* Ethernet is not on FCC     */
+#undef CONFIG_ETHER_NONE               /* No external Ethernet   */
+
+#define CONFIG_ETHER_INDEX     4
+#define CFG_SCC_TOUT_LOOP      10000000
+
+# define CFG_CMXSCR_VALUE      (CMXSCR_RS4CS_CLK7 | CMXSCR_TS4CS_CLK8)
+
+#ifndef CONFIG_8260_CLKIN
+#define CONFIG_8260_CLKIN      66000000        /* in Hz */
+#endif
+
+#define CONFIG_BAUDRATE                115200
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ECHO
+#define CONFIG_CMD_IMMAP
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_PING
+
+/*
+ * Default environment settings
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "netdev=eth0\0"                                                 \
+       "u-boot_addr=100000\0"                                          \
+       "kernel_addr=200000\0"                                          \
+       "fdt_addr=400000\0"                                             \
+       "rootpath=/opt/eldk-4.2/ppc_82xx\0"                             \
+       "u-boot=/tftpboot/mgcoge/u-boot.bin\0"                          \
+       "bootfile=/tftpboot/mgcoge/uImage\0"                            \
+       "fdt_file=/tftpboot/mgcoge/mgcoge.dtb\0"                        \
+       "load=tftp ${u-boot_addr} ${u-boot}\0"                          \
+       "update=prot off fe000000 fe03ffff; era fe000000 fe03ffff; "    \
+               "cp.b ${u-boot_addr} fe000000 ${filesize};"             \
+               "prot on fe000000 fe03ffff\0"                           \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "addcon=setenv bootargs ${bootargs} console=ttyCPM0,,${baudrate}\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 addcon;"\
+               "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"    \
+       ""
+#define CONFIG_BOOTCOMMAND     "run net_nfs"
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds */
+
+#undef CONFIG_WATCHDOG                 /* disable platform specific watchdog */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2    "> "
+#define CFG_LONGHELP                   /* undef to save memory     */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt   */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size  */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size  */
+#endif
+#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      0x00100000      /* memtest works on */
+#define CFG_MEMTEST_END                0x00f00000      /* 1 ... 15 MB in DRAM  */
+
+#define CFG_LOAD_ADDR          0x100000        /* default load address */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xFE000000
+#define CFG_FLASH_SIZE         32
+#define CFG_FLASH_CFI
+#define CFG_FLASH_CFI_DRIVER
+#define CFG_MAX_FLASH_BANKS    1       /* max num of flash banks       */
+#define CFG_MAX_FLASH_SECT     256     /* max num of sects on one chip */
+
+#define CFG_MONITOR_BASE       TEXT_BASE
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#endif
+
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256KB for Monitor */
+
+#define CFG_ENV_IS_IN_FLASH
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x20000
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+#endif /* CFG_ENV_IS_IN_FLASH */
+
+#define CFG_IMMR               0xF0000000
+
+#define CFG_INIT_RAM_ADDR      CFG_IMMR
+#define CFG_INIT_RAM_END       0x2000  /* End of used area in DPRAM    */
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/* Hard reset configuration word */
+#define CFG_HRCW_MASTER                0x0604b211
+
+/* No slaves */
+#define CFG_HRCW_SLAVE1        0
+#define CFG_HRCW_SLAVE2        0
+#define CFG_HRCW_SLAVE3        0
+#define CFG_HRCW_SLAVE4        0
+#define CFG_HRCW_SLAVE5        0
+#define CFG_HRCW_SLAVE6        0
+#define CFG_HRCW_SLAVE7        0
+
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM          0x02    /* Software reboot                  */
+
+#define CFG_MALLOC_LEN         (4096 << 10)    /* Reserve 4 MB for malloc()    */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+#define CFG_CACHELINE_SIZE     32      /* For MPC8260 CPUs */
+#if defined(CONFIG_CMD_KGDB)
+#  define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
+#endif
+
+#define CFG_HID0_INIT          0
+#define CFG_HID0_FINAL         (HID0_ICE | HID0_IFEM | HID0_ABE)
+
+#define CFG_HID2               0
+
+#define CFG_SIUMCR             0x4020c200
+#define CFG_SYPCR              0xFFFFFFC3
+#define CFG_BCR                        0x10000000
+#define CFG_SCCR               (SCCR_PCI_MODE | SCCR_PCI_MODCK)
+
+/*-----------------------------------------------------------------------
+ * RMR - Reset Mode Register                                     5-5
+ *-----------------------------------------------------------------------
+ * turn on Checkstop Reset Enable
+ */
+#define CFG_RMR         0
+
+/*-----------------------------------------------------------------------
+ * TMCNTSC - Time Counter Status and Control                     4-40
+ *-----------------------------------------------------------------------
+ * Clear once per Second and Alarm Interrupt Status, Set 32KHz timersclk,
+ * and enable Time Counter
+ */
+#define CFG_TMCNTSC     (TMCNTSC_SEC|TMCNTSC_ALR|TMCNTSC_TCF|TMCNTSC_TCE)
+
+/*-----------------------------------------------------------------------
+ * PISCR - Periodic Interrupt Status and Control                 4-42
+ *-----------------------------------------------------------------------
+ * Clear Periodic Interrupt Status, Set 32KHz timersclk, and enable
+ * Periodic timer
+ */
+#define CFG_PISCR       (PISCR_PS|PISCR_PTF|PISCR_PTE)
+
+/*-----------------------------------------------------------------------
+ * RCCR - RISC Controller Configuration                         13-7
+ *-----------------------------------------------------------------------
+ */
+#define CFG_RCCR        0
+
+/*
+ * Init Memory Controller:
+ *
+ * Bank Bus     Machine PortSz  Device
+ * ---- ---     ------- ------  ------
+ *  0   60x     GPCM     8 bit  FLASH
+ *  1   60x     SDRAM   32 bit  SDRAM
+ *
+ */
+/* Bank 0 - FLASH
+ */
+#define CFG_BR0_PRELIM  ((CFG_FLASH_BASE & BRx_BA_MSK) |\
+                        BRx_PS_8                       |\
+                        BRx_MS_GPCM_P                  |\
+                        BRx_V)
+
+#define CFG_OR0_PRELIM  (MEG_TO_AM(CFG_FLASH_SIZE)     |\
+                        ORxG_CSNT                      |\
+                        ORxG_ACS_DIV2                  |\
+                        ORxG_SCY_5_CLK                 |\
+                        ORxG_TRLX )
+
+
+/* Bank 1 - 60x bus SDRAM
+ */
+#define SDRAM_MAX_SIZE 0x08000000      /* max. 128 MB          */
+#define CFG_GLOBAL_SDRAM_LIMIT (256 << 20)     /* less than 256 MB */
+
+#define CFG_MPTPR       0x1800
+
+/*-----------------------------------------------------------------------------
+ * Address for Mode Register Set (MRS) command
+ *-----------------------------------------------------------------------------
+ */
+#define CFG_MRS_OFFS   0x00000110
+#define CFG_PSRT        0x0e
+
+#define CFG_BR1_PRELIM  ((CFG_SDRAM_BASE & BRx_BA_MSK)  |\
+                        BRx_PS_64                      |\
+                        BRx_MS_SDRAM_P                 |\
+                        BRx_V)
+
+#define CFG_OR1_PRELIM CFG_OR1
+
+/* SDRAM initialization values
+*/
+
+#define CFG_OR1    ((~(CFG_GLOBAL_SDRAM_LIMIT-1) & ORxS_SDAM_MSK) |\
+                        ORxS_BPD_8                     |\
+                        ORxS_ROWST_PBI0_A7             |\
+                        ORxS_NUMR_13)
+
+#define CFG_PSDMR  (PSDMR_SDAM_A14_IS_A5 |\
+                        PSDMR_BSMA_A14_A16           |\
+                        PSDMR_SDA10_PBI0_A9            |\
+                        PSDMR_RFRC_5_CLK               |\
+                        PSDMR_PRETOACT_2W              |\
+                        PSDMR_ACTTORW_2W               |\
+                        PSDMR_LDOTOPRE_1C              |\
+                        PSDMR_WRC_1C                   |\
+                        PSDMR_CL_2)
+
+#define        CFG_RESET_ADDRESS 0xFDFFFFFC    /* "bad" address                */
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#define OF_CPU                 "PowerPC,8247@0"
+#define OF_SOC                 "soc@f0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_STDOUT_PATH         "/soc/cpm/serial@11a90"
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/mgsuvd.h b/include/configs/mgsuvd.h
new file mode 100644 (file)
index 0000000..13e7a7c
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@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
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC866          1       /* This is a MPC866 CPU         */
+#define CONFIG_MGSUVD          1       /* ...on a mgsuvd board */
+
+#define CONFIG_8xx_GCLK_FREQ           66000000
+
+#define CFG_SMC_UCODE_PATCH    1       /* Relocate SMC1 */
+#define CFG_SMC_DPMEM_OFFSET   0x1fc0
+#define CONFIG_8xx_CONS_SMC1   1       /* Console is on SMC1           */
+
+#define CONFIG_BAUDRATE                115200  /* console baudrate = 115kbps   */
+
+#define CONFIG_BOOTCOUNT_LIMIT
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_BOARD_TYPES     1       /* support board types          */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "netdev=eth0\0"                                                 \
+       "addcon=setenv bootargs ${bootargs} console=ttyCPM0,${baudrate}\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"                  \
+       "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}; "                     \
+               "tftp ${fdt_addr} ${fdt_file}; run nfsargs addip addcon;"\
+               "bootm ${kernel_addr} - ${fdt_addr}\0"                  \
+       "rootpath=/opt/eldk/ppc_8xx\0"                                  \
+       "bootfile=/tftpboot/mgsuvd/uImage\0"                            \
+       "fdt_addr=400000\0"                                             \
+       "kernel_addr=200000\0"                                          \
+       "fdt_file=/tftpboot/mgsuvd/mgsuvd.dtb\0"                        \
+       "load=tftp 200000 ${u-boot}\0"                                  \
+       "update=protect off f0000000 +${filesize};"                     \
+               "erase f0000000 +${filesize};"                          \
+               "cp.b 200000 f0000000 ${filesize};"                     \
+               "protect on f0000000 +${filesize}\0"                    \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#undef CFG_LOADS_BAUD_CHANGE           /* don't allow baudrate change  */
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_BOOTFILESIZE
+
+#undef CONFIG_RTC_MPC8xx               /* MPC866 does not support RTC  */
+
+#define        CONFIG_TIMESTAMP                /* but print image timestmps    */
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PING
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+
+#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
+
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_MEMTEST_START      0x0400000       /* memtest works on     */
+#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
+
+#define CFG_LOAD_ADDR          0x100000        /* default load address */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+/*-----------------------------------------------------------------------
+ * Internal Memory Mapped Register
+ */
+#define CFG_IMMR               0xFFF00000
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      CFG_IMMR
+#define CFG_INIT_RAM_END       0x2F00  /* End of used area in DPRAM    */
+#define CFG_GBL_DATA_SIZE      64  /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xf0000000
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor   */
+#define CFG_MONITOR_BASE       CFG_FLASH_BASE
+#define CFG_MALLOC_LEN         (256 << 10)     /* Reserve 256 kB for malloc()  */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_FLASH_SIZE         32
+#define CFG_FLASH_CFI
+#define CFG_FLASH_CFI_DRIVER
+#define CFG_MAX_FLASH_SECT     256     /* max num of sects on one chip */
+
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_OFFSET         0x40000 /*   Offset   of Environment Sector     */
+#define CFG_ENV_SIZE           0x08000 /* Total Size of Environment Sector     */
+#define CFG_ENV_SECT_SIZE      0x40000 /* Total Size of Environment Sector     */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_OFFSET_REDUND  (CFG_ENV_OFFSET+CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+
+#define        CFG_USE_PPCENV                  /* Environment embedded in sect .ppcenv */
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     16      /* For all MPC8xx CPUs                  */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
+#endif
+
+/*-----------------------------------------------------------------------
+ * SYPCR - System Protection Control                           11-9
+ * SYPCR can only be written once after reset!
+ *-----------------------------------------------------------------------
+ * Software & Bus Monitor Timer max, Bus Monitor enable, SW Watchdog freeze
+ */
+#define CFG_SYPCR      0xffffff89
+
+/*-----------------------------------------------------------------------
+ * SIUMCR - SIU Module Configuration                           11-6
+ *-----------------------------------------------------------------------
+ */
+#define CFG_SIUMCR     0x00610480
+
+/*-----------------------------------------------------------------------
+ * TBSCR - Time Base Status and Control                                11-26
+ *-----------------------------------------------------------------------
+ * Clear Reference Interrupt Status, Timebase freezing enabled
+ */
+#define CFG_TBSCR      (TBSCR_REFA | TBSCR_REFB | TBSCR_TBF)
+
+/*-----------------------------------------------------------------------
+ * PISCR - Periodic Interrupt Status and Control               11-31
+ *-----------------------------------------------------------------------
+ * Clear Periodic Interrupt Status, Interrupt Timer freezing enabled
+ */
+#define CFG_PISCR      (PISCR_PS | PISCR_PITF)
+
+/*-----------------------------------------------------------------------
+ * SCCR - System Clock and reset Control Register              15-27
+ *-----------------------------------------------------------------------
+ * Set clock output, timebase and RTC source and divider,
+ * power management and some other internal clocks
+ */
+#define SCCR_MASK      0x01800000
+#define CFG_SCCR       0x01800000
+
+#define CFG_DER 0
+
+/*
+ * Init Memory Controller:
+ *
+ * BR0/1 and OR0/1 (FLASH)
+ */
+
+#define FLASH_BASE0_PRELIM     0xf0000000      /* FLASH bank #0        */
+
+/* used to re-map FLASH both when starting from SRAM or FLASH:
+ * restrict access enough to keep SRAM working (if any)
+ * but not too much to meddle with FLASH accesses
+ */
+#define CFG_REMAP_OR_AM                0x80000000      /* OR addr mask */
+#define CFG_PRELIM_OR_AM       0xE0000000      /* OR addr mask */
+
+/*
+ * FLASH timing: Default value of OR0 after reset
+ */
+#define CFG_OR0_PRELIM 0xfe000954
+#define CFG_BR0_PRELIM 0xf0000401
+
+/*
+ * BR1 and OR1 (SDRAM)
+ *
+ */
+#define SDRAM_BASE1_PRELIM     0x00000000      /* SDRAM bank #0        */
+#define SDRAM_MAX_SIZE         (64 << 20)      /* max 64 MB per bank   */
+
+/* SDRAM timing: Multiplexed addresses, GPL5 output to GPL5_A (don't care)     */
+#define CFG_OR_TIMING_SDRAM    0x00000A00
+
+#define CFG_OR1_PRELIM 0xfc000800
+#define CFG_BR1_PRELIM (0x000000C0 | 0x01)
+
+#define CFG_MPTPR      0x0200
+/* PTB=16, AMB=001, FIXME 1 RAS precharge cycles, 1 READ loop cycle (not used),
+   1 Write loop Cycle (not used), 1 Timer Loop Cycle */
+#define CFG_MBMR       0x10964111
+#define CFG_MAR                0x00000088
+
+/*
+ * 4096        Rows from SDRAM example configuration
+ * 1000        factor s -> ms
+ * 64  PTP (pre-divider from MPTPR) from SDRAM example configuration
+ * 4   Number of refresh cycles per period
+ * 64  Refresh cycle in ms per number of rows
+ */
+#define CFG_PTA_PER_CLK        ((4096 * 64 * 1000) / (4 * 64))
+/* HS HS noch zu setzen */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+#define CONFIG_SCC3_ENET
+#define CONFIG_ETHPRIME                "SCC ETHERNET"
+#define CONFIG_HAS_ETH0
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#define OF_CPU                 "PowerPC,866@0"
+#define OF_SOC                 "soc@f0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_STDOUT_PATH         "/soc/cpm/serial@a80"
+
+#endif /* __CONFIG_H */
index 0183041842af27139d5f25a5d2a052a7ee1d25c2..1945918300ca8c040662ae4b2141ef58958a5159 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in DPRAM)
  */
diff --git a/include/configs/munices.h b/include/configs/munices.h
new file mode 100644 (file)
index 0000000..2372b57
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * (C) Copyright 2007
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_MPC5xxx         1       /* This is an MPC5xxx CPU */
+#define CONFIG_MPC5200         1       /* (more precisely an MPC5200 CPU) */
+#define CONFIG_MPC5200_DDR     1       /* (with DDR-SDRAM) */
+#define CONFIG_MUNICES         1       /* ... on MUNICes board */
+#define CFG_MPC5XXX_CLKIN      33333333 /* ... running at 33.333333MHz */
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH  */
+#define BOOTFLAG_WARM          0x02    /* Software reboot           */
+#define CFG_CACHELINE_SIZE     32      /* For MPC5xxx CPUs */
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_IMMAP
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#  define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
+#endif
+
+/*
+ * Serial console configuration
+ */
+#define CONFIG_PSC_CONSOLE     1       /* console is on PSC1 */
+#define CONFIG_BAUDRATE                115200  /* ... at 115200 bps */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+#define        CONFIG_TIMESTAMP        1       /* Print image info with timestamp */
+#define CONFIG_BOOTDELAY       5   /* autoboot after 5 seconds */
+#undef CONFIG_BOOTARGS
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run net_nfs\" to load Kernel over TFTP and to mount root filesystem over NFS;" \
+       "echo"
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "netdev=eth0\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=5\0"                  \
+       "flash_nfs=run nfsargs addip;"                                  \
+               "bootm $(kernel_addr)\0"                                \
+       "flash_self=run ramargs addip;"                                 \
+               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
+       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
+       "rootpath=/opt/eldk/ppc_6xx\0"                                  \
+       "bootfile=/tftpboot/munices/u-boot.bin\0"                       \
+       "update=tftpboot 200000 ${bootfile};protect off fff00000 fff3ffff;" \
+       "erase fff00000 fff3ffff; cp.b 200000 FFF00000 ${filesize}\0"   \
+       ""
+#define CONFIG_BOOTCOMMAND     "run net_nfs"
+
+/*
+ * IPB Bus clocking configuration.
+ */
+#define  CFG_IPBSPEED_133              /* define for 133MHz speed */
+#if defined(CFG_IPBSPEED_133)
+/*
+ * 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.
+ */
+#define CFG_PCISPEED_66                /* define for 66MHz speed */
+#else
+#undef CFG_PCISPEED_66                 /* for 33MHz speed */
+#endif
+
+/*
+ * Memory map
+ */
+#define CFG_MBAR               0xF0000000 /* MBAR hast to be switched by other bootloader or debugger config  */
+
+#define CFG_DEFAULT_MBAR       0x80000000
+#define CFG_SDRAM_BASE         0x00000000
+/* Use SRAM until RAM will be available */
+#define CFG_INIT_RAM_ADDR      MPC5XXX_SRAM
+#define CFG_INIT_RAM_END       MPC5XXX_SRAM_SIZE       /* End of used area in DPRAM */
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+#define CFG_MONITOR_BASE    TEXT_BASE
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#   define CFG_RAMBOOT         1
+#endif
+
+#define CFG_MONITOR_LEN                (192 << 10)     /* Reserve 192 kB for Monitor   */
+#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc()  */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+
+/*
+ * Flash configuration
+ */
+#define CFG_FLASH_BASE         0xFF000000
+#define CFG_FLASH_CFI          1       /* Flash is CFI conformant */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use the common driver */
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_SIZE         0x01000000 /* 16 MByte */
+#define CFG_MAX_FLASH_SECT     128     /* max num of sects on one chip */
+#define CFG_MAX_FLASH_BANKS    1        /* max num of flash banks (= chip selects) */
+#define CFG_FLASH_USE_BUFFER_WRITE     /* not supported yet for AMD */
+
+/*
+ * Chip selects configuration
+ */
+/* Boot Chipselect */
+#define CFG_BOOTCS_START       CFG_FLASH_BASE
+#define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
+#define CFG_BOOTCS_CFG         0x00047800
+
+/*
+ * Environment settings
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_OFFSET         0x40000
+#define CFG_ENV_ADDR           (TEXT_BASE + CFG_ENV_OFFSET)
+#define CFG_ENV_SECT_SIZE      0x20000
+#define CFG_ENV_SIZE           0x4000
+#define CFG_ENV_OFFSET_REDUND   (CFG_ENV_OFFSET + CFG_ENV_SECT_SIZE)
+#define CFG_ENV_ADDR_REDUND    (TEXT_BASE + CFG_ENV_OFFSET_REDUND)
+#define CFG_ENV_SIZE_REDUND     (CFG_ENV_SIZE)
+#define CONFIG_ENV_OVERWRITE   1
+
+/*
+ * Ethernet configuration
+ */
+#define CONFIG_MPC5xxx_FEC     1
+#define CONFIG_PHY_ADDR                0x01
+#define CONFIG_MII             1
+
+/*
+ * GPIO configuration
+ */
+#define CFG_GPS_PORT_CONFIG    0x00058044 /* PSC1=UART, PSC2=UART ; Ether=100MBit with MD
+                                               no PCI */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory     */
+#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_MEMTEST_START      0x00100000      /* memtest works on */
+#define CFG_MEMTEST_END                0x00f00000      /* 1 ... 15 MB in DRAM  */
+
+#define CFG_LOAD_ADDR          0x200000        /* default load address */
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_DISPLAY_BOARDINFO 1
+#define CONFIG_CMDLINE_EDITING  1
+
+/*
+ * Various low-level settings
+ */
+#define CFG_HID0_INIT          HID0_ICE | HID0_ICFI
+#define CFG_HID0_FINAL         HID0_ICE
+
+#define CFG_CS_BURST           0x00000000
+#define CFG_CS_DEADCYCLE       0x33333333
+#define CFG_RESET_ADDRESS      0xff000000
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
+#define OF_CPU                 "PowerPC,5200@0"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_SOC                  "soc5200@f0000000"
+#define OF_STDOUT_PATH         "/soc5200@f0000000/serial@2000"
+
+#endif /* __CONFIG_H */
index bc2fd33ff5e912748896341400cf96df8f1d2c4c..fd4d3affe99706b61c63bcd5d8229200cc4e309c 100644 (file)
  * 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   /* For AMCC 440 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Internal Definitions
index 8623ed3cc88d7b6ec3121a288ce9f844f1e99b3e..0be46eacec77fb5c6833fbeaaede3f90d1d62131 100644 (file)
  * FLASH driver setup
  */
 #define CFG_FLASH_CFI          1       /* Flash memory is CFI compliant */
-#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/cfi_flash.c */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/mtd/cfi_flash.c */
 #define CFG_FLASH_USE_BUFFER_WRITE     1       /* Use buffered writes (~10x faster) */
 #define CFG_FLASH_PROTECTION   1       /* Use hardware sector protection */
 
index 8ae8efeb8171b931c7e79d958670f1feae57ad0a..88a3f6eb95b73daaa366f2dd031133293ef9386e 100644 (file)
  * CFI FLASH driver setup
  */
 #define CFG_FLASH_CFI          1       /* Flash memory is CFI compliant */
-#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/cfi_flash.c */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/mtd/cfi_flash.c */
 #define CFG_FLASH_USE_BUFFER_WRITE 1   /* Use buffered writes (~10x faster) */
 #define CFG_FLASH_PROTECTION   1       /* Use hardware sector protection */
 
index 16ce2f61aec896bb2aa47ba2de5d55fcee539f06..e3bde4ff81d6875b441c68511a8af598e45c1e88 100644 (file)
  * FLASH driver setup
  */
 #define CFG_FLASH_CFI          1       /* Flash memory is CFI compliant */
-#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/cfi_flash.c */
+#define CFG_FLASH_CFI_DRIVER   1       /* Use drivers/mtd/cfi_flash.c */
 
 #define CFG_FLASH_BANKS_LIST { PHYS_FLASH_1, PHYS_FLASH_2 }
 
index 51f19a1456c404130bbc44bcc243cc200bc8d74d..255e0727cc3db9ee31579d4cc468800516bb6374 100644 (file)
  * 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                (32<<10)        /* For AMCC 405 CPUs            */
-#define CFG_CACHELINE_SIZE     32      /* ...                                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
 
 /*
  * Internal Definitions
index 7653ba1d2457c64ee4ab7b6c494b924db39e17cc..d66f4bd449b5498b388c181cc1ce6aa20901003c 100644 (file)
 /*-----------------------------------------------------------------------
  * PPC440 GPIO Configuration
  */
-#define CFG_440_GPIO_TABLE { /*          Out                  GPIO     Alternate1      Alternate2   Alternate3 */ \
+#define CFG_4xx_GPIO_TABLE { /*          Out                  GPIO     Alternate1      Alternate2   Alternate3 */ \
 {                                                                                      \
 /* GPIO Core 0 */                                                                      \
 {GPIO0_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG},  /* GPIO0   EBC_ADDR(7)     DMA_REQ(2)      */ \
 }                                                                                      \
 }
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Internal Definitions
  *
index dc906b15006775d887eaa983aa25ff456f387315..60d401fa0e54f6a3736fcb800d3aa23b440f6a1a 100644 (file)
 #define CFG_ENV_SECT_SIZE      0x40000 /* see README - env sector total size   */
 #define CFG_ENV_SIZE           0x40000 /* Total Size of Environment Sector     */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index e7d8a5a6627c7cf9b307bdad5562d9c4f98f6772..4cc4ff1723f9de53cfab62845f07a266bb629f65 100644 (file)
 #endif
 
 /* pass open firmware flat tree */
-#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_LIBFDT       1
 #define CONFIG_OF_BOARD_SETUP  1
-
-#define OF_CPU                 "PowerPC,8349@0"
-#define OF_SOC                 "soc8349@e0000000"
-#define OF_TBCLK               (bd->bi_busfreq / 4)
-#define OF_STDOUT_PATH         "/soc8349@e0000000/serial@4500"
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
 
 /* I2C */
 #define CONFIG_HARD_I2C                        /* I2C with hardware support*/
 #define CONFIG_CMD_PING
 
 #if defined(CONFIG_PCI)
-    #define CONFG_CMD_PCI
+    #define CONFIG_CMD_PCI
 #endif
 
 #if defined(CFG_RAMBOOT)
  */
 #define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
 #define CFG_RCWH_PCIHOST 0x80000000 /* PCIHOST  */
 
 #if 1 /*528/264*/
diff --git a/include/configs/sbc8548.h b/include/configs/sbc8548.h
new file mode 100644 (file)
index 0000000..c050a06
--- /dev/null
@@ -0,0 +1,569 @@
+/*
+ * Copyright 2007 Wind River Systems <www.windriver.com>
+ * Copyright 2007 Embedded Specialties, Inc.
+ * 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
+ */
+
+/*
+ * sbc8548 board configuration file
+ *
+ * Please refer to doc/README.sbc85xx for more info.
+ *
+ */
+#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_MPC8548         1       /* MPC8548 specific */
+#define CONFIG_SBC8548         1       /* SBC8548 board specific */
+
+#undef CONFIG_PCI              /* enable any pci type devices */
+#undef CONFIG_PCI1             /* PCI controller 1 */
+#undef CONFIG_PCIE1            /* PCIE controler 1 (slot 1) */
+#undef CONFIG_RIO
+#undef CONFIG_PCI2
+#undef CONFIG_FSL_PCI_INIT             /* Use common FSL init code */
+
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+#undef 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_ECC                  /* only for ECC DDR module */
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+#define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
+
+
+#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
+
+#define CONFIG_SYS_CLK_FREQ    66000000 /* SBC8548 default SYSCLK */
+
+/*
+ * 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
+
+/*
+ * 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_PCI2_ADDR  (CFG_CCSRBAR+0x9000)
+#define CFG_PCIE1_ADDR (CFG_CCSRBAR+0xa000)
+
+/*
+ * 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
+       #define CFG_SDRAM_SIZE  256             /* DDR is 256MB */
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+/*
+ * FLASH on the Local Bus
+ * Two banks, one 8MB the other 64MB, using the CFI driver.
+ * Boot from BR0/OR0 bank at 0xff80_0000
+ * Alternate BR6/OR6 bank at 0xfb80_0000
+ *
+ * BR0:
+ *    Base address 0 = 0xff80_0000 = BR0[0:16] = 1111 1111 1000 0000 0
+ *    Port Size = 8 bits = BRx[19:20] = 01
+ *    Use GPCM = BRx[24:26] = 000
+ *    Valid = BRx[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1111 1000 0000 0000 1000 0000 0001 = ff800801    BR0
+ *
+ * BR6:
+ *    Base address 6 = 0xfb80_0000 = BR6[0:16] = 1111 1011 1000 0000 0
+ *    Port Size = 32 bits = BRx[19:20] = 11
+ *    Use GPCM = BRx[24:26] = 000
+ *    Valid = BRx[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1011 1000 0000 0001 1000 0000 0001 = fb801801    BR6
+ *
+ * OR0:
+ *    Addr Mask = 8M = OR1[0:16] = 1111 1111 1000 0000 0
+ *    XAM = OR0[17:18] = 11
+ *    CSNT = OR0[20] = 1
+ *    ACS = half cycle delay = OR0[21:22] = 11
+ *    SCY = 6 = OR0[24:27] = 0110
+ *    TRLX = use relaxed timing = OR0[29] = 1
+ *    EAD = use external address latch delay = OR0[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65    OR0
+ *
+ * OR6:
+ *    Addr Mask = 64M = OR6[0:16] = 1111 1100 0000 0000 0
+ *    XAM = OR6[17:18] = 11
+ *    CSNT = OR6[20] = 1
+ *    ACS = half cycle delay = OR6[21:22] = 11
+ *    SCY = 6 = OR6[24:27] = 0110
+ *    TRLX = use relaxed timing = OR6[29] = 1
+ *    EAD = use external address latch delay = OR6[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1100 0000 0000 0110 1110 0110 0101 = fc006e65    OR6
+ */
+
+#define CFG_BOOT_BLOCK         0xff800000      /* start of 8MB Flash */
+#define CFG_FLASH_BASE         CFG_BOOT_BLOCK  /* start of FLASH 16M */
+
+#define CFG_BR0_PRELIM         0xff800801
+#define CFG_BR6_PRELIM         0xfb801801
+
+#define        CFG_OR0_PRELIM          0xff806e65
+#define        CFG_OR6_PRELIM          0xfc006e65
+
+#define CFG_FLASH_BANKS_LIST   {0xff800000, CFG_FLASH_BASE}
+#define CFG_MAX_FLASH_BANKS    1               /* 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
+
+/* CS5 = Local bus peripherals controlled by the EPLD */
+
+#define CFG_BR5_PRELIM         0xf8000801
+#define CFG_OR5_PRELIM         0xff006e65
+#define CFG_EPLD_BASE          0xf8000000
+#define CFG_LED_DISP_BASE      0xf8000000
+#define CFG_USER_SWITCHES_BASE 0xf8100000
+#define CFG_BD_REV             0xf8300000
+#define CFG_EEPROM_BASE                0xf8b00000
+
+/*
+ * SDRAM on the Local Bus
+ */
+#define CFG_LBC_SDRAM_BASE     0xf0000000      /* Localbus SDRAM */
+#define CFG_LBC_SDRAM_SIZE     64              /* LBC SDRAM is 64MB */
+
+/*
+ * Base Register 3 and Option Register 3 configure SDRAM.
+ * The SDRAM base address, CFG_LBC_SDRAM_BASE, is 0xf0000000.
+ *
+ * For BR3, need:
+ *    Base address of 0xf0000000 = BR[0:16] = 1111 0000 0000 0000 0
+ *    port-size = 32-bits = BR2[19:20] = 11
+ *    no parity checking = BR2[21:22] = 00
+ *    SDRAM for MSEL = BR2[24:26] = 011
+ *    Valid = BR[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 0000 0000 0000 0001 1000 0110 0001 = f0001861
+ *
+ */
+
+#define CFG_BR3_PRELIM         0xf0001861
+
+/*
+ * The SDRAM size in MB, CFG_LBC_SDRAM_SIZE, is 64.
+ *
+ * For OR3, need:
+ *    64MB mask for AM, OR3[0:7] = 1111 1100
+ *                XAM, OR3[17:18] = 11
+ *    10 columns OR3[19-21] = 011
+ *    12 rows   OR3[23-25] = 011
+ *    EAD set for extra time OR[31] = 0
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1100 0000 0000 0110 1100 1100 0000 = fc006cc0
+ */
+
+#define CFG_OR3_PRELIM         0xfc006cc0
+
+#define CFG_LBC_LCRR           0x00000002    /* 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            \
+                               )
+
+#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_INIT_L2_ADDR       0xf8f80000      /* relocate boot L2SRAM */
+
+#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                400000000 /* 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_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+#define CONFIG_OF_STDOUT_VIA_ALIAS     1
+
+/*
+ * 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    0x50
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_OFFSET         0x3000
+
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+#define CFG_PCI_PHYS           0x80000000      /* 1G PCI TLB */
+
+#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       0x00100000      /* 1M */
+
+#ifdef CONFIG_PCI2
+#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       0xe2800000
+#define CFG_PCI2_IO_SIZE       0x00100000      /* 1M */
+#endif
+
+#ifdef CONFIG_PCIE1
+#define CFG_PCIE1_MEM_BASE     0xa0000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE1_IO_BASE      0x00000000
+#define CFG_PCIE1_IO_PHYS      0xe3000000
+#define CFG_PCIE1_IO_SIZE      0x00100000      /*   1M */
+#endif
+
+#ifdef CONFIG_RIO
+/*
+ * RapidIO MMU
+ */
+#define CFG_RIO_MEM_BASE       0xC0000000
+#define CFG_RIO_MEM_SIZE       0x20000000      /* 512M */
+#endif
+
+#ifdef CONFIG_LEGACY
+#define BRIDGE_ID 17
+#define VIA_ID 2
+#else
+#define BRIDGE_ID 28
+#define VIA_ID 4
+#endif
+
+#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 */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+#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_TSEC1   1
+#define CONFIG_TSEC1_NAME      "eTSEC0"
+#define CONFIG_TSEC2   1
+#define CONFIG_TSEC2_NAME      "eTSEC1"
+#define CONFIG_TSEC3   1
+#define CONFIG_TSEC3_NAME      "eTSEC2"
+#define CONFIG_TSEC4
+#define CONFIG_TSEC4_NAME      "eTSEC3"
+#undef CONFIG_MPC85XX_FEC
+
+#define TSEC1_PHY_ADDR         0
+#define TSEC2_PHY_ADDR         1
+#define TSEC3_PHY_ADDR         2
+#define TSEC4_PHY_ADDR         3
+
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define TSEC3_PHYIDX           0
+#define TSEC4_PHYIDX           0
+#define TSEC1_FLAGS            TSEC_GIGABIT
+#define TSEC2_FLAGS            TSEC_GIGABIT
+#define TSEC3_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+#define TSEC4_FLAGS            (TSEC_GIGABIT | TSEC_REDUCED)
+
+/* Options are: eTSEC[0-3] */
+#define CONFIG_ETHPRIME                "eTSEC0"
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+#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 */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_ELF
+
+#if defined(CONFIG_PCI)
+    #define CONFIG_CMD_PCI
+#endif
+
+
+#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 defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_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*/
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_HAS_ETH0
+#define CONFIG_ETHADDR  02:E0:0C:00:00:FD
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR         02:E0:0C:00:01:FD
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR         02:E0:0C:00:02:FD
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETH3ADDR         02:E0:0C:00:03:FD
+#endif
+
+#define CONFIG_IPADDR   192.168.0.55
+
+#define CONFIG_HOSTNAME         sbc8548
+#define CONFIG_ROOTPATH         /opt/eldk/ppc_85xx
+#define CONFIG_BOOTFILE         /uImage
+#define CONFIG_UBOOTPATH /u-boot.bin   /* TFTP server */
+
+#define CONFIG_SERVERIP         192.168.0.2
+#define CONFIG_GATEWAYIP 192.168.0.1
+#define CONFIG_NETMASK  255.255.255.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
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                               \
+ "netdev=eth0\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"     \
+ "consoledev=ttyS0\0"                          \
+ "ramdiskaddr=2000000\0"                       \
+ "ramdiskfile=uRamdisk\0"                      \
+ "fdtaddr=c00000\0"                            \
+ "fdtfile=sbc8548.dtb\0"
+
+#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     CONFIG_RAMBOOTCOMMAND
+
+#endif /* __CONFIG_H */
index defc428819b4a6c98af2b439df6f6bde70c1fdcf..b71ba785be8daf1251542a9ea5a25190dceb5fda 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-  #define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index cb2253698719ff7f637f42426c2ef42e4d875941..0a03c0ecefa9dcdf3adf5246f7ab2a3952aef647 100644 (file)
@@ -433,24 +433,6 @@ extern unsigned long offsetOfEnvironment;
 #define CONFIG_JFFS2_PART_SIZE         0x01000000
 #define CONFIG_JFFS2_PART_OFFSET       0x00000000
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- *
- * CFG_DCACHE_SIZE -> size of data cache:
- * - 405GP 8k
- * - 405GPr 16k
- * How to handle the difference in chache size?
- * CFG_CACHELINE_SIZE -> size of one cache line: 32 bytes
- * (used in cpu/ppc4xx/start.S)
-*/
-#define CFG_DCACHE_SIZE    16384
-
-#define CFG_CACHELINE_SIZE 32
-
-#if defined(CONFIG_CMD_KGDB)
- #define CFG_CACHELINE_SHIFT   5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Init Memory Controller:
  *
index 600f98cf0d40525fa758057d8a273664f3dec8a1..056c2889bfb26850f9fbf73c9beb6187cc88f5b7 100644 (file)
 #define CONFIG_SYS_CLK_FREQ    ((in8(CFG_BCSR_BASE + 3) & 0x80) ? \
                                33333333 : 33000000)
 
+#if 0
+/*
+ * 44x dcache supported is working now on sequoia, but we don't enable
+ * it yet since it needs further testing
+ */
+#define CONFIG_4xx_DCACHE                      /* enable dcache        */
+#endif
+
 #define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
 #define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
 
@@ -53,6 +61,7 @@
 #define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
 #define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
 
+#define CFG_TLB_FOR_BOOT_FLASH 0x0003
 #define CFG_BOOT_BASE_ADDR     0xf0000000
 #define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
 #define CFG_FLASH_BASE         0xfc000000      /* start of FLASH       */
 
 /* USB */
 #ifdef CONFIG_440EPX
-#define CONFIG_USB_OHCI
+#define CONFIG_USB_OHCI_NEW
 #define CONFIG_USB_STORAGE
+#define CFG_OHCI_BE_CONTROLLER
+
+#undef CFG_USB_OHCI_BOARD_INIT
+#define CFG_USB_OHCI_CPU_INIT  1
+#define CFG_USB_OHCI_REGS_BASE CFG_USB_HOST
+#define CFG_USB_OHCI_SLOT_NAME "ppc440"
+#define CFG_USB_OHCI_MAX_ROOT_PORTS 15
 
 /* Comment this out to enable USB 1.1 device */
 #define USB_2_0_DEVICE
 #define CONFIG_BOOTP_BOOTPATH
 #define CONFIG_BOOTP_GATEWAY
 #define CONFIG_BOOTP_HOSTNAME
+#define CONFIG_BOOTP_SUBNETMASK
 
 
 /*
 
 #define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
 #define CONFIG_LOGBUFFER
-#define CFG_POST_CACHE_ADDR    0x10000000 /* free virtual address      */
+#define CFG_POST_CACHE_ADDR    0x7fff0000 /* free virtual address      */
 
 #define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
 
 #define CFG_NAND_SELECT_DEVICE  1      /* nand driver supports mutipl. chips   */
 
 /*-----------------------------------------------------------------------
- * Cache Configuration
- *----------------------------------------------------------------------*/
-#define CFG_DCACHE_SIZE                (32<<10)  /* For AMCC 440 CPUs                  */
-#define CFG_CACHELINE_SIZE     32            /* ...                                */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5             /* log base 2 of the above value  */
-#endif
+ * PPC440 GPIO Configuration
+ */
+/* test-only: take GPIO init from pcs440ep ???? in config file */
+#define CFG_4xx_GPIO_TABLE { /*          Out             GPIO  Alternate1      Alternate2      Alternate3 */ \
+{                                                                                      \
+/* GPIO Core 0 */                                                                      \
+{GPIO0_BASE, GPIO_BI , GPIO_ALT1, GPIO_OUT_0}, /* GPIO0        EBC_ADDR(7)     DMA_REQ(2)      */      \
+{GPIO0_BASE, GPIO_BI , GPIO_ALT1, GPIO_OUT_0}, /* GPIO1        EBC_ADDR(6)     DMA_ACK(2)      */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO2        EBC_ADDR(5)     DMA_EOT/TC(2)   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO3        EBC_ADDR(4)     DMA_REQ(3)      */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO4        EBC_ADDR(3)     DMA_ACK(3)      */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO5        EBC_ADDR(2)     DMA_EOT/TC(3)   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO6        EBC_CS_N(1)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO7        EBC_CS_N(2)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO8        EBC_CS_N(3)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO9        EBC_CS_N(4)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_0}, /* GPIO10 EBC_CS_N(5)                   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO11 EBC_BUS_ERR                   */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO12                               */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO13                               */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO14                               */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO15                               */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO16 GMCTxD(4)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO17 GMCTxD(5)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO18 GMCTxD(6)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO19 GMCTxD(7)                     */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO20 RejectPkt0                    */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO21 RejectPkt1                    */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO22                               */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO23 SCPD0                         */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO24 GMCTxD(2)                     */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO25 GMCTxD(3)                     */      \
+{GPIO0_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO26                               */      \
+{GPIO0_BASE, GPIO_IN , GPIO_ALT2, GPIO_OUT_0}, /* GPIO27 EXT_EBC_REQ   USB2D_RXERROR   */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO28               USB2D_TXVALID   */      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO29 EBC_EXT_HDLA  USB2D_PAD_SUSPNDM */    \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO30 EBC_EXT_ACK   USB2D_XCVRSELECT*/      \
+{GPIO0_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO31 EBC_EXR_BUSREQ        USB2D_TERMSELECT*/      \
+},                                                                                     \
+{                                                                                      \
+/* GPIO Core 1 */                                                                      \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO32 USB2D_OPMODE0 EBC_DATA(2)     */      \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_1}, /* GPIO33 USB2D_OPMODE1 EBC_DATA(3)     */      \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT3, GPIO_OUT_1}, /* GPIO34 UART0_DCD_N   UART1_DSR_CTS_N UART2_SOUT*/ \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT3, GPIO_OUT_0}, /* GPIO35 UART0_8PIN_DSR_N UART1_RTS_DTR_N UART2_SIN*/ \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT3, GPIO_OUT_0}, /* GPIO36 UART0_8PIN_CTS_N EBC_DATA(0)  UART3_SIN*/ \
+{GPIO1_BASE, GPIO_BI , GPIO_ALT2, GPIO_OUT_0}, /* GPIO37 UART0_RTS_N   EBC_DATA(1)     UART3_SOUT*/ \
+{GPIO1_BASE, GPIO_OUT, GPIO_ALT2, GPIO_OUT_1}, /* GPIO38 UART0_DTR_N   UART1_SOUT      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT2, GPIO_OUT_0}, /* GPIO39 UART0_RI_N    UART1_SIN       */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO40 UIC_IRQ(0)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO41 UIC_IRQ(1)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO42 UIC_IRQ(2)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO43 UIC_IRQ(3)                    */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO44 UIC_IRQ(4)    DMA_ACK(1)      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_ALT1, GPIO_OUT_0}, /* GPIO45 UIC_IRQ(6)    DMA_EOT/TC(1)   */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO46 UIC_IRQ(7)    DMA_REQ(0)      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO47 UIC_IRQ(8)    DMA_ACK(0)      */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO48 UIC_IRQ(9)    DMA_EOT/TC(0)   */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO49  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO50  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO51  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO52  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO53  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO54  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO55  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO56  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO57  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO58  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO59  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO60  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO61  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO62  Unselect via TraceSelect Bit */      \
+{GPIO1_BASE, GPIO_IN , GPIO_SEL , GPIO_OUT_0}, /* GPIO63  Unselect via TraceSelect Bit */      \
+}                                                                                      \
+}
 
 /*
  * Internal Definitions
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2           /* which serial port to use */
 #endif
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
 #endif /* __CONFIG_H */
index c5ae0cde361480b2ee2cc830732c88db70a88c4e..3baa32c8d6e057c8708612899c7e74fe29870c2e 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index c6e79532096335fd41ed7e5cd63ac50b063beaa7..9457bce0aea1ae5fc8d50c918003cf6ac7dd9080 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
 
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
-
 /*
  * Internal Definitions
  *
index d623e56009aecf292978b94ce2c55d9558790c54..d012c60aac8f74935e1f67251cc6ee7340f4ff25 100644 (file)
@@ -80,6 +80,7 @@
        "bootfile=/tftpboot/taihu/uImage\0"                             \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "netdev=eth0\0"                                                 \
+       "hostname=taihu\0"                                              \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
                "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
 
 #define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
 
-#define CONFIG_AUTO_COMPLETE   1       /* add autocompletion support   */
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
 #define CONFIG_LOOPW            1       /* enable loopw command         */
+#define CONFIG_MX_CYCLIC        1       /* enable mdc/mwc commands      */
 #define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
 #define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+#define CFG_CONSOLE_INFO_QUIET 1       /* don't print console @ startup*/
 
 /*-----------------------------------------------------------------------
  * I2C stuff
@@ -244,6 +247,7 @@ unsigned char spi_read(void);
 /* standard dtt sensor configuration */
 #define CONFIG_DTT_DS1775      1
 #define CONFIG_DTT_SENSORS     { 0 }
+#define CFG_I2C_DTT_ADDR       0x49
 
 /*-----------------------------------------------------------------------
  * PCI stuff
@@ -327,7 +331,7 @@ unsigned char spi_read(void);
 /*-----------------------------------------------------------------------
  * PPC405 GPIO Configuration
  */
-#define CFG_440_GPIO_TABLE { /*                                GPIO    Alternate1              */      \
+#define CFG_4xx_GPIO_TABLE { /*                                GPIO    Alternate1              */      \
 {                                                                                              \
 /* GPIO Core 0 */                                                                              \
 { GPIO_BASE, GPIO_OUT, GPIO_SEL,  GPIO_OUT_NO_CHG }, /* GPIO0  PerBLast    SPI CS      */      \
@@ -365,13 +369,6 @@ unsigned char spi_read(void);
 }                                                                                              \
 }
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405EP CPU */
-#define CFG_CACHELINE_SIZE     32
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-
 /*
  * Init Memory Controller:
  *
@@ -421,43 +418,6 @@ unsigned char spi_read(void);
 #define CFG_EBC_PB4AP           0x158FF600
 #define CFG_EBC_PB4CR           0x5021A000
 
-/*-----------------------------------------------------------------------
- * Definitions for GPIO setup (PPC405EP specific)
- *
- * GPIO0[0]     - External Bus Controller BLAST output
- * GPIO0[1-9]   - Instruction trace outputs
- * GPIO0[10-13] - External Bus Controller CS_1 - CS_4 outputs
- * GPIO0[14-16] - External Bus Controller ABUS3-ABUS5 outputs
- * GPIO0[17-23] - External Interrupts IRQ0 - IRQ6 inputs
- * GPIO0[24-27] - UART0 control signal inputs/outputs
- * GPIO0[28-29] - UART1 data signal input/output
- * GPIO0[30-31] - EMAC0 and EMAC1 reject packet inputs
- */
-#define CFG_GPIO0_OSRH 0x15555550      /* output select high/low */
-#define CFG_GPIO0_OSRL 0x00000110
-#define CFG_GPIO0_ISR1H        0x00000001      /* input select high/low */
-#define CFG_GPIO0_ISR1L        0x15545440
-#define CFG_GPIO0_TSRH 0x00000000      /* three-state select high/low */
-#define CFG_GPIO0_TSRL 0x00000000
-#define CFG_GPIO0_TCR  0xFFFE8117      /* three-state control */
-#define CFG_GPIO0_ODR  0x00000000      /* open drain */
-
-#define GPIO0          0               /* GPIO controller 0 */
-
-/* the GPIO macros in include/ppc405.h for High/Low registers are backwards */
-
-#define GPIOx_OSL      (GPIO0_OSRH-GPIO_BASE)
-#define GPIOx_TSL      (GPIO0_TSRH-GPIO_BASE)
-#define GPIOx_IS1L     (GPIO0_ISR1H-GPIO_BASE)
-#define GPIOx_IS2L     (GPIO0_ISR1H-GPIO_BASE)
-#define GPIOx_IS3L     (GPIO0_ISR1H-GPIO_BASE)
-
-#define GPIO_OS(x)     (x+GPIOx_OSL)   /* GPIO output select */
-#define GPIO_TS(x)     (x+GPIOx_TSL)   /* GPIO three-state select */
-#define GPIO_IS1(x)    (x+GPIOx_IS1L)  /* GPIO input select */
-#define GPIO_IS2(x)    (x+GPIOx_IS1L)
-#define GPIO_IS3(x)    (x+GPIOx_IS1L)
-
 #define CPLD_REG0_ADDR 0x50100000
 #define CPLD_REG1_ADDR 0x50100001
 /*
index baa4fbd312b1b14c410fe5a182ea3c244a32b6ed..ab3b0c1acba3017e7e45c2a967b297fab769040f 100644 (file)
  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- *----------------------------------------------------------------------*/
-#define CFG_DCACHE_SIZE                32768   /* For AMCC 440 CPUs                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Internal Definitions
  *
index 180549efad38c8ecb53d269aad6c22beea2c17b5..19b29e71d117c54dba62b66ed3999d4296473aaf 100644 (file)
        (CFG_NVRAM_BASE_ADDR+CFG_NVRAM_SIZE-CFG_ENV_SIZE)       /* Env  */
 #endif
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs, older 405 ppc's   */
-                                       /* have only 8kB, 16kB is save here     */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
index 35bce4af904905075a9e7c37e2650756eb5b6162..a8eeff989c347fe5972350af349a3580755e89a4 100644 (file)
 #define CFG_ENV_OFFSET         0x0
 #endif /* CFG_ENV_IS_IN_EEPROM */
 
+/* I2C SYSMON (LM75, AD7414 is almost compatible)                      */
+#define CONFIG_DTT_LM75                1               /* ON Semi's LM75       */
+#define CONFIG_DTT_AD7414      1               /* use AD7414           */
+#define CONFIG_DTT_SENSORS     {0}             /* Sensor addresses     */
+#define CFG_DTT_MAX_TEMP       70
+#define CFG_DTT_LOW_TEMP       -30
+#define CFG_DTT_HYSTERESIS     3
+
 #define CONFIG_PREBOOT "echo;" \
        "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
        "echo"
 #define CONFIG_CMD_ASKENV
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_DIAG
+#define CONFIG_CMD_DTT
 #define CONFIG_CMD_ELF
 #define CONFIG_CMD_EEPROM
 #define CONFIG_CMD_I2C
 
 #define CFG_BCSR5_PCI66EN      0x80
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-#endif
-
 /*
  * Internal Definitions
  *
index 74033b4aef43af04f910ca0eae339e397b275063..db1d35bdd75f5282d2aef104a8a59ee73edf4046 100644 (file)
@@ -64,7 +64,7 @@
 #define CFG_PCI_TARGBASE       CFG_PCI_MEMBASE
 
 #define CFG_PCIE_MEMBASE       0xb0000000      /* mapped PCIe memory   */
-#define CFG_PCIE_MEMSIZE       0x01000000
+#define CFG_PCIE_MEMSIZE       0x08000000      /* smallest incr for PCIe port */
 #define CFG_PCIE_BASE          0xe0000000      /* PCIe UTL regs */
 
 #define CFG_PCIE0_CFGBASE      0xc0000000
@@ -74,6 +74,9 @@
 #define CFG_PCIE1_XCFGBASE     0xc3001000
 #define CFG_PCIE2_XCFGBASE     0xc3002000
 
+/* base address of inbound PCIe window */
+#define CFG_PCIE_INBOUND_BASE  0x0000000400000000ULL
+
 /* System RAM mapped to PCI space */
 #define CONFIG_PCI_SYS_MEM_BUS CFG_SDRAM_BASE
 #define CONFIG_PCI_SYS_MEM_PHYS        CFG_SDRAM_BASE
                "setenv filesize;saveenv\0"                             \
        "upd=run load;run update\0"                                     \
        "pciconfighost=1\0"                                             \
+       "pcie_mode=RP:EP:EP\0"                                          \
        ""
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
  * 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                8192    /* For AMCC 405 CPUs            */
-#define CFG_CACHELINE_SIZE     32      /* ...                          */
-#if defined(CONFIG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
-#endif
 
 /*
  * Internal Definitions
index 605755a87e8eedf423d0e546001cdf4d98eca4e8..810a528d2497ae1d424085518ff2ea988eac22d8 100644 (file)
 #define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
 #endif
 
-/*-----------------------------------------------------------------------
- * Cache Configuration
- */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405EP CPU                    */
-#define CFG_CACHELINE_SIZE     32      /* ...                  */
-#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
-
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in data cache)
  */
index 2e8c690158f16e4e86bf25d4f197d62b9e455d79..4e8aaad87fef82140f416b6ccb956b710e3ca3bb 100644 (file)
@@ -31,7 +31,8 @@
     defined(CONFIG_DTT_DS1621) || \
     defined(CONFIG_DTT_DS1775) || \
     defined(CONFIG_DTT_LM81) || \
-    defined(CONFIG_DTT_ADM1021)
+    defined(CONFIG_DTT_ADM1021) || \
+    defined(CONFIG_DTT_LM73)
 
 #define CONFIG_DTT                             /* We have a DTT */
 
@@ -119,4 +120,13 @@ extern int dtt_get_temp(int sensor);
 #define DTT_ADM1021_DEVID      0x41
 #endif
 
+#if defined(CONFIG_DTT_LM73)
+#define DTT_READ_TEMP          0x0
+#define DTT_CONFIG             0x1
+#define DTT_TEMP_HIGH          0x2
+#define DTT_TEMP_LOW           0x3
+#define DTT_CONTROL            0x4
+#define DTT_ID                 0x7
+#endif
+
 #endif /* _DTT_H_ */
index 0d73260f40c56fca9a5ccd15fc310b7b75b5470f..1971eee291af8fa3dbcb53a749581f942020e6d6 100644 (file)
@@ -17,100 +17,6 @@ typedef struct
 
 #endif  /* _ASMLANGUAGE */
 
-/* Motorola E500 core provides 16 TLB1 entries; they can be used for
- * initial memory mapping like legacy BAT registers do. Usually we
- * use four MAS registers(MAS0-3) to operate on TLB1 entries.
- *
- * While there are 16 Entries with variable Page Sizes in TLB1,
- * there are also 256 Entries with fixed 4K pages in TLB0.
- *
- * We also need LAWs(Local Access Window) to associate a range of
- * the local 32-bit address space with a particular target interface
- * such as PCI/PCI-X, RapidIO, Local Bus and DDR SDRAM.
- *
- * We put TLB1/LAW code here because memory mapping is board-specific
- * instead of cpu-specific.
- *
- * While these macros are all nominally for TLB1 by name, they can
- * also be used for TLB0 as well.
- */
-
-
-/*
- * Convert addresses to Effective and Real Page Numbers.
- * Grab the high 20-bits and shift 'em down, dropping the "byte offset".
- */
-#define E500_TLB_EPN(addr)     (((addr) >> 12) & 0xfffff)
-#define E500_TLB_RPN(addr)     (((addr) >> 12) & 0xfffff)
-
-
-/* MAS0
- * tlbsel(TLB Select):0,1
- * esel(Entry Select): 0,1,2,...,15 for TLB1
- * nv(Next victim):0,1
- */
-#define TLB1_MAS0(tlbsel,esel,nv) \
-                       ((((tlbsel) << 28) & MAS0_TLBSEL)       |\
-                       (((esel) << 16) & MAS0_ESEL )           |\
-                       (nv) )
-
-
-/* MAS1
- * v(TLB valid bit):0,1
- * iprot(invalidate protect):0,1
- * tid(translation identity):8bit to match process IDs
- * ts(translation space,comparing with MSR[IS,DS]): 0,1
- * tsize(translation size):1,2,...,9(4K,16K,64K,256K,1M,4M,16M,64M,256M)
- */
-#define TLB1_MAS1(v,iprot,tid,ts,tsize) \
-                       ((((v) << 31) & MAS1_VALID)             |\
-                       (((iprot) << 30) & MAS1_IPROT)          |\
-                       (((tid) << 16) & MAS1_TID)              |\
-                       (((ts) << 12) & MAS1_TS)                |\
-                       (((tsize) << 8) & MAS1_TSIZE) )
-
-
-/* MAS2
- * epn(effective page number):20bits
- * sharen(Shared cache state):0,1
- * x0,x1(implementation specific page attribute):0,1
- * w,i,m,g,e(write-through,cache-inhibited,memory coherency,guarded,
- *      endianness):0,1
- */
-#define TLB1_MAS2(epn,sharen,x0,x1,w,i,m,g,e) \
-                       ((((epn) << 12) & MAS2_EPN)             |\
-                       (((sharen) << 9) & MAS2_SHAREN)         |\
-                       (((x0) << 6) & MAS2_X0)                 |\
-                       (((x1) << 5) & MAS2_X1)                 |\
-                       (((w) << 4) & MAS2_W)                   |\
-                       (((i) << 3) & MAS2_I)                   |\
-                       (((m) << 2) & MAS2_M)                   |\
-                       (((g) << 1) & MAS2_G)                   |\
-                       (e) )
-
-
-/* MAS3
- * rpn(real page number):20bits
- * u0-u3(user bits, useful for page table management in OS):0,1
- * ux,sx,uw,sw,ur,sr(permission bits, user and supervisor read,
- *      write,execute permission).
- */
-#define TLB1_MAS3(rpn,u0,u1,u2,u3,ux,sx,uw,sw,ur,sr) \
-                       ((((rpn) << 12) & MAS3_RPN)             |\
-                       (((u0) << 9) & MAS3_U0)                 |\
-                       (((u1) << 8) & MAS3_U1)                 |\
-                       (((u2) << 7) & MAS3_U2)                 |\
-                       (((u3) << 6) & MAS3_U3)                 |\
-                       (((ux) << 5) & MAS3_UX)                 |\
-                       (((sx) << 4) & MAS3_SX)                 |\
-                       (((uw) << 3) & MAS3_UW)                 |\
-                       (((sw) << 2) & MAS3_SW)                 |\
-                       (((ur) << 1) & MAS3_UR)                 |\
-                       (sr) )
-
-
 #define RESET_VECTOR   0xfffffffc
-#define CACHELINE_MASK (CFG_CACHELINE_SIZE - 1) /* Address mask for cache
-                                                    line aligned data. */
 
 #endif /* __E500_H__ */
index 3d6c1a841b70913d549e17def4ecfd217d0eaa10..7836f28cda68efb3e329f0bc633e41cbe0769674 100644 (file)
@@ -46,6 +46,9 @@ void do_fixup_by_compat_u32(void *fdt, const char *compat,
                            const char *prop, u32 val, int create);
 int fdt_fixup_memory(void *blob, u64 start, u64 size);
 void fdt_fixup_ethernet(void *fdt, bd_t *bd);
+int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
+                        const void *val, int len, int create);
+void fdt_fixup_qe_firmware(void *fdt);
 
 #ifdef CONFIG_OF_HAS_UBOOT_ENV
 int fdt_env(void *fdt);
index 6b2fb92ea3578b7a4b6fb5c49ee2c1d8f4ecee5a..6c0523685817646a260c951eb772e647c3868c13 100644 (file)
@@ -544,7 +544,7 @@ int fdt_parent_offset(const void *fdt, int nodeoffset);
  *     offset = fdt_node_offset_by_prop_value(fdt, -1, propname,
  *                                            propval, proplen);
  *     while (offset != -FDT_ERR_NOTFOUND) {
- *             // other code here
+ *             ... other code here ...
  *             offset = fdt_node_offset_by_prop_value(fdt, offset, propname,
  *                                                    propval, proplen);
  *     }
@@ -629,7 +629,7 @@ int fdt_node_check_compatible(const void *fdt, int nodeoffset,
  * idiom can be used:
  *     offset = fdt_node_offset_by_compatible(fdt, -1, compatible);
  *     while (offset != -FDT_ERR_NOTFOUND) {
- *             // other code here
+ *             ... other code here ...
  *             offset = fdt_node_offset_by_compatible(fdt, offset, compatible);
  *     }
  *
@@ -655,8 +655,65 @@ int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
 /* Write-in-place functions                                           */
 /**********************************************************************/
 
+/**
+ * fdt_setprop_inplace - change a property's value, but not its size
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: pointer to data to replace the property value with
+ * @len: length of the property value
+ *
+ * fdt_setprop_inplace() replaces the value of a given property with
+ * the data in val, of length len.  This function cannot change the
+ * size of a property, and so will only work if len is equal to the
+ * current length of the property.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the given property value, and will not alter or move any other part
+ * of the tree.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, if len is not equal to the property's current length
+ *     -FDT_ERR_NOTFOUND, node does not have the named property
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
                        const void *val, int len);
+
+/**
+ * fdt_setprop_inplace_cell - change the value of a single-cell property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: cell (32-bit integer) value to replace the property with
+ *
+ * fdt_setprop_inplace_cell() replaces the value of a given property
+ * with the 32-bit integer cell value in val, converting val to
+ * big-endian if necessary.  This function cannot change the size of a
+ * property, and so will only work if the property already exists and
+ * has length 4.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the given property value, and will not alter or move any other part
+ * of the tree.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, if the property's length is not equal to 4
+  *    -FDT_ERR_NOTFOUND, node does not have the named property
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
                                           const char *name, uint32_t val)
 {
@@ -664,7 +721,54 @@ static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
        return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val));
 }
 
+/**
+ * fdt_nop_property - replace a property with nop tags
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to nop
+ * @name: name of the property to nop
+ *
+ * fdt_nop_property() will replace a given property's representation
+ * in the blob with FDT_NOP tags, effectively removing it from the
+ * tree.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the property, and will not alter or move any other part of the
+ * tree.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOTFOUND, node does not have the named property
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_nop_property(void *fdt, int nodeoffset, const char *name);
+
+/**
+ * fdt_nop_node - replace a node (subtree) with nop tags
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node to nop
+ *
+ * fdt_nop_node() will replace a given node's representation in the
+ * blob, including all its subnodes, if any, with FDT_NOP tags,
+ * effectively removing it from the tree.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the node and its properties and subnodes, and will not alter or
+ * move any other part of the tree.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_nop_node(void *fdt, int nodeoffset);
 
 /**********************************************************************/
@@ -693,23 +797,242 @@ int fdt_finish(void *fdt);
 int fdt_open_into(const void *fdt, void *buf, int bufsize);
 int fdt_pack(void *fdt);
 
+/**
+ * fdt_add_mem_rsv - add one memory reserve map entry
+ * @fdt: pointer to the device tree blob
+ * @addres, @size: 64-bit values (native endian)
+ *
+ * Adds a reserve map entry to the given blob reserving a region at
+ * address address of length size.
+ *
+ * This function will insert data into the reserve map and will
+ * therfore change the indexes of some entries in the table.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *             contain the new reservation entry
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);
+
+/**
+ * fdt_del_mem_rsv - remove a memory reserve map entry
+ * @fdt: pointer to the device tree blob
+ * @n: entry to remove
+ *
+ * fdt_del_mem_rsv() removes the n-th memory reserve map entry from
+ * the blob.
+ *
+ * This function will delete data from the reservation table and will
+ * therfore change the indexes of some entries in the table.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOTFOUND, there is no entry of the given index (i.e. there
+ *             are less than n+1 reserve map entries)
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_del_mem_rsv(void *fdt, int n);
 
+/**
+ * fdt_setprop - create or change a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: pointer to data to set the property value to
+ * @len: length of the property value
+ *
+ * fdt_setprop() sets the value of the named property in the given
+ * node to the given value and length, creeating the property if it
+ * does not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *             contain the new property value
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_setprop(void *fdt, int nodeoffset, const char *name,
                const void *val, int len);
+
+/**
+ * fdt_setprop_cell - set a property to a single cell value
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 32-bit integer value for the property (native endian)
+ *
+ * fdt_setprop_cell() sets the value of the named property in the
+ * given node to the given cell value (converting to big-endian if
+ * necessary), or creates a new property with that value if it does
+ * not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *             contain the new property value
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
                                   uint32_t val)
 {
        val = cpu_to_fdt32(val);
        return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val));
 }
+
+/**
+ * fdt_setprop_string - set a property to a string value
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @str: string value for the property
+ *
+ * fdt_setprop_string() sets the value of the named property in the
+ * given node to the given string value (using the length of the
+ * string to determine the new length of the property), or creates a
+ * new property with that value if it does not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ *             contain the new property value
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 #define fdt_setprop_string(fdt, nodeoffset, name, str) \
        fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
+
+/**
+ * fdt_delprop - delete a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to nop
+ * @name: name of the property to nop
+ *
+ * fdt_del_property() will delete the given property.
+ *
+ * This function will delete data from the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_NOTFOUND, node does not have the named property
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_delprop(void *fdt, int nodeoffset, const char *name);
+
+/**
+ * fdt_add_subnode_namelen - creates a new node based on substring
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ * @namelen: number of characters of name to consider
+ *
+ * Identical to fdt_add_subnode(), but use only the first namelen
+ * characters of name as the name of the new node.  This is useful for
+ * creating subnodes based on a portion of a larger string, such as a
+ * full path.
+ */
 int fdt_add_subnode_namelen(void *fdt, int parentoffset,
                            const char *name, int namelen);
+
+/**
+ * fdt_add_subnode - creates a new node
+ * @fdt: pointer to the device tree blob
+ * @parentoffset: structure block offset of a node
+ * @name: name of the subnode to locate
+ *
+ * fdt_add_subnode() creates a new node as a subnode of the node at
+ * structure block offset parentoffset, with the given name (which
+ * should include the unit address, if any).
+ *
+ * This function will insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+
+ * returns:
+ *     structure block offset of the created nodeequested subnode (>=0), on success
+ *     -FDT_ERR_NOTFOUND, if the requested subnode does not exist
+ *     -FDT_ERR_BADOFFSET, if parentoffset did not point to an FDT_BEGIN_NODE tag
+ *     -FDT_ERR_EXISTS, if the node at parentoffset already has a subnode of
+ *             the given name
+ *     -FDT_ERR_NOSPACE, if there is insufficient free space in the
+ *             blob to contain the new node
+ *     -FDT_ERR_NOSPACE
+ *     -FDT_ERR_BADLAYOUT
+ *      -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings.
+ */
 int fdt_add_subnode(void *fdt, int parentoffset, const char *name);
+
+/**
+ * fdt_del_node - delete a node (subtree)
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node to nop
+ *
+ * fdt_del_node() will remove the given node, including all its
+ * subnodes if any, from the blob.
+ *
+ * This function will delete data from the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ *     0, on success
+ *     -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ *     -FDT_ERR_BADLAYOUT,
+ *     -FDT_ERR_BADMAGIC,
+ *     -FDT_ERR_BADVERSION,
+ *     -FDT_ERR_BADSTATE,
+ *     -FDT_ERR_BADSTRUCTURE,
+ *     -FDT_ERR_TRUNCATED, standard meanings
+ */
 int fdt_del_node(void *fdt, int nodeoffset);
 
 /**********************************************************************/
index 49ff80fd3aa86e0e632d61b95fe3987995589f2b..4cc4a7d1bb444c800d4422bb7ac1cbba76b40a45 100644 (file)
@@ -129,7 +129,7 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
 #define NAND_ECC_HW3_256       2
 /* Hardware ECC 3 byte ECC per 512 Byte data */
 #define NAND_ECC_HW3_512       3
-/* Hardware ECC 3 byte ECC per 512 Byte data */
+/* Hardware ECC 6 byte ECC per 512 Byte data */
 #define NAND_ECC_HW6_512       4
 /* Hardware ECC 8 byte ECC per 512 Byte data */
 #define NAND_ECC_HW8_512       6
diff --git a/include/mb862xx.h b/include/mb862xx.h
new file mode 100644 (file)
index 0000000..1af5670
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * (C) Copyright 2007
+ * DENX Software Engineering, Anatolij Gustschin, agust@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
+ */
+
+/*
+ * mb862xx.h - Graphic interface for Fujitsu CoralP/Lime
+ */
+
+#ifndef _MB862XX_H_
+#define _MB862XX_H_
+
+#define PCI_VENDOR_ID_FUJITSU  0x10CF
+#define PCI_DEVICE_ID_CORAL_P  0x2019
+#define PCI_DEVICE_ID_CORAL_PA 0x201E
+
+typedef struct {
+       unsigned int index;
+       unsigned int value;
+} gdc_regs;
+
+const gdc_regs *board_get_regs (void);
+unsigned int board_video_init (void);
+void board_backlight_switch(int);
+
+#endif /* _MB862XX_H_ */
index 4d32c6a3764ac7a17d0d1b14140cb04b58af3c88..7299ca00bc41d962b4879aaa25a3c4e63f11c537 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2006 Freescale Semiconductor, Inc.
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 #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
+#define SPR_8313_REV10                 0x80B10010
+#define SPR_8311E_REV10                        0x80B20010
+#define SPR_8311_REV10                 0x80B30010
+#define SPR_8315E_REV10                        0x80B40010
+#define SPR_8315_REV10                 0x80B50010
+#define SPR_8314E_REV10                        0x80B60010
+#define SPR_8314_REV10                 0x80B70010
+
+#define SPR_8379E_REV10                        0x80C20010
+#define SPR_8379_REV10                 0x80C30010
+#define SPR_8378E_REV10                        0x80C40010
+#define SPR_8378_REV10                 0x80C50010
+#define SPR_8377E_REV10                        0x80C60010
+#define SPR_8377_REV10                 0x80C70010
 
 /* SPCR - System Priority Configuration Register
  */
 #define SPCR_TSEC2EP                   0x00000003      /* TSEC2 emergency priority */
 #define SPCR_TSEC2EP_SHIFT             (31-31)
 
-#elif defined(CONFIG_MPC831X)
-/* SPCR bits - MPC831x specific */
+#elif defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
+/* SPCR bits - MPC831x and MPC837x 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)
+#define SPCR_TSECBDP                   0x00000C00      /* TSEC buffer descriptor priority */
+#define SPCR_TSECBDP_SHIFT             (31-21)
+#define SPCR_TSECEP                    0x00000300      /* TSEC emergency priority */
+#define SPCR_TSECEP_SHIFT              (31-23)
 #endif
 
 /* SICRL/H - System I/O Configuration Register Low/High
 #define SICRL_URT_CTPR                 0x06000000
 #define SICRL_IRQ_CTPR                 0x00C00000
 
-#elif defined(CONFIG_MPC831X)
-/* SICRL bits - MPC831x specific */
+#elif defined(CONFIG_MPC8313)
+/* SICRL bits - MPC8313 specific */
 #define SICRL_LBC                      0x30000000
 #define SICRL_UART                     0x0C000000
 #define SICRL_SPI_A                    0x03000000
 #define SICRL_ETSEC1_A                 0x0000000C
 #define SICRL_ETSEC2_A                 0x00000003
 
-/* SICRH bits - MPC831x specific */
+/* SICRH bits - MPC8313 specific */
 #define SICRH_INTR_A                   0x02000000
 #define SICRH_INTR_B                   0x00C00000
 #define SICRH_IIC                      0x00300000
 #define SICRH_TSOBI1                   0x00000002
 #define SICRH_TSOBI2                   0x00000001
 
+#elif defined(CONFIG_MPC8315)
+/* SICRL bits - MPC8315 specific */
+#define SICRL_DMA_CH0                  0xc0000000
+#define SICRL_DMA_SPI                  0x30000000
+#define SICRL_UART                     0x0c000000
+#define SICRL_IRQ4                     0x02000000
+#define SICRL_IRQ5                     0x01800000
+#define SICRL_IRQ6_7                   0x00400000
+#define SICRL_IIC1                     0x00300000
+#define SICRL_TDM                      0x000c0000
+#define SICRL_TDM_SHARED               0x00030000
+#define SICRL_PCI_A                    0x0000c000
+#define SICRL_ELBC_A                   0x00003000
+#define SICRL_ETSEC1_A                 0x000000c0
+#define SICRL_ETSEC1_B                 0x00000030
+#define SICRL_ETSEC1_C                 0x0000000c
+#define SICRL_TSEXPOBI                 0x00000001
+
+/* SICRH bits - MPC8315 specific */
+#define SICRH_GPIO_0                   0xc0000000
+#define SICRH_GPIO_1                   0x30000000
+#define SICRH_GPIO_2                   0x0c000000
+#define SICRH_GPIO_3                   0x03000000
+#define SICRH_GPIO_4                   0x00c00000
+#define SICRH_GPIO_5                   0x00300000
+#define SICRH_GPIO_6                   0x000c0000
+#define SICRH_GPIO_7                   0x00030000
+#define SICRH_GPIO_8                   0x0000c000
+#define SICRH_GPIO_9                   0x00003000
+#define SICRH_GPIO_10                  0x00000c00
+#define SICRH_GPIO_11                  0x00000300
+#define SICRH_ETSEC2_A                 0x000000c0
+#define SICRH_TSOBI1                   0x00000002
+#define SICRH_TSOBI2                   0x00000001
+
+#elif defined(CONFIG_MPC837X)
+/* SICRL bits - MPC837x specific */
+#define SICRL_USB_A                    0xC0000000
+#define SICRL_USB_B                    0x30000000
+#define SICRL_UART                     0x0C000000
+#define SICRL_GPIO_A                   0x02000000
+#define SICRL_GPIO_B                   0x01000000
+#define SICRL_GPIO_C                   0x00800000
+#define SICRL_GPIO_D                   0x00400000
+#define SICRL_GPIO_E                   0x00200000
+#define SICRL_GPIO_F                   0x00180000
+#define SICRL_GPIO_G                   0x00040000
+#define SICRL_GPIO_H                   0x00020000
+#define SICRL_GPIO_I                   0x00010000
+#define SICRL_GPIO_J                   0x00008000
+#define SICRL_GPIO_K                   0x00004000
+#define SICRL_GPIO_L                   0x00003000
+#define SICRL_DMA_A                    0x00000800
+#define SICRL_DMA_B                    0x00000400
+#define SICRL_DMA_C                    0x00000200
+#define SICRL_DMA_D                    0x00000100
+#define SICRL_DMA_E                    0x00000080
+#define SICRL_DMA_F                    0x00000040
+#define SICRL_DMA_G                    0x00000020
+#define SICRL_DMA_H                    0x00000010
+#define SICRL_DMA_I                    0x00000008
+#define SICRL_DMA_J                    0x00000004
+#define SICRL_LDP_A                    0x00000002
+#define SICRL_LDP_B                    0x00000001
+
+/* SICRH bits - MPC837x specific */
+#define SICRH_DDR                      0x80000000
+#define SICRH_TSEC1_A                  0x10000000
+#define SICRH_TSEC1_B                  0x08000000
+#define SICRH_TSEC2_A                  0x00400000
+#define SICRH_TSEC2_B                  0x00200000
+#define SICRH_TSEC2_C                  0x00100000
+#define SICRH_TSEC2_D                  0x00080000
+#define SICRH_TSEC2_E                  0x00040000
+#define SICRH_TMR                      0x00010000
+#define SICRH_GPIO2_A                  0x00008000
+#define SICRH_GPIO2_B                  0x00004000
+#define SICRH_GPIO2_C                  0x00002000
+#define SICRH_GPIO2_D                  0x00001000
+#define SICRH_GPIO2_E                  0x00000C00
+#define SICRH_GPIO2_F                  0x00000300
+#define SICRH_GPIO2_G                  0x000000C0
+#define SICRH_GPIO2_H                  0x00000030
+#define SICRH_SPI                      0x00000003
 #endif
 
 /* SWCRR - System Watchdog Control Register
 #define HRCWL_CE_TO_PLL_1X29           0x0000001D
 #define HRCWL_CE_TO_PLL_1X30           0x0000001E
 #define HRCWL_CE_TO_PLL_1X31           0x0000001F
+
+#elif defined(CONFIG_MPC8315)
+#define HRCWL_SVCOD                    0x30000000
+#define HRCWL_SVCOD_SHIFT              28
+#define HRCWL_SVCOD_DIV_2              0x00000000
+#define HRCWL_SVCOD_DIV_4              0x10000000
+#define HRCWL_SVCOD_DIV_8              0x20000000
+#define HRCWL_SVCOD_DIV_1              0x30000000
+
+#elif defined(CONFIG_MPC837X)
+#define HRCWL_SVCOD                    0x30000000
+#define HRCWL_SVCOD_SHIFT              28
+#define HRCWL_SVCOD_DIV_4              0x00000000
+#define HRCWL_SVCOD_DIV_8              0x10000000
+#define HRCWL_SVCOD_DIV_2              0x20000000
+#define HRCWL_SVCOD_DIV_1              0x30000000
 #endif
 
 /* HRCWH - Hardware Reset Configuration Word High
 #if defined(CONFIG_MPC834X)
 #define HRCWH_ROM_LOC_PCI2             0x00200000
 #endif
+#if defined(CONIFG_MPC837X)
+#define HRCWH_ROM_LOC_ON_CHIP_ROM      0x00300000
+#endif
 #define HRCWH_ROM_LOC_LOCAL_8BIT       0x00500000
 #define HRCWH_ROM_LOC_LOCAL_16BIT      0x00600000
 #define HRCWH_ROM_LOC_LOCAL_32BIT      0x00700000
 
-#if defined(CONFIG_MPC831X)
+#if defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
 #define HRCWH_ROM_LOC_NAND_SP_8BIT     0x00100000
 #define HRCWH_ROM_LOC_NAND_SP_16BIT    0x00200000
 #define HRCWH_ROM_LOC_NAND_LP_8BIT     0x00500000
 
 /* RSR - Reset Status Register
  */
+#if defined(CONFIG_MPC831X) || defined(CONFIG_MPC837X)
+#define RSR_RSTSRC                     0xF0000000      /* Reset source */
+#define RSR_RSTSRC_SHIFT               28
+#else
 #define RSR_RSTSRC                     0xE0000000      /* Reset source */
 #define RSR_RSTSRC_SHIFT               29
+#endif
 #define RSR_BSF                                0x00010000      /* Boot seq. fail */
 #define RSR_BSF_SHIFT                  16
 #define RSR_SWSR                       0x00002000      /* software soft reset */
 #define SCCR_PCICM                     0x00010000
 #define SCCR_PCICM_SHIFT               16
 
-/* SCCR bits - MPC8349 specific */
-#ifdef CONFIG_MPC834X
+#if defined(CONFIG_MPC834X)
+/* SCCR bits - MPC834x specific */
 #define SCCR_TSEC1CM                   0xc0000000
 #define SCCR_TSEC1CM_SHIFT             30
 #define SCCR_TSEC1CM_0                 0x00000000
 #define SCCR_TSEC2CM_2                 0x20000000
 #define SCCR_TSEC2CM_3                 0x30000000
 
-#elif defined(CONFIG_MPC831X)
+/* The MPH must have the same clock ratio as DR, unless its clock disabled */
+#define SCCR_USBMPHCM                  0x00c00000
+#define SCCR_USBMPHCM_SHIFT            22
+#define SCCR_USBDRCM                   0x00300000
+#define SCCR_USBDRCM_SHIFT             20
+#define SCCR_USBCM                     0x00f00000
+#define SCCR_USBCM_SHIFT               20
+#define SCCR_USBCM_0                   0x00000000
+#define SCCR_USBCM_1                   0x00500000
+#define SCCR_USBCM_2                   0x00A00000
+#define SCCR_USBCM_3                   0x00F00000
+
+#elif defined(CONFIG_MPC8313)
 /* TSEC1 bits are for TSEC2 as well */
 #define SCCR_TSEC1CM                   0xc0000000
 #define SCCR_TSEC1CM_SHIFT             30
 #define SCCR_TSEC2ON                   0x10000000
 #define SCCR_TSEC2ON_SHIFT             28
 
-#endif
-
-#define SCCR_USBMPHCM                  0x00c00000
-#define SCCR_USBMPHCM_SHIFT            22
 #define SCCR_USBDRCM                   0x00300000
 #define SCCR_USBDRCM_SHIFT             20
+#define SCCR_USBDRCM_0                 0x00000000
+#define SCCR_USBDRCM_1                 0x00100000
+#define SCCR_USBDRCM_2                 0x00200000
+#define SCCR_USBDRCM_3                 0x00300000
 
-#define SCCR_USBCM_0                   0x00000000
-#define SCCR_USBCM_1                   0x00500000
-#define SCCR_USBCM_2                   0x00A00000
-#define SCCR_USBCM_3                   0x00F00000
+#elif defined(CONFIG_MPC8315)
+/* SCCR bits - MPC8315 specific */
+#define SCCR_TSEC1CM                   0xc0000000
+#define SCCR_TSEC1CM_SHIFT             30
+#define SCCR_TSEC1CM_0                 0x00000000
+#define SCCR_TSEC1CM_1                 0x40000000
+#define SCCR_TSEC1CM_2                 0x80000000
+#define SCCR_TSEC1CM_3                 0xC0000000
+
+#define SCCR_TSEC2CM                   0x30000000
+#define SCCR_TSEC2CM_SHIFT             28
+#define SCCR_TSEC2CM_0                 0x00000000
+#define SCCR_TSEC2CM_1                 0x10000000
+#define SCCR_TSEC2CM_2                 0x20000000
+#define SCCR_TSEC2CM_3                 0x30000000
+
+#define SCCR_USBDRCM                   0x00c00000
+#define SCCR_USBDRCM_SHIFT             22
+#define SCCR_USBDRCM_0                 0x00000000
+#define SCCR_USBDRCM_1                 0x00400000
+#define SCCR_USBDRCM_2                 0x00800000
+#define SCCR_USBDRCM_3                 0x00c00000
+
+#define SCCR_PCIEXP1CM                 0x00300000
+#define SCCR_PCIEXP2CM                 0x000c0000
+
+#define SCCR_SATA1CM                   0x00003000
+#define SCCR_SATA1CM_SHIFT             12
+#define SCCR_SATACM                    0x00003c00
+#define SCCR_SATACM_SHIFT              10
+#define SCCR_SATACM_0                  0x00000000
+#define SCCR_SATACM_1                  0x00001400
+#define SCCR_SATACM_2                  0x00002800
+#define SCCR_SATACM_3                  0x00003c00
+
+#define SCCR_TDMCM                     0x00000030
+#define SCCR_TDMCM_SHIFT               4
+#define SCCR_TDMCM_0                   0x00000000
+#define SCCR_TDMCM_1                   0x00000010
+#define SCCR_TDMCM_2                   0x00000020
+#define SCCR_TDMCM_3                   0x00000030
+
+#elif defined(CONFIG_MPC837X)
+/* SCCR bits - MPC837x specific */
+#define SCCR_TSEC1CM                   0xc0000000
+#define SCCR_TSEC1CM_SHIFT             30
+#define SCCR_TSEC1CM_0                 0x00000000
+#define SCCR_TSEC1CM_1                 0x40000000
+#define SCCR_TSEC1CM_2                 0x80000000
+#define SCCR_TSEC1CM_3                 0xC0000000
+
+#define SCCR_TSEC2CM                   0x30000000
+#define SCCR_TSEC2CM_SHIFT             28
+#define SCCR_TSEC2CM_0                 0x00000000
+#define SCCR_TSEC2CM_1                 0x10000000
+#define SCCR_TSEC2CM_2                 0x20000000
+#define SCCR_TSEC2CM_3                 0x30000000
+
+#define SCCR_SDHCCM                    0x0c000000
+#define SCCR_SDHCCM_SHIFT              26
+#define SCCR_SDHCCM_0                  0x00000000
+#define SCCR_SDHCCM_1                  0x04000000
+#define SCCR_SDHCCM_2                  0x08000000
+#define SCCR_SDHCCM_3                  0x0c000000
+
+#define SCCR_USBDRCM                   0x00c00000
+#define SCCR_USBDRCM_SHIFT             22
+#define SCCR_USBDRCM_0                 0x00000000
+#define SCCR_USBDRCM_1                 0x00400000
+#define SCCR_USBDRCM_2                 0x00800000
+#define SCCR_USBDRCM_3                 0x00c00000
+
+#define SCCR_PCIEXP1CM                 0x00300000
+#define SCCR_PCIEXP1CM_SHIFT           20
+#define SCCR_PCIEXP1CM_0               0x00000000
+#define SCCR_PCIEXP1CM_1               0x00100000
+#define SCCR_PCIEXP1CM_2               0x00200000
+#define SCCR_PCIEXP1CM_3               0x00300000
+
+#define SCCR_PCIEXP2CM                 0x000c0000
+#define SCCR_PCIEXP2CM_SHIFT           18
+#define SCCR_PCIEXP2CM_0               0x00000000
+#define SCCR_PCIEXP2CM_1               0x00040000
+#define SCCR_PCIEXP2CM_2               0x00080000
+#define SCCR_PCIEXP2CM_3               0x000c0000
+
+/* All of the four SATA controllers must have the same clock ratio */
+#define SCCR_SATA1CM                   0x000000c0
+#define SCCR_SATA1CM_SHIFT             6
+#define SCCR_SATACM                    0x000000ff
+#define SCCR_SATACM_SHIFT              0
+#define SCCR_SATACM_0                  0x00000000
+#define SCCR_SATACM_1                  0x00000055
+#define SCCR_SATACM_2                  0x000000aa
+#define SCCR_SATACM_3                  0x000000ff
+#endif
 
 /* CSn_BDNS - Chip Select memory Bounds Register
  */
 #define BR_MS_UPMA                     0x00000080      /* UPMA */
 #define BR_MS_UPMB                     0x000000A0      /* UPMB */
 #define BR_MS_UPMC                     0x000000C0      /* UPMC */
-#if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)
+#if !defined(CONFIG_MPC834X)
 #define BR_ATOM                                0x0000000C
 #define BR_ATOM_SHIFT                  2
 #endif
 
 #if defined(CONFIG_MPC834X)
 #define BR_RES                         ~(BR_BA | BR_PS | BR_DECC | BR_WP | BR_MSEL | BR_V)
-#elif defined(CONFIG_MPC8360)
+#else
 #define BR_RES                         ~(BR_BA | BR_PS | BR_DECC | BR_WP | BR_MSEL | BR_ATOM | BR_V)
 #endif
 
 #define LTESR_CS               0x00080000
 #define LTESR_CC               0x00000001
 
-/* DDR Control Driver Register
+/* DDRCDR - DDR Control Driver Register
  */
 #define DDRCDR_EN              0x40000000
 #define DDRCDR_PZ              0x3C000000
index 603452ab3281ec9adb54652c11c3755a69ed2faf..f6decdca8836bf91fbb69e64fa8372de59cdfa31 100644 (file)
@@ -122,6 +122,9 @@ extern void eth_set_enetaddr(int num, char* a);     /* Set new MAC address          */
 
 extern int eth_init(bd_t *bis);                        /* Initialize the device        */
 extern int eth_send(volatile void *packet, int length);           /* Send a packet     */
+#ifdef CONFIG_API
+extern int eth_receive(volatile void *packet, int length); /* Receive a packet */
+#endif
 extern int eth_rx(void);                       /* Check for received packets   */
 extern void eth_halt(void);                    /* stop SCC                     */
 extern char *eth_get_name(void);               /* get name of current device   */
index 0c7bf3e6def81bcc10e0e328c877529e1ebcd78e..b5ad38fc527a9ec79c33069c90ee6741d3db06a7 100644 (file)
 #ifndef        __PPC405_H__
 #define __PPC405_H__
 
+#ifndef CONFIG_IOP480
+#define CFG_DCACHE_SIZE                (16 << 10)      /* For AMCC 405 CPUs    */
+#else
+#define CFG_DCACHE_SIZE                (2 << 10)       /* For PLX IOP480 (403) */
+#endif
+
 /*--------------------------------------------------------------------- */
 /* Special Purpose Registers                                           */
 /*--------------------------------------------------------------------- */
 #define uicvr        (UIC_DCR_BASE+0x7)  /* UIC vector                       */
 #define uicvcr       (UIC_DCR_BASE+0x8)  /* UIC vector configuration         */
 
+#if defined(CONFIG_405EX)
+#define uic0sr        uicsr            /* UIC status            */
+#define uic0srs       uicsrs           /* UIC status set        */
+#define uic0er        uicer            /* UIC enable            */
+#define uic0cr        uiccr            /* UIC critical          */
+#define uic0pr        uicpr            /* UIC polarity          */
+#define uic0tr        uictr            /* UIC triggering        */
+#define uic0msr       uicmsr           /* UIC masked status     */
+#define uic0vr        uicvr            /* UIC vector            */
+#define uic0vcr       uicvcr           /* UIC vector configuration*/
+
+#define UIC_DCR_BASE1 0xd0
+#define uic1sr        (UIC_DCR_BASE1+0x0)  /* UIC status            */
+#define uic1srs       (UIC_DCR_BASE1+0x1)  /* UIC status set        */
+#define uic1er        (UIC_DCR_BASE1+0x2)  /* UIC enable            */
+#define uic1cr        (UIC_DCR_BASE1+0x3)  /* UIC critical          */
+#define uic1pr        (UIC_DCR_BASE1+0x4)  /* UIC polarity          */
+#define uic1tr        (UIC_DCR_BASE1+0x5)  /* UIC triggering        */
+#define uic1msr       (UIC_DCR_BASE1+0x6)  /* UIC masked status     */
+#define uic1vr        (UIC_DCR_BASE1+0x7)  /* UIC vector            */
+#define uic1vcr       (UIC_DCR_BASE1+0x8)  /* UIC vector configuration*/
+
+#define UIC_DCR_BASE2 0xe0
+#define uic2sr        (UIC_DCR_BASE2+0x0)  /* UIC status            */
+#define uic2srs       (UIC_DCR_BASE2+0x1)  /* UIC status set        */
+#define uic2er        (UIC_DCR_BASE2+0x2)  /* UIC enable            */
+#define uic2cr        (UIC_DCR_BASE2+0x3)  /* UIC critical          */
+#define uic2pr        (UIC_DCR_BASE2+0x4)  /* UIC polarity          */
+#define uic2tr        (UIC_DCR_BASE2+0x5)  /* UIC triggering        */
+#define uic2msr       (UIC_DCR_BASE2+0x6)  /* UIC masked status     */
+#define uic2vr        (UIC_DCR_BASE2+0x7)  /* UIC vector            */
+#define uic2vcr       (UIC_DCR_BASE2+0x8)  /* UIC vector configuration*/
+#endif
+
 /*-----------------------------------------------------------------------------+
 |  Universal interrupt controller interrupts
 +-----------------------------------------------------------------------------*/
 #define UIC_EXT3       0x00000002      /* External  interrupt 3        */
 #define UIC_EXT4       0x00000001      /* External  interrupt 4        */
 
+#elif defined(CONFIG_405EX)
+
+/* UIC 0 */
+#define UIC_U0                 0x80000000      /* */
+#define UIC_U1                 0x40000000      /* */
+#define UIC_IIC0               0x20000000      /* */
+#define UIC_PKA                        0x10000000      /* */
+#define UIC_TRNG               0x08000000      /* */
+#define UIC_EBM                        0x04000000      /* */
+#define UIC_BGI                        0x02000000      /* */
+#define UIC_IIC1               0x01000000      /* */
+#define UIC_SPI                        0x00800000      /* */
+#define UIC_EIRQ0              0x00400000      /**/
+#define UIC_MTE                        0x00200000      /*MAL Tx EOB */
+#define UIC_MRE                        0x00100000      /*MAL Rx EOB */
+#define UIC_DMA0               0x00080000      /* */
+#define UIC_DMA1               0x00040000      /* */
+#define UIC_DMA2               0x00020000      /* */
+#define UIC_DMA3               0x00010000      /* */
+#define UIC_PCIE0AL            0x00008000      /* */
+#define UIC_PCIE0VPD           0x00004000      /* */
+#define UIC_RPCIE0HRST         0x00002000      /* */
+#define UIC_FPCIE0HRST         0x00001000      /* */
+#define UIC_PCIE0TCR           0x00000800      /* */
+#define UIC_PCIEMSI0           0x00000400      /* */
+#define UIC_PCIEMSI1           0x00000200      /* */
+#define UIC_SECURITY           0x00000100      /* */
+#define UIC_ENET               0x00000080      /* */
+#define UIC_ENET1              0x00000040      /* */
+#define UIC_PCIEMSI2           0x00000020      /* */
+#define UIC_EIRQ4              0x00000010      /**/
+#define UIC_UIC2NC             0x00000008      /* */
+#define UIC_UIC2C              0x00000004      /* */
+#define UIC_UIC1NC             0x00000002      /* */
+#define UIC_UIC1C              0x00000001      /* */
+
+#define UIC_MAL_TXEOB          UIC_MTE/* MAL TXEOB                          */
+#define UIC_MAL_RXEOB          UIC_MRE/* MAL RXEOB                          */
+/* UIC 1 */
+#define UIC_MS                 0x80000000      /* MAL SERR */
+#define UIC_MTDE               0x40000000      /* MAL TXDE */
+#define UIC_MRDE               0x20000000      /* MAL RXDE */
+#define UIC_PCIE0BMVC0         0x10000000      /* */
+#define UIC_PCIE0DCRERR                0x08000000      /* */
+#define UIC_EBC                        0x04000000      /* */
+#define UIC_NDFC               0x02000000      /* */
+#define UIC_PCEI1DCRERR                0x01000000      /* */
+#define UIC_GPTCMPT8           0x00800000      /* */
+#define UIC_GPTCMPT9           0x00400000      /* */
+#define UIC_PCIE1AL            0x00200000      /* */
+#define UIC_PCIE1VPD           0x00100000      /* */
+#define UIC_RPCE1HRST          0x00080000      /* */
+#define UIC_FPCE1HRST          0x00040000      /* */
+#define UIC_PCIE1TCR           0x00020000      /* */
+#define UIC_PCIE1VC0           0x00010000      /* */
+#define UIC_GPTCMPT3           0x00008000      /* */
+#define UIC_GPTCMPT4           0x00004000      /* */
+#define UIC_EIRQ7              0x00002000      /* */
+#define UIC_EIRQ8              0x00001000      /* */
+#define UIC_EIRQ9              0x00000800      /* */
+#define UIC_GPTCMP5            0x00000400      /* */
+#define UIC_GPTCMP6            0x00000200      /* */
+#define UIC_GPTCMP7            0x00000100      /* */
+#define UIC_SROM               0x00000080      /* SERIAL ROM*/
+#define UIC_GPTDECPULS         0x00000040      /* GPT Decrement pulse*/
+#define UIC_EIRQ2              0x00000020      /* */
+#define UIC_EIRQ5              0x00000010      /* */
+#define UIC_EIRQ6              0x00000008      /* */
+#define UIC_EMAC0WAKE          0x00000004      /* */
+#define UIC_EIRQ1              0x00000002      /* */
+#define UIC_EMAC1WAKE          0x00000001      /* */
+#define UIC_MAL_SERR           UIC_MS          /* MAL SERR     */
+#define UIC_MAL_TXDE           UIC_MTDE                /* MAL TXDE     */
+#define UIC_MAL_RXDE           UIC_MRDE                /* MAL RXDE     */
+/* UIC 2 */
+#define UIC_PCIE0INTA          0x80000000      /* PCIE0 INTA*/
+#define UIC_PCIE0INTB          0x40000000      /* PCIE0 INTB*/
+#define UIC_PCIE0INTC          0x20000000      /* PCIE0 INTC*/
+#define UIC_PCIE0INTD          0x10000000      /* PCIE0 INTD*/
+#define UIC_EIRQ3              0x08000000      /* External IRQ 3*/
+#define UIC_DDRMCUE            0x04000000      /* */
+#define UIC_DDRMCCE            0x02000000      /* */
+#define UIC_MALINTCOATX0       0x01000000      /* Interrupt coalecence TX0*/
+#define UIC_MALINTCOATX1       0x00800000      /* Interrupt coalecence TX1*/
+#define UIC_MALINTCOARX0       0x00400000      /* Interrupt coalecence RX0*/
+#define UIC_MALINTCOARX1       0x00200000      /* Interrupt coalecence RX1*/
+#define UIC_PCIE1INTA          0x00100000      /* PCIE0 INTA*/
+#define UIC_PCIE1INTB          0x00080000      /* PCIE0 INTB*/
+#define UIC_PCIE1INTC          0x00040000      /* PCIE0 INTC*/
+#define UIC_PCIE1INTD          0x00020000      /* PCIE0 INTD*/
+#define UIC_RPCIEMSI2          0x00010000      /* MSI level 2 Note this looks same as uic0-26*/
+#define UIC_PCIEMSI3           0x00008000      /* MSI level 2*/
+#define UIC_PCIEMSI4           0x00004000      /* MSI level 2*/
+#define UIC_PCIEMSI5           0x00002000      /* MSI level 2*/
+#define UIC_PCIEMSI6           0x00001000      /* MSI level 2*/
+#define UIC_PCIEMSI7           0x00000800      /* MSI level 2*/
+#define UIC_PCIEMSI8           0x00000400      /* MSI level 2*/
+#define UIC_PCIEMSI9           0x00000200      /* MSI level 2*/
+#define UIC_PCIEMSI10          0x00000100      /* MSI level 2*/
+#define UIC_PCIEMSI11          0x00000080      /* MSI level 2*/
+#define UIC_PCIEMSI12          0x00000040      /* MSI level 2*/
+#define UIC_PCIEMSI13          0x00000020      /* MSI level 2*/
+#define UIC_PCIEMSI14          0x00000010      /* MSI level 2*/
+#define UIC_PCIEMSI15          0x00000008      /* MSI level 2*/
+#define UIC_PLB4XAHB           0x00000004      /* PLBxAHB bridge*/
+#define UIC_USBWAKE            0x00000002      /* USB wakup*/
+#define UIC_USBOTG             0x00000001      /*  USB OTG*/
+#define UIC_ETH0       UIC_ENET
+#define UIC_ETH1       UIC_ENET1
+
 #else  /* !defined(CONFIG_405EZ) */
 
 #define UIC_UART0     0x80000000      /* UART 0                             */
 /******************************************************************************
  * SDRAM Controller
  ******************************************************************************/
-#define SDRAM_DCR_BASE 0x10
-#define memcfga  (SDRAM_DCR_BASE+0x0)   /* Memory configuration address reg  */
-#define memcfgd  (SDRAM_DCR_BASE+0x1)   /* Memory configuration data    reg  */
   /* values for memcfga register - indirect addressing of these regs */
 #ifndef CONFIG_405EP
   #define mem_besra   0x00    /* bus error syndrome reg a           */
 /******************************************************************************
  * Power Management
  ******************************************************************************/
+#ifdef CONFIG_405EX
+#define POWERMAN_DCR_BASE 0xb0
+#else
 #define POWERMAN_DCR_BASE 0xb8
+#endif
 #define cpmsr (POWERMAN_DCR_BASE+0x0) /* Power management status             */
 #define cpmer (POWERMAN_DCR_BASE+0x1) /* Power management enable             */
 #define cpmfr (POWERMAN_DCR_BASE+0x2) /* Power management force              */
 /******************************************************************************
  * Extrnal Bus Controller
  ******************************************************************************/
-#define EBC_DCR_BASE 0x12
-#define ebccfga (EBC_DCR_BASE+0x0)   /* External bus controller addr reg     */
-#define ebccfgd (EBC_DCR_BASE+0x1)   /* External bus controller data reg     */
   /* values for ebccfga register - indirect addressing of these regs */
   #define pb0cr       0x00    /* periph bank 0 config reg            */
   #define pb1cr       0x01    /* periph bank 1 config reg            */
 #define VCO_MIN     500
 #define VCO_MAX     1000
 #elif defined(CONFIG_405EZ)
-/******************************************************************************
- * SDR Registers
- ******************************************************************************/
-#define SDR_DCR_BASE 0x0E
-#define sdrcfga (SDR_DCR_BASE+0x0)     /* ADDR */
-#define sdrcfgd (SDR_DCR_BASE+0x1)     /* Data */
-
-#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
 #define sdrultra1      0x4050
 /******************************************************************************
  * Control
  ******************************************************************************/
-#define CNTRL_DCR_BASE 0x0C
-#define cprcfga (CNTRL_DCR_BASE+0x0)   /* CPR addr reg     */
-#define cprcfgd (CNTRL_DCR_BASE+0x1)   /* CPR data reg     */
-
 /* CPR Registers */
 #define cprclkupd       0x020          /* CPR_CLKUPD */
 #define cprpllc         0x040          /* CPR_PLLC */
 #define cprmisc0        0x181          /* CPR_MISC0 */
 #define cprmisc1        0x182          /* CPR_MISC1 */
 
-/*
- * Macro for accessing the indirect CPR register
- */
-#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 */
 #define CPR_PERD0_SPIDV_MASK   0x000F0000     /* SPI Clock Divider */
 #define PERD0_U0DV_MASK        0x0000FF00     /* UART 0 Divider Mask */
 #define PERD0_U1DV_MASK        0x000000FF     /* UART 1 Divider Mask */
 
-#if 0 /* Deprecated */
-#define CNTRL_DCR_BASE 0x0f0
-#define cpc0_pllmr0   (CNTRL_DCR_BASE+0x0)  /* PLL mode  register 0                */
-#define cpc0_boot     (CNTRL_DCR_BASE+0x1)  /* Clock status register               */
-#define cpc0_epctl    (CNTRL_DCR_BASE+0x3)  /* EMAC to PHY control register        */
-#define cpc0_pllmr1   (CNTRL_DCR_BASE+0x4)  /* PLL mode  register 1                */
-#define cpc0_ucr      (CNTRL_DCR_BASE+0x5)  /* UART control register               */
-#define cpc0_pci      (CNTRL_DCR_BASE+0x9)  /* PCI control register                */
-
-#define CPC0_PLLMR0  (CNTRL_DCR_BASE+0x0)  /* PLL mode 0 register          */
-#define CPC0_BOOT    (CNTRL_DCR_BASE+0x1)  /* Chip Clock Status register   */
-#define CPC0_CR1     (CNTRL_DCR_BASE+0x2)  /* Chip Control 1 register      */
-#define CPC0_EPRCSR  (CNTRL_DCR_BASE+0x3)  /* EMAC PHY Rcv Clk Src register*/
-#define CPC0_PLLMR1  (CNTRL_DCR_BASE+0x4)  /* PLL mode 1 register          */
-#define CPC0_UCR     (CNTRL_DCR_BASE+0x5)  /* UART Control register        */
-#define CPC0_SRR     (CNTRL_DCR_BASE+0x6)  /* Soft Reset register          */
-#define CPC0_JTAGID  (CNTRL_DCR_BASE+0x7)  /* JTAG ID register             */
-#define CPC0_SPARE   (CNTRL_DCR_BASE+0x8)  /* Spare DCR                    */
-#define CPC0_PCI     (CNTRL_DCR_BASE+0x9)  /* PCI Control register         */
-
-/* Bit definitions */
-#define PLLMR0_CPU_DIV_MASK      0x00300000     /* CPU clock divider */
-#define PLLMR0_CPU_DIV_BYPASS    0x00000000
-#define PLLMR0_CPU_DIV_2         0x00100000
-#define PLLMR0_CPU_DIV_3         0x00200000
-#define PLLMR0_CPU_DIV_4         0x00300000
-
-#define PLLMR0_CPU_TO_PLB_MASK   0x00030000     /* CPU:PLB Frequency Divisor */
-#define PLLMR0_CPU_PLB_DIV_1     0x00000000
-#define PLLMR0_CPU_PLB_DIV_2     0x00010000
-#define PLLMR0_CPU_PLB_DIV_3     0x00020000
-#define PLLMR0_CPU_PLB_DIV_4     0x00030000
-
-#define PLLMR0_OPB_TO_PLB_MASK   0x00003000     /* OPB:PLB Frequency Divisor */
-#define PLLMR0_OPB_PLB_DIV_1     0x00000000
-#define PLLMR0_OPB_PLB_DIV_2     0x00001000
-#define PLLMR0_OPB_PLB_DIV_3     0x00002000
-#define PLLMR0_OPB_PLB_DIV_4     0x00003000
-
-#define PLLMR0_EXB_TO_PLB_MASK   0x00000300     /* External Bus:PLB Divisor  */
-#define PLLMR0_EXB_PLB_DIV_2     0x00000000
-#define PLLMR0_EXB_PLB_DIV_3     0x00000100
-#define PLLMR0_EXB_PLB_DIV_4     0x00000200
-#define PLLMR0_EXB_PLB_DIV_5     0x00000300
-
-#define PLLMR0_MAL_TO_PLB_MASK   0x00000030     /* MAL:PLB Divisor  */
-#define PLLMR0_MAL_PLB_DIV_1     0x00000000
-#define PLLMR0_MAL_PLB_DIV_2     0x00000010
-#define PLLMR0_MAL_PLB_DIV_3     0x00000020
-#define PLLMR0_MAL_PLB_DIV_4     0x00000030
-
-#define PLLMR0_PCI_TO_PLB_MASK   0x00000003     /* PCI:PLB Frequency Divisor */
-#define PLLMR0_PCI_PLB_DIV_1     0x00000000
-#define PLLMR0_PCI_PLB_DIV_2     0x00000001
-#define PLLMR0_PCI_PLB_DIV_3     0x00000002
-#define PLLMR0_PCI_PLB_DIV_4     0x00000003
-
-#define PLLMR1_SSCS_MASK         0x80000000     /* Select system clock source */
-#define PLLMR1_PLLR_MASK         0x40000000     /* PLL reset */
-#define PLLMR1_FBMUL_MASK        0x00F00000     /* PLL feedback multiplier value */
-#define PLLMR1_FBMUL_DIV_16      0x00000000
-#define PLLMR1_FBMUL_DIV_1       0x00100000
-#define PLLMR1_FBMUL_DIV_2       0x00200000
-#define PLLMR1_FBMUL_DIV_3       0x00300000
-#define PLLMR1_FBMUL_DIV_4       0x00400000
-#define PLLMR1_FBMUL_DIV_5       0x00500000
-#define PLLMR1_FBMUL_DIV_6       0x00600000
-#define PLLMR1_FBMUL_DIV_7       0x00700000
-#define PLLMR1_FBMUL_DIV_8       0x00800000
-#define PLLMR1_FBMUL_DIV_9       0x00900000
-#define PLLMR1_FBMUL_DIV_10      0x00A00000
-#define PLLMR1_FBMUL_DIV_11      0x00B00000
-#define PLLMR1_FBMUL_DIV_12      0x00C00000
-#define PLLMR1_FBMUL_DIV_13      0x00D00000
-#define PLLMR1_FBMUL_DIV_14      0x00E00000
-#define PLLMR1_FBMUL_DIV_15      0x00F00000
-
-#define PLLMR1_FWDVA_MASK        0x00070000     /* PLL forward divider A value */
-#define PLLMR1_FWDVA_DIV_8       0x00000000
-#define PLLMR1_FWDVA_DIV_7       0x00010000
-#define PLLMR1_FWDVA_DIV_6       0x00020000
-#define PLLMR1_FWDVA_DIV_5       0x00030000
-#define PLLMR1_FWDVA_DIV_4       0x00040000
-#define PLLMR1_FWDVA_DIV_3       0x00050000
-#define PLLMR1_FWDVA_DIV_2       0x00060000
-#define PLLMR1_FWDVA_DIV_1       0x00070000
-#define PLLMR1_FWDVB_MASK        0x00007000     /* PLL forward divider B value */
-#define PLLMR1_TUNING_MASK       0x000003FF     /* PLL tune bits */
-
-/* Defines for CPC0_EPRCSR register */
-#define CPC0_EPRCSR_E0NFE          0x80000000
-#define CPC0_EPRCSR_E1NFE          0x40000000
-#define CPC0_EPRCSR_E1RPP          0x00000080
-#define CPC0_EPRCSR_E0RPP          0x00000040
-#define CPC0_EPRCSR_E1ERP          0x00000020
-#define CPC0_EPRCSR_E0ERP          0x00000010
-#define CPC0_EPRCSR_E1PCI          0x00000002
-#define CPC0_EPRCSR_E0PCI          0x00000001
-
-/* Defines for CPC0_BOOR Register */
-#define CPC0_BOOT_SEP                      0x00000002 /* serial EEPROM present  */
-
-/* Defines for CPC0_PLLMR1 Register fields */
-#define PLL_ACTIVE                 0x80000000
-#define CPC0_PLLMR1_SSCS           0x80000000
-#define PLL_RESET                  0x40000000
-#define CPC0_PLLMR1_PLLR           0x40000000
-    /* Feedback multiplier */
-#define PLL_FBKDIV                 0x00F00000
-#define CPC0_PLLMR1_FBDV           0x00F00000
-#define PLL_FBKDIV_16              0x00000000
-#define PLL_FBKDIV_1               0x00100000
-#define PLL_FBKDIV_2               0x00200000
-#define PLL_FBKDIV_3               0x00300000
-#define PLL_FBKDIV_4               0x00400000
-#define PLL_FBKDIV_5               0x00500000
-#define PLL_FBKDIV_6               0x00600000
-#define PLL_FBKDIV_7               0x00700000
-#define PLL_FBKDIV_8               0x00800000
-#define PLL_FBKDIV_9               0x00900000
-#define PLL_FBKDIV_10              0x00A00000
-#define PLL_FBKDIV_11              0x00B00000
-#define PLL_FBKDIV_12              0x00C00000
-#define PLL_FBKDIV_13              0x00D00000
-#define PLL_FBKDIV_14              0x00E00000
-#define PLL_FBKDIV_15              0x00F00000
-    /* Forward A divisor */
-#define PLL_FWDDIVA                0x00070000
-#define CPC0_PLLMR1_FWDVA          0x00070000
-#define PLL_FWDDIVA_8              0x00000000
-#define PLL_FWDDIVA_7              0x00010000
-#define PLL_FWDDIVA_6              0x00020000
-#define PLL_FWDDIVA_5              0x00030000
-#define PLL_FWDDIVA_4              0x00040000
-#define PLL_FWDDIVA_3              0x00050000
-#define PLL_FWDDIVA_2              0x00060000
-#define PLL_FWDDIVA_1              0x00070000
-    /* Forward B divisor */
-#define PLL_FWDDIVB                0x00007000
-#define CPC0_PLLMR1_FWDVB          0x00007000
-#define PLL_FWDDIVB_8              0x00000000
-#define PLL_FWDDIVB_7              0x00001000
-#define PLL_FWDDIVB_6              0x00002000
-#define PLL_FWDDIVB_5              0x00003000
-#define PLL_FWDDIVB_4              0x00004000
-#define PLL_FWDDIVB_3              0x00005000
-#define PLL_FWDDIVB_2              0x00006000
-#define PLL_FWDDIVB_1              0x00007000
-    /* PLL tune bits */
-#define PLL_TUNE_MASK            0x000003FF
-#define PLL_TUNE_2_M_3           0x00000133     /*  2 <= M <= 3               */
-#define PLL_TUNE_4_M_6           0x00000134     /*  3 <  M <= 6               */
-#define PLL_TUNE_7_M_10          0x00000138     /*  6 <  M <= 10              */
-#define PLL_TUNE_11_M_14         0x0000013C     /* 10 <  M <= 14              */
-#define PLL_TUNE_15_M_40         0x0000023E     /* 14 <  M <= 40              */
-#define PLL_TUNE_VCO_LOW         0x00000000     /* 500MHz <= VCO <=  800MHz   */
-#define PLL_TUNE_VCO_HI          0x00000080     /* 800MHz <  VCO <= 1000MHz   */
-
-/* Defines for CPC0_PLLMR0 Register fields */
-    /* CPU divisor */
-#define PLL_CPUDIV                 0x00300000
-#define CPC0_PLLMR0_CCDV           0x00300000
-#define PLL_CPUDIV_1               0x00000000
-#define PLL_CPUDIV_2               0x00100000
-#define PLL_CPUDIV_3               0x00200000
-#define PLL_CPUDIV_4               0x00300000
-    /* PLB divisor */
-#define PLL_PLBDIV                 0x00030000
-#define CPC0_PLLMR0_CBDV           0x00030000
-#define PLL_PLBDIV_1               0x00000000
-#define PLL_PLBDIV_2               0x00010000
-#define PLL_PLBDIV_3               0x00020000
-#define PLL_PLBDIV_4               0x00030000
-    /* OPB divisor */
-#define PLL_OPBDIV                 0x00003000
-#define CPC0_PLLMR0_OPDV           0x00003000
-#define PLL_OPBDIV_1               0x00000000
-#define PLL_OPBDIV_2               0x00001000
-#define PLL_OPBDIV_3               0x00002000
-#define PLL_OPBDIV_4               0x00003000
-    /* EBC divisor */
-#define PLL_EXTBUSDIV              0x00000300
-#define CPC0_PLLMR0_EPDV           0x00000300
-#define PLL_EXTBUSDIV_2            0x00000000
-#define PLL_EXTBUSDIV_3            0x00000100
-#define PLL_EXTBUSDIV_4            0x00000200
-#define PLL_EXTBUSDIV_5            0x00000300
-    /* MAL divisor */
-#define PLL_MALDIV                 0x00000030
-#define CPC0_PLLMR0_MPDV           0x00000030
-#define PLL_MALDIV_1               0x00000000
-#define PLL_MALDIV_2               0x00000010
-#define PLL_MALDIV_3               0x00000020
-#define PLL_MALDIV_4               0x00000030
-    /* PCI divisor */
-#define PLL_PCIDIV                 0x00000003
-#define CPC0_PLLMR0_PPFD           0x00000003
-#define PLL_PCIDIV_1               0x00000000
-#define PLL_PCIDIV_2               0x00000001
-#define PLL_PCIDIV_3               0x00000002
-#define PLL_PCIDIV_4               0x00000003
-
-/*
- *-------------------------------------------------------------------------------
- * PLL settings for 266MHz CPU, 133MHz PLB/SDRAM, 66MHz EBC, 33MHz PCI,
- * assuming a 33.3MHz input clock to the 405EP.
- *-------------------------------------------------------------------------------
- */
-#define PLLMR0_266_133_66  (PLL_CPUDIV_1 | PLL_PLBDIV_2 |  \
-                           PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |  \
-                           PLL_MALDIV_1 | PLL_PCIDIV_4)
-#define PLLMR1_266_133_66  (PLL_FBKDIV_8  |  \
-                           PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
-                           PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
-#define PLLMR0_133_66_66_33  (PLL_CPUDIV_1 | PLL_PLBDIV_1 |  \
-                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 |  \
-                             PLL_MALDIV_1 | PLL_PCIDIV_4)
-#define PLLMR1_133_66_66_33  (PLL_FBKDIV_4  |  \
-                             PLL_FWDDIVA_6 | PLL_FWDDIVB_6 |  \
-                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
-#define PLLMR0_200_100_50_33 (PLL_CPUDIV_1 | PLL_PLBDIV_2 |  \
-                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_3 |  \
-                             PLL_MALDIV_1 | PLL_PCIDIV_4)
-#define PLLMR1_200_100_50_33 (PLL_FBKDIV_6  |  \
-                             PLL_FWDDIVA_4 | PLL_FWDDIVB_4 |  \
-                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
-#define PLLMR0_266_133_66_33 (PLL_CPUDIV_1 | PLL_PLBDIV_2 |  \
-                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 |  \
-                             PLL_MALDIV_1 | PLL_PCIDIV_4)
-#define PLLMR1_266_133_66_33 (PLL_FBKDIV_8  |  \
-                             PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
-                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
-#define PLLMR0_266_66_33_33 (PLL_CPUDIV_1 | PLL_PLBDIV_4 |  \
-                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |  \
-                             PLL_MALDIV_1 | PLL_PCIDIV_2)
-#define PLLMR1_266_66_33_33 (PLL_FBKDIV_8  |  \
-                             PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
-                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
-
-/*
- * PLL Voltage Controlled Oscillator (VCO) definitions
- * Maximum and minimum values (in MHz) for correct PLL operation.
- */
-#define VCO_MIN     500
-#define VCO_MAX     1000
-#endif /* #if 0 */
 #else /* #ifdef CONFIG_405EP */
 /******************************************************************************
  * Control
 #define GPIO1_ISR3L            (GPIO1_BASE+0x40)
 #define GPIO1_ISR3H            (GPIO1_BASE+0x44)
 
+#elif defined(CONFIG_405EX)
+#define GPIO_BASE  0xEF600800
+#define GPIO0_OR               (GPIO_BASE+0x0)
+#define GPIO0_TCR              (GPIO_BASE+0x4)
+#define GPIO0_OSRL             (GPIO_BASE+0x8)
+#define GPIO0_OSRH             (GPIO_BASE+0xC)
+#define GPIO0_TSRL             (GPIO_BASE+0x10)
+#define GPIO0_TSRH             (GPIO_BASE+0x14)
+#define GPIO0_ODR              (GPIO_BASE+0x18)
+#define GPIO0_IR               (GPIO_BASE+0x1C)
+#define GPIO0_RR1              (GPIO_BASE+0x20)
+#define GPIO0_RR2              (GPIO_BASE+0x24)
+#define GPIO0_ISR1L            (GPIO_BASE+0x30)
+#define GPIO0_ISR1H            (GPIO_BASE+0x34)
+#define GPIO0_ISR2L            (GPIO_BASE+0x38)
+#define GPIO0_ISR2H            (GPIO_BASE+0x3C)
+#define GPIO0_ISR3L            (GPIO_BASE+0x40)
+#define GPIO0_ISR3H            (GPIO_BASE+0x44)
+
 #else  /* !405EZ */
 
 #define GPIO_BASE  0xEF600700
 
 #endif /* CONFIG_405EZ */
 
-/*
- * Macro for accessing the indirect EBC register
- */
-#define mtebc(reg, data)  mtdcr(ebccfga,reg);mtdcr(ebccfgd,data)
-#define mfebc(reg, data)  mtdcr(ebccfga,reg);data = mfdcr(ebccfgd)
-
-#define mtsdram(reg, data)     do { mtdcr(memcfga,reg);mtdcr(memcfgd,data); } while (0)
-#define mfsdram(reg, data)     do { mtdcr(memcfga,reg);data = mfdcr(memcfgd); } while (0)
-
-#ifndef __ASSEMBLY__
-
-typedef struct
-{
-  unsigned long pllFwdDiv;
-  unsigned long pllFwdDivB;
-  unsigned long pllFbkDiv;
-  unsigned long pllPlbDiv;
-  unsigned long pllPciDiv;
-  unsigned long pllExtBusDiv;
-  unsigned long pllOpbDiv;
-  unsigned long freqVCOMhz;             /* in MHz                          */
-  unsigned long freqProcessor;
-  unsigned long freqPLB;
-  unsigned long freqPCI;
-  unsigned long pciIntArbEn;            /* Internal PCI arbiter is enabled */
-  unsigned long pciClkSync;             /* PCI clock is synchronous        */
-  unsigned long freqVCOHz;
-} PPC405_SYS_INFO;
-
-#endif  /* _ASMLANGUAGE */
-
-#define RESET_VECTOR   0xfffffffc
-#define CACHELINE_MASK (CFG_CACHELINE_SIZE - 1) /* Address mask for cache
-                                                    line aligned data. */
+#define GPIO0_BASE             GPIO_BASE
+
+#if defined(CONFIG_405EX)
+#define SDR0_SRST              0x0200
+
+#define SDRAM_BESR0    0x00
+#define SDRAM_BEARL    0x02
+#define SDRAM_BEARU    0x03
+#define SDRAM_WMIRQ    0x06    /**/
+#define SDRAM_PLBOPT   0x08    /**/
+#define SDRAM_PUABA    0x09    /**/
+#define SDRAM_MCSTAT    0x1F    /* memory controller status           */
+#define SDRAM_MCOPT1    0x20    /* memory controller options 1        */
+#define SDRAM_MCOPT2    0x21    /* memory controller options 2        */
+#define SDRAM_MODT0     0x22    /* on die termination for bank 0      */
+#define SDRAM_MODT1     0x23    /* on die termination for bank 1      */
+#define SDRAM_MODT2     0x24    /* on die termination for bank 2      */
+#define SDRAM_MODT3     0x25    /* on die termination for bank 3      */
+#define SDRAM_CODT      0x26    /* on die termination for controller  */
+#define SDRAM_VVPR      0x27    /* variable VRef programmming         */
+#define SDRAM_OPARS     0x28    /* on chip driver control setup       */
+#define SDRAM_OPART     0x29    /* on chip driver control trigger     */
+#define SDRAM_RTR       0x30    /* refresh timer                      */
+#define SDRAM_PMIT      0x34    /* power management idle timer        */
+#define SDRAM_MB0CF     0x40    /* memory bank 0 configuration        */
+#define SDRAM_MB1CF     0x44    /* memory bank 1 configuration        */
+#define SDRAM_MB2CF     0x48    /* memory bank 2 configuration        */
+#define SDRAM_MB3CF     0x4C    /* memory bank 3 configuration        */
+#define SDRAM_INITPLR0  0x50    /* manual initialization control      */
+#define SDRAM_INITPLR1  0x51    /* manual initialization control      */
+#define SDRAM_INITPLR2  0x52    /* manual initialization control      */
+#define SDRAM_INITPLR3  0x53    /* manual initialization control      */
+#define SDRAM_INITPLR4  0x54    /* manual initialization control      */
+#define SDRAM_INITPLR5  0x55    /* manual initialization control      */
+#define SDRAM_INITPLR6  0x56    /* manual initialization control      */
+#define SDRAM_INITPLR7  0x57    /* manual initialization control      */
+#define SDRAM_INITPLR8  0x58    /* manual initialization control      */
+#define SDRAM_INITPLR9  0x59    /* manual initialization control      */
+#define SDRAM_INITPLR10 0x5a    /* manual initialization control      */
+#define SDRAM_INITPLR11 0x5b    /* manual initialization control      */
+#define SDRAM_INITPLR12 0x5c    /* manual initialization control      */
+#define SDRAM_INITPLR13 0x5d    /* manual initialization control      */
+#define SDRAM_INITPLR14 0x5e    /* manual initialization control      */
+#define SDRAM_INITPLR15 0x5f    /* manual initialization control      */
+#define SDRAM_RQDC      0x70    /* read DQS delay control             */
+#define SDRAM_RFDC      0x74    /* read feedback delay control        */
+#define SDRAM_RDCC      0x78    /* read data capture control          */
+#define SDRAM_DLCR      0x7A    /* delay line calibration             */
+#define SDRAM_CLKTR     0x80    /* DDR clock timing                   */
+#define SDRAM_WRDTR     0x81    /* write data, DQS, DM clock, timing  */
+#define SDRAM_SDTR1     0x85    /* DDR SDRAM timing 1                 */
+#define SDRAM_SDTR2     0x86    /* DDR SDRAM timing 2                 */
+#define SDRAM_SDTR3     0x87    /* DDR SDRAM timing 3                 */
+#define SDRAM_MMODE     0x88    /* memory mode                        */
+#define SDRAM_MEMODE    0x89    /* memory extended mode               */
+#define SDRAM_ECCCR     0x98    /* ECC error status                   */
+#define SDRAM_RID       0xF8    /* revision ID                        */
+
+/*-----------------------------------------------------------------------------+
+|  Memory Bank 0-7 configuration
++-----------------------------------------------------------------------------*/
+#define SDRAM_RXBAS_SDSZ_4         0x00000000      /*   4M                    */
+#define SDRAM_RXBAS_SDSZ_8         0x00001000      /*   8M                    */
+#define SDRAM_RXBAS_SDSZ_16        0x00002000      /*  16M                    */
+#define SDRAM_RXBAS_SDSZ_32        0x00003000      /*  32M                    */
+#define SDRAM_RXBAS_SDSZ_64        0x00004000      /*  64M                    */
+#define SDRAM_RXBAS_SDSZ_128       0x00005000      /* 128M                    */
+#define SDRAM_RXBAS_SDSZ_256       0x00006000      /* 256M                    */
+#define SDRAM_RXBAS_SDSZ_512       0x00007000      /* 512M                    */
+#define SDRAM_RXBAS_SDSZ_1024      0x00008000      /* 1024M                   */
+#define SDRAM_RXBAS_SDSZ_2048      0x00009000      /* 2048M                   */
+#define SDRAM_RXBAS_SDSZ_4096      0x0000a000      /* 4096M                   */
+#define SDRAM_RXBAS_SDSZ_8192      0x0000b000      /* 8192M                   */
+
+/*-----------------------------------------------------------------------------+
+|  Memory Controller Status
++-----------------------------------------------------------------------------*/
+#define SDRAM_MCSTAT_MIC_MASK       0x80000000  /* Memory init status mask    */
+#define   SDRAM_MCSTAT_MIC_NOTCOMP  0x00000000  /* Mem init not complete      */
+#define   SDRAM_MCSTAT_MIC_COMP     0x80000000  /* Mem init complete          */
+#define SDRAM_MCSTAT_SRMS_MASK      0x80000000  /* Mem self refresh stat mask */
+#define   SDRAM_MCSTAT_SRMS_NOT_SF  0x00000000  /* Mem not in self refresh    */
+#define   SDRAM_MCSTAT_SRMS_SF      0x80000000  /* Mem in self refresh        */
+
+/*-----------------------------------------------------------------------------+
+|  Memory Controller Options 1
++-----------------------------------------------------------------------------*/
+#define SDRAM_MCOPT1_MCHK_MASK       0x30000000 /* Memory data err check mask */
+#define   SDRAM_MCOPT1_MCHK_NON      0x00000000 /* No ECC generation          */
+#define   SDRAM_MCOPT1_MCHK_GEN      0x20000000 /* ECC generation             */
+#define   SDRAM_MCOPT1_MCHK_CHK      0x10000000 /* ECC generation and check   */
+#define   SDRAM_MCOPT1_MCHK_CHK_REP  0x30000000 /* ECC generation, chk, report*/
+#define   SDRAM_MCOPT1_MCHK_CHK_DECODE(n)  ((((unsigned long)(n))>>28)&0x3)
+#define SDRAM_MCOPT1_RDEN_MASK       0x08000000 /* Registered DIMM mask       */
+#define   SDRAM_MCOPT1_RDEN          0x08000000 /* Registered DIMM enable     */
+#define SDRAM_MCOPT1_PMU_MASK        0x06000000 /* Page management unit mask  */
+#define   SDRAM_MCOPT1_PMU_CLOSE     0x00000000 /* PMU Close                  */
+#define   SDRAM_MCOPT1_PMU_OPEN      0x04000000 /* PMU Open                   */
+#define   SDRAM_MCOPT1_PMU_AUTOCLOSE 0x02000000 /* PMU AutoClose              */
+#define SDRAM_MCOPT1_DMWD_MASK       0x01000000 /* DRAM width mask            */
+#define   SDRAM_MCOPT1_DMWD_32       0x00000000 /* 32 bits                    */
+#define   SDRAM_MCOPT1_DMWD_64       0x01000000 /* 64 bits                    */
+#define SDRAM_MCOPT1_UIOS_MASK       0x00C00000 /* Unused IO State            */
+#define SDRAM_MCOPT1_BCNT_MASK       0x00200000 /* Bank count                 */
+#define   SDRAM_MCOPT1_4_BANKS       0x00000000 /* 4 Banks                    */
+#define   SDRAM_MCOPT1_8_BANKS       0x00200000 /* 8 Banks                    */
+#define SDRAM_MCOPT1_DDR_TYPE_MASK   0x00100000 /* DDR Memory Type mask       */
+#define   SDRAM_MCOPT1_DDR1_TYPE     0x00000000 /* DDR1 Memory Type           */
+#define   SDRAM_MCOPT1_DDR2_TYPE     0x00100000 /* DDR2 Memory Type           */
+#define   SDRAM_MCOPT1_QDEP          0x00020000 /* 4 commands deep            */
+#define SDRAM_MCOPT1_RWOO_MASK       0x00008000 /* Out of Order Read mask     */
+#define   SDRAM_MCOPT1_RWOO_DISABLED 0x00000000 /* disabled                   */
+#define   SDRAM_MCOPT1_RWOO_ENABLED  0x00008000 /* enabled                    */
+#define SDRAM_MCOPT1_WOOO_MASK       0x00004000 /* Out of Order Write mask    */
+#define   SDRAM_MCOPT1_WOOO_DISABLED 0x00000000 /* disabled                   */
+#define   SDRAM_MCOPT1_WOOO_ENABLED  0x00004000 /* enabled                    */
+#define SDRAM_MCOPT1_DCOO_MASK       0x00002000 /* All Out of Order mask      */
+#define   SDRAM_MCOPT1_DCOO_DISABLED 0x00002000 /* disabled                   */
+#define   SDRAM_MCOPT1_DCOO_ENABLED  0x00000000 /* enabled                    */
+#define SDRAM_MCOPT1_DREF_MASK       0x00001000 /* Deferred refresh mask      */
+#define   SDRAM_MCOPT1_DREF_NORMAL   0x00000000 /* normal refresh             */
+#define   SDRAM_MCOPT1_DREF_DEFER_4  0x00001000 /* defer up to 4 refresh cmd  */
+
+/*-----------------------------------------------------------------------------+
+|  Memory Controller Options 2
++-----------------------------------------------------------------------------*/
+#define SDRAM_MCOPT2_SREN_MASK        0x80000000 /* Self Test mask            */
+#define   SDRAM_MCOPT2_SREN_EXIT      0x00000000 /* Self Test exit            */
+#define   SDRAM_MCOPT2_SREN_ENTER     0x80000000 /* Self Test enter           */
+#define SDRAM_MCOPT2_PMEN_MASK        0x40000000 /* Power Management mask     */
+#define   SDRAM_MCOPT2_PMEN_DISABLE   0x00000000 /* disable                   */
+#define   SDRAM_MCOPT2_PMEN_ENABLE    0x40000000 /* enable                    */
+#define SDRAM_MCOPT2_IPTR_MASK        0x20000000 /* Init Trigger Reg mask     */
+#define   SDRAM_MCOPT2_IPTR_IDLE      0x00000000 /* idle                      */
+#define   SDRAM_MCOPT2_IPTR_EXECUTE   0x20000000 /* execute preloaded init    */
+#define SDRAM_MCOPT2_XSRP_MASK        0x10000000 /* Exit Self Refresh Prevent */
+#define   SDRAM_MCOPT2_XSRP_ALLOW     0x00000000 /* allow self refresh exit   */
+#define   SDRAM_MCOPT2_XSRP_PREVENT   0x10000000 /* prevent self refresh exit */
+#define SDRAM_MCOPT2_DCEN_MASK        0x08000000 /* SDRAM Controller Enable   */
+#define   SDRAM_MCOPT2_DCEN_DISABLE   0x00000000 /* SDRAM Controller Enable   */
+#define   SDRAM_MCOPT2_DCEN_ENABLE    0x08000000 /* SDRAM Controller Enable   */
+#define SDRAM_MCOPT2_ISIE_MASK        0x04000000 /* Init Seq Interruptable mas*/
+#define   SDRAM_MCOPT2_ISIE_DISABLE   0x00000000 /* disable                   */
+#define   SDRAM_MCOPT2_ISIE_ENABLE    0x04000000 /* enable                    */
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Refresh Timer Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_RTR_RINT_MASK       0xFFF80000
+#define   SDRAM_RTR_RINT_ENCODE(n)  ((((unsigned long)(n))&0xFFF8)<<16)
+#define   SDRAM_RTR_RINT_DECODE(n)  ((((unsigned long)(n))>>16)&0xFFF8)
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Read DQS Delay Control Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_RQDC_RQDE_MASK        0x80000000
+#define   SDRAM_RQDC_RQDE_DISABLE   0x00000000
+#define   SDRAM_RQDC_RQDE_ENABLE    0x80000000
+#define SDRAM_RQDC_RQFD_MASK        0x000001FF
+#define   SDRAM_RQDC_RQFD_ENCODE(n) ((((unsigned long)(n))&0x1FF)<<0)
+
+#define SDRAM_RQDC_RQFD_MAX         0xFF
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Read Data Capture Control Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_RDCC_RDSS_MASK        0xC0000000
+#define   SDRAM_RDCC_RDSS_T1        0x00000000
+#define   SDRAM_RDCC_RDSS_T2        0x40000000
+#define   SDRAM_RDCC_RDSS_T3        0x80000000
+#define   SDRAM_RDCC_RDSS_T4        0xC0000000
+#define SDRAM_RDCC_RSAE_MASK        0x00000001
+#define   SDRAM_RDCC_RSAE_DISABLE   0x00000001
+#define   SDRAM_RDCC_RSAE_ENABLE    0x00000000
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Read Feedback Delay Control Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_RFDC_ARSE_MASK        0x80000000
+#define   SDRAM_RFDC_ARSE_DISABLE   0x80000000
+#define   SDRAM_RFDC_ARSE_ENABLE    0x00000000
+#define SDRAM_RFDC_RFOS_MASK        0x007F0000
+#define   SDRAM_RFDC_RFOS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16)
+#define SDRAM_RFDC_RFFD_MASK        0x000003FF
+#define   SDRAM_RFDC_RFFD_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0)
+
+#define SDRAM_RFDC_RFFD_MAX         0x4FF
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Delay Line Calibration Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_DLCR_DCLM_MASK          0x80000000
+#define   SDRAM_DLCR_DCLM_MANUEL      0x80000000
+#define   SDRAM_DLCR_DCLM_AUTO        0x00000000
+#define SDRAM_DLCR_DLCR_MASK          0x08000000
+#define   SDRAM_DLCR_DLCR_CALIBRATE   0x08000000
+#define   SDRAM_DLCR_DLCR_IDLE        0x00000000
+#define SDRAM_DLCR_DLCS_MASK          0x07000000
+#define   SDRAM_DLCR_DLCS_NOT_RUN     0x00000000
+#define   SDRAM_DLCR_DLCS_IN_PROGRESS 0x01000000
+#define   SDRAM_DLCR_DLCS_COMPLETE    0x02000000
+#define   SDRAM_DLCR_DLCS_CONT_DONE   0x03000000
+#define   SDRAM_DLCR_DLCS_ERROR       0x04000000
+#define SDRAM_DLCR_DLCV_MASK          0x000001FF
+#define   SDRAM_DLCR_DLCV_ENCODE(n) ((((unsigned long)(n))&0x1FF)<<0)
+#define   SDRAM_DLCR_DLCV_DECODE(n) ((((unsigned long)(n))>>0)&0x1FF)
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Controller On Die Termination Register
++-----------------------------------------------------------------------------*/
+#define   SDRAM_CODT_ODT_ON                   0x80000000
+#define   SDRAM_CODT_ODT_OFF                  0x00000000
+#define SDRAM_CODT_DQS_VOLTAGE_DDR_MASK       0x00000020
+#define   SDRAM_CODT_DQS_2_5_V_DDR1           0x00000000
+#define   SDRAM_CODT_DQS_1_8_V_DDR2           0x00000020
+#define SDRAM_CODT_DQS_MASK                   0x00000010
+#define   SDRAM_CODT_DQS_DIFFERENTIAL         0x00000000
+#define   SDRAM_CODT_DQS_SINGLE_END           0x00000010
+#define   SDRAM_CODT_CKSE_DIFFERENTIAL                 0x00000000
+#define   SDRAM_CODT_CKSE_SINGLE_END                   0x00000008
+#define   SDRAM_CODT_FEEBBACK_RCV_SINGLE_END  0x00000004
+#define   SDRAM_CODT_FEEBBACK_DRV_SINGLE_END  0x00000002
+#define   SDRAM_CODT_IO_HIZ                                    0x00000000
+#define   SDRAM_CODT_IO_NMODE                                          0x00000001
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Mode Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_MMODE_WR_MASK              0x00000E00
+#define   SDRAM_MMODE_WR_DDR1            0x00000000
+#define   SDRAM_MMODE_WR_DDR2_3_CYC      0x00000400
+#define   SDRAM_MMODE_WR_DDR2_4_CYC      0x00000600
+#define   SDRAM_MMODE_WR_DDR2_5_CYC      0x00000800
+#define   SDRAM_MMODE_WR_DDR2_6_CYC      0x00000A00
+#define SDRAM_MMODE_DCL_MASK             0x00000070
+#define   SDRAM_MMODE_DCL_DDR1_2_0_CLK   0x00000020
+#define   SDRAM_MMODE_DCL_DDR1_2_5_CLK   0x00000060
+#define   SDRAM_MMODE_DCL_DDR1_3_0_CLK   0x00000030
+#define   SDRAM_MMODE_DCL_DDR2_2_0_CLK   0x00000020
+#define   SDRAM_MMODE_DCL_DDR2_3_0_CLK   0x00000030
+#define   SDRAM_MMODE_DCL_DDR2_4_0_CLK   0x00000040
+#define   SDRAM_MMODE_DCL_DDR2_5_0_CLK   0x00000050
+#define   SDRAM_MMODE_DCL_DDR2_6_0_CLK   0x00000060
+#define   SDRAM_MMODE_DCL_DDR2_7_0_CLK   0x00000070
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Extended Mode Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_MEMODE_DIC_MASK            0x00000002
+#define   SDRAM_MEMODE_DIC_NORMAL        0x00000000
+#define   SDRAM_MEMODE_DIC_WEAK          0x00000002
+#define SDRAM_MEMODE_DLL_MASK            0x00000001
+#define   SDRAM_MEMODE_DLL_DISABLE       0x00000001
+#define   SDRAM_MEMODE_DLL_ENABLE        0x00000000
+#define SDRAM_MEMODE_RTT_MASK               0x00000044
+#define   SDRAM_MEMODE_RTT_DISABLED      0x00000000
+#define   SDRAM_MEMODE_RTT_75OHM         0x00000004
+#define   SDRAM_MEMODE_RTT_150OHM        0x00000040
+#define SDRAM_MEMODE_DQS_MASK            0x00000400
+#define   SDRAM_MEMODE_DQS_DISABLE       0x00000400
+#define   SDRAM_MEMODE_DQS_ENABLE        0x00000000
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Clock Timing Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_CLKTR_CLKP_MASK            0xC0000000
+#define   SDRAM_CLKTR_CLKP_0_DEG         0x00000000
+#define   SDRAM_CLKTR_CLKP_180_DEG_ADV   0x80000000
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM Write Timing Register
++-----------------------------------------------------------------------------*/
+#define SDRAM_WRDTR_WDTP_1_CYC          0x80000000
+#define SDRAM_WRDTR_LLWP_MASK            0x10000000
+#define   SDRAM_WRDTR_LLWP_DIS           0x10000000
+#define   SDRAM_WRDTR_LLWP_1_CYC         0x00000000
+#define SDRAM_WRDTR_WTR_MASK             0x0E000000
+#define   SDRAM_WRDTR_WTR_0_DEG          0x06000000
+#define   SDRAM_WRDTR_WTR_180_DEG_ADV    0x02000000
+#define   SDRAM_WRDTR_WTR_270_DEG_ADV    0x00000000
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM SDTR1 Options
++-----------------------------------------------------------------------------*/
+#define SDRAM_SDTR1_LDOF_MASK        0x80000000
+#define   SDRAM_SDTR1_LDOF_1_CLK     0x00000000
+#define   SDRAM_SDTR1_LDOF_2_CLK     0x80000000
+#define SDRAM_SDTR1_RTW_MASK         0x00F00000
+#define   SDRAM_SDTR1_RTW_2_CLK      0x00200000
+#define   SDRAM_SDTR1_RTW_3_CLK      0x00300000
+#define SDRAM_SDTR1_WTWO_MASK        0x000F0000
+#define   SDRAM_SDTR1_WTWO_0_CLK     0x00000000
+#define   SDRAM_SDTR1_WTWO_1_CLK     0x00010000
+#define SDRAM_SDTR1_RTRO_MASK        0x0000F000
+#define   SDRAM_SDTR1_RTRO_1_CLK     0x00000000
+#define   SDRAM_SDTR1_RTRO_2_CLK     0x00002000
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM SDTR2 Options
++-----------------------------------------------------------------------------*/
+#define SDRAM_SDTR2_RCD_MASK         0xF0000000
+#define   SDRAM_SDTR2_RCD_1_CLK      0x10000000
+#define   SDRAM_SDTR2_RCD_2_CLK      0x20000000
+#define   SDRAM_SDTR2_RCD_3_CLK      0x30000000
+#define   SDRAM_SDTR2_RCD_4_CLK      0x40000000
+#define   SDRAM_SDTR2_RCD_5_CLK      0x50000000
+#define SDRAM_SDTR2_WTR_MASK         0x0F000000
+#define   SDRAM_SDTR2_WTR_1_CLK      0x01000000
+#define   SDRAM_SDTR2_WTR_2_CLK      0x02000000
+#define   SDRAM_SDTR2_WTR_3_CLK      0x03000000
+#define   SDRAM_SDTR2_WTR_4_CLK      0x04000000
+#define   SDRAM_SDTR3_WTR_ENCODE(n)  ((((unsigned long)(n))&0xF)<<24)
+#define SDRAM_SDTR2_XSNR_MASK        0x00FF0000
+#define   SDRAM_SDTR2_XSNR_8_CLK     0x00080000
+#define   SDRAM_SDTR2_XSNR_16_CLK    0x00100000
+#define   SDRAM_SDTR2_XSNR_32_CLK    0x00200000
+#define   SDRAM_SDTR2_XSNR_64_CLK    0x00400000
+#define SDRAM_SDTR2_WPC_MASK         0x0000F000
+#define   SDRAM_SDTR2_WPC_2_CLK      0x00002000
+#define   SDRAM_SDTR2_WPC_3_CLK      0x00003000
+#define   SDRAM_SDTR2_WPC_4_CLK      0x00004000
+#define   SDRAM_SDTR2_WPC_5_CLK      0x00005000
+#define   SDRAM_SDTR2_WPC_6_CLK      0x00006000
+#define   SDRAM_SDTR3_WPC_ENCODE(n)  ((((unsigned long)(n))&0xF)<<12)
+#define SDRAM_SDTR2_RPC_MASK         0x00000F00
+#define   SDRAM_SDTR2_RPC_2_CLK      0x00000200
+#define   SDRAM_SDTR2_RPC_3_CLK      0x00000300
+#define   SDRAM_SDTR2_RPC_4_CLK      0x00000400
+#define SDRAM_SDTR2_RP_MASK          0x000000F0
+#define   SDRAM_SDTR2_RP_3_CLK       0x00000030
+#define   SDRAM_SDTR2_RP_4_CLK       0x00000040
+#define   SDRAM_SDTR2_RP_5_CLK       0x00000050
+#define   SDRAM_SDTR2_RP_6_CLK       0x00000060
+#define   SDRAM_SDTR2_RP_7_CLK       0x00000070
+#define SDRAM_SDTR2_RRD_MASK         0x0000000F
+#define   SDRAM_SDTR2_RRD_2_CLK      0x00000002
+#define   SDRAM_SDTR2_RRD_3_CLK      0x00000003
+
+/*-----------------------------------------------------------------------------+
+|  SDRAM SDTR3 Options
++-----------------------------------------------------------------------------*/
+#define SDRAM_SDTR3_RAS_MASK         0x1F000000
+#define   SDRAM_SDTR3_RAS_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<24)
+#define SDRAM_SDTR3_RC_MASK          0x001F0000
+#define   SDRAM_SDTR3_RC_ENCODE(n)   ((((unsigned long)(n))&0x1F)<<16)
+#define SDRAM_SDTR3_XCS_MASK         0x00001F00
+#define SDRAM_SDTR3_XCS              0x00000D00
+#define SDRAM_SDTR3_RFC_MASK         0x0000003F
+#define   SDRAM_SDTR3_RFC_ENCODE(n)  ((((unsigned long)(n))&0x3F)<<0)
+
+/*-----------------------------------------------------------------------------+
+|  Memory Bank 0-1 configuration
++-----------------------------------------------------------------------------*/
+#define SDRAM_BXCF_M_AM_MASK      0x00000F00      /* Addressing mode          */
+#define   SDRAM_BXCF_M_AM_0       0x00000000      /*   Mode 0                 */
+#define   SDRAM_BXCF_M_AM_1       0x00000100      /*   Mode 1                 */
+#define   SDRAM_BXCF_M_AM_2       0x00000200      /*   Mode 2                 */
+#define   SDRAM_BXCF_M_AM_3       0x00000300      /*   Mode 3                 */
+#define   SDRAM_BXCF_M_AM_4       0x00000400      /*   Mode 4                 */
+#define   SDRAM_BXCF_M_AM_5       0x00000500      /*   Mode 5                 */
+#define   SDRAM_BXCF_M_AM_6       0x00000600      /*   Mode 6                 */
+#define   SDRAM_BXCF_M_AM_7       0x00000700      /*   Mode 7                 */
+#define   SDRAM_BXCF_M_AM_8       0x00000800      /*   Mode 8                 */
+#define   SDRAM_BXCF_M_AM_9       0x00000900      /*   Mode 9                 */
+#define SDRAM_BXCF_M_BE_MASK      0x00000001      /* Memory Bank Enable       */
+#define   SDRAM_BXCF_M_BE_DISABLE 0x00000000      /* Memory Bank Enable       */
+#define   SDRAM_BXCF_M_BE_ENABLE  0x00000001      /* Memory Bank Enable       */
+
+#define sdr_uart0      0x0120  /* UART0 Config */
+#define sdr_uart1      0x0121  /* UART1 Config */
+#define sdr_mfr                0x4300  /* SDR0_MFR reg */
+
+/* Defines for CPC0_EPRCSR register */
+#define CPC0_EPRCSR_E0NFE          0x80000000
+#define CPC0_EPRCSR_E1NFE          0x40000000
+#define CPC0_EPRCSR_E1RPP          0x00000080
+#define CPC0_EPRCSR_E0RPP          0x00000040
+#define CPC0_EPRCSR_E1ERP          0x00000020
+#define CPC0_EPRCSR_E0ERP          0x00000010
+#define CPC0_EPRCSR_E1PCI          0x00000002
+#define CPC0_EPRCSR_E0PCI          0x00000001
+
+#define cpr0_clkupd    0x020
+#define cpr0_pllc      0x040
+#define cpr0_plld      0x060
+#define cpr0_cpud      0x080
+#define cpr0_plbd      0x0a0
+#define cpr0_opbd      0x0c0
+#define cpr0_perd      0x0e0
+#define cpr0_ahbd      0x100
+#define cpr0_icfg      0x140
+
+#define SDR_PINSTP     0x0040
+#define sdr_sdcs       0x0060
+
+#define SDR0_SDCS_SDD                  (0x80000000 >> 31)
+
+/* CUST0 Customer Configuration Register0 */
+#define SDR0_CUST0                   0x4000
+#define   SDR0_CUST0_MUX_E_N_G_MASK   0xC0000000     /* Mux_Emac_NDFC_GPIO */
+#define   SDR0_CUST0_MUX_EMAC_SEL     0x40000000       /* Emac Selection */
+#define   SDR0_CUST0_MUX_NDFC_SEL     0x80000000       /* NDFC Selection */
+#define   SDR0_CUST0_MUX_GPIO_SEL     0xC0000000       /* GPIO Selection */
+
+#define   SDR0_CUST0_NDFC_EN_MASK     0x20000000     /* NDFC Enable Mask */
+#define   SDR0_CUST0_NDFC_ENABLE      0x20000000       /* NDFC Enable */
+#define   SDR0_CUST0_NDFC_DISABLE     0x00000000       /* NDFC Disable */
+
+#define   SDR0_CUST0_NDFC_BW_MASK     0x10000000     /* NDFC Boot Width */
+#define   SDR0_CUST0_NDFC_BW_16_BIT   0x10000000       /* NDFC Boot Width = 16 Bit */
+#define   SDR0_CUST0_NDFC_BW_8_BIT    0x00000000       /* NDFC Boot Width =  8 Bit */
+
+#define   SDR0_CUST0_NDFC_BP_MASK     0x0F000000     /* NDFC Boot Page */
+#define   SDR0_CUST0_NDFC_BP_ENCODE(n) ((((unsigned long)(n))&0xF)<<24)
+#define   SDR0_CUST0_NDFC_BP_DECODE(n) ((((unsigned long)(n))>>24)&0x0F)
+
+#define   SDR0_CUST0_NDFC_BAC_MASK    0x00C00000     /* NDFC Boot Address Cycle */
+#define   SDR0_CUST0_NDFC_BAC_ENCODE(n) ((((unsigned long)(n))&0x3)<<22)
+#define   SDR0_CUST0_NDFC_BAC_DECODE(n) ((((unsigned long)(n))>>22)&0x03)
+
+#define   SDR0_CUST0_NDFC_ARE_MASK    0x00200000     /* NDFC Auto Read Enable */
+#define   SDR0_CUST0_NDFC_ARE_ENABLE  0x00200000       /* NDFC Auto Read Enable */
+#define   SDR0_CUST0_NDFC_ARE_DISABLE 0x00000000       /* NDFC Auto Read Disable */
+
+#define   SDR0_CUST0_NRB_MASK         0x00100000     /* NDFC Ready / Busy */
+#define   SDR0_CUST0_NRB_BUSY         0x00100000       /* Busy */
+#define   SDR0_CUST0_NRB_READY        0x00000000       /* Ready */
+
+#define   SDR0_CUST0_NDRSC_MASK       0x0000FFF0     /* NDFC Device Reset Count Mask */
+#define   SDR0_CUST0_NDRSC_ENCODE(n) ((((unsigned long)(n))&0xFFF)<<4)
+#define   SDR0_CUST0_NDRSC_DECODE(n) ((((unsigned long)(n))>>4)&0xFFF)
+
+#define   SDR0_CUST0_CHIPSELGAT_MASK  0x0000000F     /* Chip Select Gating Mask */
+#define   SDR0_CUST0_CHIPSELGAT_DIS   0x00000000       /* Chip Select Gating Disable */
+#define   SDR0_CUST0_CHIPSELGAT_ENALL 0x0000000F       /* All Chip Select Gating Enable */
+#define   SDR0_CUST0_CHIPSELGAT_EN0   0x00000008       /* Chip Select0 Gating Enable */
+#define   SDR0_CUST0_CHIPSELGAT_EN1   0x00000004       /* Chip Select1 Gating Enable */
+#define   SDR0_CUST0_CHIPSELGAT_EN2   0x00000002       /* Chip Select2 Gating Enable */
+#define   SDR0_CUST0_CHIPSELGAT_EN3   0x00000001       /* Chip Select3 Gating Enable */
+
+#define SDR0_PFC0              0x4100
+#define SDR0_PFC1              0x4101
+#define SDR0_PFC1_U1ME         0x02000000
+#define SDR0_PFC1_U0ME         0x00080000
+#define SDR0_PFC1_U0IM         0x00040000
+#define SDR0_PFC1_SIS          0x00020000
+#define SDR0_PFC1_DMAAEN       0x00010000
+#define SDR0_PFC1_DMADEN       0x00008000
+#define SDR0_PFC1_USBEN                0x00004000
+#define SDR0_PFC1_AHBSWAP      0x00000020
+#define SDR0_PFC1_USBBIGEN     0x00000010
+#define SDR0_PFC1_GPT_FREQ     0x0000000f
+#endif
 
 #endif /* __PPC405_H__ */
index 38809f34b4b351dcaf84a9b7f4a596aaecdd349d..907744b87245eff210b9db0f9f97bd48f765c4b4 100644 (file)
 |      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
 +----------------------------------------------------------------------------*/
 
+/*
+ * (C) Copyright 2006
+ * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com
+ * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
+ * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
+ * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * 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 __PPC440_H__
 #define __PPC440_H__
 
+#define CFG_DCACHE_SIZE                (32 << 10)      /* For AMCC 440 CPUs    */
+
 /*--------------------------------------------------------------------- */
 /* Special Purpose Registers                                           */
 /*--------------------------------------------------------------------- */
 /*-----------------------------------------------------------------------------
  | Clocking Controller
  +----------------------------------------------------------------------------*/
-#define CLOCKING_DCR_BASE 0x0c
-#define clkcfga         (CLOCKING_DCR_BASE+0x0)
-#define clkcfgd         (CLOCKING_DCR_BASE+0x1)
-
 /* values for clkcfga register - indirect addressing of these regs */
 #define clk_clkukpd    0x0020
 #define clk_pllc       0x0040
 #define clk_icfg       0x0140
 
 /* 440gx sdr register definations */
-#define SDR_DCR_BASE   0x0e
-#define sdrcfga                (SDR_DCR_BASE+0x0)
-#define sdrcfgd                (SDR_DCR_BASE+0x1)
 #define sdr_sdstp0     0x0020      /* */
 #define sdr_sdstp1     0x0021      /* */
 #define SDR_PINSTP     0x0040
 #define sdr_plbtr      0x4200
 #define sdr_mfr                0x4300  /* SDR0_MFR reg */
 
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) /* test-only!!!! */
-#define DDR0_00        0x00
-#define DDR0_01        0x01
-#define DDR0_02        0x02
-#define DDR0_03        0x03
-#define DDR0_04        0x04
-#define DDR0_05        0x05
-#define DDR0_06        0x06
-#define DDR0_07        0x07
-#define DDR0_08        0x08
-#define DDR0_09        0x09
-#define DDR0_10        0x0A
-#define DDR0_11        0x0B
-#define DDR0_12        0x0C
-#define DDR0_13        0x0D
-#define DDR0_14        0x0E
-#define DDR0_15        0x0F
-#define DDR0_16        0x10
-#define DDR0_17        0x11
-#define DDR0_18        0x12
-#define DDR0_19        0x13
-#define DDR0_20        0x14
-#define DDR0_21        0x15
-#define DDR0_22        0x16
-#define DDR0_23        0x17
-#define DDR0_24        0x18
-#define DDR0_25        0x19
-#define DDR0_26        0x1A
-#define DDR0_27        0x1B
-#define DDR0_28        0x1C
-#define DDR0_29        0x1D
-#define DDR0_30        0x1E
-#define DDR0_31        0x1F
-#define DDR0_32        0x20
-#define DDR0_33        0x21
-#define DDR0_34        0x22
-#define DDR0_35        0x23
-#define DDR0_36        0x24
-#define DDR0_37        0x25
-#define DDR0_38        0x26
-#define DDR0_39        0x27
-#define DDR0_40        0x28
-#define DDR0_41        0x29
-#define DDR0_42        0x2A
-#define DDR0_43        0x2B
-#define DDR0_44        0x2C
-#endif /*CONFIG_440EPX*/
-
 /*-----------------------------------------------------------------------------
  | SDRAM Controller
  +----------------------------------------------------------------------------*/
-#define SDRAM_DCR_BASE 0x10
-#define memcfga         (SDRAM_DCR_BASE+0x0)   /* Memory configuration address reg */
-#define memcfgd         (SDRAM_DCR_BASE+0x1)   /* Memory configuration data reg    */
-
 /* values for memcfga register - indirect addressing of these regs         */
 #define mem_besr0_clr  0x0000  /* bus error status reg 0 (clr)             */
 #define mem_besr0_set  0x0004  /* bus error status reg 0 (set)             */
 #define sdr_sdstp6     0x4005
 #define sdr_sdstp7     0x4007
 
-#define SDR0_CFGADDR           0x00E
-#define SDR0_CFGDATA           0x00F
-
 /******************************************************************************
  * PCI express defines
  ******************************************************************************/
 /*----------------------------------------------------------------------------+
 | Memory controller defines
 +----------------------------------------------------------------------------*/
-#define SDRAMC_DCR_BASE        0x010
-#define SDRAMC_CFGADDR (SDRAMC_DCR_BASE+0x0)   /* Memory configuration add  */
-#define SDRAMC_CFGDATA (SDRAMC_DCR_BASE+0x1)   /* Memory configuration data */
-
 /* A REVOIR versus specs 4 bank  - SG*/
 #define SDRAM_MCSTAT   0x14    /* memory controller status                  */
 #define SDRAM_MCOPT1   0x20    /* memory controller options 1               */
 #define SDRAM_ECCCR    0x98    /* ECC error status                          */
 #define SDRAM_CID      0xA4    /* core ID                                   */
 #define SDRAM_RID      0xA8    /* revision ID                               */
+#define SDRAM_RTSR     0xB1    /* run time status tracking                  */
 
 /*-----------------------------------------------------------------------------+
 |  Memory Controller Status
 #define SDRAM_RFDC_ARSE_ENABLE         0x00000000
 #define SDRAM_RFDC_RFOS_MASK           0x007F0000
 #define SDRAM_RFDC_RFOS_ENCODE(n)      ((((unsigned long)(n))&0x7F)<<16)
-#define SDRAM_RFDC_RFFD_MASK           0x000003FF
-#define SDRAM_RFDC_RFFD_ENCODE(n)      ((((unsigned long)(n))&0x3FF)<<0)
+#define SDRAM_RFDC_RFFD_MASK           0x000007FF
+#define SDRAM_RFDC_RFFD_ENCODE(n)      ((((unsigned long)(n))&0x7FF)<<0)
 
 #define SDRAM_RFDC_RFFD_MAX            0x7FF
 
 #define SDRAM_CLKTR_CLKP_MASK          0xC0000000
 #define SDRAM_CLKTR_CLKP_0_DEG         0x00000000
 #define SDRAM_CLKTR_CLKP_180_DEG_ADV   0x80000000
+#define SDRAM_CLKTR_CLKP_90_DEG_ADV    0x40000000
 
 /*-----------------------------------------------------------------------------+
 |  SDRAM Write Timing Register
 #define SDRAM_BXCF_M_BE_MASK           0x00000001      /* Memory Bank Enable   */
 #define SDRAM_BXCF_M_BE_DISABLE                0x00000000      /* Memory Bank Enable   */
 #define SDRAM_BXCF_M_BE_ENABLE         0x00000001      /* Memory Bank Enable   */
+
+#define SDRAM_RTSR_TRK1SM_MASK         0xC0000000      /* Tracking State Mach 1*/
+#define SDRAM_RTSR_TRK1SM_ATBASE       0x00000000      /* atbase state         */
+#define SDRAM_RTSR_TRK1SM_MISSED       0x40000000      /* missed state         */
+#define SDRAM_RTSR_TRK1SM_ATPLS1       0x80000000      /* atpls1 state         */
+#define SDRAM_RTSR_TRK1SM_RESET                0xC0000000      /* reset  state         */
+
+#define SDR0_MFR_FIXD                  0x10000000      /* Workaround for PCI/DMA */
 #endif /* CONFIG_440SPE */
 
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+/*-----------------------------------------------------------------------------
+ | SDRAM Controller
+ +----------------------------------------------------------------------------*/
+#define DDR0_00                                0x00
+#define DDR0_00_INT_ACK_MASK              0x7F000000   /* Write only */
+#define DDR0_00_INT_ACK_ALL               0x7F000000
+#define DDR0_00_INT_ACK_ENCODE(n)           ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_00_INT_ACK_DECODE(n)           ((((unsigned long)(n))>>24)&0x7F)
+/* Status */
+#define DDR0_00_INT_STATUS_MASK           0x00FF0000   /* Read only */
+/* Bit0. A single access outside the defined PHYSICAL memory space detected. */
+#define DDR0_00_INT_STATUS_BIT0           0x00010000
+/* Bit1. Multiple accesses outside the defined PHYSICAL memory space detected. */
+#define DDR0_00_INT_STATUS_BIT1           0x00020000
+/* Bit2. Single correctable ECC event detected */
+#define DDR0_00_INT_STATUS_BIT2           0x00040000
+/* Bit3. Multiple correctable ECC events detected. */
+#define DDR0_00_INT_STATUS_BIT3           0x00080000
+/* Bit4. Single uncorrectable ECC event detected. */
+#define DDR0_00_INT_STATUS_BIT4           0x00100000
+/* Bit5. Multiple uncorrectable ECC events detected. */
+#define DDR0_00_INT_STATUS_BIT5           0x00200000
+/* Bit6. DRAM initialization complete. */
+#define DDR0_00_INT_STATUS_BIT6           0x00400000
+/* Bit7. Logical OR of all lower bits. */
+#define DDR0_00_INT_STATUS_BIT7           0x00800000
+
+#define DDR0_00_INT_STATUS_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
+#define DDR0_00_INT_STATUS_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
+#define DDR0_00_DLL_INCREMENT_MASK        0x00007F00
+#define DDR0_00_DLL_INCREMENT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_00_DLL_INCREMENT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_00_DLL_START_POINT_MASK      0x0000007F
+#define DDR0_00_DLL_START_POINT_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_00_DLL_START_POINT_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_01                                0x01
+#define DDR0_01_PLB0_DB_CS_LOWER_MASK     0x1F000000
+#define DDR0_01_PLB0_DB_CS_LOWER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<24)
+#define DDR0_01_PLB0_DB_CS_LOWER_DECODE(n)  ((((unsigned long)(n))>>24)&0x1F)
+#define DDR0_01_PLB0_DB_CS_UPPER_MASK     0x001F0000
+#define DDR0_01_PLB0_DB_CS_UPPER_ENCODE(n)  ((((unsigned long)(n))&0x1F)<<16)
+#define DDR0_01_PLB0_DB_CS_UPPER_DECODE(n)  ((((unsigned long)(n))>>16)&0x1F)
+#define DDR0_01_OUT_OF_RANGE_TYPE_MASK    0x00000700   /* Read only */
+#define DDR0_01_OUT_OF_RANGE_TYPE_ENCODE(n)               ((((unsigned long)(n))&0x7)<<8)
+#define DDR0_01_OUT_OF_RANGE_TYPE_DECODE(n)               ((((unsigned long)(n))>>8)&0x7)
+#define DDR0_01_INT_MASK_MASK             0x000000FF
+#define DDR0_01_INT_MASK_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
+#define DDR0_01_INT_MASK_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
+#define DDR0_01_INT_MASK_ALL_ON           0x000000FF
+#define DDR0_01_INT_MASK_ALL_OFF          0x00000000
+
+#define DDR0_02                                0x02
+#define DDR0_02_MAX_CS_REG_MASK           0x02000000   /* Read only */
+#define DDR0_02_MAX_CS_REG_ENCODE(n)        ((((unsigned long)(n))&0x2)<<24)
+#define DDR0_02_MAX_CS_REG_DECODE(n)        ((((unsigned long)(n))>>24)&0x2)
+#define DDR0_02_MAX_COL_REG_MASK          0x000F0000   /* Read only */
+#define DDR0_02_MAX_COL_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<16)
+#define DDR0_02_MAX_COL_REG_DECODE(n)       ((((unsigned long)(n))>>16)&0xF)
+#define DDR0_02_MAX_ROW_REG_MASK          0x00000F00   /* Read only */
+#define DDR0_02_MAX_ROW_REG_ENCODE(n)       ((((unsigned long)(n))&0xF)<<8)
+#define DDR0_02_MAX_ROW_REG_DECODE(n)       ((((unsigned long)(n))>>8)&0xF)
+#define DDR0_02_START_MASK                0x00000001
+#define DDR0_02_START_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_02_START_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
+#define DDR0_02_START_OFF                 0x00000000
+#define DDR0_02_START_ON                  0x00000001
+
+#define DDR0_03                                0x03
+#define DDR0_03_BSTLEN_MASK               0x07000000
+#define DDR0_03_BSTLEN_ENCODE(n)            ((((unsigned long)(n))&0x7)<<24)
+#define DDR0_03_BSTLEN_DECODE(n)            ((((unsigned long)(n))>>24)&0x7)
+#define DDR0_03_CASLAT_MASK               0x00070000
+#define DDR0_03_CASLAT_ENCODE(n)            ((((unsigned long)(n))&0x7)<<16)
+#define DDR0_03_CASLAT_DECODE(n)            ((((unsigned long)(n))>>16)&0x7)
+#define DDR0_03_CASLAT_LIN_MASK           0x00000F00
+#define DDR0_03_CASLAT_LIN_ENCODE(n)        ((((unsigned long)(n))&0xF)<<8)
+#define DDR0_03_CASLAT_LIN_DECODE(n)        ((((unsigned long)(n))>>8)&0xF)
+#define DDR0_03_INITAREF_MASK             0x0000000F
+#define DDR0_03_INITAREF_ENCODE(n)          ((((unsigned long)(n))&0xF)<<0)
+#define DDR0_03_INITAREF_DECODE(n)          ((((unsigned long)(n))>>0)&0xF)
+
+#define DDR0_04                                0x04
+#define DDR0_04_TRC_MASK                  0x1F000000
+#define DDR0_04_TRC_ENCODE(n)               ((((unsigned long)(n))&0x1F)<<24)
+#define DDR0_04_TRC_DECODE(n)               ((((unsigned long)(n))>>24)&0x1F)
+#define DDR0_04_TRRD_MASK                 0x00070000
+#define DDR0_04_TRRD_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
+#define DDR0_04_TRRD_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
+#define DDR0_04_TRTP_MASK                 0x00000700
+#define DDR0_04_TRTP_ENCODE(n)              ((((unsigned long)(n))&0x7)<<8)
+#define DDR0_04_TRTP_DECODE(n)              ((((unsigned long)(n))>>8)&0x7)
+
+#define DDR0_05                                0x05
+#define DDR0_05_TMRD_MASK                 0x1F000000
+#define DDR0_05_TMRD_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<24)
+#define DDR0_05_TMRD_DECODE(n)              ((((unsigned long)(n))>>24)&0x1F)
+#define DDR0_05_TEMRS_MASK                0x00070000
+#define DDR0_05_TEMRS_ENCODE(n)             ((((unsigned long)(n))&0x7)<<16)
+#define DDR0_05_TEMRS_DECODE(n)             ((((unsigned long)(n))>>16)&0x7)
+#define DDR0_05_TRP_MASK                  0x00000F00
+#define DDR0_05_TRP_ENCODE(n)               ((((unsigned long)(n))&0xF)<<8)
+#define DDR0_05_TRP_DECODE(n)               ((((unsigned long)(n))>>8)&0xF)
+#define DDR0_05_TRAS_MIN_MASK             0x000000FF
+#define DDR0_05_TRAS_MIN_ENCODE(n)          ((((unsigned long)(n))&0xFF)<<0)
+#define DDR0_05_TRAS_MIN_DECODE(n)          ((((unsigned long)(n))>>0)&0xFF)
+
+#define DDR0_06                                0x06
+#define DDR0_06_WRITEINTERP_MASK          0x01000000
+#define DDR0_06_WRITEINTERP_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
+#define DDR0_06_WRITEINTERP_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
+#define DDR0_06_TWTR_MASK                 0x00070000
+#define DDR0_06_TWTR_ENCODE(n)              ((((unsigned long)(n))&0x7)<<16)
+#define DDR0_06_TWTR_DECODE(n)              ((((unsigned long)(n))>>16)&0x7)
+#define DDR0_06_TDLL_MASK                 0x0000FF00
+#define DDR0_06_TDLL_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
+#define DDR0_06_TDLL_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
+#define DDR0_06_TRFC_MASK                 0x0000007F
+#define DDR0_06_TRFC_ENCODE(n)              ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_06_TRFC_DECODE(n)              ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_07                                0x07
+#define DDR0_07_NO_CMD_INIT_MASK          0x01000000
+#define DDR0_07_NO_CMD_INIT_ENCODE(n)       ((((unsigned long)(n))&0x1)<<24)
+#define DDR0_07_NO_CMD_INIT_DECODE(n)       ((((unsigned long)(n))>>24)&0x1)
+#define DDR0_07_TFAW_MASK                 0x001F0000
+#define DDR0_07_TFAW_ENCODE(n)              ((((unsigned long)(n))&0x1F)<<16)
+#define DDR0_07_TFAW_DECODE(n)              ((((unsigned long)(n))>>16)&0x1F)
+#define DDR0_07_AUTO_REFRESH_MODE_MASK    0x00000100
+#define DDR0_07_AUTO_REFRESH_MODE_ENCODE(n) ((((unsigned long)(n))&0x1)<<8)
+#define DDR0_07_AUTO_REFRESH_MODE_DECODE(n) ((((unsigned long)(n))>>8)&0x1)
+#define DDR0_07_AREFRESH_MASK             0x00000001
+#define DDR0_07_AREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_07_AREFRESH_DECODE(n)          ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_08                                0x08
+#define DDR0_08_WRLAT_MASK                0x07000000
+#define DDR0_08_WRLAT_ENCODE(n)             ((((unsigned long)(n))&0x7)<<24)
+#define DDR0_08_WRLAT_DECODE(n)             ((((unsigned long)(n))>>24)&0x7)
+#define DDR0_08_TCPD_MASK                 0x00FF0000
+#define DDR0_08_TCPD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<16)
+#define DDR0_08_TCPD_DECODE(n)              ((((unsigned long)(n))>>16)&0xFF)
+#define DDR0_08_DQS_N_EN_MASK             0x00000100
+#define DDR0_08_DQS_N_EN_ENCODE(n)          ((((unsigned long)(n))&0x1)<<8)
+#define DDR0_08_DQS_N_EN_DECODE(n)          ((((unsigned long)(n))>>8)&0x1)
+#define DDR0_08_DDRII_SDRAM_MODE_MASK     0x00000001
+#define DDR0_08_DDRII_ENCODE(n)             ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_08_DDRII_DECODE(n)             ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_09                                0x09
+#define DDR0_09_OCD_ADJUST_PDN_CS_0_MASK  0x1F000000
+#define DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<24)
+#define DDR0_09_OCD_ADJUST_PDN_CS_0_DECODE(n) ((((unsigned long)(n))>>24)&0x1F)
+#define DDR0_09_RTT_0_MASK                0x00030000
+#define DDR0_09_RTT_0_ENCODE(n)             ((((unsigned long)(n))&0x3)<<16)
+#define DDR0_09_RTT_0_DECODE(n)             ((((unsigned long)(n))>>16)&0x3)
+#define DDR0_09_WR_DQS_SHIFT_BYPASS_MASK  0x00007F00
+#define DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_09_WR_DQS_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_09_WR_DQS_SHIFT_MASK         0x0000007F
+#define DDR0_09_WR_DQS_SHIFT_ENCODE(n)      ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_09_WR_DQS_SHIFT_DECODE(n)      ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_10                                0x0A
+#define DDR0_10_WRITE_MODEREG_MASK        0x00010000   /* Write only */
+#define DDR0_10_WRITE_MODEREG_ENCODE(n)     ((((unsigned long)(n))&0x1)<<16)
+#define DDR0_10_WRITE_MODEREG_DECODE(n)     ((((unsigned long)(n))>>16)&0x1)
+#define DDR0_10_CS_MAP_MASK               0x00000300
+#define DDR0_10_CS_MAP_NO_MEM             0x00000000
+#define DDR0_10_CS_MAP_RANK0_INSTALLED    0x00000100
+#define DDR0_10_CS_MAP_RANK1_INSTALLED    0x00000200
+#define DDR0_10_CS_MAP_ENCODE(n)            ((((unsigned long)(n))&0x3)<<8)
+#define DDR0_10_CS_MAP_DECODE(n)            ((((unsigned long)(n))>>8)&0x3)
+#define DDR0_10_OCD_ADJUST_PUP_CS_0_MASK  0x0000001F
+#define DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(n) ((((unsigned long)(n))&0x1F)<<0)
+#define DDR0_10_OCD_ADJUST_PUP_CS_0_DECODE(n) ((((unsigned long)(n))>>0)&0x1F)
+
+#define DDR0_11                                0x0B
+#define DDR0_11_SREFRESH_MASK             0x01000000
+#define DDR0_11_SREFRESH_ENCODE(n)          ((((unsigned long)(n))&0x1)<<24)
+#define DDR0_11_SREFRESH_DECODE(n)          ((((unsigned long)(n))>>24)&0x1F)
+#define DDR0_11_TXSNR_MASK                0x00FF0000
+#define DDR0_11_TXSNR_ENCODE(n)             ((((unsigned long)(n))&0xFF)<<16)
+#define DDR0_11_TXSNR_DECODE(n)             ((((unsigned long)(n))>>16)&0xFF)
+#define DDR0_11_TXSR_MASK                 0x0000FF00
+#define DDR0_11_TXSR_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<8)
+#define DDR0_11_TXSR_DECODE(n)              ((((unsigned long)(n))>>8)&0xFF)
+
+#define DDR0_12                                0x0C
+#define DDR0_12_TCKE_MASK                 0x0000007
+#define DDR0_12_TCKE_ENCODE(n)              ((((unsigned long)(n))&0x7)<<0)
+#define DDR0_12_TCKE_DECODE(n)              ((((unsigned long)(n))>>0)&0x7)
+
+#define DDR0_14                                0x0E
+#define DDR0_14_DLL_BYPASS_MODE_MASK      0x01000000
+#define DDR0_14_DLL_BYPASS_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<24)
+#define DDR0_14_DLL_BYPASS_MODE_DECODE(n)   ((((unsigned long)(n))>>24)&0x1)
+#define DDR0_14_REDUC_MASK                0x00010000
+#define DDR0_14_REDUC_64BITS              0x00000000
+#define DDR0_14_REDUC_32BITS              0x00010000
+#define DDR0_14_REDUC_ENCODE(n)             ((((unsigned long)(n))&0x1)<<16)
+#define DDR0_14_REDUC_DECODE(n)             ((((unsigned long)(n))>>16)&0x1)
+#define DDR0_14_REG_DIMM_ENABLE_MASK      0x00000100
+#define DDR0_14_REG_DIMM_ENABLE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<8)
+#define DDR0_14_REG_DIMM_ENABLE_DECODE(n)   ((((unsigned long)(n))>>8)&0x1)
+
+#define DDR0_17                                0x11
+#define DDR0_17_DLL_DQS_DELAY_0_MASK      0x7F000000
+#define DDR0_17_DLL_DQS_DELAY_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_17_DLL_DQS_DELAY_0_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
+#define DDR0_17_DLLLOCKREG_MASK           0x00010000   /* Read only */
+#define DDR0_17_DLLLOCKREG_LOCKED         0x00010000
+#define DDR0_17_DLLLOCKREG_UNLOCKED       0x00000000
+#define DDR0_17_DLLLOCKREG_ENCODE(n)        ((((unsigned long)(n))&0x1)<<16)
+#define DDR0_17_DLLLOCKREG_DECODE(n)        ((((unsigned long)(n))>>16)&0x1)
+#define DDR0_17_DLL_LOCK_MASK             0x00007F00   /* Read only */
+#define DDR0_17_DLL_LOCK_ENCODE(n)          ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_17_DLL_LOCK_DECODE(n)          ((((unsigned long)(n))>>8)&0x7F)
+
+#define DDR0_18                                0x12
+#define DDR0_18_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
+#define DDR0_18_DLL_DQS_DELAY_4_MASK      0x7F000000
+#define DDR0_18_DLL_DQS_DELAY_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_18_DLL_DQS_DELAY_4_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
+#define DDR0_18_DLL_DQS_DELAY_3_MASK      0x007F0000
+#define DDR0_18_DLL_DQS_DELAY_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
+#define DDR0_18_DLL_DQS_DELAY_3_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
+#define DDR0_18_DLL_DQS_DELAY_2_MASK      0x00007F00
+#define DDR0_18_DLL_DQS_DELAY_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_18_DLL_DQS_DELAY_2_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_18_DLL_DQS_DELAY_1_MASK      0x0000007F
+#define DDR0_18_DLL_DQS_DELAY_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_18_DLL_DQS_DELAY_1_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_19                                0x13
+#define DDR0_19_DLL_DQS_DELAY_X_MASK      0x7F7F7F7F
+#define DDR0_19_DLL_DQS_DELAY_8_MASK      0x7F000000
+#define DDR0_19_DLL_DQS_DELAY_8_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_19_DLL_DQS_DELAY_8_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
+#define DDR0_19_DLL_DQS_DELAY_7_MASK      0x007F0000
+#define DDR0_19_DLL_DQS_DELAY_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
+#define DDR0_19_DLL_DQS_DELAY_7_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
+#define DDR0_19_DLL_DQS_DELAY_6_MASK      0x00007F00
+#define DDR0_19_DLL_DQS_DELAY_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_19_DLL_DQS_DELAY_6_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_19_DLL_DQS_DELAY_5_MASK      0x0000007F
+#define DDR0_19_DLL_DQS_DELAY_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_19_DLL_DQS_DELAY_5_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_20                                0x14
+#define DDR0_20_DLL_DQS_BYPASS_3_MASK      0x7F000000
+#define DDR0_20_DLL_DQS_BYPASS_3_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_20_DLL_DQS_BYPASS_3_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
+#define DDR0_20_DLL_DQS_BYPASS_2_MASK      0x007F0000
+#define DDR0_20_DLL_DQS_BYPASS_2_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
+#define DDR0_20_DLL_DQS_BYPASS_2_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
+#define DDR0_20_DLL_DQS_BYPASS_1_MASK      0x00007F00
+#define DDR0_20_DLL_DQS_BYPASS_1_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_20_DLL_DQS_BYPASS_1_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_20_DLL_DQS_BYPASS_0_MASK      0x0000007F
+#define DDR0_20_DLL_DQS_BYPASS_0_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_20_DLL_DQS_BYPASS_0_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_21                                0x15
+#define DDR0_21_DLL_DQS_BYPASS_7_MASK      0x7F000000
+#define DDR0_21_DLL_DQS_BYPASS_7_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<24)
+#define DDR0_21_DLL_DQS_BYPASS_7_DECODE(n)   ((((unsigned long)(n))>>24)&0x7F)
+#define DDR0_21_DLL_DQS_BYPASS_6_MASK      0x007F0000
+#define DDR0_21_DLL_DQS_BYPASS_6_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<16)
+#define DDR0_21_DLL_DQS_BYPASS_6_DECODE(n)   ((((unsigned long)(n))>>16)&0x7F)
+#define DDR0_21_DLL_DQS_BYPASS_5_MASK      0x00007F00
+#define DDR0_21_DLL_DQS_BYPASS_5_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_21_DLL_DQS_BYPASS_5_DECODE(n)   ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_21_DLL_DQS_BYPASS_4_MASK      0x0000007F
+#define DDR0_21_DLL_DQS_BYPASS_4_ENCODE(n)   ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_21_DLL_DQS_BYPASS_4_DECODE(n)   ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_22                                0x16
+#define DDR0_22_CTRL_RAW_MASK             0x03000000
+#define DDR0_22_CTRL_RAW_ECC_DISABLE      0x00000000   /* ECC not being used */
+#define DDR0_22_CTRL_RAW_ECC_CHECK_ONLY   0x01000000   /* ECC checking is on, but no attempts to correct */
+#define DDR0_22_CTRL_RAW_NO_ECC_RAM       0x02000000   /* No ECC RAM storage available */
+#define DDR0_22_CTRL_RAW_ECC_ENABLE       0x03000000   /* ECC checking and correcting on */
+#define DDR0_22_CTRL_RAW_ENCODE(n)          ((((unsigned long)(n))&0x3)<<24)
+#define DDR0_22_CTRL_RAW_DECODE(n)          ((((unsigned long)(n))>>24)&0x3)
+#define DDR0_22_DQS_OUT_SHIFT_BYPASS_MASK 0x007F0000
+#define DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(n) ((((unsigned long)(n))&0x7F)<<16)
+#define DDR0_22_DQS_OUT_SHIFT_BYPASS_DECODE(n) ((((unsigned long)(n))>>16)&0x7F)
+#define DDR0_22_DQS_OUT_SHIFT_MASK        0x00007F00
+#define DDR0_22_DQS_OUT_SHIFT_ENCODE(n)     ((((unsigned long)(n))&0x7F)<<8)
+#define DDR0_22_DQS_OUT_SHIFT_DECODE(n)     ((((unsigned long)(n))>>8)&0x7F)
+#define DDR0_22_DLL_DQS_BYPASS_8_MASK     0x0000007F
+#define DDR0_22_DLL_DQS_BYPASS_8_ENCODE(n)  ((((unsigned long)(n))&0x7F)<<0)
+#define DDR0_22_DLL_DQS_BYPASS_8_DECODE(n)  ((((unsigned long)(n))>>0)&0x7F)
+
+#define DDR0_23                                0x17
+#define DDR0_23_ODT_RD_MAP_CS0_MASK       0x03000000
+#define DDR0_23_ODT_RD_MAP_CS0_ENCODE(n)   ((((unsigned long)(n))&0x3)<<24)
+#define DDR0_23_ODT_RD_MAP_CS0_DECODE(n)   ((((unsigned long)(n))>>24)&0x3)
+#define DDR0_23_ECC_C_SYND_MASK           0x00FF0000   /* Read only */
+#define DDR0_23_ECC_C_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<16)
+#define DDR0_23_ECC_C_SYND_DECODE(n)        ((((unsigned long)(n))>>16)&0xFF)
+#define DDR0_23_ECC_U_SYND_MASK           0x0000FF00   /* Read only */
+#define DDR0_23_ECC_U_SYND_ENCODE(n)        ((((unsigned long)(n))&0xFF)<<8)
+#define DDR0_23_ECC_U_SYND_DECODE(n)        ((((unsigned long)(n))>>8)&0xFF)
+#define DDR0_23_FWC_MASK                  0x00000001   /* Write only */
+#define DDR0_23_FWC_ENCODE(n)               ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_23_FWC_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_24                                0x18
+#define DDR0_24_RTT_PAD_TERMINATION_MASK  0x03000000
+#define DDR0_24_RTT_PAD_TERMINATION_ENCODE(n) ((((unsigned long)(n))&0x3)<<24)
+#define DDR0_24_RTT_PAD_TERMINATION_DECODE(n) ((((unsigned long)(n))>>24)&0x3)
+#define DDR0_24_ODT_WR_MAP_CS1_MASK       0x00030000
+#define DDR0_24_ODT_WR_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<16)
+#define DDR0_24_ODT_WR_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>16)&0x3)
+#define DDR0_24_ODT_RD_MAP_CS1_MASK       0x00000300
+#define DDR0_24_ODT_RD_MAP_CS1_ENCODE(n)    ((((unsigned long)(n))&0x3)<<8)
+#define DDR0_24_ODT_RD_MAP_CS1_DECODE(n)    ((((unsigned long)(n))>>8)&0x3)
+#define DDR0_24_ODT_WR_MAP_CS0_MASK       0x00000003
+#define DDR0_24_ODT_WR_MAP_CS0_ENCODE(n)    ((((unsigned long)(n))&0x3)<<0)
+#define DDR0_24_ODT_WR_MAP_CS0_DECODE(n)    ((((unsigned long)(n))>>0)&0x3)
+
+#define DDR0_25                                0x19
+#define DDR0_25_VERSION_MASK              0xFFFF0000   /* Read only */
+#define DDR0_25_VERSION_ENCODE(n)           ((((unsigned long)(n))&0xFFFF)<<16)
+#define DDR0_25_VERSION_DECODE(n)           ((((unsigned long)(n))>>16)&0xFFFF)
+#define DDR0_25_OUT_OF_RANGE_LENGTH_MASK  0x000003FF   /* Read only */
+#define DDR0_25_OUT_OF_RANGE_LENGTH_ENCODE(n) ((((unsigned long)(n))&0x3FF)<<0)
+#define DDR0_25_OUT_OF_RANGE_LENGTH_DECODE(n) ((((unsigned long)(n))>>0)&0x3FF)
+
+#define DDR0_26                                0x1A
+#define DDR0_26_TRAS_MAX_MASK             0xFFFF0000
+#define DDR0_26_TRAS_MAX_ENCODE(n)          ((((unsigned long)(n))&0xFFFF)<<16)
+#define DDR0_26_TRAS_MAX_DECODE(n)          ((((unsigned long)(n))>>16)&0xFFFF)
+#define DDR0_26_TREF_MASK                 0x00003FFF
+#define DDR0_26_TREF_ENCODE(n)              ((((unsigned long)(n))&0x3FFF)<<0)
+#define DDR0_26_TREF_DECODE(n)              ((((unsigned long)(n))>>0)&0x3FFF)
+
+#define DDR0_27                                0x1B
+#define DDR0_27_EMRS_DATA_MASK            0x3FFF0000
+#define DDR0_27_EMRS_DATA_ENCODE(n)         ((((unsigned long)(n))&0x3FFF)<<16)
+#define DDR0_27_EMRS_DATA_DECODE(n)         ((((unsigned long)(n))>>16)&0x3FFF)
+#define DDR0_27_TINIT_MASK                0x0000FFFF
+#define DDR0_27_TINIT_ENCODE(n)             ((((unsigned long)(n))&0xFFFF)<<0)
+#define DDR0_27_TINIT_DECODE(n)             ((((unsigned long)(n))>>0)&0xFFFF)
+
+#define DDR0_28                                0x1C
+#define DDR0_28_EMRS3_DATA_MASK           0x3FFF0000
+#define DDR0_28_EMRS3_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<16)
+#define DDR0_28_EMRS3_DATA_DECODE(n)        ((((unsigned long)(n))>>16)&0x3FFF)
+#define DDR0_28_EMRS2_DATA_MASK           0x00003FFF
+#define DDR0_28_EMRS2_DATA_ENCODE(n)        ((((unsigned long)(n))&0x3FFF)<<0)
+#define DDR0_28_EMRS2_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0x3FFF)
+
+#define DDR0_31                                0x1F
+#define DDR0_31_XOR_CHECK_BITS_MASK       0x0000FFFF
+#define DDR0_31_XOR_CHECK_BITS_ENCODE(n)    ((((unsigned long)(n))&0xFFFF)<<0)
+#define DDR0_31_XOR_CHECK_BITS_DECODE(n)    ((((unsigned long)(n))>>0)&0xFFFF)
+
+#define DDR0_32                                0x20
+#define DDR0_32_OUT_OF_RANGE_ADDR_MASK    0xFFFFFFFF   /* Read only */
+#define DDR0_32_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_32_OUT_OF_RANGE_ADDR_DECODE(n) ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_33                                0x21
+#define DDR0_33_OUT_OF_RANGE_ADDR_MASK    0x00000001   /* Read only */
+#define DDR0_33_OUT_OF_RANGE_ADDR_ENCODE(n) ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_33_OUT_OF_RANGE_ADDR_DECODE(n)               ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_34                                0x22
+#define DDR0_34_ECC_U_ADDR_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_34_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_34_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_35                                0x23
+#define DDR0_35_ECC_U_ADDR_MASK           0x00000001   /* Read only */
+#define DDR0_35_ECC_U_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_35_ECC_U_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_36                                0x24
+#define DDR0_36_ECC_U_DATA_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_36_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_36_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_37                                0x25
+#define DDR0_37_ECC_U_DATA_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_37_ECC_U_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_37_ECC_U_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_38                                0x26
+#define DDR0_38_ECC_C_ADDR_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_38_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_38_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_39                                0x27
+#define DDR0_39_ECC_C_ADDR_MASK           0x00000001   /* Read only */
+#define DDR0_39_ECC_C_ADDR_ENCODE(n)        ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_39_ECC_C_ADDR_DECODE(n)        ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_40                                0x28
+#define DDR0_40_ECC_C_DATA_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_40_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_40_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_41                                0x29
+#define DDR0_41_ECC_C_DATA_MASK           0xFFFFFFFF   /* Read only */
+#define DDR0_41_ECC_C_DATA_ENCODE(n)        ((((unsigned long)(n))&0xFFFFFFFF)<<0)
+#define DDR0_41_ECC_C_DATA_DECODE(n)        ((((unsigned long)(n))>>0)&0xFFFFFFFF)
+
+#define DDR0_42                                0x2A
+#define DDR0_42_ADDR_PINS_MASK            0x07000000
+#define DDR0_42_ADDR_PINS_ENCODE(n)         ((((unsigned long)(n))&0x7)<<24)
+#define DDR0_42_ADDR_PINS_DECODE(n)         ((((unsigned long)(n))>>24)&0x7)
+#define DDR0_42_CASLAT_LIN_GATE_MASK      0x0000000F
+#define DDR0_42_CASLAT_LIN_GATE_ENCODE(n)   ((((unsigned long)(n))&0xF)<<0)
+#define DDR0_42_CASLAT_LIN_GATE_DECODE(n)   ((((unsigned long)(n))>>0)&0xF)
+
+#define DDR0_43                                0x2B
+#define DDR0_43_TWR_MASK                  0x07000000
+#define DDR0_43_TWR_ENCODE(n)               ((((unsigned long)(n))&0x7)<<24)
+#define DDR0_43_TWR_DECODE(n)               ((((unsigned long)(n))>>24)&0x7)
+#define DDR0_43_APREBIT_MASK              0x000F0000
+#define DDR0_43_APREBIT_ENCODE(n)           ((((unsigned long)(n))&0xF)<<16)
+#define DDR0_43_APREBIT_DECODE(n)           ((((unsigned long)(n))>>16)&0xF)
+#define DDR0_43_COLUMN_SIZE_MASK          0x00000700
+#define DDR0_43_COLUMN_SIZE_ENCODE(n)       ((((unsigned long)(n))&0x7)<<8)
+#define DDR0_43_COLUMN_SIZE_DECODE(n)       ((((unsigned long)(n))>>8)&0x7)
+#define DDR0_43_EIGHT_BANK_MODE_MASK      0x00000001
+#define DDR0_43_EIGHT_BANK_MODE_8_BANKS     0x00000001
+#define DDR0_43_EIGHT_BANK_MODE_4_BANKS     0x00000000
+#define DDR0_43_EIGHT_BANK_MODE_ENCODE(n)   ((((unsigned long)(n))&0x1)<<0)
+#define DDR0_43_EIGHT_BANK_MODE_DECODE(n)   ((((unsigned long)(n))>>0)&0x1)
+
+#define DDR0_44                                0x2C
+#define DDR0_44_TRCD_MASK                 0x000000FF
+#define DDR0_44_TRCD_ENCODE(n)              ((((unsigned long)(n))&0xFF)<<0)
+#define DDR0_44_TRCD_DECODE(n)              ((((unsigned long)(n))>>0)&0xFF)
+
+#endif /* CONFIG_440EPX */
+
 /*-----------------------------------------------------------------------------
  | External Bus Controller
  +----------------------------------------------------------------------------*/
-#define EBC_DCR_BASE 0x12
-#define ebccfga (EBC_DCR_BASE+0x0)   /* External bus controller addr reg     */
-#define ebccfgd (EBC_DCR_BASE+0x1)   /* External bus controller data reg     */
 /* values for ebccfga register - indirect addressing of these regs */
 #define pb0cr          0x00    /* periph bank 0 config reg             */
 #define pb1cr          0x01    /* periph bank 1 config reg             */
 #define plb1_bearl                (PLB_ARBITER_BASE+ 0x0C)
 #define plb1_bearh                (PLB_ARBITER_BASE+ 0x0D)
 
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 /* Pin Function Control Register 1 */
 #define SDR0_PFC1                    0x4101
 #define   SDR0_PFC1_U1ME_MASK         0x02000000    /* UART1 Mode Enable */
 #define   SDR0_MFR_PKT_REJ_EN1         0x00080000   /* Pkt Rej. Enable on EMAC3(1) */
 #define   SDR0_MFR_PKT_REJ_POL         0x00200000   /* Packet Reject Polarity */
 
-#endif /* defined(CONFIG_440EP) || defined(CONFIG_440GR) */
+#define GPT0_COMP6                     0x00000098
 
 #if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define SDR0_USB2D0CR                 0x0320
 #define SDR0_CP440_NTO1_NTO1           0x00000002
 #define SDR0_CP440_NTO1_ENCODE(n)      ((((unsigned long)(n))&0x01)<<1)
 #define SDR0_CP440_NTO1_DECODE(n)      ((((unsigned long)(n))>>1)&0x01)
-#define SDR0_CFGADDR                   0x00E   /*already defined line 277 */
-#define SDR0_CFGDATA                   0x00F
-
 
 #define SDR0_SDSTP0                    0x0020
 #define SDR0_SDSTP0_ENG_MASK           0x80000000
 /******************************************************************************
  * GPIO macro register defines
  ******************************************************************************/
-#define GPIO0                  0
-#define GPIO1                  1
-
 #if defined(CONFIG_440GP) || defined(CONFIG_440GX) || \
     defined(CONFIG_440SP) || defined(CONFIG_440SPE)
 #define GPIO0_BASE             (CFG_PERIPHERAL_BASE+0x00000700)
 #define GPIO0_BASE             (CFG_PERIPHERAL_BASE+0x00000B00)
 #define GPIO1_BASE             (CFG_PERIPHERAL_BASE+0x00000C00)
 
-/* Offsets */
-#define GPIOx_OR    0x00       /* GPIO Output Register */
-#define GPIOx_TCR   0x04       /* GPIO Three-State Control Register */
-#define GPIOx_OSL   0x08       /* GPIO Output Select Register (Bits 0-31) */
-#define GPIOx_OSH   0x0C       /* GPIO Ouput Select Register (Bits 32-63) */
-#define GPIOx_TSL   0x10       /* GPIO Three-State Select Register (Bits 0-31) */
-#define GPIOx_TSH   0x14       /* GPIO Three-State Select Register  (Bits 32-63) */
-#define GPIOx_ODR   0x18       /* GPIO Open drain Register */
-#define GPIOx_IR    0x1C       /* GPIO Input Register */
-#define GPIOx_RR1   0x20       /* GPIO Receive Register 1 */
-#define GPIOx_RR2   0x24       /* GPIO Receive Register 2 */
-#define GPIOx_RR3   0x28       /* GPIO Receive Register 3 */
-#define GPIOx_IS1L  0x30       /* GPIO Input Select Register 1 (Bits 0-31) */
-#define GPIOx_IS1H  0x34       /* GPIO Input Select Register 1 (Bits 32-63) */
-#define GPIOx_IS2L  0x38       /* GPIO Input Select Register 2 (Bits 0-31) */
-#define GPIOx_IS2H  0x3C       /* GPIO Input Select Register 2 (Bits 32-63) */
-#define GPIOx_IS3L  0x40       /* GPIO Input Select Register 3 (Bits 0-31) */
-#define GPIOx_IS3H  0x44       /* GPIO Input Select Register 3 (Bits 32-63) */
-
-#define GPIO_OS(x)     (x+GPIOx_OSL)   /* GPIO Output Register High or Low */
-#define GPIO_TS(x)     (x+GPIOx_TSL)   /* GPIO Three-state Control Reg High or Low */
-#define GPIO_IS1(x)    (x+GPIOx_IS1L)  /* GPIO Input register1 High or Low */
-#define GPIO_IS2(x)    (x+GPIOx_IS2L)  /* GPIO Input register2 High or Low */
-#define GPIO_IS3(x)    (x+GPIOx_IS3L)  /* GPIO Input register3 High or Low */
-
 #define GPIO0_OR               (GPIO0_BASE+0x0)
 #define GPIO0_TCR              (GPIO0_BASE+0x4)
 #define GPIO0_OSRL             (GPIO0_BASE+0x8)
 #define GPIO1_ISR3H            (GPIO1_BASE+0x44)
 #endif
 
-/*
- * Macros for accessing the indirect EBC registers
- */
-#define mtebc(reg, data)       do { mtdcr(ebccfga,reg);mtdcr(ebccfgd,data); } while (0)
-#define mfebc(reg, data)       do { mtdcr(ebccfga,reg);data = mfdcr(ebccfgd); } while (0)
-
-/*
- * Macros for accessing the indirect SDRAM controller registers
- */
-#define mtsdram(reg, data)     do { mtdcr(memcfga,reg);mtdcr(memcfgd,data); } while (0)
-#define mfsdram(reg, data)     do { mtdcr(memcfga,reg);data = mfdcr(memcfgd); } while (0)
-
-/*
- * Macros for accessing the indirect clocking controller registers
- */
-#define mtclk(reg, data)       do { mtdcr(clkcfga,reg);mtdcr(clkcfgd,data); } while (0)
-#define mfclk(reg, data)       do { mtdcr(clkcfga,reg);data = mfdcr(clkcfgd); } while (0)
-
-/*
- * Macros for accessing the sdr controller registers
- */
-#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__
 
-typedef struct {
-       unsigned long pllFwdDivA;
-       unsigned long pllFwdDivB;
-       unsigned long pllFbkDiv;
-       unsigned long pllOpbDiv;
-       unsigned long pllPciDiv;
-       unsigned long pllExtBusDiv;
-       unsigned long freqVCOMhz;       /* in MHz                          */
-       unsigned long freqProcessor;
-       unsigned long freqTmrClk;
-       unsigned long freqPLB;
-       unsigned long freqOPB;
-       unsigned long freqEPB;
-       unsigned long freqPCI;
-#ifdef CONFIG_440SPE
-       unsigned long freqDDR;
-#endif
-       unsigned long pciIntArbEn;            /* Internal PCI arbiter is enabled */
-       unsigned long pciClkSync;             /* PCI clock is synchronous        */
-} PPC440_SYS_INFO;
-
 static inline u32 get_mcsr(void)
 {
        u32 val;
@@ -3369,8 +3682,4 @@ static inline void set_mcsr(u32 val)
 
 #endif /* _ASMLANGUAGE */
 
-#define RESET_VECTOR           0xfffffffc
-#define CACHELINE_MASK         (CFG_CACHELINE_SIZE - 1) /* Address mask for            */
-                                                        /* cache line aligned data.    */
-
 #endif /* __PPC440_H__ */
index ca241d2c13c7bd9a5e1d15c131fe7bcd81d93a17..76fe8727f5646e2879bc2f5341a345f62be81e58 100644 (file)
 #ifndef        __PPC4XX_H__
 #define __PPC4XX_H__
 
-#define EXC_OFF_SYS_RESET      0x0100  /* System reset                         */
-#define _START_OFFSET          (EXC_OFF_SYS_RESET + 0x2000)
-
 #if defined(CONFIG_440)
 #include <ppc440.h>
 #else
 #include <ppc405.h>
 #endif
 
+/*
+ * Common stuff for 4xx (405 and 440)
+ */
+
+#define EXC_OFF_SYS_RESET      0x0100  /* System reset                         */
+#define _START_OFFSET          (EXC_OFF_SYS_RESET + 0x2000)
+
+#define RESET_VECTOR   0xfffffffc
+#define CACHELINE_MASK (CFG_CACHELINE_SIZE - 1) /* Address mask for cache
+                                                    line aligned data. */
+
+#define CPR0_DCR_BASE  0x0C
+#define cprcfga                (CPR0_DCR_BASE+0x0)
+#define cprcfgd                (CPR0_DCR_BASE+0x1)
+
+#define SDR_DCR_BASE   0x0E
+#define sdrcfga                (SDR_DCR_BASE+0x0)
+#define sdrcfgd                (SDR_DCR_BASE+0x1)
+
+#define SDRAM_DCR_BASE 0x10
+#define memcfga                (SDRAM_DCR_BASE+0x0)
+#define memcfgd                (SDRAM_DCR_BASE+0x1)
+
+#define EBC_DCR_BASE   0x12
+#define ebccfga                (EBC_DCR_BASE+0x0)
+#define ebccfgd                (EBC_DCR_BASE+0x1)
+
+/*
+ * Macros for indirect DCR access
+ */
+#define mtcpr(reg, d)  do { mtdcr(cprcfga,reg);mtdcr(cprcfgd,d); } while (0)
+#define mfcpr(reg, d)  do { mtdcr(cprcfga,reg);d = mfdcr(cprcfgd); } while (0)
+
+#define mtebc(reg, d)  do { mtdcr(ebccfga,reg);mtdcr(ebccfgd,d); } while (0)
+#define mfebc(reg, d)  do { mtdcr(ebccfga,reg);d = mfdcr(ebccfgd); } while (0)
+
+#define mtsdram(reg, d)        do { mtdcr(memcfga,reg);mtdcr(memcfgd,d); } while (0)
+#define mfsdram(reg, d)        do { mtdcr(memcfga,reg);d = mfdcr(memcfgd); } while (0)
+
+#define mtsdr(reg, d)  do { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,d); } while (0)
+#define mfsdr(reg, d)  do { mtdcr(sdrcfga,reg);d = mfdcr(sdrcfgd); } while (0)
+
+#ifndef __ASSEMBLY__
+
+typedef struct
+{
+       unsigned long freqDDR;
+       unsigned long freqEBC;
+       unsigned long freqOPB;
+       unsigned long freqPCI;
+       unsigned long freqPLB;
+       unsigned long freqTmrClk;
+       unsigned long freqUART;
+       unsigned long freqProcessor;
+       unsigned long freqVCOHz;
+       unsigned long freqVCOMhz;       /* in MHz                          */
+       unsigned long pciClkSync;       /* PCI clock is synchronous        */
+       unsigned long pciIntArbEn;      /* Internal PCI arbiter is enabled */
+       unsigned long pllExtBusDiv;
+       unsigned long pllFbkDiv;
+       unsigned long pllFwdDiv;
+       unsigned long pllFwdDivA;
+       unsigned long pllFwdDivB;
+       unsigned long pllOpbDiv;
+       unsigned long pllPciDiv;
+       unsigned long pllPlbDiv;
+} PPC4xx_SYS_INFO;
+
+#endif /* __ASSEMBLY__ */
+
 #endif /* __PPC4XX_H__ */
index 3d8ca090600898f2615d8ad24638633e15ce81a7..f2855007391805c0835c795b2ea54aff81a160c2 100644 (file)
@@ -102,6 +102,8 @@ typedef struct emac_4xx_hw_st {
     uint32_t           emac_ier;
     volatile mal_desc_t *tx;
     volatile mal_desc_t *rx;
+    u32                        tx_phys;
+    u32                        rx_phys;
     bd_t               *bis;   /* for eth_init upon mal error */
     mal_desc_t         *alloc_tx_buf;
     mal_desc_t         *alloc_rx_buf;
@@ -146,11 +148,12 @@ typedef struct emac_4xx_hw_st {
 #endif
 
 #if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
-    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define SDR0_PFC1_EM_1000      (0x00200000)
 #endif
 
-/*ZMII Bridge Register addresses */
+/* ZMII Bridge Register addresses */
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define ZMII_BASE              (CFG_PERIPHERAL_BASE + 0x0D00)
@@ -202,6 +205,8 @@ typedef struct emac_4xx_hw_st {
 /* RGMII Register Addresses */
 #if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define RGMII_BASE             (CFG_PERIPHERAL_BASE + 0x1000)
+#elif defined(CONFIG_405EX)
+#define RGMII_BASE             (CFG_PERIPHERAL_BASE + 0xB00)
 #else
 #define RGMII_BASE             (CFG_PERIPHERAL_BASE + 0x0790)
 #endif
@@ -223,7 +228,8 @@ typedef struct emac_4xx_hw_st {
 #define RGMII_SSR_SP_100MBPS   (0x02)
 #define RGMII_SSR_SP_1000MBPS  (0x04)
 
-#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
+#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
+    defined(CONFIG_405EX)
 #define RGMII_SSR_V(__x)       ((__x) * 8)
 #else
 #define RGMII_SSR_V(__x)       ((__x -2) * 8)
@@ -304,7 +310,7 @@ typedef struct emac_4xx_hw_st {
 #define EMAC_BASE              (CFG_PERIPHERAL_BASE + 0x0800)
 #endif
 #else
-#if defined(CONFIG_405EZ)
+#if defined(CONFIG_405EZ) || defined(CONFIG_405EX)
 #define EMAC_BASE              0xEF600900
 #else
 #define EMAC_BASE              0xEF600800
@@ -338,7 +344,8 @@ typedef struct emac_4xx_hw_st {
 /* on 440GX EMAC_MR1 has a different layout! */
 #if defined(CONFIG_440GX) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-    defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
+    defined(CONFIG_405EX)
 /* MODE Reg 1 */
 #define EMAC_M1_FDE            (0x80000000)
 #define EMAC_M1_ILE            (0x40000000)
index 30bfde3089b47b820d8d4c9632b2abeba0067c2c..e292f0cd9010c7590bb10dea5258364ccc055215 100644 (file)
@@ -22,8 +22,9 @@ extern struct serial_device serial_smc_device;
 extern struct serial_device serial_scc_device;
 extern struct serial_device * default_serial_console (void);
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) \
-   || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_MPC5xxx)
+#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) || \
+    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) || \
+    defined(CONFIG_MPC5xxx)
 extern struct serial_device serial0_device;
 extern struct serial_device serial1_device;
 #if defined(CFG_NS16550_SERIAL)
index d2e81e38ab5bae6a019c75fec42332afe77fe729..bd159e182303b465a5b045628fc883ad85661422 100644 (file)
@@ -58,6 +58,7 @@ typedef struct {
        Xilinx_init_fn  init;
        Xilinx_done_fn  done;
        Xilinx_wr_fn    wr;
+       Xilinx_post_fn  post;
        int             relocated;
 } Xilinx_Spartan2_Slave_Serial_fns;
 
@@ -69,6 +70,7 @@ typedef struct {
 #define XILINX_XC2S50_SIZE     559232/8
 #define XILINX_XC2S100_SIZE    781248/8
 #define XILINX_XC2S150_SIZE    1040128/8
+#define XILINX_XC2S200_SIZE    1335872/8
 
 /* Spartan-IIE (1.8V) */
 #define XILINX_XC2S50E_SIZE     630048/8
@@ -95,6 +97,9 @@ typedef struct {
 #define XILINX_XC2S150_DESC(iface, fn_table, cookie) \
 { Xilinx_Spartan2, iface, XILINX_XC2S150_SIZE, fn_table, cookie }
 
+#define XILINX_XC2S200_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan2, iface, XILINX_XC2S200_SIZE, fn_table, cookie }
+
 #define XILINX_XC2S50E_DESC(iface, fn_table, cookie) \
 { Xilinx_Spartan2, iface, XILINX_XC2S50E_SIZE, fn_table, cookie }
 
index 65a3f5a4dbc7908514c44b8651c3270ced06bd78..c203eeb580f4870e5b9a3295c7c4f5430d6ee016 100644 (file)
@@ -58,6 +58,7 @@ typedef struct {
        Xilinx_init_fn  init;
        Xilinx_done_fn  done;
        Xilinx_wr_fn    wr;
+       Xilinx_post_fn  post;
        int             relocated;
 } Xilinx_Spartan3_Slave_Serial_fns;
 
@@ -80,9 +81,12 @@ typedef struct {
 #define        XILINX_XC3S1200E_SIZE   3841184/8
 #define        XILINX_XC3S1600E_SIZE   5969696/8
 
+/* Spartan-IIIE (1.2V) */
+#define XILINX_XC3S1200E_SIZE          3841184/8
+
 /* Descriptor Macros
  *********************************************************************/
-/* Spartan-II devices */
+/* Spartan-III devices */
 #define XILINX_XC3S50_DESC(iface, fn_table, cookie) \
 { Xilinx_Spartan3, iface, XILINX_XC3S50_SIZE, fn_table, cookie }
 
@@ -124,4 +128,9 @@ typedef struct {
 #define XILINX_XC3S1600E_DESC(iface, fn_table, cookie) \
 { Xilinx_Spartan3, iface, XILINX_XC3S1600E_SIZE, fn_table, cookie }
 
+
+/* Spartan-IIIE devices */
+#define XILINX_XC3S1200E_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S1200E_SIZE, fn_table, cookie }
+
 #endif /* _SPARTAN3_H_ */
index 3704e1d938dc70a1a5e4169b20343f1c2a81f596..95ebe3d92b63bbaaa18bfd89c4b7357c57903acd 100644 (file)
  *********************************************************************/
 #define CFG_SPARTAN2                   CFG_FPGA_DEV( 0x1 )
 #define CFG_VIRTEX_E                   CFG_FPGA_DEV( 0x2 )
-#define CFG_VIRTEX2                            CFG_FPGA_DEV( 0x4 )
+#define CFG_VIRTEX2                    CFG_FPGA_DEV( 0x4 )
 #define CFG_SPARTAN3                   CFG_FPGA_DEV( 0x8 )
 #define CFG_XILINX_SPARTAN2    (CFG_FPGA_XILINX | CFG_SPARTAN2)
 #define CFG_XILINX_VIRTEX_E    (CFG_FPGA_XILINX | CFG_VIRTEX_E)
-#define CFG_XILINX_VIRTEX2             (CFG_FPGA_XILINX | CFG_VIRTEX2)
+#define CFG_XILINX_VIRTEX2     (CFG_FPGA_XILINX | CFG_VIRTEX2)
 #define CFG_XILINX_SPARTAN3    (CFG_FPGA_XILINX | CFG_SPARTAN3)
 /* XXX - Add new models here */
 
index 6f35aa06bf981b0594f9951eaf08b7ec7d1f6dd7..7e7a28271dff58cb941b1e0647a3fe080d53456e 100644 (file)
@@ -430,6 +430,10 @@ extern void dm644x_eth_set_mac_addr (const u_int8_t *addr);
        puts ("Net:   ");
 #endif
        eth_initialize(gd->bd);
+#if defined(CONFIG_RESET_PHY_R)
+       debug ("Reset Ethernet PHY\n");
+       reset_phy();
+#endif
 #endif
        /* main_loop() can return to retry autoboot, if so just run it again. */
        for (;;) {
index 2740f2e769be35347805218919db4631df221312..3db6c3f936ce8c418d7a69342ff8faf7b1fc1985 100644 (file)
@@ -105,17 +105,26 @@ static int skip_atoi(const char **s)
 #define SPECIAL        32              /* 0x */
 #define LARGE  64              /* use 'ABCDEF' instead of 'abcdef' */
 
+#ifdef CFG_64BIT_VSPRINTF
+#define do_div(n,base) ({ \
+       unsigned int __res; \
+       __res = ((unsigned long long) n) % base; \
+       n = ((unsigned long long) n) / base; \
+       __res; \
+})
+#else
 #define do_div(n,base) ({ \
        int __res; \
-       __res = ((unsigned long) n) % (unsigned) base; \
-       n = ((unsigned long) n) / (unsigned) base; \
+       __res = ((unsigned long) n) % base; \
+       n = ((unsigned long) n) / base; \
        __res; \
 })
+#endif
 
 #ifdef CFG_64BIT_VSPRINTF
-static char * number(char * str, long long num, int base, int size, int precision ,int type)
+static char * number(char * str, long long num, unsigned int base, int size, int precision ,int type)
 #else
-static char * number(char * str, long num, int base, int size, int precision ,int type)
+static char * number(char * str, long num, unsigned int base, int size, int precision ,int type)
 #endif
 {
        char c,sign,tmp[66];
@@ -255,6 +264,10 @@ int vsprintf(char *buf, const char *fmt, va_list args)
                qualifier = -1;
                if (*fmt == 'h' || *fmt == 'l' || *fmt == 'q') {
                        qualifier = *fmt;
+                       if (qualifier == 'l' && *(fmt+1) == 'l') {
+                               qualifier = 'q';
+                               ++fmt;
+                       }
                        ++fmt;
                }
 
index 9aa67f93c0f66a6e5764cc1ee31a856da701f924..7b95246e1109450449ebdef77ccf9ecbfc3f7b10 100644 (file)
@@ -555,6 +555,9 @@ void board_init_f (ulong bootflag)
        bd->bi_sccfreq = gd->scc_clk;
        bd->bi_vco     = gd->vco_out;
 #endif /* CONFIG_CPM2 */
+#if defined(CONFIG_MPC512X)
+       bd->bi_ipsfreq = gd->ips_clk;
+#endif /* CONFIG_MPC512X */
 #if defined(CONFIG_MPC5xxx)
        bd->bi_ipbfreq = gd->ipb_clk;
        bd->bi_pcifreq = gd->pci_clk;
@@ -928,6 +931,11 @@ void board_init_r (gd_t *id, ulong dest_addr)
        /* Initialize the jump table for applications */
        jumptable_init ();
 
+#if defined(CONFIG_API)
+       /* Initialize API */
+       api_init ();
+#endif
+
        /* Initialize the console (after the relocation and devices init) */
        console_init_r ();
 
index a81ab5e363f013edab4a84e470927a51f3af88a4..27e1a823c6175eb6fe45feef1e0c3736da23a6e6 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 #include <common.h>
-
+#include <asm/cache.h>
 
 void flush_cache (ulong start_addr, ulong size)
 {
index dfe5628a33a011b37dd43c3c849c52b0110f01d5..6673f8ec962ad39510e25a36a56a3fd5cd5650d8 100644 (file)
@@ -358,12 +358,12 @@ static void _packblocks(const void *fdt, void *buf,
        memmove(buf + mem_rsv_off, fdt + fdt_off_mem_rsvmap(fdt), mem_rsv_size);
        fdt_set_off_mem_rsvmap(buf, mem_rsv_off);
 
-       memcpy(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
+       memmove(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
        fdt_set_off_dt_struct(buf, struct_off);
        fdt_set_size_dt_struct(buf, struct_size);
 
-       memcpy(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
-              fdt_size_dt_strings(fdt));
+       memmove(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
+               fdt_size_dt_strings(fdt));
        fdt_set_off_dt_strings(buf, strings_off);
        fdt_set_size_dt_strings(buf, fdt_size_dt_strings(fdt));
 }
index 2d4d6016ebd6f99483849f56ccc89fcf3c250036..4272108b510d40ffc32b0e39cbb5efb3b6e54a22 100644 (file)
@@ -29,7 +29,7 @@ LDFLAGS       = -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)
 AFLAGS += -DCONFIG_NAND_SPL
 CFLAGS += -DCONFIG_NAND_SPL
 
-SOBJS  = start.o resetvec.o
+SOBJS  = start.o resetvec.o cache.o
 COBJS  = gpio.o nand_boot.o nand_ecc.o memory.o ndfc.o pll.o
 
 SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
@@ -63,6 +63,10 @@ $(nandobj)System.map:        $(nandobj)u-boot-spl
 # create symbolic links for common files
 
 # from cpu directory
+$(obj)cache.S:
+       @rm -f $(obj)cache.S
+       ln -s $(SRCTREE)/cpu/ppc4xx/cache.S $(obj)cache.S
+
 $(obj)gpio.c:
        @rm -f $(obj)gpio.c
        ln -s $(SRCTREE)/cpu/ppc4xx/gpio.c $(obj)gpio.c
@@ -93,7 +97,7 @@ $(obj)nand_boot.c:
        @rm -f $(obj)nand_boot.c
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c
 
-# from drivers/nand directory
+# from drivers/mtd/nand directory
 $(obj)nand_ecc.c:
        @rm -f $(obj)nand_ecc.c
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $(obj)nand_ecc.c
index a07a773e011fd9097300db37db3364f0d0d2019a..7df55e7a9181861435dc4efc480ccf2513ef25ab 100644 (file)
@@ -53,7 +53,7 @@ SECTIONS
   _edata  =  .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss)
    *(.bss)
index 3a633fb8871c6b00c3840a8bf4cabc71fbdc4132..aed796070901884ad2ee949455484e4f6d385fad 100644 (file)
@@ -79,7 +79,7 @@ $(obj)nand_boot.c:
        @rm -f $(obj)nand_boot.c
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c
 
-# from drivers/nand directory
+# from drivers/mtd/nand directory
 $(obj)nand_ecc.c:
        @rm -f $(obj)nand_ecc.c
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $(obj)nand_ecc.c
index 4f09072df08942fe3f144230e42e11cc02f9bf3f..ac77d066cb162f80559eafb4074785e6784bcd37 100644 (file)
@@ -44,6 +44,12 @@ static void wait_init_complete(void)
  * not enough free space to implement the complete I2C SPD DDR autodetection
  * routines. Therefore the Bamboo only supports the onboard 64MBytes of SDRAM
  * when booting from NAND flash.
+ *
+ * Note:
+ * As found out by Eugene O'Brien <eugene.obrien@advantechamt.com>, the fixed
+ * DDR setup has problems (U-Boot crashes randomly upon TFTP), when the DIMM
+ * modules are still plugged in. So it is recommended to remove the DIMM
+ * modules while using the NAND booting code with the fixed SDRAM setup!
  */
 void early_sdram_init(void)
 {
index 28228f84ddcc4d37672a460ffe1c7c02a316b8f8..9dfca69a449a24cbd3dc7001822388919465dbef 100644 (file)
@@ -55,7 +55,7 @@ SECTIONS
   _edata  =  .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss)
    *(.bss)
diff --git a/nand_spl/board/amcc/kilauea/Makefile b/nand_spl/board/amcc/kilauea/Makefile
new file mode 100644 (file)
index 0000000..84bd298
--- /dev/null
@@ -0,0 +1,108 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr@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
+include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
+
+LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
+LDFLAGS        = -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)
+AFLAGS += -DCONFIG_NAND_SPL
+CFLAGS += -DCONFIG_NAND_SPL
+
+SOBJS  = start.o init.o resetvec.o cache.o
+COBJS  = memory.o nand_boot.o nand_ecc.o ndfc.o
+
+SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+__OBJS := $(SOBJS) $(COBJS)
+LNDIR  := $(OBJTREE)/nand_spl/board/$(BOARDDIR)
+
+nandobj        := $(OBJTREE)/nand_spl/
+
+ALL    = $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
+
+all:   $(obj).depend $(ALL)
+
+$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
+       $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@
+
+$(nandobj)u-boot-spl.bin:      $(nandobj)u-boot-spl
+       $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+$(nandobj)u-boot-spl:  $(OBJS)
+       cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
+               -Map $(nandobj)u-boot-spl.map \
+               -o $(nandobj)u-boot-spl
+
+# create symbolic links for common files
+
+# from cpu directory
+$(obj)cache.S:
+       @rm -f $(obj)cache.S
+       ln -s $(SRCTREE)/cpu/ppc4xx/cache.S $(obj)cache.S
+
+$(obj)ndfc.c:
+       @rm -f $(obj)ndfc.c
+       ln -s $(SRCTREE)/cpu/ppc4xx/ndfc.c $(obj)ndfc.c
+
+$(obj)resetvec.S:
+       @rm -f $(obj)resetvec.S
+       ln -s $(SRCTREE)/cpu/ppc4xx/resetvec.S $(obj)resetvec.S
+
+$(obj)start.S:
+       @rm -f $(obj)start.S
+       ln -s $(SRCTREE)/cpu/ppc4xx/start.S $(obj)start.S
+
+# from board directory
+$(obj)init.S:
+       @rm -f $(obj)init.S
+       ln -s $(SRCTREE)/board/amcc/kilauea/init.S $(obj)init.S
+
+$(obj)memory.c:
+       @rm -f $(obj)memory.c
+       ln -s $(SRCTREE)/board/amcc/kilauea/memory.c $(obj)memory.c
+
+# from nand_spl directory
+$(obj)nand_boot.c:
+       @rm -f $(obj)nand_boot.c
+       ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c
+
+# from drivers/nand directory
+$(obj)nand_ecc.c:
+       @rm -f $(obj)nand_ecc.c
+       ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $(obj)nand_ecc.c
+
+#########################################################################
+
+$(obj)%.o:     $(obj)%.S
+       $(CC) $(AFLAGS) -c -o $@ $<
+
+$(obj)%.o:     $(obj)%.c
+       $(CC) $(CFLAGS) -c -o $@ $<
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/nand_spl/board/amcc/kilauea/config.mk b/nand_spl/board/amcc/kilauea/config.mk
new file mode 100644 (file)
index 0000000..2249091
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr@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
+#
+#
+# AMCC 405EX Reference Platform (Kilauea) board
+#
+
+#
+# TEXT_BASE for SPL:
+#
+# On 4xx platforms the SPL is located at 0xfffff000...0xffffffff,
+# in the last 4kBytes of memory space in cache.
+# We will copy this SPL into instruction-cache in start.S. So we set
+# TEXT_BASE to starting address in i-cache here.
+#
+TEXT_BASE = 0x00800000
+
+# PAD_TO used to generate a 16kByte binary needed for the combined image
+# -> PAD_TO = TEXT_BASE + 0x4000
+PAD_TO = 0x00804000
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
+
+ifeq ($(dbcr),1)
+PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000
+endif
diff --git a/nand_spl/board/amcc/kilauea/u-boot.lds b/nand_spl/board/amcc/kilauea/u-boot.lds
new file mode 100644 (file)
index 0000000..084db08
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * (C) Copyright 2007
+ * Stefan Roese, DENX Software Engineering, sr@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:common)
+SECTIONS
+{
+  .resetvec 0x00800FFC :
+  {
+    *(.resetvec)
+  } = 0xffff
+
+  .text      :
+  {
+    start.o    (.text)
+    init.o     (.text)
+    nand_boot.o        (.text)
+    ndfc.o     (.text)
+
+    *(.text)
+    *(.fixup)
+  }
+  _etext = .;
+
+  .data    :
+  {
+    *(.rodata*)
+    *(.data*)
+    *(.sdata*)
+    __got2_start = .;
+    *(.got2)
+    __got2_end = .;
+  }
+
+  _edata  =  .;
+
+  __bss_start = .;
+  .bss (NOLOAD)       :
+  {
+   *(.sbss)
+   *(.bss)
+  }
+
+  _end = . ;
+}
index 78bf071f591df479ca9f6a7ce4622edd8f125430..93150aad1bea92c6518fdc8547097f5955f9a6f5 100644 (file)
@@ -30,7 +30,7 @@ AFLAGS        += -DCONFIG_NAND_SPL
 CFLAGS += -DCONFIG_NAND_SPL
 
 SOBJS  = start.o init.o resetvec.o
-COBJS  = nand_boot.o nand_ecc.o ndfc.o sdram.o
+COBJS  = denali_data_eye.o nand_boot.o nand_ecc.o ndfc.o sdram.o
 
 SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
@@ -57,6 +57,10 @@ $(nandobj)u-boot-spl:        $(OBJS)
 # create symbolic links for common files
 
 # from cpu directory
+$(obj)denali_data_eye.c:
+       @rm -f $(obj)denali_data_eye.c
+       ln -s $(SRCTREE)/cpu/ppc4xx/denali_data_eye.c $(obj)denali_data_eye.c
+
 $(obj)ndfc.c:
        @rm -f $(obj)ndfc.c
        ln -s $(SRCTREE)/cpu/ppc4xx/ndfc.c $(obj)ndfc.c
@@ -85,7 +89,7 @@ $(obj)nand_boot.c:
        @rm -f $(obj)nand_boot.c
        ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c
 
-# from drivers/nand directory
+# from drivers/mtd/nand directory
 $(obj)nand_ecc.c:
        @rm -f $(obj)nand_ecc.c
        ln -s $(SRCTREE)/drivers/mtd/nand/nand_ecc.c $(obj)nand_ecc.c
index 156368911a208b10d607b301855374ced5ca379e..0645ee7a65c7f8710a101f5637f12e6cea2a62ea 100644 (file)
@@ -55,7 +55,7 @@ SECTIONS
   _edata  =  .;
 
   __bss_start = .;
-  .bss       :
+  .bss (NOLOAD)       :
   {
    *(.sbss)
    *(.bss)
index 840a59659674f442829c2038770b6293e559ea4a..e2147cb909b28bcd3e480122eac1867e4a5c05be 100644 (file)
@@ -73,7 +73,7 @@ static int nand_is_bad_block(struct mtd_info *mtd, int block)
        nand_command(mtd, block, 0, CFG_NAND_BAD_BLOCK_POS, NAND_CMD_READOOB);
 
        /*
-        * Read on byte
+        * Read one byte
         */
        if (this->read_byte(mtd) != 0xff)
                return 1;
index 1b56a356c4f4544623b1093b6ef614dd1ff21a38..5d9e9c18898a52d0a7fd7121c976b0261184b738 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -62,6 +62,17 @@ extern int bfin_EMAC_initialize(bd_t *);
 extern int atstk1000_eth_initialize(bd_t *);
 extern int mcffec_initialize(bd_t*);
 
+#ifdef CONFIG_API
+extern void (*push_packet)(volatile void *, int);
+
+static struct {
+       uchar data[PKTSIZE];
+       int length;
+} eth_rcv_bufs[PKTBUFSRX];
+
+static unsigned int eth_rcv_current = 0, eth_rcv_last = 0;
+#endif
+
 static struct eth_device *eth_devices, *eth_current;
 
 struct eth_device *eth_get_dev(void)
@@ -138,7 +149,8 @@ int eth_register(struct eth_device* dev)
 
 int eth_initialize(bd_t *bis)
 {
-       char enetvar[32], env_enetaddr[6];
+       char enetvar[32];
+       unsigned char env_enetaddr[6];
        int i, eth_number = 0;
        char *tmp, *end;
 
@@ -202,6 +214,9 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_UEC_ETH2)
        uec_initialize(1);
 #endif
+#if defined(CONFIG_UEC_ETH3)
+       uec_initialize(2);
+#endif
 
 #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
        fec_initialize(bis);
@@ -412,23 +427,23 @@ int eth_init(bd_t *bis)
        struct eth_device* old_current;
 
        if (!eth_current)
-               return 0;
+               return -1;
 
        old_current = eth_current;
        do {
                debug ("Trying %s\n", eth_current->name);
 
-               if (eth_current->init(eth_current, bis)) {
+               if (eth_current->init(eth_current,bis) >= 0) {
                        eth_current->state = ETH_STATE_ACTIVE;
 
-                       return 1;
+                       return 0;
                }
                debug  ("FAIL\n");
 
                eth_try_another(0);
        } while (old_current != eth_current);
 
-       return 0;
+       return -1;
 }
 
 void eth_halt(void)
@@ -457,6 +472,53 @@ int eth_rx(void)
        return eth_current->recv(eth_current);
 }
 
+#ifdef CONFIG_API
+static void eth_save_packet(volatile void *packet, int length)
+{
+       volatile char *p = packet;
+       int i;
+
+       if ((eth_rcv_last+1) % PKTBUFSRX == eth_rcv_current)
+               return;
+
+       if (PKTSIZE < length)
+               return;
+
+       for (i = 0; i < length; i++)
+               eth_rcv_bufs[eth_rcv_last].data[i] = p[i];
+
+       eth_rcv_bufs[eth_rcv_last].length = length;
+       eth_rcv_last = (eth_rcv_last + 1) % PKTBUFSRX;
+}
+
+int eth_receive(volatile void *packet, int length)
+{
+       volatile char *p = packet;
+       void *pp = push_packet;
+       int i;
+
+       if (eth_rcv_current == eth_rcv_last) {
+               push_packet = eth_save_packet;
+               eth_rx();
+               push_packet = pp;
+
+               if (eth_rcv_current == eth_rcv_last)
+                       return -1;
+       }
+
+       if (length < eth_rcv_bufs[eth_rcv_current].length)
+               return -1;
+
+       length = eth_rcv_bufs[eth_rcv_current].length;
+
+       for (i = 0; i < length; i++)
+               p[i] = eth_rcv_bufs[eth_rcv_current].data[i];
+
+       eth_rcv_current = (eth_rcv_current + 1) % PKTBUFSRX;
+       return length;
+}
+#endif /* CONFIG_API */
+
 void eth_try_another(int first_restart)
 {
        static struct eth_device *first_failed = NULL;
index c719bc4c0f36d84698e8ae8fc95a3641aa5ff256..44feee2290424a852b18e3fde99aa0b036634600 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -137,6 +137,9 @@ uchar               NetBcastAddr[6] =       /* Ethernet bcast address               */
                        { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 uchar          NetEtherNullAddr[6] =
                        { 0, 0, 0, 0, 0, 0 };
+#ifdef CONFIG_API
+void           (*push_packet)(volatile void *, int len) = 0;
+#endif
 #if defined(CONFIG_CMD_CDP)
 uchar          NetCDPAddr[6] =         /* Ethernet bcast address               */
                        { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
@@ -593,7 +596,9 @@ void NetStartAgain (void)
        NetSetHandler (startAgainHandler);
 #else  /* !CONFIG_NET_MULTI*/
        eth_halt ();
+#if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER)
        eth_try_another (!NetRestarted);
+#endif
        eth_init (gd->bd);
        if (NetRestartWrap) {
                NetRestartWrap = 0;
@@ -1161,6 +1166,13 @@ NetReceive(volatile uchar * inpkt, int len)
        if (len < ETHER_HDR_SIZE)
                return;
 
+#ifdef CONFIG_API
+       if (push_packet) {
+               (*push_packet)(inpkt, len);
+               return;
+       }
+#endif
+
 #if defined(CONFIG_CMD_CDP)
        /* keep track if packet is CDP */
        iscdp = memcmp(et->et_dest, NetCDPAddr, 6) == 0;
index f1034dac249c12dbda31341816a4d1fb7704ba87..e3f44b7774be4f66a58a2deee954ab7a0cc9c372 100644 (file)
@@ -24,6 +24,6 @@
 LIB    = libpostppc4xx.a
 
 AOBJS   = cache_4xx.o
-COBJS  = cache.o ether.o fpu.o spr.o uart.o watchdog.o
+COBJS  = cache.o denali_ecc.o ether.o fpu.o spr.o uart.o watchdog.o
 
 include $(TOPDIR)/post/rules.mk
index 109ca1fbd1076af119758351562f6e0eca8b8e64..c86a1506927850974f74e7bdfbc883b57360da8a 100644 (file)
@@ -51,8 +51,6 @@ int cache_post_test4 (int tlb, void *p, int size);
 int cache_post_test5 (int tlb, void *p, int size);
 int cache_post_test6 (int tlb, void *p, int size);
 
-static int tlb = -1;           /* index to the victim TLB entry */
-
 #ifdef CONFIG_440
 static unsigned char testarea[CACHE_POST_SIZE]
 __attribute__((__aligned__(CACHE_POST_SIZE)));
@@ -60,9 +58,10 @@ __attribute__((__aligned__(CACHE_POST_SIZE)));
 
 int cache_post_test (int flags)
 {
-       void* virt = (void*)CFG_POST_CACHE_ADDR;
+       void *virt = (void *)CFG_POST_CACHE_ADDR;
        int ints;
        int res = 0;
+       int tlb = -1;           /* index to the victim TLB entry */
 
        /*
         * All 44x variants deal with cache management differently
@@ -73,25 +72,23 @@ int cache_post_test (int flags)
 #ifdef CONFIG_440
        int word0, i;
 
-       if (tlb < 0) {
-               /*
-                * Allocate a new TLB entry, since we are going to modify
-                * the write-through and caching inhibited storage attributes.
-                */
-               program_tlb((u32)testarea, (u32)virt,
-                           CACHE_POST_SIZE, TLB_WORD2_I_ENABLE);
-
-               /* Find the TLB entry */
-               for (i = 0;; i++) {
-                       if (i >= PPC4XX_TLB_SIZE) {
-                               printf ("Failed to program tlb entry\n");
-                               return -1;
-                       }
-                       word0 = mftlb1(i);
-                       if (TLB_WORD0_EPN_DECODE(word0) == (u32)virt) {
-                               tlb = i;
-                               break;
-                       }
+       /*
+        * Allocate a new TLB entry, since we are going to modify
+        * the write-through and caching inhibited storage attributes.
+        */
+       program_tlb((u32)testarea, (u32)virt, CACHE_POST_SIZE,
+                   TLB_WORD2_I_ENABLE);
+
+       /* Find the TLB entry */
+       for (i = 0;; i++) {
+               if (i >= PPC4XX_TLB_SIZE) {
+                       printf ("Failed to program tlb entry\n");
+                       return -1;
+               }
+               word0 = mftlb1(i);
+               if (TLB_WORD0_EPN_DECODE(word0) == (u32)virt) {
+                       tlb = i;
+                       break;
                }
        }
 #endif
@@ -119,6 +116,10 @@ int cache_post_test (int flags)
        if (ints)
                enable_interrupts ();
 
+#ifdef CONFIG_440
+       remove_tlb((u32)virt, CACHE_POST_SIZE);
+#endif
+
        return res;
 }
 
similarity index 77%
rename from post/board/lwmon5/ecc.c
rename to post/cpu/ppc4xx/denali_ecc.c
index 3fa3ba62435747b338078a2bd0bce3559386fd8d..77234838d9b806b1cc44e23623e1e63197bbd099 100644 (file)
@@ -31,7 +31,7 @@
 #include <common.h>
 #include <watchdog.h>
 
-#ifdef CONFIG_POST
+#if defined(CONFIG_POST) && (defined(CONFIG_440EPX) || defined(CONFIG_440GRX))
 
 #include <post.h>
 
 #include <asm/io.h>
 #include <ppc440.h>
 
-#include "../../../board/lwmon5/sdram.h"
-
 DECLARE_GLOBAL_DATA_PTR;
 
 const static unsigned char syndrome_codes[] = {
-       0xF4, 0XF1, 0XEC ,0XEA, 0XE9, 0XE6, 0XE5, 0XE3,
+       0xF4, 0XF1, 0XEC0XEA, 0XE9, 0XE6, 0XE5, 0XE3,
        0XDC, 0XDA, 0XD9, 0XD6, 0XD5, 0XD3, 0XCE, 0XCB,
        0xB5, 0XB0, 0XAD, 0XAB, 0XA8, 0XA7, 0XA4, 0XA2,
        0X9D, 0X9B, 0X98, 0X97, 0X94, 0X92, 0X8F, 0X8A,
@@ -65,9 +63,9 @@ const static unsigned char syndrome_codes[] = {
 
 #define ECC_START_ADDR         0x10
 #define ECC_STOP_ADDR          0x2000
-#define ECC_PATTERN            0x0101010101010101ull
-#define ECC_PATTERN_CORR       0x0101010101010100ull
-#define ECC_PATTERN_UNCORR     0x010101010101010Full
+#define ECC_PATTERN            0x01010101
+#define ECC_PATTERN_CORR       0x11010101
+#define ECC_PATTERN_UNCORR     0xF1010101
 
 static int test_ecc_error(void)
 {
@@ -152,68 +150,78 @@ static int test_ecc_error(void)
 
 static int test_ecc(unsigned long ecc_addr)
 {
-       volatile unsigned long long *ecc_mem;
        unsigned long value;
-       unsigned long ecc_data;
-       volatile unsigned long *lecc_mem;
-       int pret, ret = 0;
+       volatile unsigned *const ecc_mem = (volatile unsigned *) ecc_addr;
+       int pret;
+       int ret = 0;
 
        sync();
        eieio();
        WATCHDOG_RESET();
 
-       ecc_mem = (unsigned long long *)ecc_addr;
-       lecc_mem = (ulong *)ecc_addr;
-       *ecc_mem = ECC_PATTERN;
+       debug("Entering test_ecc(0x%08lX)\n", ecc_addr);
+       out_be32(ecc_mem, ECC_PATTERN);
+       out_be32(ecc_mem + 1, ECC_PATTERN);
+       in_be32(ecc_mem);
        pret = test_ecc_error();
-       if (pret != 0)
+       if (pret != 0) {
+               debug("pret: expected 0, got %d\n", pret);
                ret = 1;
-
-       /* disconnect ecc */
+       }
+       /* test for correctable error */
+       /* disconnect from ecc storage */
        mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value &DDR0_22_CTRL_RAW_MASK)
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
                | DDR0_22_CTRL_RAW_ECC_DISABLE);
 
-       /* injecting error */
-       *ecc_mem = ECC_PATTERN_CORR;
+       /* creating (correctable) single-bit error */
+       out_be32(ecc_mem, ECC_PATTERN_CORR);
 
        /* enable ecc */
        mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value &DDR0_22_CTRL_RAW_MASK)
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
                | DDR0_22_CTRL_RAW_ECC_ENABLE);
+       sync();
+       eieio();
 
-       ecc_data = *lecc_mem;
+       in_be32(ecc_mem);
        pret = test_ecc_error();
        /* if read data ok, 1 correctable error must be fixed */
-       if (pret != 3)
+       if (pret != 3) {
+               debug("pret: expected 3, got %d\n", pret);
                ret = 1;
-
+       }
        /* test for uncorrectable error */
        /* disconnect from ecc storage */
        mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value &DDR0_22_CTRL_RAW_MASK)
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
                | DDR0_22_CTRL_RAW_NO_ECC_RAM);
 
-       /* injecting multiply bit error */
-
-       *ecc_mem = ECC_PATTERN_UNCORR;
+       /* creating (uncorrectable) multiple-bit error */
+       out_be32(ecc_mem, ECC_PATTERN_UNCORR);
 
        /* enable ecc */
        mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value &DDR0_22_CTRL_RAW_MASK)
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
                | DDR0_22_CTRL_RAW_ECC_ENABLE);
+       sync();
+       eieio();
 
-       ecc_data = *lecc_mem;
-       /* what the data should be read? */
-
+       in_be32(ecc_mem);
        pret = test_ecc_error();
        /* info about uncorrectable error must appear */
-       if (pret != 5)
+       if (pret != 5) {
+               debug("pret: expected 5, got %d\n", pret);
                ret = 1;
+       }
+       /* remove error from SDRAM */
+       out_be32(ecc_mem, ECC_PATTERN);
+       /* clear error caused by read-modify-write */
+       mfsdram(DDR0_00, value);
+       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
 
        sync();
        eieio();
-
        return ret;
 }
 
@@ -223,45 +231,37 @@ int ecc_post_test (int flags)
        unsigned long value;
        unsigned long iaddr;
 
-#if CONFIG_DDR_ECC
        sync();
        eieio();
 
+       mfsdram(DDR0_22, value);
+       if (0x3 != DDR0_22_CTRL_RAW_DECODE(value)) {
+               debug("SDRAM ECC not enabled, skipping ECC POST.\n");
+               return 0;
+       }
+
        /* mask all int */
        mfsdram(DDR0_01, value);
-       mtsdram(DDR0_01, (value &DDR0_01_INT_MASK_MASK)
+       mtsdram(DDR0_01, (value & ~DDR0_01_INT_MASK_MASK)
                | DDR0_01_INT_MASK_ALL_OFF);
 
        /* clear error status */
        mfsdram(DDR0_00, value);
        mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
 
-       /* enable full support of ECC */
-       mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value &~ DDR0_22_CTRL_RAW_MASK)
-               | DDR0_22_CTRL_RAW_ECC_ENABLE);
-
-       for (iaddr = ECC_START_ADDR; iaddr < ECC_STOP_ADDR; iaddr += iaddr) {
+       for (iaddr = ECC_START_ADDR; iaddr <= ECC_STOP_ADDR; iaddr += iaddr) {
                ret = test_ecc(iaddr);
                if (ret)
                        break;
        }
-
-       /* clear error status */
-       mfsdram(DDR0_00, value);
-       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
-
        /*
         * Clear possible errors resulting from ECC testing.
         * If not done, then we could get an interrupt later on when
         * exceptions are enabled.
         */
        set_mcsr(get_mcsr());
-#endif
-
        return ret;
 
 }
-
 #endif /* CONFIG_POST & CFG_POST_ECC */
-#endif /* CONFIG_POST */
+#endif /* defined(CONFIG_POST) && ... */
index ab23ca5a3dbc6f420d41ad9204bfce6dd428959c..4ac7491343f6332577c947b9fd19793c512b5d5e 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/*
+ * Get count of EMAC devices (doesn't have to be the max. possible number
+ * supported by the cpu)
+ *
+ * CONFIG_BOARD_EMAC_COUNT added so now a "dynamic" way to configure the
+ * EMAC count is possible. As it is needed for the Kilauea/Haleakala
+ * 405EX/405EXr eval board, using the same binary.
+ */
+#if defined(CONFIG_BOARD_EMAC_COUNT)
+#define LAST_EMAC_NUM  board_emac_count()
+#else /* CONFIG_BOARD_EMAC_COUNT */
+#if defined(CONFIG_HAS_ETH3)
+#define LAST_EMAC_NUM  4
+#elif defined(CONFIG_HAS_ETH2)
+#define LAST_EMAC_NUM  3
+#elif defined(CONFIG_HAS_ETH1)
+#define LAST_EMAC_NUM  2
+#else
+#define LAST_EMAC_NUM  1
+#endif
+#endif /* CONFIG_BOARD_EMAC_COUNT */
+
 #if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define SDR0_MFR_ETH_CLK_SEL_V(n)      ((0x01<<27) / (n+1))
 #endif
@@ -65,6 +87,8 @@ static volatile mal_desc_t rx __cacheline_aligned;
 static char *tx_buf;
 static char *rx_buf;
 
+int board_emac_count(void);
+
 static void ether_post_init (int devnum, int hw_addr)
 {
        int i;
@@ -93,11 +117,11 @@ static void ether_post_init (int devnum, int hw_addr)
        sync ();
 #endif
        /* reset emac */
-       out32 (EMAC_M0 + hw_addr, EMAC_M0_SRST);
+       out_be32 ((void*)(EMAC_M0 + hw_addr), EMAC_M0_SRST);
        sync ();
 
        for (i = 0;; i++) {
-               if (!(in32 (EMAC_M0 + hw_addr) & EMAC_M0_SRST))
+               if (!(in_be32 ((void*)(EMAC_M0 + hw_addr)) & EMAC_M0_SRST))
                        break;
                if (i >= 1000) {
                        printf ("Timeout resetting EMAC\n");
@@ -120,7 +144,7 @@ static void ether_post_init (int devnum, int hw_addr)
        else
                mode_reg |= EMAC_M1_OBCI_GT100;
 
-       out32 (EMAC_M1 + hw_addr, mode_reg);
+       out_be32 ((void*)(EMAC_M1 + hw_addr), mode_reg);
 
 #endif /* defined(CONFIG_440GX) || defined(CONFIG_440SP) */
 
@@ -145,6 +169,8 @@ static void ether_post_init (int devnum, int hw_addr)
        rx.ctrl = MAL_TX_CTRL_WRAP | MAL_RX_CTRL_EMPTY;
        rx.data_len = 0;
        rx.data_ptr = (char*)L1_CACHE_ALIGN((u32)rx_buf);
+       flush_dcache_range((u32)&rx, (u32)&rx + sizeof(mal_desc_t));
+       flush_dcache_range((u32)&tx, (u32)&tx + sizeof(mal_desc_t));
 
        switch (devnum) {
        case 1:
@@ -186,40 +212,40 @@ static void ether_post_init (int devnum, int hw_addr)
 
        /* set internal loopback mode */
 #ifdef CFG_POST_ETHER_EXT_LOOPBACK
-       out32 (EMAC_M1 + hw_addr, EMAC_M1_FDE | 0 |
-              EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K |
-              EMAC_M1_MF_100MBPS | EMAC_M1_IST |
-              in32 (EMAC_M1));
+       out_be32 ((void*)(EMAC_M1 + hw_addr), EMAC_M1_FDE | 0 |
+                 EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K |
+                 EMAC_M1_MF_100MBPS | EMAC_M1_IST |
+                 in_be32 ((void*)(EMAC_M1 + hw_addr)));
 #else
-       out32 (EMAC_M1 + hw_addr, EMAC_M1_FDE | EMAC_M1_ILE |
-              EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K |
-              EMAC_M1_MF_100MBPS | EMAC_M1_IST |
-              in32 (EMAC_M1));
+       out_be32 ((void*)(EMAC_M1 + hw_addr), EMAC_M1_FDE | EMAC_M1_ILE |
+                 EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K |
+                 EMAC_M1_MF_100MBPS | EMAC_M1_IST |
+                 in_be32 ((void*)(EMAC_M1 + hw_addr)));
 #endif
 
        /* set transmit enable & receive enable */
-       out32 (EMAC_M0 + hw_addr, EMAC_M0_TXE | EMAC_M0_RXE);
+       out_be32 ((void*)(EMAC_M0 + hw_addr), EMAC_M0_TXE | EMAC_M0_RXE);
 
        /* enable broadcast address */
-       out32 (EMAC_RXM + hw_addr, EMAC_RMR_BAE);
+       out_be32 ((void*)(EMAC_RXM + hw_addr), EMAC_RMR_BAE);
 
        /* set transmit request threshold register */
-       out32 (EMAC_TRTR + hw_addr, 0x18000000);        /* 256 byte threshold */
+       out_be32 ((void*)(EMAC_TRTR + hw_addr), 0x18000000);    /* 256 byte threshold */
 
        /* set receive  low/high water mark register */
 #if defined(CONFIG_440)
        /* 440s has a 64 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_addr, 0x80009000);
+       out_be32 ((void*)(EMAC_RX_HI_LO_WMARK + hw_addr), 0x80009000);
 #else
        /* 405s have a 16 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_addr, 0x0f002000);
+       out_be32 ((void*)(EMAC_RX_HI_LO_WMARK + hw_addr), 0x0f002000);
 #endif /* defined(CONFIG_440) */
-       out32 (EMAC_TXM1 + hw_addr, 0xf8640000);
+       out_be32 ((void*)(EMAC_TXM1 + hw_addr), 0xf8640000);
 
        /* Set fifo limit entry in tx mode 0 */
-       out32 (EMAC_TXM0 + hw_addr, 0x00000003);
+       out_be32 ((void*)(EMAC_TXM0 + hw_addr), 0x00000003);
        /* Frame gap set */
-       out32 (EMAC_I_FRAME_GAP_REG + hw_addr, 0x00000008);
+       out_be32 ((void*)(EMAC_I_FRAME_GAP_REG + hw_addr), 0x00000008);
        sync ();
 }
 
@@ -246,7 +272,7 @@ static void ether_post_halt (int devnum, int hw_addr)
                udelay (1000);
        }
        /* emac reset */
-       out32 (EMAC_M0 + hw_addr, EMAC_M0_SRST);
+       out_be32 ((void*)(EMAC_M0 + hw_addr), EMAC_M0_SRST);
 
 #if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        /* remove clocks for EMAC internal loopback  */
@@ -266,14 +292,17 @@ static void ether_post_send (int devnum, int hw_addr, void *packet, int length)
                        return;
                }
                udelay (1000);
+               invalidate_dcache_range((u32)&tx, (u32)&tx + sizeof(mal_desc_t));
        }
        tx.ctrl = MAL_TX_CTRL_READY | MAL_TX_CTRL_WRAP | MAL_TX_CTRL_LAST |
                EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP;
        tx.data_len = length;
        memcpy (tx.data_ptr, packet, length);
+       flush_dcache_range((u32)&tx, (u32)&tx + sizeof(mal_desc_t));
+       flush_dcache_range((u32)tx.data_ptr, (u32)tx.data_ptr + length);
        sync ();
 
-       out32 (EMAC_TXM0 + hw_addr, in32 (EMAC_TXM0 + hw_addr) | EMAC_TXM0_GNP0);
+       out_be32 ((void*)(EMAC_TXM0 + hw_addr), in_be32 ((void*)(EMAC_TXM0 + hw_addr)) | EMAC_TXM0_GNP0);
        sync ();
 }
 
@@ -288,13 +317,17 @@ static int ether_post_recv (int devnum, int hw_addr, void *packet, int max_lengt
                        return 0;
                }
                udelay (1000);
+               invalidate_dcache_range((u32)&rx, (u32)&rx + sizeof(mal_desc_t));
        }
        length = rx.data_len - 4;
-       if (length <= max_length)
+       if (length <= max_length) {
+               invalidate_dcache_range((u32)rx.data_ptr, (u32)rx.data_ptr + length);
                memcpy(packet, rx.data_ptr, length);
+       }
        sync ();
 
        rx.ctrl |= MAL_RX_CTRL_EMPTY;
+       flush_dcache_range((u32)&rx, (u32)&rx + sizeof(mal_desc_t));
        sync ();
 
        return length;
@@ -372,6 +405,7 @@ Done:
 int ether_post_test (int flags)
 {
        int res = 0;
+       int i;
 
        /* Allocate tx & rx packet buffers */
        tx_buf = malloc (PKTSIZE_ALIGN + CFG_CACHELINE_SIZE);
@@ -383,13 +417,10 @@ int ether_post_test (int flags)
                goto out_free;
        }
 
-       /* EMAC0 */
-       if (test_ctlr (0, 0))
-               res = -1;
-
-       /* EMAC1 */
-       if (test_ctlr (1, 0x100))
-               res = -1;
+       for (i = 0; i < LAST_EMAC_NUM; i++) {
+               if (test_ctlr (i, i*0x100))
+                       res = -1;
+       }
 
 out_free:
        free (tx_buf);
index 7c3ed402c194bd86f810489640ce059adc847c49..f47b48e9dc2d1329aeb5d53d57d88d261b05f05b 100644 (file)
 #define UCR0_UDIV_POS   0
 #define UCR1_UDIV_POS   8
 #define UDIV_MAX        127
+#elif defined(CONFIG_405EX)
+#define UART0_BASE     0xef600200
+#define UART1_BASE     0xef600300
+#define CR0_MASK       0x000000ff
+#define CR0_EXTCLK_ENA 0x00800000
+#define CR0_UDIV_POS   0
+#define UDIV_SUBTRACT  0
+#define UART0_SDR      sdr_uart0
+#define UART1_SDR      sdr_uart1
+#define MFREG(a, d)    mfsdr(a, d)
+#define MTREG(a, d)    mtsdr(a, d)
 #else /* CONFIG_405GP || CONFIG_405CR */
 #define UART0_BASE      0xef600300
 #define UART1_BASE      0xef600400
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440) || defined(CONFIG_405EX)
 #if !defined(CFG_EXT_SERIAL_CLOCK)
 static void serial_divs (int baudrate, unsigned long *pudiv,
                         unsigned short *pbdiv)
@@ -183,7 +194,7 @@ static void serial_divs (int baudrate, unsigned long *pudiv,
 
 static int uart_post_init (unsigned long dev_base)
 {
-       unsigned long reg;
+       unsigned long reg = 0;
        unsigned long udiv;
        unsigned short bdiv;
        volatile char val;
index 1f2ded2bf2642db034b0c3bc5b7057588eb80203..4ab6d2dc00288f11f2d539c8c40de79c4ac70bd6 100644 (file)
@@ -36,6 +36,7 @@
 
 #include <watchdog.h>
 #include <post.h>
+#include <asm/mmu.h>
 
 #if CONFIG_POST & CFG_POST_CPU
 
@@ -59,6 +60,8 @@ extern int cpu_post_test_multi (void);
 extern int cpu_post_test_string (void);
 extern int cpu_post_test_complex (void);
 
+DECLARE_GLOBAL_DATA_PTR;
+
 ulong cpu_post_makecr (long v)
 {
        ulong cr = 0;
@@ -81,6 +84,10 @@ int cpu_post_test (int flags)
        WATCHDOG_RESET();
        if (ic)
                icache_disable ();
+#ifdef CONFIG_4xx_DCACHE
+       /* disable cache */
+       change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, TLB_WORD2_I_ENABLE);
+#endif
 
        if (ret == 0)
                ret = cpu_post_test_cmp ();
@@ -129,6 +136,10 @@ int cpu_post_test (int flags)
 
        if (ic)
                icache_enable ();
+#ifdef CONFIG_4xx_DCACHE
+       /* enable cache */
+       change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, 0);
+#endif
 
        WATCHDOG_RESET();
 
index e1c3d28f5bd5704f8434f39ebc12a3f3d11edb22..0c49e324471036e9d2d2ac6dc20c0b6c4eeafa2d 100644 (file)
@@ -194,7 +194,7 @@ struct post_test post_list[] =
        "SPR test",
        "spr",
        "This test checks SPR contents.",
-       POST_ROM | POST_ALWAYS | POST_PREREL,
+       POST_RAM | POST_ALWAYS,
        &spr_post_test,
        NULL,
        NULL,
index e8e02801a6be0d76b638cc1fc452d9448c80032e..af0de477cd8623cce4f8da970ce28f0c9e58667b 100644 (file)
@@ -97,6 +97,7 @@ endif
 #
 ifeq ($(HOSTOS),cygwin)
 SFX = .exe
+HOST_CFLAGS += -ansi
 else
 SFX =
 endif
@@ -136,7 +137,7 @@ $(obj)img2srec$(SFX):       $(obj)img2srec.o
                $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
                $(STRIP) $@
 
-$(obj)mkimage$(SFX):   $(obj)mkimage.o $(obj)crc32.o $(obj)sha1.o
+$(obj)mkimage$(SFX):   $(obj)mkimage.o $(obj)crc32.o
                $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
                $(STRIP) $@
 
index 292344ad0335e3f9288571eed337cbcd68b9c0f2..566b12506bfa4cfa19960146c518364809b5e3aa 100644 (file)
@@ -1,2 +1,8 @@
-all:   easylogo.c
-       gcc easylogo.c -o easylogo
+CFLAGS += -Wall
+
+all: easylogo
+
+clean:
+       rm -f easylogo *.o
+
+.PHONY: all clean
index 9f1d1fff0821cfb2f158c7cd40f69a426bc08d08..080bea9bb8cfe5259746874a90d187cd4159b23e 100644 (file)
 */
 
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 
 #pragma pack(1)
 
 /*#define ENABLE_ASCII_BANNERS */
 
 typedef struct {
-       unsigned char   id;
-       unsigned char   ColorMapType;
-       unsigned char   ImageTypeCode;
-       unsigned short  ColorMapOrigin;
-       unsigned short  ColorMapLenght;
-       unsigned char   ColorMapEntrySize;
-       unsigned short  ImageXOrigin;
-       unsigned short  ImageYOrigin;
-       unsigned short  ImageWidth;
-       unsigned short  ImageHeight;
-       unsigned char   ImagePixelSize;
-       unsigned char   ImageDescriptorByte;
+       unsigned char id;
+       unsigned char ColorMapType;
+       unsigned char ImageTypeCode;
+       unsigned short ColorMapOrigin;
+       unsigned short ColorMapLenght;
+       unsigned char ColorMapEntrySize;
+       unsigned short ImageXOrigin;
+       unsigned short ImageYOrigin;
+       unsigned short ImageWidth;
+       unsigned short ImageHeight;
+       unsigned char ImagePixelSize;
+       unsigned char ImageDescriptorByte;
 } tga_header_t;
 
 typedef struct {
-       unsigned char r,g,b ;
-} rgb_t ;
+       unsigned char r, g, b;
+} rgb_t;
 
 typedef struct {
-       unsigned char b,g,r ;
-} bgr_t ;
+       unsigned char b, g, r;
+} bgr_t;
 
 typedef struct {
-       unsigned char   Cb,y1,Cr,y2;
-} yuyv_t ;
+       unsigned char Cb, y1, Cr, y2;
+} yuyv_t;
 
 typedef struct {
-       unsigned char   *data,
-                                       *palette ;
-       int                             width,
-                                       height,
-                                       pixels,
-                                       bpp,
-                                       pixel_size,
-                                       size,
-                                       palette_size,
-                                       yuyv;
-} image_t ;
+       void *data, *palette;
+       int width, height, pixels, bpp, pixel_size, size, palette_size, yuyv;
+} image_t;
 
 void StringUpperCase (char *str)
 {
-    int count = strlen(str);
-    char c ;
-
-    while(count--)
-    {
-       c=*str;
-       if ((c >= 'a')&&(c<='z'))
-           *str = 'A' + (c-'a');
-       str++ ;
-    }
+       int count = strlen (str);
+       char c;
+
+       while (count--) {
+               c = *str;
+               if ((c >= 'a') && (c <= 'z'))
+                       *str = 'A' + (c - 'a');
+               str++;
+       }
 }
 
 void StringLowerCase (char *str)
 {
-    int count = strlen(str);
-    char c ;
-
-    while(count--)
-    {
-       c=*str;
-       if ((c >= 'A')&&(c<='Z'))
-           *str = 'a' + (c-'A');
-       str++ ;
-    }
+       int count = strlen (str);
+       char c;
+
+       while (count--) {
+               c = *str;
+               if ((c >= 'A') && (c <= 'Z'))
+                       *str = 'a' + (c - 'A');
+               str++;
+       }
 }
-void pixel_rgb_to_yuyv (rgb_t *rgb_pixel, yuyv_t *yuyv_pixel)
+void pixel_rgb_to_yuyv (rgb_t * rgb_pixel, yuyv_t * yuyv_pixel)
 {
-    unsigned int pR, pG, pB ;
+       unsigned int pR, pG, pB;
 
-    /* Transform (0-255) components to (0-100) */
-    pR = rgb_pixel->r * 100 / 255 ;
-    pG = rgb_pixel->g * 100 / 255 ;
-    pB = rgb_pixel->b * 100 / 255 ;
+       /* Transform (0-255) components to (0-100) */
+       pR = rgb_pixel->r * 100 / 255;
+       pG = rgb_pixel->g * 100 / 255;
+       pB = rgb_pixel->b * 100 / 255;
 
-    /* Calculate YUV values (0-255) from RGB beetween 0-100 */
-    yuyv_pixel->y1 = yuyv_pixel->y2    = 209 * (pR + pG + pB) / 300 + 16  ;
-    yuyv_pixel->Cb                     = pB - (pR/4)   - (pG*3/4)   + 128 ;
-    yuyv_pixel->Cr                     = pR - (pG*3/4) - (pB/4)     + 128 ;
+       /* Calculate YUV values (0-255) from RGB beetween 0-100 */
+       yuyv_pixel->y1 = yuyv_pixel->y2 = 209 * (pR + pG + pB) / 300 + 16;
+       yuyv_pixel->Cb = pB - (pR / 4) - (pG * 3 / 4) + 128;
+       yuyv_pixel->Cr = pR - (pG * 3 / 4) - (pB / 4) + 128;
 
-    return ;
+       return;
 }
 
-void printlogo_rgb (rgb_t      *data, int w, int h)
+void printlogo_rgb (rgb_t data, int w, int h)
 {
-    int x,y;
-    for (y=0; y<h; y++)
-    {
-       for (x=0; x<w; x++, data++)
-           if ((data->r < 30)/*&&(data->g == 0)&&(data->b == 0)*/)
-               printf(" ");
-           else
-               printf("X");
-       printf("\n");
-    }
+       int x, y;
+
+       for (y = 0; y < h; y++) {
+               for (x = 0; x < w; x++, data++)
+                       if ((data->r <
+                            30) /*&&(data->g == 0)&&(data->b == 0) */ )
+                               printf (" ");
+                       else
+                               printf ("X");
+               printf ("\n");
+       }
 }
 
 void printlogo_yuyv (unsigned short *data, int w, int h)
 {
-    int x,y;
-    for (y=0; y<h; y++)
-    {
-       for (x=0; x<w; x++, data++)
-           if (*data == 0x1080)    /* Because of inverted on i386! */
-               printf(" ");
-           else
-               printf("X");
-       printf("\n");
-    }
+       int x, y;
+
+       for (y = 0; y < h; y++) {
+               for (x = 0; x < w; x++, data++)
+                       if (*data == 0x1080)    /* Because of inverted on i386! */
+                               printf (" ");
+                       else
+                               printf ("X");
+               printf ("\n");
+       }
 }
 
-int image_load_tga (image_t *image, char *filename)
+static inline unsigned short le16_to_cpu (unsigned short val)
 {
-    FILE *file ;
-    tga_header_t header ;
-    int i;
-    unsigned char app ;
-    rgb_t *p ;
+       union {
+               unsigned char pval[2];
+               unsigned short val;
+       } swapped;
 
-    if( ( file = fopen( filename, "rb" ) ) == NULL )
-       return -1;
-
-    fread(&header, sizeof(header), 1, file);
-
-    image->width       = header.ImageWidth ;
-    image->height      = header.ImageHeight ;
+       swapped.val = val;
+       return (swapped.pval[1] << 8) + swapped.pval[0];
+}
 
-    switch (header.ImageTypeCode){
-       case 2: /* Uncompressed RGB */
-                       image->yuyv = 0 ;
-                       image->palette_size = 0 ;
-                       image->palette = NULL ;
-           break;
+int image_load_tga (image_t * image, char *filename)
+{
+       FILE *file;
+       tga_header_t header;
+       int i;
+       unsigned char app;
+       rgb_t *p;
+
+       if ((file = fopen (filename, "rb")) == NULL)
+               return -1;
+
+       fread (&header, sizeof (header), 1, file);
+
+       /* byte swap: tga is little endian, host is ??? */
+       header.ColorMapOrigin = le16_to_cpu (header.ColorMapOrigin);
+       header.ColorMapLenght = le16_to_cpu (header.ColorMapLenght);
+       header.ImageXOrigin = le16_to_cpu (header.ImageXOrigin);
+       header.ImageYOrigin = le16_to_cpu (header.ImageYOrigin);
+       header.ImageWidth = le16_to_cpu (header.ImageWidth);
+       header.ImageHeight = le16_to_cpu (header.ImageHeight);
+
+       image->width = header.ImageWidth;
+       image->height = header.ImageHeight;
+
+       switch (header.ImageTypeCode) {
+       case 2:         /* Uncompressed RGB */
+               image->yuyv = 0;
+               image->palette_size = 0;
+               image->palette = NULL;
+               break;
 
        default:
-           printf("Format not supported!\n");
-           return -1 ;
-    }
+               printf ("Format not supported!\n");
+               return -1;
+       }
 
-    image->bpp                 = header.ImagePixelSize ;
-    image->pixel_size          = ((image->bpp-1) / 8) + 1 ;
-    image->pixels              = image->width * image->height;
-    image->size                = image->pixels * image->pixel_size ;
-    image->data                = malloc(image->size) ;
+       image->bpp = header.ImagePixelSize;
+       image->pixel_size = ((image->bpp - 1) / 8) + 1;
+       image->pixels = image->width * image->height;
+       image->size = image->pixels * image->pixel_size;
+       image->data = malloc (image->size);
 
-    if (image->bpp != 24)
-    {
-       printf("Bpp not supported: %d!\n", image->bpp);
-       return -1 ;
-    }
+       if (image->bpp != 24) {
+               printf ("Bpp not supported: %d!\n", image->bpp);
+               return -1;
+       }
 
-    fread(image->data, image->size, 1, file);
+       fread (image->data, image->size, 1, file);
 
 /* Swapping R and B values */
 
-    p = image->data ;
-    for(i=0; i < image->pixels; i++, p++)
-    {
-       app = p->r ;
-       p->r = p->b ;
-       p->b = app ;
-    }
+       p = image->data;
+       for (i = 0; i < image->pixels; i++, p++) {
+               app = p->r;
+               p->r = p->b;
+               p->b = app;
+       }
 
 /* Swapping image */
 
-    if(!(header.ImageDescriptorByte & 0x20))
-    {
-       unsigned char *temp = malloc(image->size);
-       int linesize = image->pixel_size * image->width ;
-       void    *dest = image->data,
-               *source = temp + image->size - linesize ;
-
-       printf("S");
-       if (temp == NULL)
-       {
-           printf("Cannot alloc temp buffer!\n");
-           return -1;
-       }
+       if (!(header.ImageDescriptorByte & 0x20)) {
+               unsigned char *temp = malloc (image->size);
+               int linesize = image->pixel_size * image->width;
+               void *dest = image->data,
+                       *source = temp + image->size - linesize;
 
-       memcpy(temp, image->data, image->size);
-       for(i = 0; i<image->height; i++, dest+=linesize, source-=linesize)
-           memcpy(dest, source, linesize);
+               printf ("S");
+               if (temp == NULL) {
+                       printf ("Cannot alloc temp buffer!\n");
+                       return -1;
+               }
 
-       free( temp );
-    }
+               memcpy (temp, image->data, image->size);
+               for (i = 0; i < image->height;
+                    i++, dest += linesize, source -= linesize)
+                       memcpy (dest, source, linesize);
 
+               free (temp);
+       }
 #ifdef ENABLE_ASCII_BANNERS
-    printlogo_rgb (image->data,image->width, image->height);
+       printlogo_rgb (image->data, image->width, image->height);
 #endif
 
-    fclose (file);
-    return 0;
+       fclose (file);
+       return 0;
 }
 
-int image_free (image_t *image)
+int image_free (image_t * image)
 {
-    if(image->data != NULL)
-               free(image->data);
+       if (image->data != NULL)
+               free (image->data);
 
-    if(image->palette != NULL)
-               free(image->palette);
+       if (image->palette != NULL)
+               free (image->palette);
 
        return 0;
 }
 
-int image_rgb_to_yuyv (image_t *rgb_image, image_t *yuyv_image)
+int image_rgb_to_yuyv (image_t * rgb_image, image_t * yuyv_image)
 {
-       rgb_t   *rgb_ptr = (rgb_t *) rgb_image->data ;
-       yuyv_t  yuyv ;
-       unsigned short *dest ;
-       int     count = 0 ;
-
-       yuyv_image->pixel_size          = 2 ;
-       yuyv_image->bpp                 = 16 ;
-       yuyv_image->yuyv                = 1 ;
-       yuyv_image->width               = rgb_image->width ;
-       yuyv_image->height              = rgb_image->height ;
-       yuyv_image->pixels              = yuyv_image->width * yuyv_image->height ;
-       yuyv_image->size                = yuyv_image->pixels * yuyv_image->pixel_size ;
-       dest = (unsigned short *) (yuyv_image->data     = malloc(yuyv_image->size)) ;
-       yuyv_image->palette             = 0 ;
-       yuyv_image->palette_size= 0 ;
-
-       while((count++) < rgb_image->pixels)
-       {
+       rgb_t *rgb_ptr = (rgb_t *) rgb_image->data;
+       yuyv_t yuyv;
+       unsigned short *dest;
+       int count = 0;
+
+       yuyv_image->pixel_size = 2;
+       yuyv_image->bpp = 16;
+       yuyv_image->yuyv = 1;
+       yuyv_image->width = rgb_image->width;
+       yuyv_image->height = rgb_image->height;
+       yuyv_image->pixels = yuyv_image->width * yuyv_image->height;
+       yuyv_image->size = yuyv_image->pixels * yuyv_image->pixel_size;
+       dest = (unsigned short *) (yuyv_image->data =
+                                  malloc (yuyv_image->size));
+       yuyv_image->palette = 0;
+       yuyv_image->palette_size = 0;
+
+       while ((count++) < rgb_image->pixels) {
                pixel_rgb_to_yuyv (rgb_ptr++, &yuyv);
 
-               if ((count & 1)==0)     /* Was == 0 */
-                   memcpy (dest, ((void *)&yuyv) + 2, sizeof(short));
+               if ((count & 1) == 0)   /* Was == 0 */
+                       memcpy (dest, ((void *) &yuyv) + 2, sizeof (short));
                else
-                   memcpy (dest, (void *)&yuyv, sizeof(short));
+                       memcpy (dest, (void *) &yuyv, sizeof (short));
 
-               dest ++ ;
+               dest++;
        }
 
 #ifdef ENABLE_ASCII_BANNERS
-       printlogo_yuyv (yuyv_image->data, yuyv_image->width, yuyv_image->height);
+       printlogo_yuyv (yuyv_image->data, yuyv_image->width,
+                       yuyv_image->height);
 #endif
-       return 0 ;
+       return 0;
 }
 
-int image_save_header (image_t *image, char *filename, char *varname)
+int image_save_header (image_t * image, char *filename, char *varname)
 {
-       FILE    *file = fopen (filename, "w");
-       char    app[256], str[256]="", def_name[64] ;
-       int     count = image->size, col=0;
-       unsigned char *dataptr = image->data ;
-       if (file==NULL)
-               return -1 ;
-
-/*  Author information */
-       fprintf(file, "/*\n * Generated by EasyLogo, (C) 2000 by Paolo Scaffardi\n *\n");
-       fprintf(file, " * To use this, include it and call: easylogo_plot(screen,&%s, width,x,y)\n *\n", varname);
-       fprintf(file, " * Where:\t'screen'\tis the pointer to the frame buffer\n");
-       fprintf(file, " *\t\t'width'\tis the screen width\n");
-       fprintf(file, " *\t\t'x'\t\tis the horizontal position\n");
-       fprintf(file, " *\t\t'y'\t\tis the vertical position\n */\n\n");
-
-/*     Headers */
-       fprintf(file, "#include <video_easylogo.h>\n\n");
-/*     Macros */
-       strcpy(def_name, varname);
+       FILE *file = fopen (filename, "w");
+       char app[256], str[256] = "", def_name[64];
+       int count = image->size, col = 0;
+       unsigned char *dataptr = image->data;
+
+       if (file == NULL)
+               return -1;
+
+       /*  Author information */
+       fprintf (file,
+                "/*\n * Generated by EasyLogo, (C) 2000 by Paolo Scaffardi\n *\n");
+       fprintf (file,
+                " * To use this, include it and call: easylogo_plot(screen,&%s, width,x,y)\n *\n",
+                varname);
+       fprintf (file,
+                " * Where:\t'screen'\tis the pointer to the frame buffer\n");
+       fprintf (file, " *\t\t'width'\tis the screen width\n");
+       fprintf (file, " *\t\t'x'\t\tis the horizontal position\n");
+       fprintf (file, " *\t\t'y'\t\tis the vertical position\n */\n\n");
+
+       /*      Headers */
+       fprintf (file, "#include <video_easylogo.h>\n\n");
+       /*      Macros */
+       strcpy (def_name, varname);
        StringUpperCase (def_name);
-       fprintf(file, "#define  DEF_%s_WIDTH\t\t%d\n", def_name, image->width);
-       fprintf(file, "#define  DEF_%s_HEIGHT\t\t%d\n", def_name, image->height);
-       fprintf(file, "#define  DEF_%s_PIXELS\t\t%d\n", def_name, image->pixels);
-       fprintf(file, "#define  DEF_%s_BPP\t\t%d\n", def_name, image->bpp);
-       fprintf(file, "#define  DEF_%s_PIXEL_SIZE\t%d\n", def_name, image->pixel_size);
-       fprintf(file, "#define  DEF_%s_SIZE\t\t%d\n\n", def_name, image->size);
-/*  Declaration */
-       fprintf(file, "unsigned char DEF_%s_DATA[DEF_%s_SIZE] = {\n", def_name, def_name);
-
-/*     Data */
-       while(count)
-               switch (col){
-                       case 0:
-                               sprintf(str, " 0x%02x", *dataptr++);
-                               col++;
-                               count-- ;
-                               break;
-
-                       case 16:
-                               fprintf(file, "%s", str);
-                               if (count > 0)
-                                   fprintf(file,",");
-                               fprintf(file, "\n");
-
-                               col = 0 ;
-                               break;
-
-                       default:
-                               strcpy(app, str);
-                               sprintf(str, "%s, 0x%02x", app, *dataptr++);
-                               col++ ;
-                               count-- ;
-                               break;
+       fprintf (file, "#define DEF_%s_WIDTH\t\t%d\n", def_name,
+                image->width);
+       fprintf (file, "#define DEF_%s_HEIGHT\t\t%d\n", def_name,
+                image->height);
+       fprintf (file, "#define DEF_%s_PIXELS\t\t%d\n", def_name,
+                image->pixels);
+       fprintf (file, "#define DEF_%s_BPP\t\t%d\n", def_name, image->bpp);
+       fprintf (file, "#define DEF_%s_PIXEL_SIZE\t%d\n", def_name,
+                image->pixel_size);
+       fprintf (file, "#define DEF_%s_SIZE\t\t%d\n\n", def_name,
+                image->size);
+       /*  Declaration */
+       fprintf (file, "unsigned char DEF_%s_DATA[DEF_%s_SIZE] = {\n",
+                def_name, def_name);
+
+       /*      Data */
+       while (count)
+               switch (col) {
+               case 0:
+                       sprintf (str, " 0x%02x", *dataptr++);
+                       col++;
+                       count--;
+                       break;
+
+               case 16:
+                       fprintf (file, "%s", str);
+                       if (count > 0)
+                               fprintf (file, ",");
+                       fprintf (file, "\n");
+
+                       col = 0;
+                       break;
+
+               default:
+                       strcpy (app, str);
+                       sprintf (str, "%s, 0x%02x", app, *dataptr++);
+                       col++;
+                       count--;
+                       break;
                }
 
        if (col)
-               fprintf(file, "%s\n", str);
-
-/*     End of declaration */
-       fprintf(file, "};\n\n");
-/*     Variable */
-       fprintf(file, "fastimage_t %s = {\n", varname);
-       fprintf(file, "         DEF_%s_DATA,\n", def_name);
-       fprintf(file, "         DEF_%s_WIDTH,\n", def_name);
-       fprintf(file, "         DEF_%s_HEIGHT,\n", def_name);
-       fprintf(file, "         DEF_%s_BPP,\n", def_name);
-       fprintf(file, "         DEF_%s_PIXEL_SIZE,\n", def_name);
-       fprintf(file, "         DEF_%s_SIZE\n};\n", def_name);
+               fprintf (file, "%s\n", str);
+
+       /*      End of declaration */
+       fprintf (file, "};\n\n");
+       /*      Variable */
+       fprintf (file, "fastimage_t %s = {\n", varname);
+       fprintf (file, "                DEF_%s_DATA,\n", def_name);
+       fprintf (file, "                DEF_%s_WIDTH,\n", def_name);
+       fprintf (file, "                DEF_%s_HEIGHT,\n", def_name);
+       fprintf (file, "                DEF_%s_BPP,\n", def_name);
+       fprintf (file, "                DEF_%s_PIXEL_SIZE,\n", def_name);
+       fprintf (file, "                DEF_%s_SIZE\n};\n", def_name);
 
        fclose (file);
 
-       return 0 ;
+       return 0;
 }
 
 #define DEF_FILELEN    256
 
 int main (int argc, char *argv[])
 {
-    char
-       inputfile[DEF_FILELEN],
-       outputfile[DEF_FILELEN],
-       varname[DEF_FILELEN];
-
-    image_t            rgb_logo, yuyv_logo ;
-
-    switch (argc){
-    case 2:
-    case 3:
-    case 4:
-       strcpy (inputfile,      argv[1]);
-
-       if (argc > 2)
-           strcpy (varname,    argv[2]);
-       else
-       {
-           int pos = strchr(inputfile, '.');
-
-           if (pos >= 0)
-           {
-               strncpy (varname, inputfile, pos);
-               varname[pos] = 0 ;
-           }
-       }
+       char inputfile[DEF_FILELEN],
+               outputfile[DEF_FILELEN], varname[DEF_FILELEN];
+
+       image_t rgb_logo, yuyv_logo;
+
+       switch (argc) {
+       case 2:
+       case 3:
+       case 4:
+               strcpy (inputfile, argv[1]);
+
+               if (argc > 2)
+                       strcpy (varname, argv[2]);
+               else {
+                       char *dot = strchr (inputfile, '.');
+                       int pos = dot - inputfile;
+
+                       if (dot) {
+                               strncpy (varname, inputfile, pos);
+                               varname[pos] = 0;
+                       }
+               }
 
-       if (argc > 3)
-           strcpy (outputfile, argv[3]);
-       else
-       {
-           int pos = strchr (varname, '.');
+               if (argc > 3)
+                       strcpy (outputfile, argv[3]);
+               else {
+                       char *dot = strchr (varname, '.');
+                       int pos = dot - varname;
 
-           if (pos > 0)
-           {
-               char app[DEF_FILELEN] ;
+                       if (dot) {
+                               char app[DEF_FILELEN];
 
-               strncpy(app, varname, pos);
-               sprintf(outputfile, "%s.h", app);
-           }
-       }
-       break;
+                               strncpy (app, varname, pos);
+                               app[pos] = 0;
+                               sprintf (outputfile, "%s.h", app);
+                       }
+               }
+               break;
 
-    default:
-       printf("EasyLogo 1.0 (C) 2000 by Paolo Scaffardi\n\n");
+       default:
+               printf ("EasyLogo 1.0 (C) 2000 by Paolo Scaffardi\n\n");
 
-       printf("Syntax: easylogo inputfile [outputvar {outputfile}] \n");
-       printf("\n");
-       printf("Where:  'inputfile'     is the TGA image to load\n");
-       printf("        'outputvar'     is the variable name to create\n");
-       printf("        'outputfile'    is the output header file (default is 'inputfile.h')\n");
+               printf("Syntax: easylogo inputfile [outputvar {outputfile}] \n");
+               printf("\n");
+               printf("Where:  'inputfile'     is the TGA image to load\n");
+               printf("        'outputvar'     is the variable name to create\n");
+               printf("        'outputfile'    is the output header file (default is 'inputfile.h')\n");
 
-       return -1 ;
-    }
+               return -1;
+       }
 
-    printf("Doing '%s' (%s) from '%s'...",
-       outputfile, varname, inputfile);
+       printf ("Doing '%s' (%s) from '%s'...",
+               outputfile, varname, inputfile);
 
-/* Import TGA logo */
+       /* Import TGA logo */
 
-    printf("L");
-    if (image_load_tga (&rgb_logo, inputfile)<0)
-    {
-       printf("input file not found!\n");
-       exit(1);
-    }
+       printf ("L");
+       if (image_load_tga (&rgb_logo, inputfile) < 0) {
+               printf ("input file not found!\n");
+               exit (1);
+       }
 
-/* Convert it to YUYV format */
+       /* Convert it to YUYV format */
 
-    printf("C");
-    image_rgb_to_yuyv (&rgb_logo, &yuyv_logo) ;
+       printf ("C");
+       image_rgb_to_yuyv (&rgb_logo, &yuyv_logo);
 
-/* Save it into a header format */
+       /* Save it into a header format */
 
-    printf("S");
-    image_save_header (&yuyv_logo, outputfile, varname) ;
+       printf ("S");
+       image_save_header (&yuyv_logo, outputfile, varname);
 
-/* Free original image and copy */
+       /* Free original image and copy */
 
-    image_free (&rgb_logo);
-    image_free (&yuyv_logo);
+       image_free (&rgb_logo);
+       image_free (&yuyv_logo);
 
-    printf("\n");
+       printf ("\n");
 
-    return 0 ;
+       return 0;
 }
index 1f16768aaf72652e98fbcd9b40a9ea49a6a7d645..ea2d5b5a01b9937e4dd5da492a096b1731bab427 100644 (file)
@@ -28,6 +28,10 @@ HEADERS      := fw_env.h
 
 CPPFLAGS := -Wall -DUSE_HOSTCC
 
+ifeq ($(MTD_VERSION),old)
+CPPFLAGS += -DMTD_OLD
+endif
+
 all:   $(obj)fw_printenv
 
 $(obj)fw_printenv:     $(SRCS) $(HEADERS)
index d8386f7f2d6bd4df4829b8771e3259bb7a827982..f8a644e0c2b1c76de58b26742cba9f3fe320b0ad 100644 (file)
@@ -6,6 +6,10 @@ For the run-time utiltity configuration uncomment the line
 #define CONFIG_FILE  "/etc/fw_env.config"
 in fw_env.h.
 
+For building against older versions of the MTD headers (meaning before
+v2.6.8-rc1) it is required to pass the argument "MTD_VERSION=old" to
+make.
+
 See comments in the fw_env.config file for definitions for the
 particular board.
 
index f723b5bca1d0f53f762fb8b20166e7ec02d81e42..e083a5b11ebdc10aff14bf1e06697a85cfae51b3 100644 (file)
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <unistd.h>
-#include <linux/mtd/mtd.h>
-#include "fw_env.h"
 
-typedef unsigned char uchar;
+#ifdef MTD_OLD
+# include <linux/mtd/mtd.h>
+#else
+# define  __user       /* nothing */
+# include <mtd/mtd-user.h>
+#endif
+
+#include "fw_env.h"
 
 #define        CMD_GETENV      "fw_printenv"
 #define        CMD_SETENV      "fw_setenv"
 
 typedef struct envdev_s {
-       uchar devname[16];              /* Device name */
+       char devname[16];               /* Device name */
        ulong devoff;                   /* Device offset */
        ulong env_size;                 /* environment size */
        ulong erase_size;               /* device erase size */
@@ -60,22 +65,22 @@ static int curdev;
 
 typedef struct environment_s {
        ulong crc;                      /* CRC32 over data bytes    */
-       uchar flags;                    /* active or obsolete */
-       uchar *data;
+       unsigned char flags;            /* active or obsolete */
+       char *data;
 } env_t;
 
 static env_t environment;
 
 static int HaveRedundEnv = 0;
 
-static uchar active_flag = 1;
-static uchar obsolete_flag = 0;
+static unsigned char active_flag = 1;
+static unsigned char obsolete_flag = 0;
 
 
 #define XMK_STR(x)     #x
 #define MK_STR(x)      XMK_STR(x)
 
-static uchar default_environment[] = {
+static char default_environment[] = {
 #if defined(CONFIG_BOOTARGS)
        "bootargs=" CONFIG_BOOTARGS "\0"
 #endif
@@ -155,7 +160,7 @@ static uchar default_environment[] = {
 };
 
 static int flash_io (int mode);
-static uchar *envmatch (uchar * s1, uchar * s2);
+static char *envmatch (char * s1, char * s2);
 static int env_init (void);
 static int parse_config (void);
 
@@ -175,15 +180,15 @@ static inline ulong getenvsize (void)
  * Search the environment for a variable.
  * Return the value, if found, or NULL, if not found.
  */
-unsigned char *fw_getenv (unsigned char *name)
+char *fw_getenv (char *name)
 {
-       uchar *env, *nxt;
+       char *env, *nxt;
 
        if (env_init ())
                return (NULL);
 
        for (env = environment.data; *env; env = nxt + 1) {
-               uchar *val;
+               char *val;
 
                for (nxt = env; *nxt; ++nxt) {
                        if (nxt >= &environment.data[ENV_SIZE]) {
@@ -206,7 +211,7 @@ unsigned char *fw_getenv (unsigned char *name)
  */
 void fw_printenv (int argc, char *argv[])
 {
-       uchar *env, *nxt;
+       char *env, *nxt;
        int i, n_flag;
 
        if (env_init ())
@@ -241,8 +246,8 @@ void fw_printenv (int argc, char *argv[])
        }
 
        for (i = 1; i < argc; ++i) {    /* print single env variables   */
-               uchar *name = argv[i];
-               uchar *val = NULL;
+               char *name = argv[i];
+               char *val = NULL;
 
                for (env = environment.data; *env; env = nxt + 1) {
 
@@ -279,9 +284,9 @@ void fw_printenv (int argc, char *argv[])
 int fw_setenv (int argc, char *argv[])
 {
        int i, len;
-       uchar *env, *nxt;
-       uchar *oldval = NULL;
-       uchar *name;
+       char *env, *nxt;
+       char *oldval = NULL;
+       char *name;
 
        if (argc < 2) {
                return (EINVAL);
@@ -361,7 +366,7 @@ int fw_setenv (int argc, char *argv[])
        while ((*env = *name++) != '\0')
                env++;
        for (i = 2; i < argc; ++i) {
-               uchar *val = argv[i];
+               char *val = argv[i];
 
                *env = (i == 2) ? '=' : ' ';
                while ((*++env = *val++) != '\0');
@@ -373,7 +378,7 @@ int fw_setenv (int argc, char *argv[])
   WRITE_FLASH:
 
        /* Update CRC */
-       environment.crc = crc32 (0, environment.data, ENV_SIZE);
+       environment.crc = crc32 (0, (uint8_t*) environment.data, ENV_SIZE);
 
        /* write environment back to flash */
        if (flash_io (O_RDWR)) {
@@ -569,7 +574,7 @@ static int flash_io (int mode)
  * If the names match, return the value of s2, else NULL.
  */
 
-static uchar *envmatch (uchar * s1, uchar * s2)
+static char *envmatch (char * s1, char * s2)
 {
 
        while (*s1 == *s2++)
@@ -586,10 +591,10 @@ static uchar *envmatch (uchar * s1, uchar * s2)
 static int env_init (void)
 {
        int crc1, crc1_ok;
-       uchar *addr1;
+       char *addr1;
 
        int crc2, crc2_ok;
-       uchar flag1, flag2, *addr2;
+       char flag1, flag2, *addr2;
 
        if (parse_config ())            /* should fill envdevices */
                return 1;
@@ -608,7 +613,7 @@ static int env_init (void)
                return (errno);
        }
 
-       crc1_ok = ((crc1 = crc32 (0, environment.data, ENV_SIZE))
+       crc1_ok = ((crc1 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE))
                           == environment.crc);
        if (!HaveRedundEnv) {
                if (!crc1_ok) {
@@ -632,7 +637,7 @@ static int env_init (void)
                        return (errno);
                }
 
-               crc2_ok = ((crc2 = crc32 (0, environment.data, ENV_SIZE))
+               crc2_ok = ((crc2 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE))
                                   == environment.crc);
                flag2 = environment.flags;
 
index 13c45a278092f9f97af51d99c120f03d37bda6f0..58607ded5a467a60a4b6afaead8d8734a314d823 100644 (file)
@@ -47,8 +47,8 @@
        "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
-extern         void  fw_printenv(int argc, char *argv[]);
-extern unsigned char *fw_getenv  (unsigned char *name);
-extern         int   fw_setenv  (int argc, char *argv[]);
+extern void  fw_printenv(int argc, char *argv[]);
+extern char *fw_getenv  (char *name);
+extern int fw_setenv  (int argc, char *argv[]);
 
 extern unsigned        long  crc32      (unsigned long, const unsigned char *, unsigned);