]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge with /home/wd/git/u-boot/testing-NAND/ to add new NAND handling.
authorBartlomiej Sieka <tur@semihalf.com>
Fri, 24 Feb 2006 08:37:22 +0000 (09:37 +0100)
committerBartlomiej Sieka <tur@pollux.(none)>
Fri, 24 Feb 2006 08:37:22 +0000 (09:37 +0100)
1053 files changed:
CHANGELOG
COPYING
CREDITS
MAINTAINERS
MAKEALL
Makefile
README
board/AtmarkTechno/suzaku/u-boot.lds
board/LEOX/elpt860/README.LEOX
board/LEOX/elpt860/elpt860.c
board/LEOX/elpt860/u-boot.lds
board/LEOX/elpt860/u-boot.lds.debug
board/MAI/AmigaOneG3SE/ps2kbd.c
board/MAI/AmigaOneG3SE/u-boot.lds
board/Marvell/common/flash.c
board/Marvell/common/i2c.c
board/Marvell/db64360/db64360.c
board/Marvell/db64360/mv_eth.c
board/Marvell/db64360/u-boot.lds
board/Marvell/db64460/db64460.c
board/Marvell/db64460/mv_eth.c
board/Marvell/db64460/u-boot.lds
board/RPXClassic/RPXClassic.c
board/RPXClassic/u-boot.lds
board/RPXClassic/u-boot.lds.debug
board/RPXlite/RPXlite.c
board/RPXlite/u-boot.lds
board/RPXlite/u-boot.lds.debug
board/RPXlite_dw/README
board/RPXlite_dw/RPXlite_dw.c
board/RPXlite_dw/u-boot.lds
board/RPXlite_dw/u-boot.lds.debug
board/RRvision/RRvision.c
board/RRvision/u-boot.lds
board/a3000/u-boot.lds
board/adder/u-boot.lds
board/adsvix/u-boot.lds
board/alaska/u-boot.lds
board/altera/dk1c20/u-boot.lds
board/altera/dk1s10/u-boot.lds
board/amcc/bamboo/bamboo.c
board/amcc/bamboo/u-boot.lds
board/amcc/bubinga/bubinga.c
board/amcc/bubinga/u-boot.lds
board/amcc/ebony/ebony.c
board/amcc/ebony/u-boot.lds
board/amcc/luan/Makefile [new file with mode: 0644]
board/amcc/luan/config.mk [new file with mode: 0644]
board/amcc/luan/epld.h [new file with mode: 0644]
board/amcc/luan/flash.c [new file with mode: 0644]
board/amcc/luan/init.S [new file with mode: 0644]
board/amcc/luan/luan.c [new file with mode: 0644]
board/amcc/luan/u-boot.lds [new file with mode: 0644]
board/amcc/ocotea/config.mk
board/amcc/ocotea/ocotea.c
board/amcc/ocotea/ocotea.h
board/amcc/ocotea/u-boot.lds
board/amcc/walnut/u-boot.lds
board/amcc/walnut/walnut.c
board/amcc/yellowstone/Makefile
board/amcc/yellowstone/flash.c [deleted file]
board/amcc/yellowstone/init.S
board/amcc/yellowstone/u-boot.lds
board/amcc/yellowstone/yellowstone.c
board/amcc/yosemite/u-boot.lds
board/amcc/yosemite/yosemite.c
board/amirix/ap1000/Makefile [new file with mode: 0644]
board/amirix/ap1000/ap1000.c [new file with mode: 0644]
board/amirix/ap1000/ap1000.h [new file with mode: 0644]
board/amirix/ap1000/config.mk [new file with mode: 0644]
board/amirix/ap1000/flash.c [new file with mode: 0644]
board/amirix/ap1000/init.S [new file with mode: 0644]
board/amirix/ap1000/pci.c [new file with mode: 0644]
board/amirix/ap1000/powerspan.c [new file with mode: 0644]
board/amirix/ap1000/powerspan.h [new file with mode: 0644]
board/amirix/ap1000/serial.c [new file with mode: 0644]
board/amirix/ap1000/u-boot.lds [new file with mode: 0644]
board/armadillo/Makefile [new file with mode: 0644]
board/armadillo/armadillo.c [new file with mode: 0644]
board/armadillo/config.mk [new file with mode: 0644]
board/armadillo/flash.c [new file with mode: 0644]
board/armadillo/lowlevel_init.S [new file with mode: 0644]
board/armadillo/u-boot.lds [new file with mode: 0644]
board/assabet/u-boot.lds
board/at91rm9200dk/Makefile
board/at91rm9200dk/at91rm9200dk.c
board/at91rm9200dk/u-boot.lds
board/atc/flash.c
board/atc/u-boot.lds
board/barco/Makefile [new file with mode: 0644]
board/barco/README [new file with mode: 0644]
board/barco/barco.c [new file with mode: 0644]
board/barco/barco_svc.h [new file with mode: 0644]
board/barco/config.mk [moved from board/tqm8540/config.mk with 77% similarity]
board/barco/early_init.S [new file with mode: 0644]
board/barco/flash.c [new file with mode: 0644]
board/barco/speed.h [new file with mode: 0644]
board/barco/u-boot.lds [new file with mode: 0644]
board/bmw/u-boot.lds
board/c2mon/c2mon.c
board/c2mon/u-boot.lds
board/c2mon/u-boot.lds.debug
board/canmb/u-boot.lds
board/cds/mpc8541cds/u-boot.lds
board/cds/mpc8548cds/u-boot.lds
board/cds/mpc8555cds/u-boot.lds
board/cerf250/u-boot.lds
board/cm4008/u-boot.lds
board/cm41xx/u-boot.lds
board/cmc_pu2/Makefile
board/cmc_pu2/cmc_pu2.c
board/cmc_pu2/load_sernum_ethaddr.c [new file with mode: 0644]
board/cmc_pu2/u-boot.lds
board/cmi/u-boot.lds
board/cobra5272/u-boot.lds
board/cogent/u-boot.lds
board/cogent/u-boot.lds.debug
board/cpc45/u-boot.lds
board/cpu86/u-boot.lds
board/cpu87/u-boot.lds
board/cradle/u-boot.lds
board/cray/L1/L1.c
board/cray/L1/u-boot.lds
board/cray/L1/u-boot.lds.debug
board/csb226/u-boot.lds
board/csb272/csb272.c
board/csb272/u-boot.lds
board/csb472/csb472.c
board/csb472/u-boot.lds
board/csb637/Makefile [new file with mode: 0644]
board/csb637/config.mk [new file with mode: 0644]
board/csb637/csb637.c [new file with mode: 0644]
board/csb637/u-boot.lds [moved from board/integratorap/u-boot.lds with 91% similarity]
board/cu824/u-boot.lds
board/dave/B2/u-boot.lds
board/dave/PPChameleonEVB/Makefile
board/dave/PPChameleonEVB/PPChameleonEVB.c
board/dave/PPChameleonEVB/config.mk
board/dave/PPChameleonEVB/nand.c [new file with mode: 0644]
board/dave/PPChameleonEVB/u-boot.lds
board/dbau1x00/u-boot.lds
board/dnp1110/u-boot.lds
board/eXalion/u-boot.lds
board/eltec/bab7xx/misc.c
board/eltec/bab7xx/u-boot.lds
board/eltec/elppc/eepro100_srom.c
board/eltec/elppc/u-boot.lds
board/eltec/mhpc/mhpc.c
board/eltec/mhpc/u-boot.lds
board/eltec/mhpc/u-boot.lds.debug
board/emk/common/flash.c
board/emk/common/vpd.c
board/emk/top5200/u-boot.lds
board/emk/top860/u-boot.lds
board/emk/top860/u-boot.lds.debug
board/ep7312/u-boot.lds
board/ep8248/u-boot.lds
board/ep8260/u-boot.lds
board/eric/eric.c
board/eric/u-boot.lds
board/esd/adciop/adciop.c
board/esd/adciop/u-boot.lds
board/esd/apc405/u-boot.lds
board/esd/ar405/ar405.c
board/esd/ar405/u-boot.lds
board/esd/ash405/ash405.c
board/esd/ash405/u-boot.lds
board/esd/canbt/canbt.c
board/esd/canbt/u-boot.lds
board/esd/cms700/Makefile [new file with mode: 0644]
board/esd/cms700/cms700.c [new file with mode: 0644]
board/esd/cms700/config.mk [new file with mode: 0644]
board/esd/cms700/flash.c [new file with mode: 0644]
board/esd/cms700/fpgadata.c [new file with mode: 0644]
board/esd/cms700/u-boot.lds [new file with mode: 0644]
board/esd/common/auto_update.c
board/esd/common/cmd_loadpci.c [new file with mode: 0644]
board/esd/common/lcd.c
board/esd/common/misc.c
board/esd/cpci2dp/Makefile [new file with mode: 0644]
board/esd/cpci2dp/config.mk [new file with mode: 0644]
board/esd/cpci2dp/cpci2dp.c [new file with mode: 0644]
board/esd/cpci2dp/flash.c [new file with mode: 0644]
board/esd/cpci2dp/u-boot.lds [new file with mode: 0644]
board/esd/cpci405/cpci405.c
board/esd/cpci405/u-boot.lds
board/esd/cpci440/u-boot.lds
board/esd/cpci5200/Makefile [new file with mode: 0644]
board/esd/cpci5200/config.mk [new file with mode: 0644]
board/esd/cpci5200/cpci5200.c [new file with mode: 0644]
board/esd/cpci5200/mt46v16m16-75.h [new file with mode: 0644]
board/esd/cpci5200/strataflash.c [moved from board/esd/pmc405/strataflash.c with 63% similarity]
board/esd/cpci5200/u-boot.lds [moved from board/tqm8560/u-boot.lds with 57% similarity]
board/esd/cpci750/cpci750.c
board/esd/cpci750/mv_eth.c
board/esd/cpci750/pci.c
board/esd/cpci750/u-boot.lds
board/esd/cpciiser4/cpciiser4.c
board/esd/cpciiser4/u-boot.lds
board/esd/dasa_sim/cmd_dasa_sim.c
board/esd/dasa_sim/dasa_sim.c
board/esd/dasa_sim/u-boot.lds
board/esd/dp405/dp405.c
board/esd/dp405/u-boot.lds
board/esd/du405/du405.c
board/esd/du405/u-boot.lds
board/esd/hh405/fpgadata.c
board/esd/hh405/hh405.c
board/esd/hh405/u-boot.lds
board/esd/hub405/hub405.c
board/esd/hub405/u-boot.lds
board/esd/ocrtc/cmd_ocrtc.c
board/esd/ocrtc/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/pf5200/Makefile [new file with mode: 0644]
board/esd/pf5200/config.mk [new file with mode: 0644]
board/esd/pf5200/flash.c [new file with mode: 0644]
board/esd/pf5200/mt46v16m16-75.h [new file with mode: 0644]
board/esd/pf5200/pf5200.c [new file with mode: 0644]
board/esd/pf5200/u-boot.lds [new file with mode: 0644]
board/esd/plu405/plu405.c
board/esd/plu405/u-boot.lds
board/esd/pmc405/Makefile
board/esd/pmc405/pmc405.c
board/esd/pmc405/u-boot.lds
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/vom405/vom405.c
board/esd/wuh405/u-boot.lds
board/esd/wuh405/wuh405.c
board/esteem192e/esteem192e.c
board/esteem192e/u-boot.lds
board/etin/debris/u-boot.lds
board/etx094/etx094.c
board/etx094/u-boot.lds
board/etx094/u-boot.lds.debug
board/evb4510/u-boot.lds
board/evb64260/eth.c
board/evb64260/eth.h
board/evb64260/eth_addrtbl.c
board/evb64260/flash.c
board/evb64260/i2c.c
board/evb64260/u-boot.lds
board/evb64260/zuma_pbb_mbox.c
board/exbitgen/u-boot.lds
board/fads/fads.h
board/fads/u-boot.lds
board/fads/u-boot.lds.debug
board/flagadm/u-boot.lds
board/flagadm/u-boot.lds.debug
board/funkwerk/vovpn-gw/m88e6060.c
board/funkwerk/vovpn-gw/u-boot.lds
board/funkwerk/vovpn-gw/vovpn-gw.c
board/g2000/g2000.c
board/g2000/u-boot.lds
board/gcplus/u-boot.lds
board/gen860t/gen860t.c
board/gen860t/u-boot-flashenv.lds
board/gen860t/u-boot.lds
board/genietv/flash.c
board/genietv/genietv.c
board/genietv/u-boot.lds
board/genietv/u-boot.lds.debug
board/gth/flash.c
board/gth/gth.c
board/gth/u-boot.lds
board/gw8260/gw8260.c
board/gw8260/u-boot.lds
board/hermes/hermes.c
board/hermes/u-boot.lds
board/hermes/u-boot.lds.debug
board/hidden_dragon/u-boot.lds
board/hmi1001/hmi1001.c
board/hmi1001/u-boot.lds
board/hymod/eeprom.c
board/hymod/env.c
board/hymod/global_env
board/hymod/u-boot.lds
board/hymod/u-boot.lds.debug
board/icecube/flash.c
board/icecube/icecube.c
board/icecube/u-boot.lds
board/icu862/flash.c
board/icu862/icu862.c
board/icu862/u-boot.lds
board/icu862/u-boot.lds.debug
board/ids8247/u-boot.lds
board/impa7/u-boot.lds
board/incaip/flash.c
board/incaip/incaip.c
board/incaip/lowlevel_init.S
board/incaip/u-boot.lds
board/inka4x0/u-boot.lds
board/innokom/u-boot.lds
board/integratorap/Makefile
board/integratorap/integratorap.c
board/integratorap/lowlevel_init.S [new file with mode: 0644]
board/integratorap/memsetup.S [moved from board/integratorap/platform.S with 76% similarity]
board/integratorap/split_by_variant.sh [new file with mode: 0755]
board/integratorap/u-boot.lds.template [new file with mode: 0644]
board/integratorcp/Makefile
board/integratorcp/integratorcp.c
board/integratorcp/lowlevel_init.S [new file with mode: 0644]
board/integratorcp/memsetup.S [moved from board/integratorcp/platform.S with 76% similarity]
board/integratorcp/split_by_variant.sh [new file with mode: 0755]
board/integratorcp/u-boot.lds.template [new file with mode: 0644]
board/ip860/ip860.c
board/ip860/u-boot.lds
board/ip860/u-boot.lds.debug
board/iphase4539/iphase4539.c
board/iphase4539/u-boot.lds
board/ispan/ispan.c
board/ispan/u-boot.lds
board/ivm/ivm.c
board/ivm/u-boot.lds
board/ivm/u-boot.lds.debug
board/ixdp425/ixdp425.c
board/ixdp425/u-boot.lds
board/jse/u-boot.lds
board/kb9202/Makefile [new file with mode: 0644]
board/kb9202/config.mk [new file with mode: 0644]
board/kb9202/kb9202.c [new file with mode: 0644]
board/kb9202/u-boot.lds [moved from board/integratorcp/u-boot.lds with 91% similarity]
board/kup/common/load_sernum_ethaddr.c
board/kup/kup4k/kup4k.c
board/kup/kup4k/u-boot.lds
board/kup/kup4k/u-boot.lds.debug
board/kup/kup4x/u-boot.lds
board/kup/kup4x/u-boot.lds.debug
board/lantec/lantec.c
board/lantec/u-boot.lds
board/lantec/u-boot.lds.debug
board/lart/u-boot.lds
board/logodl/u-boot.lds
board/lpd7a40x/u-boot.lds
board/lubbock/u-boot.lds
board/lwmon/README.keybd
board/lwmon/lwmon.c
board/lwmon/u-boot.lds
board/lwmon/u-boot.lds.debug
board/m5272c3/u-boot.lds
board/m5282evb/u-boot.lds
board/mbx8xx/u-boot.lds
board/mbx8xx/u-boot.lds.debug
board/ml2/flash.c
board/ml2/ml2.c
board/ml2/u-boot.lds
board/ml2/u-boot.lds.debug
board/modnet50/u-boot.lds
board/mousse/README
board/mousse/u-boot.lds
board/mousse/u-boot.lds.rom
board/mp2usb/Makefile [new file with mode: 0644]
board/mp2usb/config.mk [new file with mode: 0644]
board/mp2usb/flash.c [moved from board/omap5912osk/flash.c with 54% similarity]
board/mp2usb/mp2usb.c [new file with mode: 0644]
board/mp2usb/u-boot.lds [new file with mode: 0644]
board/mpc8260ads/mpc8260ads.c
board/mpc8260ads/u-boot.lds
board/mpc8266ads/u-boot.lds
board/mpc8349ads/u-boot.lds
board/mpc8540ads/u-boot.lds
board/mpc8540eval/u-boot.lds
board/mpc8560ads/mpc8560ads.c
board/mpc8560ads/u-boot.lds
board/mpl/common/common_util.c
board/mpl/common/isa.c
board/mpl/common/kbd.c
board/mpl/common/pci_parts.h
board/mpl/mip405/mip405.c
board/mpl/mip405/u-boot.lds
board/mpl/pati/u-boot.lds
board/mpl/pip405/pip405.c
board/mpl/pip405/u-boot.lds
board/mpl/pip405/u-boot.lds.debug
board/mpl/vcma9/u-boot.lds
board/musenki/u-boot.lds
board/mvblue/u-boot.lds
board/mvs1/mvs1.c
board/mvs1/u-boot.lds
board/mvs1/u-boot.lds.debug
board/mx1ads/u-boot.lds
board/mx1fs2/u-boot.lds
board/nc650/u-boot.lds
board/nc650/u-boot.lds.debug
board/netphone/netphone.c
board/netphone/u-boot.lds
board/netphone/u-boot.lds.debug
board/netstar/config.mk
board/netstar/crcek [new file with mode: 0755]
board/netstar/crcit [new file with mode: 0755]
board/netstar/eeprom [new file with mode: 0755]
board/netta/netta.c
board/netta/u-boot.lds
board/netta/u-boot.lds.debug
board/netta2/netta2.c
board/netta2/u-boot.lds
board/netta2/u-boot.lds.debug
board/netvia/u-boot.lds
board/netvia/u-boot.lds.debug
board/ns9750dev/Makefile
board/ns9750dev/lowlevel_init.S [moved from board/ns9750dev/platform.S with 99% similarity]
board/ns9750dev/u-boot.lds
board/nx823/nx823.c
board/nx823/u-boot.lds
board/nx823/u-boot.lds.debug
board/o2dnt/Makefile [moved from board/tqm8560/Makefile with 86% similarity]
board/o2dnt/config.mk [new file with mode: 0644]
board/o2dnt/flash.c [new file with mode: 0644]
board/o2dnt/o2dnt.c [new file with mode: 0644]
board/o2dnt/u-boot.lds [new file with mode: 0644]
board/omap1510inn/Makefile
board/omap1510inn/lowlevel_init.S [moved from board/omap1510inn/platform.S with 99% similarity]
board/omap1510inn/u-boot.lds
board/omap1610inn/Makefile
board/omap1610inn/lowlevel_init.S [moved from board/omap1610inn/platform.S with 99% similarity]
board/omap1610inn/u-boot.lds
board/omap2420h4/Makefile
board/omap2420h4/config.mk
board/omap2420h4/lowlevel_init.S [moved from board/omap2420h4/platform.S with 99% similarity]
board/omap2420h4/mem.c
board/omap2420h4/omap2420h4.c
board/omap2420h4/sys_info.c
board/omap2420h4/u-boot.lds
board/omap5912osk/Makefile
board/omap5912osk/lowlevel_init.S [moved from board/omap5912osk/platform.S with 99% similarity]
board/omap5912osk/u-boot.lds
board/omap730p2/Makefile
board/omap730p2/lowlevel_init.S [moved from board/omap730p2/platform.S with 99% similarity]
board/omap730p2/u-boot.lds
board/oxc/u-boot.lds
board/pb1x00/Makefile [new file with mode: 0644]
board/pb1x00/README [new file with mode: 0644]
board/pb1x00/config.mk [new file with mode: 0644]
board/pb1x00/flash.c [new file with mode: 0644]
board/pb1x00/memsetup.S [new file with mode: 0644]
board/pb1x00/pb1x00.c [new file with mode: 0644]
board/pb1x00/u-boot.lds [new file with mode: 0644]
board/pcippc2/flash.c
board/pcippc2/u-boot.lds
board/pleb2/u-boot.lds
board/pm520/flash.c
board/pm520/pm520.c
board/pm520/u-boot.lds
board/pm826/u-boot.lds
board/pm828/u-boot.lds
board/pm854/u-boot.lds
board/pm856/u-boot.lds
board/pn62/pn62.c
board/pn62/u-boot.lds
board/ppmc8260/ppmc8260.c
board/ppmc8260/u-boot.lds
board/prodrive/p3p440/Makefile [new file with mode: 0644]
board/prodrive/p3p440/config.mk [new file with mode: 0644]
board/prodrive/p3p440/init.S [new file with mode: 0644]
board/prodrive/p3p440/p3p440.c [new file with mode: 0644]
board/prodrive/p3p440/p3p440.h [new file with mode: 0644]
board/prodrive/p3p440/u-boot.lds [new file with mode: 0644]
board/psyent/pci5441/u-boot.lds
board/psyent/pk1c20/u-boot.lds
board/purple/u-boot.lds
board/pxa255_idp/Makefile [new file with mode: 0644]
board/pxa255_idp/README [new file with mode: 0644]
board/pxa255_idp/config.mk [new file with mode: 0644]
board/pxa255_idp/idp_notes.txt [new file with mode: 0644]
board/pxa255_idp/memsetup.S [new file with mode: 0644]
board/pxa255_idp/pxa_idp.c [new file with mode: 0644]
board/pxa255_idp/pxa_reg_calcs.out [new file with mode: 0644]
board/pxa255_idp/pxa_reg_calcs.py [new file with mode: 0644]
board/pxa255_idp/u-boot.lds [new file with mode: 0644]
board/quantum/quantum.c
board/quantum/u-boot.lds
board/quantum/u-boot.lds.debug
board/r360mpi/r360mpi.c
board/r360mpi/u-boot.lds
board/rattler/u-boot.lds
board/rbc823/flash.c
board/rbc823/rbc823.c
board/rbc823/u-boot.lds
board/rmu/rmu.c
board/rmu/u-boot.lds
board/rmu/u-boot.lds.debug
board/rpxsuper/u-boot.lds
board/rsdproto/u-boot.lds
board/sacsng/u-boot.lds
board/sandburst/common/ppc440gx_i2c.c
board/sandburst/karef/karef.c
board/sandburst/karef/karef.h
board/sandburst/karef/u-boot.lds
board/sandburst/karef/u-boot.lds.debug
board/sandburst/metrobox/metrobox.c
board/sandburst/metrobox/metrobox.h
board/sandburst/metrobox/u-boot.lds
board/sandburst/metrobox/u-boot.lds.debug
board/sandpoint/u-boot.lds
board/sbc405/sbc405.c
board/sbc405/u-boot.lds
board/sbc8240/u-boot.lds
board/sbc8260/u-boot.lds
board/sbc8560/sbc8560.c
board/sbc8560/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/ccm.c
board/siemens/CCM/u-boot.lds
board/siemens/CCM/u-boot.lds.debug
board/siemens/IAD210/IAD210.c
board/siemens/IAD210/u-boot.lds
board/siemens/SCM/scm.c
board/siemens/SCM/u-boot.lds
board/siemens/common/README
board/siemens/common/fpga.c
board/siemens/pcu_e/pcu_e.c
board/siemens/pcu_e/u-boot.lds
board/siemens/pcu_e/u-boot.lds.debug
board/sixnet/flash.c
board/sixnet/sixnet.c
board/sixnet/u-boot.lds
board/sl8245/u-boot.lds
board/smdk2400/u-boot.lds
board/smdk2410/u-boot.lds
board/snmc/qs850/qs850.c
board/snmc/qs850/u-boot.lds
board/snmc/qs860t/qs860t.c
board/snmc/qs860t/u-boot.lds
board/sorcery/u-boot.lds
board/spd8xx/spd8xx.c
board/spd8xx/u-boot.lds
board/spd8xx/u-boot.lds.debug
board/ssv/adnpesc1/u-boot.lds
board/stxgp3/stxgp3.c
board/stxgp3/u-boot.lds
board/stxxtc/Makefile
board/stxxtc/oftree.dts [new file with mode: 0644]
board/stxxtc/stxxtc.c
board/stxxtc/u-boot.lds
board/stxxtc/u-boot.lds.debug
board/svm_sc8xx/svm_sc8xx.c
board/svm_sc8xx/u-boot.lds
board/svm_sc8xx/u-boot.lds.debug
board/sx1/Makefile
board/sx1/lowlevel_init.S [moved from board/sx1/platform.S with 99% similarity]
board/sx1/u-boot.lds
board/tb0229/u-boot.lds
board/total5200/sdram.c
board/total5200/u-boot.lds
board/tqm5200/Makefile
board/tqm5200/cmd_stk52xx.c [new file with mode: 0755]
board/tqm5200/tqm5200.c
board/tqm5200/u-boot.lds
board/tqm8260/tqm8260.c
board/tqm8260/u-boot.lds
board/tqm834x/Makefile [new file with mode: 0644]
board/tqm834x/config.mk [new file with mode: 0644]
board/tqm834x/pci.c [new file with mode: 0644]
board/tqm834x/tqm834x.c [new file with mode: 0644]
board/tqm834x/u-boot.lds [new file with mode: 0644]
board/tqm8540/init.S [deleted file]
board/tqm8540/tqm8540.c [deleted file]
board/tqm85xx/Makefile [moved from board/tqm8540/Makefile with 98% similarity]
board/tqm85xx/config.mk [moved from board/tqm8560/config.mk with 98% similarity]
board/tqm85xx/init.S [moved from board/tqm8560/init.S with 91% similarity]
board/tqm85xx/sdram.c [new file with mode: 0644]
board/tqm85xx/tqm85xx.c [moved from board/tqm8560/tqm8560.c with 69% similarity]
board/tqm85xx/u-boot.lds [moved from board/tqm8540/u-boot.lds with 97% similarity]
board/tqm8xx/load_sernum_ethaddr.c
board/tqm8xx/tqm8xx.c
board/tqm8xx/u-boot.lds
board/tqm8xx/u-boot.lds.debug
board/trab/auto_update.c
board/trab/u-boot.lds
board/uc100/u-boot.lds
board/uc100/u-boot.lds.debug
board/uc100/uc100.c
board/utx8245/u-boot.lds
board/v37/u-boot.lds
board/versatile/Makefile
board/versatile/lowlevel_init.S [moved from board/versatile/platform.S with 91% similarity]
board/versatile/split_by_variant.sh [new file with mode: 0755]
board/versatile/u-boot.lds
board/voiceblue/setup.S
board/voiceblue/u-boot.lds
board/w7o/flash.c
board/w7o/fpga.c
board/w7o/u-boot.lds
board/w7o/u-boot.lds.debug
board/w7o/vpd.c
board/w7o/w7o.c
board/w7o/w7o.h
board/wepep250/u-boot.lds
board/westel/amx860/u-boot.lds
board/westel/amx860/u-boot.lds.debug
board/xaeniax/u-boot.lds
board/xilinx/common/xdma_channel.c
board/xilinx/ml300/ml300.c
board/xilinx/ml300/u-boot.lds
board/xilinx/ml300/u-boot.lds.debug
board/xilinx/xilinx_enet/emac_adapter.c
board/xilinx/xilinx_iic/iic_adapter.c
board/xm250/u-boot.lds
board/xpedite1k/u-boot.lds
board/xpedite1k/u-boot.lds.debug
board/xpedite1k/xpedite1k.c
board/xsengine/flash.c
board/xsengine/u-boot.lds
board/zpc1900/u-boot.lds
common/Makefile
common/cmd_ace.c
common/cmd_autoscript.c
common/cmd_bmp.c
common/cmd_bootm.c
common/cmd_dcr.c
common/cmd_display.c [new file with mode: 0644]
common/cmd_doc.c
common/cmd_eeprom.c
common/cmd_ext2.c
common/cmd_flash.c
common/cmd_fpga.c
common/cmd_i2c.c
common/cmd_ide.c
common/cmd_immap.c
common/cmd_jffs2.c
common/cmd_load.c
common/cmd_log.c
common/cmd_mem.c
common/cmd_mii.c
common/cmd_misc.c
common/cmd_nand.c
common/cmd_nvedit.c
common/cmd_pcmcia.c
common/cmd_scsi.c
common/cmd_spi.c
common/cmd_usb.c
common/env_common.c
common/env_dataflash.c
common/env_eeprom.c
common/env_flash.c
common/env_nand.c
common/env_nowhere.c
common/env_nvram.c
common/flash.c
common/fpga.c
common/ft_build.c [new file with mode: 0644]
common/hush.c
common/kgdb.c
common/lcd.c
common/main.c
common/miiphybb.c
common/miiphyutil.c
common/soft_i2c.c
common/spartan3.c [new file with mode: 0644]
common/usb_storage.c
common/virtex2.c
common/xilinx.c
config.mk
cpu/arm1136/config.mk
cpu/arm1136/cpu.c
cpu/arm1136/interrupts.c
cpu/arm1136/start.S
cpu/arm720t/config.mk
cpu/arm720t/cpu.c
cpu/arm720t/interrupts.c
cpu/arm720t/serial.c
cpu/arm720t/serial_netarm.c
cpu/arm720t/start.S
cpu/arm920t/at91rm9200/Makefile
cpu/arm920t/at91rm9200/bcm5221.c [moved from board/cmc_pu2/dm9161.c with 57% similarity]
cpu/arm920t/at91rm9200/dm9161.c [moved from board/at91rm9200dk/dm9161.c with 88% similarity]
cpu/arm920t/at91rm9200/ether.c
cpu/arm920t/at91rm9200/i2c.c
cpu/arm920t/at91rm9200/lowlevel_init.S
cpu/arm920t/at91rm9200/lxt972.c [new file with mode: 0644]
cpu/arm920t/at91rm9200/usb_ohci.c [new file with mode: 0644]
cpu/arm920t/at91rm9200/usb_ohci.h [new file with mode: 0644]
cpu/arm920t/config.mk
cpu/arm920t/cpu.c
cpu/arm920t/interrupts.c
cpu/arm920t/ks8695/Makefile
cpu/arm920t/start.S
cpu/arm925t/config.mk
cpu/arm925t/start.S
cpu/arm926ejs/config.mk
cpu/arm926ejs/cpu.c
cpu/arm926ejs/interrupts.c
cpu/arm926ejs/start.S
cpu/arm946es/Makefile [new file with mode: 0644]
cpu/arm946es/config.mk [new file with mode: 0644]
cpu/arm946es/cpu.c [new file with mode: 0644]
cpu/arm946es/interrupts.c [new file with mode: 0644]
cpu/arm946es/start.S [new file with mode: 0644]
cpu/arm_intcm/Makefile [new file with mode: 0644]
cpu/arm_intcm/config.mk [new file with mode: 0644]
cpu/arm_intcm/cpu.c [new file with mode: 0644]
cpu/arm_intcm/interrupts.c [new file with mode: 0644]
cpu/arm_intcm/start.S [new file with mode: 0644]
cpu/ixp/config.mk
cpu/ixp/pci.c
cpu/lh7a40x/config.mk
cpu/mcf52x2/fec.c
cpu/mips/Makefile
cpu/mips/au1x00_eth.c
cpu/mips/au1x00_serial.c
cpu/mips/au1x00_usb_ohci.c [new file with mode: 0644]
cpu/mips/au1x00_usb_ohci.h [new file with mode: 0644]
cpu/mips/config.mk
cpu/mips/incaip_clock.c
cpu/mips/start.S
cpu/mpc5xxx/fec.c
cpu/mpc5xxx/i2c.c
cpu/mpc5xxx/pci_mpc5200.c
cpu/mpc5xxx/serial.c
cpu/mpc8220/fec.c
cpu/mpc8220/i2c.c
cpu/mpc824x/drivers/i2c/i2c.c
cpu/mpc8260/ether_fcc.c
cpu/mpc8260/i2c.c
cpu/mpc8260/pci.c
cpu/mpc83xx/Makefile
cpu/mpc83xx/cpu.c
cpu/mpc83xx/i2c.c
cpu/mpc83xx/pci.c [deleted file]
cpu/mpc83xx/speed.c
cpu/mpc85xx/ether_fcc.c
cpu/mpc85xx/i2c.c
cpu/mpc85xx/pci.c
cpu/mpc85xx/start.S
cpu/mpc8xx/fec.c
cpu/mpc8xx/i2c.c
cpu/mpc8xx/spi.c
cpu/mpc8xx/video.c
cpu/ppc4xx/405gp_enet.c [deleted file]
cpu/ppc4xx/405gp_pci.c
cpu/ppc4xx/4xx_enet.c [moved from cpu/ppc4xx/440gx_enet.c with 69% similarity]
cpu/ppc4xx/Makefile
cpu/ppc4xx/bedbug_405.c
cpu/ppc4xx/cpu.c
cpu/ppc4xx/cpu_init.c
cpu/ppc4xx/i2c.c
cpu/ppc4xx/miiphy.c
cpu/ppc4xx/miiphy_440.c [deleted file]
cpu/ppc4xx/sdram.c
cpu/ppc4xx/serial.c
cpu/ppc4xx/spd_sdram.c
cpu/ppc4xx/speed.c
cpu/ppc4xx/start.S
cpu/ppc4xx/vecnum.h
cpu/pxa/config.mk
cpu/s3c44b0/config.mk
cpu/sa1100/config.mk
disk/part_dos.c
disk/part_iso.c
doc/I2C_Edge_Conditions
doc/README-integrator [new file with mode: 0644]
doc/README.OFT [new file with mode: 0644]
doc/README.Sandpoint8240
doc/README.bedbug
doc/README.dk1s10
doc/README.ebony
doc/README.ml300
doc/README.mpc85xxads
doc/README.ocotea
doc/README.ocotea-PIBS-to-U-Boot
doc/README.ppc440
drivers/Makefile
drivers/cfb_console.c
drivers/cfi_flash.c
drivers/ct69000.c
drivers/dc2114x.c
drivers/e1000.c
drivers/eepro100.c
drivers/i8042.c
drivers/lan91c96.h
drivers/nand/diskonchip.c
drivers/nand/nand.c
drivers/nand/nand_base.c
drivers/nand/nand_bbt.c
drivers/nand/nand_ecc.c
drivers/nand/nand_ids.c
drivers/natsemi.c
drivers/netconsole.c
drivers/ns7520_eth.c [new file with mode: 0644]
drivers/ns8382x.c
drivers/omap24xx_i2c.c
drivers/pc_keyb.c
drivers/pci.c
drivers/pci_auto.c
drivers/pci_indirect.c
drivers/pcnet.c
drivers/smiLynxEM.c
drivers/tsec.c
drivers/tsec.h
examples/eepro100_eeprom.c
examples/nios2.lds
examples/sched.c
fs/cramfs/cramfs.c
fs/ext2/ext2fs.c
fs/fat/fat.c
fs/jffs2/compr_rubin.c
fs/jffs2/jffs2_1pass.c
include/405gp_enet.h [deleted file]
include/arm946es.h [new file with mode: 0644]
include/armcoremodule.h [new file with mode: 0644]
include/asm-arm/arch-arm1136/clocks.h
include/asm-arm/arch-arm1136/i2c.h
include/asm-arm/arch-arm1136/mem.h
include/asm-arm/arch-arm1136/omap2420.h
include/asm-arm/arch-arm1136/rev.h [deleted file]
include/asm-arm/arch-arm1136/sys_info.h
include/asm-arm/arch-arm1136/sys_proto.h
include/asm-arm/arch-arm720t/hardware.h
include/asm-arm/arch-arm720t/netarm_gen_module.h
include/asm-arm/arch-arm720t/netarm_mem_module.h
include/asm-arm/arch-arm720t/netarm_registers.h
include/asm-arm/arch-at91rm9200/AT91RM9200.h
include/asm-arm/arch-at91rm9200/hardware.h
include/asm-arm/mach-types.h
include/asm-arm/u-boot.h
include/asm-i386/u-boot.h
include/asm-m68k/u-boot.h
include/asm-microblaze/u-boot.h
include/asm-mips/u-boot.h
include/asm-nios/u-boot.h
include/asm-nios2/u-boot.h
include/asm-ppc/byteorder.h
include/asm-ppc/cpm_85xx.h
include/asm-ppc/global_data.h
include/asm-ppc/i2c.h
include/asm-ppc/immap_83xx.h
include/asm-ppc/iopin_8xx.h [new file with mode: 0644]
include/asm-ppc/processor.h
include/asm-ppc/u-boot.h
include/at91rm9200_net.h
include/bcm5221.h [new file with mode: 0644]
include/cmd_confdefs.h
include/common.h
include/configs/ADCIOP.h
include/configs/AMX860.h
include/configs/AP1000.h [new file with mode: 0644]
include/configs/APC405.h
include/configs/AR405.h
include/configs/ASH405.h
include/configs/Alaska8220.h
include/configs/BAB7xx.h
include/configs/CANBT.h
include/configs/CATcenter.h
include/configs/CCM.h
include/configs/CMS700.h [new file with mode: 0644]
include/configs/CPCI2DP.h [new file with mode: 0644]
include/configs/CPCI405.h
include/configs/CPCI4052.h
include/configs/CPCI405AB.h
include/configs/CPCI405DT.h
include/configs/CPCI440.h
include/configs/CPCI750.h
include/configs/CPCIISER4.h
include/configs/CPU86.h
include/configs/CPU87.h
include/configs/DASA_SIM.h
include/configs/DB64360.h
include/configs/DB64460.h
include/configs/DP405.h
include/configs/DU405.h
include/configs/ELPPC.h
include/configs/ELPT860.h
include/configs/ERIC.h
include/configs/ETX094.h
include/configs/FADS823.h
include/configs/G2000.h
include/configs/GEN860T.h
include/configs/GENIETV.h
include/configs/HH405.h
include/configs/HMI10.h
include/configs/HUB405.h
include/configs/IAD210.h
include/configs/ICU862.h
include/configs/IDS8247.h
include/configs/IP860.h
include/configs/IceCube.h
include/configs/JSE.h
include/configs/KAREF.h
include/configs/KUP4K.h
include/configs/KUP4X.h
include/configs/LANTEC.h
include/configs/METROBOX.h
include/configs/MHPC.h
include/configs/MIP405.h
include/configs/ML2.h
include/configs/MPC8260ADS.h
include/configs/MPC8266ADS.h
include/configs/MPC8560ADS.h
include/configs/MPC885ADS.h
include/configs/MVBLUE.h
include/configs/MVS1.h
include/configs/NC650.h
include/configs/NSCU.h
include/configs/OCRTC.h
include/configs/ORSG.h
include/configs/P3G4.h
include/configs/PCI405.h
include/configs/PIP405.h
include/configs/PLU405.h
include/configs/PM520.h
include/configs/PM826.h
include/configs/PM828.h
include/configs/PM854.h
include/configs/PMC405.h
include/configs/PN62.h
include/configs/PPChameleonEVB.h
include/configs/QS860T.h
include/configs/R360MPI.h
include/configs/RBC823.h
include/configs/RPXClassic.h
include/configs/RPXlite.h
include/configs/RPXlite_DW.h
include/configs/RRvision.h
include/configs/SCM.h
include/configs/SM850.h
include/configs/SXNI855T.h
include/configs/Sandpoint8240.h
include/configs/TOP5200.h
include/configs/TOP860.h
include/configs/TQM5200.h
include/configs/TQM823L.h
include/configs/TQM823M.h
include/configs/TQM8260.h
include/configs/TQM834x.h [new file with mode: 0644]
include/configs/TQM850L.h
include/configs/TQM850M.h
include/configs/TQM8540.h [deleted file]
include/configs/TQM855L.h
include/configs/TQM855M.h
include/configs/TQM8560.h [deleted file]
include/configs/TQM85xx.h [new file with mode: 0644]
include/configs/TQM860L.h
include/configs/TQM860M.h
include/configs/TQM862L.h
include/configs/TQM862M.h
include/configs/TQM866M.h
include/configs/Total5200.h
include/configs/VOH405.h
include/configs/VOM405.h
include/configs/VoVPN-GW.h
include/configs/W7OLMC.h
include/configs/W7OLMG.h
include/configs/WUH405.h
include/configs/XPEDITE1K.h
include/configs/Yukon8220.h
include/configs/aev.h
include/configs/armadillo.h [new file with mode: 0644]
include/configs/at91rm9200dk.h
include/configs/atc.h
include/configs/bamboo.h
include/configs/barco.h [new file with mode: 0644]
include/configs/bubinga.h
include/configs/c2mon.h
include/configs/canmb.h
include/configs/cmc_pu2.h
include/configs/cpci5200.h [new file with mode: 0644]
include/configs/csb272.h
include/configs/csb472.h
include/configs/csb637.h [new file with mode: 0644]
include/configs/dbau1x00.h
include/configs/debris.h
include/configs/ebony.h
include/configs/ep8260.h
include/configs/hermes.h
include/configs/hmi1001.h
include/configs/hymod.h
include/configs/incaip.h
include/configs/inka4x0.h
include/configs/integratorap.h
include/configs/integratorcp.h
include/configs/kb9202.h [new file with mode: 0644]
include/configs/luan.h [new file with mode: 0644]
include/configs/lubbock.h
include/configs/ml300.h
include/configs/mp2usb.h [new file with mode: 0644]
include/configs/o2dnt.h [new file with mode: 0644]
include/configs/ocotea.h
include/configs/omap2420h4.h
include/configs/p3p440.h [new file with mode: 0644]
include/configs/pb1x00.h [new file with mode: 0644]
include/configs/pcu_e.h
include/configs/pf5200.h [new file with mode: 0644]
include/configs/ppmc8260.h
include/configs/purple.h
include/configs/pxa255_idp.h [new file with mode: 0644]
include/configs/quantum.h
include/configs/rmu.h
include/configs/sacsng.h
include/configs/sbc405.h
include/configs/sbc8260.h
include/configs/spieval.h
include/configs/stxxtc.h
include/configs/svm_sc8xx.h
include/configs/tb0229.h
include/configs/trab.h
include/configs/uc100.h
include/configs/utx8245.h
include/configs/v37.h
include/configs/voiceblue.h
include/configs/walnut.h
include/configs/yellowstone.h
include/configs/yosemite.h
include/cramfs/cramfs_fs.h
include/dm9161.h
include/flash.h
include/fpga.h
include/ft_build.h [new file with mode: 0644]
include/image.h
include/linux/byteorder/swab.h
include/linux/mtd/nand.h
include/linux/mtd/nand_new.h [new file with mode: 0644]
include/linux/stat.h
include/miiphy.h
include/mpc5xxx.h
include/mpc83xx.h
include/nand.h
include/net.h
include/ns7520_eth.h [new file with mode: 0644]
include/pci_ids.h
include/ppc440.h
include/ppc4xx_enet.h [moved from include/440gx_enet.h with 96% similarity]
include/sm501.h
include/spartan3.h [new file with mode: 0644]
include/watchdog.h
include/xilinx.h
lib_arm/armlinux.c
lib_arm/board.c
lib_generic/string.c
lib_i386/board.c
lib_mips/board.c
lib_mips/mips_linux.c
lib_ppc/board.c
net/bootp.c
net/eth.c
net/net.c
net/tftp.c
post/memory.c
rtc/ds1302.c
tools/bmp_logo.c
tools/env/fw_env.c
tools/env/fw_env.h
tools/mkimage.c
tools/updater/flash.c
tools/updater/flash_hw.c

index 07ed5247e8a7d3191df907df793258c3c358838e..5d32bcec4819d5c67f8c67682da9c8618022130d 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
 ======================================================================
-Changes for U-Boot 1.1.4:
+Changes since U-Boot 1.1.4:
 ======================================================================
 
-* Rewrite of NAND code based on what is in 2.6.12 Linux kernel
+* Merge the new NAND code (testing-NAND brach)
+
+  Rewrite of NAND code based on what is in 2.6.12 Linux kernel
   Patch by Ladislav Michl, 29 Jun 2005
 
+* Update default environment for INKA4x00 board.
+
+* Cleanup U-Boot boot messages on ARM.
+
+  To match the U-Boot user interface on ARM platforms to the U-Boot
+  standard (as on PPC platforms), some messages with debug character
+  are removed from the default U-Boot build.
+  Enable DEBUG for lib_arm/board.c to enable debug messages.
+  New CONFIG_DISPLAY_CPUINFO and CONFIG_DISPLAY_BOARDINFO options.
+  Patch  by Stefan Roese, 24 Jan 2006
+
+* Fix various compiler warnings on ppc4xx builds (ELDK 4.0)
+  Patch by Stefan Roese, 18 Jan 2006
+
+* Add VGA support (CT69000) to CPCI750 board.
+  Insert missing __le32_to_cpu() for filesize in ext2fs_read_file().
+  Patch by Reinhard Arlt, 30 Dec 2005
+
+* PMC405 and CPCI405: Moved configuration of pci resources
+  into config file.
+  PMC405 and CPCI2DP: Added firmware download and booting via pci.
+  Patch by Matthias Fuchs, 20 Dec 2005
+
+* Fix 28F256J3A support on PM520 board
+  (without bank-switching only 32 MB can be accessed)
+
+* Fix mkimage bug with multifile images created on 64 bit systems.
+
+* Add support for 28F256J3A flash (=> 64 MB) on PM520 board
+
+* Fix compiler problem with at91rm9200dk board.
+  Patch by Eugen Bigz, 19 Dec 2005
+
+======================================================================
+Changes for U-Boot 1.1.4:
+======================================================================
+
+* Changes to Yellowstone & Yosemite 440EP/GR eval boards:
+  - Changed GPIO setup to enable another address line in order to
+    address 64M of FLASH.
+  - Added function sdram_tr1_set to auto calculate the tr1 value for
+    the DDR.
+  Patch by Steven Blakeslee, 12 Dec 2005
+
+* MPC5200:  Set PCI retry counter to 0 = infinite retry;
+  The default of 255 is too short for slow devices.
+  Patch by Martin Nykodym, 12 Dec 2005
+
+* Change port configuration for O2DNT (CODEC1 on PSC1).
+
+* Fix register for PCI async mode on PPC440EP
+  Patch by Youngchul Bang, 08 Dec 2005
+
+* Fix U-Boot linking problems (add .eh_frame segment to linker script)
+  This segment may be required by some libgcc.a functions
+  (like _udivdi3).
+
+* Fix DPRAM offset/size for MPC8541/8555.
+  Simplify TQM85xx Makefile handling.
+
+* Fix data overflow (typo?) in rtc/ds1302.c
+
+* Fix U-Boot compilation for MIPS boards using ELDK 4.0
+
+* Add support for TQM8541/8555 boards, TQM85xx support reworked:
+  - Support for TQM8541/8555 boards added.
+  - Complete rework of TQM8540/8560 support.
+  - Common TQM85xx code now supports all current TQM85xx platforms
+    (TQM8540/8541/8555/8560).
+  - DDR SDRAM size detection added.
+  - CAS latency default values can be overwritten by setting "serial#"
+    to e.g. "ABC0001 casl=25" -> CAS latency 2.5 will be used.
+    If problems are detected with this non default CAS latency,
+    the default values will be used instead.
+  - Flash size detection added.
+  - Moved FCC ethernet driver initialization behind TSEC driver init
+    -> TSEC is first device.
+  Patch by Stefan Roese, 30 Nov 2005
+
+* Add support for AMCC 440SP, add support for AMCC Luan 440SP eval board.
+  Patch by John Otken, 23 Nov 2005
+
+* Changed PPC44x startup message (cpu info, speed...) to common style:
+  On PPC44x platforms, the startup message generated in "cpu.c" only
+  comprised the ppc type and revision but not additional information
+  like speed etc. Those speed infos where printed in the board specific
+  code. This new implementation now prints all CPU infos in the common
+  cpu specific code. No board specific code is needed anymore and
+  therefore removed from all current 44x implementations.
+  Patch by Stefan Roese, 27 Nov 2005
+
+* Adjust TQM834x PHY addresses for latest hardware revision.
+
+* Increase malloc arena on TQM5200 board to 256 kB.
+  With 64 kb uniform flash sector size the old value of 128 kB was
+  too small.
+
+* Fix miiphy global data initialization (problem on 4xx boards when
+  no ethaddr is assigned). Initialization moved from
+  miiphy_register() to eth_initialize().
+
+  Based on initial patch for 4xx platform by Matthias Fuchs.
+
+* Remove unnnecessary #include <linux/types.h> from include/asm-*/u-boot.h
+
+* Allow use of include/image.h and include/asm-*/u-boot.h in proprietary code.
+  The COPYING file was extended to make clear that these files can be
+  used in non-GPL code, too.
+  Also, a corresponding note was placed in the headers of the affected files.
+
+* Add support for Prodrive P3P440 board:
+  - Added onboard PPC440 DDR autodetection in cpu/ppc/sdram.c
+  - CFG_FLASH_QUIET_TEST added to use the common CFI driver
+    for bank autodetection
+  Patch by Stefan Roese, 22 Nov 2005
+
+* Change all '$(...)' variable references into '${...}'
+  which makes the environment compatible with the hush shell.
+  WARNING: Support for the old '$(...)' syntax will be
+  discontinued in a later version.
+
+* Minor changes to init flags in TQM834x PCI.
+
+* Fix Bamboo DDR SDRAM initialization (problem with onboard SDRAM)
+  Patch by Stefan Roese, 15 Nov 2005
+
+* New PPC 405EP board added: CMS700
+  Added CONFIG_NET_MULTI for VOM405 board.
+  Added reset_phy() for VOM405 board.
+  Patch by Matthias Fuchs, 09 Nov 2005
+
+* Updated PCI mapping for esd CPCI2DP board.
+  Add support for error LED.
+  Patch by Matthias Fuchs, 07 Nov 2005
+
+* Fix MPC85xx PCI support (pci_register_hose() before pci config access)
+  Patch by Stefan Roese, 07 Nov 2005
+
+* Correct PPC Timebase register definitions (SPRN_TBRL...)
+  Patch by Stefan Roese, 07 Nov 2005
+
+* Adjust bd->bi_flashstart on Yellowstone & Yosemite to correct size
+  Patch by Stefan Roese, 05 Nov 2005
+
+* Additional fix for external IRQ config on Yellowstone & Yosemite
+  Patch by Stefan Roese, 03 Nov 2005
+
+* Add support for Ocotea pass 3 with 440GX Rev. F
+  Patch by Stefan Roese, 01 Nov 2005
+
+* Fix external IRQ configuration on Yellowstone & Yosemite
+  Patch by Stefan Roese, 28 Oct 2005
+
+* Add support for multiple PHYs.
+  Tested on the following boards:
+       cmcpu2      (at91rm9200/ether.c)
+       PPChameleon (ppc4xx/4xx_enet.c)
+       yukon       (mpc8220/fec.c)
+       uc100       (mpc8xx/fec.c)
+       tqm834x     (mpc834x/tsec.c) with EEPRO100
+       lite5200    (mpc5xxx/fec.c) with EEPRO100 card (drivers/eepro100.c)
+  Main changes include:
+  common/miiphyutil.c
+  - miiphy_register routine was added to allow multiple PHYs to be registered
+  - miiphy_read and miiphy_write are now defined in this file, and
+    require additional argument (char *devname)
+  - other miiphy_* routines also require additional device name argument
+  ../lib_i386/board.c
+  ../lib_ppc/board.c
+  Calling reset_phy() was moved to be executed *after* eth_initialize().
+  This is necessary as now some of the implementations of reset_phy()
+  may need to use miiphy_reset() which is not allowed before eth_initialize()
+  as eth_initialize registers all required miiphy_* routines.
+  Tested on IP860 and PHY initializes properly after this change.
+
+* Correct includes for flat tree builder.
+
+* Fix conflicting types (flash_write()) in trab auto_update.c.
+
+* Add PCI support for the TQM834x board.
+
+* Add missing 4xx board to MAKEALL
+  Patch by Stefan Roese, 20 Oct 2005
+
+* Fix conflicting types (flash_write()) in esd auto_update.c
+  Patch by Stefan Roese, 20 Oct 2005
+
+* Fix problem with sleep in NetConsole (use get_timer())
+  Patch by Stefan Roese, 20 Oct 2005
+
+* Add NetConsole Support for AMCC eval boards
+  Patch by Stefan Roese, 20 Oct 2005
+
+* Fix NetConsole support on 4xx (only print eth link on 1st transfer)
+  Patch by Stefan Roese, 18 Oct 2005
+
+* Add fat & ext2 support to AMCC 440EP boards Yosemite & Bamboo.
+  Fix identation on ext2ls help entry.
+  Patch by Stefan Roese, 14 Oct 2005
+
+* Add support for TQM834x boards.
+  Cleanup.
+
+* Cleanup for GCC-4.x
+
+* Add documentation for Open Firmware Flat Tree and usage.
+  Patch by Pantelis Antoniou, 13 Oct 2005
+
+* Add missing files for Pantelis Antoniou's patch
+  Patch by Pantelis Antoniou, 04 Sep 2005
+
+* Fix problem in ppc4xx eth-driver without ethaddr (only without
+  CONFIG_NET_MULTI set)
+  Patch by Stefan Roese, 10 Oct 2005
+
+* Fix gzip bmp support (test if malloc fails, warning when truncated).
+  Increase CFG_VIDEO_LOGO_MAX_SIZE on HH405 board.
+  Patch by Stefan Roese, 07 Oct 2005
+
+* Add support for OF flat tree for the STXtc board.
+  Patch by Pantelis Antoniou, 04 Sep 2005
+
+* Support passing of OF flat trees to the kernel.
+  Patch by Pantelis Antoniou, 04 Sep 2005
+
+* Cleanup
+
+* Add support for NetSilicon NS7520 processor.
+  Patch by Art Shipkowski, 12 May 2005
+
+* Add support for AP1000 board.
+  Patch by James MacAulay, 07 Oct 2005
+
+* Eliminate hard-coded address of Ethernet transfer buffer on at91rm9200
+  Patch by Anders Larsen, 07 Oct 2005
+
+  The Atmel errata #11 states that the transfer buffer descriptor
+  table must be aligned on a 16-word boundary. As it turned out, this
+  is insufficient - it seems the table must be aligned on a boundary
+  at least as large as the table itself (in Linux this is not an
+  issue - the table is aligned on a PAGE_SIZE (4096) boundary).
+
+* Fixed compilation for ARM when using a (standard) hard-FP toolchain
+  Patch by Anders Larsen, 07 Oct 2005
+
+* Cleanup warnings for cpu/arm720t & cpu/arm1136 files.
+  sed the linker scripts, rather than pre-process them.
+  Patch by Peter Pearse, 07 Oct 2005
+
+* Update make target for ARM supported boards.
+  Use lowlevel_init() instead of platformsetup() [rename].
+  Patch by Peter Pearse, 06 Oct 2005
+
+* Fix booting from serial dataflash on AT91RM9200
+  Patch by Peter Menzebach, 29 Aug 2005
+
+* Add JFFS2 support for TRAB board
+  Patch by Martin Krause, 25 Aug 2005
+
+* Remove unnecessary dependency of netconsole on CONFIG_NET_MULTI
+  Patch by Marcus Hall, 24 Aug 2005
+
+* Fix the machine-id of the Cogent csb637 board
+  Patch by Anders Larsen, 05 Oct 2005
+
+* Complete support for the KwikByte KB920x boards
+  Patch by Anders Larsen, 05 Oct 2005
+
+* Set the AT91RM9200 clock to asynchronous mode
+  Patch by Anders Larsen, 03 May 2005
+
+* Set the AT91RM9200 clock to synchronous mode
+  Patch by Anders Larsen, 29 Apr 2005
+
+* Add support for Cogent csb637
+  Patch by Anders Larsen, 29 Apr 2005
+
+* Fix dm9161.c initialization
+  Patch by Anders Larsen, 29 Apr 2005
+
+* Fix problems introduced by Patch by Steven Scholz, 02 Mar 2005
+  (8e2be51de8dd03c1ce4d06cbb18ad06133d47cd5)
+
+* Move dm9161.c and lxt972.c into cpu/arm920t/at91rm9200
+  Patch by Anders Larsen, 29 Apr 2005
+
+* Fix device partition intialization for SystemACE disks.
+  Patch by Stephen Williams, 28 Apr 2005
+
+* Added support for KwikByte KB920x boards (based on AT91RM9200)
+  Patch by Matt ?? <kb9200_dev@kwikbyte.com>, 27 Apr 2005
+
+* Add support for S29GL064M-R3 flash chip on xsengine board
+  Patch by Kurt Stremerch, 18 Apr 2005
+
+* E500 update: repoint IVPR to RAM when code is relocated
+  Patch by Kylo Ginsberg, 13 Apr 2005
+
+* Fix loop end test in lib_generic/string.c:strswab()
+  Patch by Andrew Dyer, October 10, 2005
+  Signed-off-by: Andrew Dyer <amdyer@gmail.com>
+
+* Cleanup
+
+* Update ARM Integrator boards:
+  Correct addessing errors in platform files.
+  Split off common core module data from Integrator header files to
+  include/armcoremodule.h.
+  Patch by Peter Pearse, 04 Oct 2005
+
+* Make sure only supported compiler options are used
+  Import "cc-option" shell function from kernel and
+  use it to get the correct ARM GCC options for individual CPUs
+  Patch by Peter Pearse, 30 Jun 2005
+
+* Fix 440GR to print correct cpu revision
+  Patch by Stefan Roese, 04 Oct 2005
+
+* Change board message on AMCC Yosemite & Yellowstone to common style
+  Patch by Stefan Roese, 03 Oct 2005
+
+* Fix compiler warning
+
+* Fix FEC PHY addresses for TQM85xx boards
+
+* Fix uninitialized variable problem in hush shell
+  Patch by Lars Rostock, 26 Sep 2005
+
+* Undo change of f6e20fc6ca... to include/configs/trab.h
+  (Must have been an accident?)
+
+* Add support for AT91RM9200 OHCI Controller.
+  Patch by Eric Benard, 07 Apr 2005
+
+* Update ARM mach-types.h
+  Patch by Eric Benard, 07 Apr 2005
+
+* Add support for MP2USB board.
+  Patch by Eric Benard, 07 Apr 2005
+
+* Add board support for armadillo HT1070
+  Patch by Rowel Atienza, 06 Apr 2005
+
+* Second Ethernet address enabled for MPC885ADS and MPC8272ADS.
+  Patch by Vitaly Bordug, 30 Mar 2005
+
+* Add iopset command on mpc8xx
+  Patch by Daniel Eisenhut, 25 Mar 2005
+
+* Add support for MII in eepro100 driver.
+  Patch by Gleb Natapov, 21 Mar 2005
+
+* Fixes to the Lubbock (PXA 25x) support:
+  - Resolve the FIXME with respect to saving the u-boot environment.
+  - Make the default load address land in real memory.
+  - Fix lan91c96 SMC_{in,out}{b,w,l}() macros
+  Patch by David Brownell, 10 Mar 2005
+
+* Add Barco Streaming Video Card (SVC) and Sample Compress Network (SCN) board
+  Patch by Marc Leeman, 04 Mar 2005
+
+* OMAP242x H4 board update
+  - fix for ES2 differences.
+  - switch to using the cfi_flash driver.
+  - fix SRAM build address.
+  - fix for GP device operation.
+  - unlock SRAM for GP devices.
+  - display more device information.
+  - fix potential deadlock in omap24xx_i2c driver.
+  - fix DLL load values to match dpllout*1 operation.
+  - fix 2nd chip select init for combo DDR device.
+  - add support for CFI Intel 28F256L18 on H4 board.
+  Patch by Richard Woodruff, 03 Mar 2005
+
+* Fix formating in include/asm-arm/arch-at91rm9200/AT91RM9200.h
+  Patch by Steven Scholz, 02 Mar 2005
+
+* Fix typo in eth.c
+  Patch by Ara Avanesyan, 24 Feb 2005
+
+* Remove unneeded #include <malloc.h>
+  Patch by Ladislav Michl, 22 Feb 2005
+
+* Add cramfs support for m68k
+  Patch by Zachary Landau, 21 Feb 2005
+
+* Update ep8260: Fix flash timeouts; improve clock resolution for faster UARTs
+  Patch by Jeff Angielski, 21 Feb 2005
+
+* Fix au1x00_serial baud rate calculation:
+  remove hardcoded cpu clock divisor and use register instead;
+  round up instead of truncate
+  Patch by Andrew Dyer, 15 Feb 2005
+
+* Add Xilinx Spartan3 family FPGA support
+  Patch by Kurt Stremerch, 14 Feb 2005
+
+* Fix drivers/cfi_flash.c: use info->reset_cmd instead of FLASH_CMD_RESET
+  Patch by Zachary Landau, 11 Feb 2005
+
+* Fix VOH405 Support
+  Patch by Matthias Fuchs, 25 Sep 2005
+
+* Added support for PCI bridge on MPC8272ADS
+  Patch by Vitaly Bordug, Feb 09 2005
+
+* Update multicore CM9XX support for Integrator AP to allow booting from flash
+  Patch by Jean-Paul Saman, 8 Feb 2005
+
+* Fix strswab() to reliably find end of string
+  Patch by Andrew Dyer, 08 Feb 2005
+
+* Fix typos in include/ppc440.h
+  Patch by Andrew E Mileski, 04 Feb 2005
+
+* Add Vibren (was Accelent) PXA255 IDP Support
+  Patch by Cliff Brake, 04 Feb 2005
+
+* Fix tools/bmp_logo.c using incorrect offset to pixel data
+  Patch by Andrew Dyer, 31 Jan 2005
+
+* Add ARM946E cpu and core module targets; remap memory to 0x00000000
+  Patch by Peter Pearse, 2 Feb 2005
+
+* Fix error handling in tools/env/fw_env.c
+  Patch by Ara Avanesyan, 01 Feb 2005
+
+* Fix MGT5100 PSC baudrate calculation
+  Patch by Sebastian Schau, 27 Jan 2005
+
+* OMAP242x fix for GP device booting
+  - Add SRAM unlock for GP devices.
+  - Change DDR DLL unlock value to allow DPLLout*1 operation.
+  Patches by Richard Woodruff, 21 Jan 2005:
+
+* Add support for AMD's Pb1x00 eval board;
+  add MII routines to the au1x00 ethernet driver;
+  add USB ohci driver (work in progress)
+  Patch by Thomas Sailer, 20 Jan 2005
+
+* Update omap5912osk board
+  Use drivers/cfi_flash.c instead of private flash driver;
+  Remove hardcoded personalized settings from omap5912osk.h;
+  Fix spacing with (RO) marks in 'flinfo' output.
+  Patch by Michael Bendzick, 14 Jan 2005
+
+* Fix warnings for PCI code on ixp
+  Patch by Joe <lgxue@yahoo.com>, 13 Jan 2005
+
+* virtex2 fix for bogus download error messages
+  The virtex2 FPGA download code watches for init going active during
+  a download of config data as an error condition. init also goes
+  active after a configuration is finished in concert with the done
+  signal. So far, the code does not check for done active until all
+  of the configuration data is sent. If configuration data has a few
+  extra pad bytes at the end, this would cause an error message even
+  though the download had suceeded.
+  NOTE: virtex2 slave serial and spartan2 versions may still have the
+  same problem.
+  Patch by Andrew Dyer, 12 Jan 2005
+
+* Optimize flash_make_cmd in drivers/cfi_flash.c for little endian
+  Fix "WARNING: flash_make_cmd: unsuppported LittleEndian mode"
+  message when probing for nonexistent flash in little endian mode.
+  As a side effect more efficient and smaller code is generated,
+  which is always a Good Thing (TM).
+  Patch by Ladislav Michl, 24 Sep 2005
+
+* Update for TFTP using a fixed UDP port
+  Use the approved environment variable names. Added "tftpdstp" to
+  allow ports other than 69 per Tolunay Orkun's recommendation.
+  Patch by Jerry Van Baren, 12 Jan 2005
+
+* Allow to force TFTP to use a fixed UDP port
+  (Add a configuration option CONFIG_TFTP_PORT and optional env
+  variable tftpport)
+  Patch by Jerry Van Baren, 10 Jan 2005
+
+* Fix ethernet timeouts on dbau1550 and other au1x00 systems
+  Patch by Leif Lindholm, 29 Dec 2004
+
+* Cleanup: fix broken builds
+
+* Fix PHY address argument passing with mii info command
+  Patch by Andrew Dyer, 28 Dec 2004
+
+* Cleanup (PPC4xx is AMCC now)
+
+* esd CPCI2DP board added
+  Patch by Matthias Fuchs, 22 Sep 2005
+
+* esd PMC405 board updated
+  Patch by Matthias Fuchs, 22 Sep 2005
+
+* Add SM501 support to HH405 board.
+  Add support for gzip compressed bmp's (CONFIG_VIDEO_BMP_GZIP).
+  Add support for eeprom write-enable (CFG_EEPROM_WREN).
+  Patch by Stefan Roese, 22 Sep 2005
+
+* Fix autonegotiation in tsec ethernet driver
+  Patch by Stefan Roese, 21 Sep 2005
+
+* Fix bug in auto_update (trab board)
+  Patch by Martin Krause, 16 Sep 2005
+
+* Fix computation of framebuffer palette for 8bpp LCD bitmaps
+  Patch by Francesco Mandracci, 16 Sep 2005
+
+* Update configuration for INKA4x0 board
+
+* Update configuration for PM854 board
+  Based on patch by R. Loeffl, 20 Jul 2005
+
+* Add PCI support to TQM8540 and TQM8560 boards
+  Patch by Stefan Roese, 15 Sep 2005
+
+* Update AMCC Yosemite to get a consistent setup for all AMCC eval
+  boards (baudrate, environment...). Flash driver fixed.
+  Patch by Stefan Roese, 15 Sep 2005
+
+* Fix problem in 440GP ethernet driver (ebony). Add support for 2nd
+  ethernet port on ebony.
+  Patch by Stefan Roese, 7 Sep 2005
+
+* Added support for mtddevnum and mtddevname variables (mtdparts command)
+
+* Change default console baud rate for stxxtc board
+
+* Add I2C support to TQM8540 and TQM8560 boards (EEPROM, RTC, LM75-DTT).
+  Patch by Stefan Roese, 31 Aug 2005
+
+* Fix default command set (don't include CFG_CMD_DISPLAY command)
+  Patch by Pantelis Antoniou, 02 Sep 2005
+
+* Cleanup
+
+* Enable SM712 driver support for HMI1001 board.
+
+* Fix problems with ld version 2.16 (dot outside sections problem)
+  Pointed out by Gerhard Jaeger, 31 Aug 2005;
+  cf. http://sourceware.org/ml/binutils/2005-08/msg00412.html
+
+* Prepare U-Boot for gcc-4.x: fix global data pointer initialization
+
+* Adjust CS3 timings on HMI1001 board for dot matrix display under Linux
+
+* Add keyboard and dot matrix display support for HMI1001 board.
+
+* Prepare U-Boot for gcc-4.x
+
+* Fixed Bamboo port to enable running without DDR-DIMM
+  (Bamboo has also 64MB onboard DDR)
+  Patch by Stefan Roese, 24 Aug 2005
+
+* Merged 405gp_enet.c and 440gx_enet.c to generic 4xx_enet.c
+  now handling all 4xx cpu's
+  Patch by Stefan Roese, 16 Aug 2005
+
+* Fix make dependencies for at91rm9200 and ks8695 cpus
+  Patch by Steven Scholz, 23 Aug 2005
+
+* Add JFFS2 support for TQM5200 board
+
+* Add esd cpci5200 and pf5200 boards
+  Patch by Reinhard Arlt, 22 Aug 2005
+
+* Fix sysclock for TQM8540 and TQM8560 boards
+  Patch by Martin Krause, 25 Jul 2005
+
+* Initialize serial# and ethaddr from manufacturer data in EEPROM on CMC-PU2
+  Patch by Martin Krause, 08 Jun 2005
+
+* Add new board specific commands for TQM5200/STK52XX
+  - Sound commands (beep, wav, sound)
+  - Test commands (led, can, backlight, rs232)
+  Patch by Martin Krause, 02 May 2005
+
+* Change main clock on CMC-PU2 board from 207 MHz to 179 MHz
+  because of a bug in the AT91RM9200 CPU PLL
+  Patch by Martin Krause, 22 Apr 2005
+
+* Add automatic HW detection for another CMC_PU2 variant
+  Patch by Martin Krause, 20 Apr 2005
+
+* Remove CONFIG_AT91RM9200DK in CMC-PU2 configuration
+  Patch by Martin Krause, 19 Apr 2005
+
+* Fix initialization problem on TQM5200 without SM501
+  Patch by Martin Krause, 08 Apr 2005
+
+* Add RTC support for STK52XX.200
+  Patch by Martin Krause, 07 Apr 2005
+
+* Add support for IFM o2dnt board
+
 * Enable PCI on hmi1001 board
 
 * Fix return values of the jffs2 commands ls/fsload/fsinfo,
diff --git a/COPYING b/COPYING
index 1a34e3dc0cbdfc18fd86a77a4d302cb2f291f15c..f616ab96cc773d1719761d511a8649c9aa6eb473 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -2,10 +2,17 @@
 applications that use U-Boot services by means of the jump table
 provided by U-Boot exactly for this purpose - this is merely
 considered normal use of U-Boot, and does *not* fall under the
-heading of "derived work". Also note that the GPL below is
-copyrighted by the Free Software Foundation, but the instance of code
-that it refers to (the U-Boot source code) is copyrighted by me and
-others who actually wrote it. -- Wolfgang Denk
+heading of "derived work".
+
+  The header files "include/image.h" and "include/asm-*/u-boot.h"
+define interfaces to U-Boot. Including these (unmodified) header
+files in another file is considered normal use of U-Boot, and does
+*not* fall under the heading of "derived work".
+
+  Also note that the GPL below is copyrighted by the Free Software
+Foundation, but the instance of code that it refers to (the U-Boot
+source code) is copyrighted by me and others who actually wrote it.
+-- Wolfgang Denk
 
 =======================================================================
 
diff --git a/CREDITS b/CREDITS
index f717d54a9e72dd0d7e7ea954b37865669e52b044..f91fa3e48ebf05224b15e6b3a7dd0ec3f11012e2 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -65,6 +65,12 @@ N: Raphael Bossek
 E: raphael.bossek@solutions4linux.de
 D: 8xxrom-0.3.0
 
+N: Cliff Brake
+E: cliff.brake@gmail.com
+D: Port to Vibren PXA255 IDP platform
+W: http://www.vibren.com
+W: http://bec-systems.com
+
 N: Rick Bronson
 E: rick@efn.org
 D: Atmel AT91RM9200DK and NAND support
@@ -249,6 +255,11 @@ N: Thomas Lange
 E: thomas@corelatus.se
 D: Support for GTH and dbau1x00 boards; lots of PCMCIA fixes
 
+N: Marc Leeman
+E: marc.leeman@barco.com
+D: Support for Barco Streaming Video Card (SVC) and Sample Compress Network (SCN)
+W: www.barco.com
+
 N: The LEOX team
 E: team@leox.org
 D: Support for LEOX boards, DS164x RTC
@@ -306,6 +317,10 @@ E: rof@sysgo.de
 D: Initial support for SSV-DNP1110, SMC91111 driver
 W: www.elinos.com
 
+N: John Otken
+E: jotken@softadvances.com
+D: Support for AMCC Luan 440SP board
+
 N: Tolunay Orkun
 E: torkun@nextio.com
 D: Support for Cogent CSB272 & CSB472 boards
@@ -340,7 +355,7 @@ W: http://www.windriver.com
 
 N: Stefan Roese
 E: stefan.roese@esd-electronics.com
-D: IBM PPC401/403/405GP Support; Windows environment support
+D: AMCC PPC401/403/405GP Support; Windows environment support
 
 N: Erwin Rol
 E: erwin@muffin.org
@@ -356,7 +371,7 @@ D: Author of LiMon-1.4.2, which contributed some ideas
 
 N: Travis B. Sawyer
 E: travis.sawyer@sandburst.com
-D: Support for IBM PPC440GX, XES XPedite1000 440GX PrPMC board.  IBM 440gx Ref Platform (Ocotea)
+D: Support for AMCC PPC440GX, XES XPedite1000 440GX PrPMC board.  AMCC 440gx Ref Platform (Ocotea)
 
 N: Paolo Scaffardi
 E: arsenio@tin.it
@@ -366,6 +381,10 @@ N: Robert Schwebel
 E: r.schwebel@pengutronix.de
 D: Support for csb226, logodl and innokom boards (PXA2xx)
 
+N: Art Shipkowski
+E: art@videon-central.com
+D: Support for NetSilicon NS7520
+
 N: Yasushi Shoji
 E: yashi@atmark-techno.com
 D: Support for Xilinx MicroBlaze, for Atmark Techno SUZAKU FPGA board
@@ -432,3 +451,8 @@ N: Alex Zuepke
 E: azu@sysgo.de
 D: Overall improvements on StrongARM, ARM720TDMI; Support for Tuxscreen; initial PCMCIA support for ARM
 W: www.elinos.com
+
+N: James MacAulay
+E: james.macaulay@amirix.com
+D: Suppport for Amirix AP1000
+W: www.amirix.com
index 67f8bb4383bbee497bff3a62cbd5aa68bec6e459..0ef9e0349a91cebb279bf9a8093b74eedb2e9a75 100644 (file)
@@ -27,6 +27,9 @@ Pantelis Antoniou <panto@intracom.gr>
 
 Reinhard Arlt <reinhard.arlt@esd-electronics.com>
 
+       cpci5200                MPC5200
+       pf5200                  MPC5200
+
        CPCI750                 PPC750FX/GX
 
 Yuli Barcohen <yuli@arabellasw.com>
@@ -133,6 +136,7 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        AR405                   PPC405GP
        ASH405                  PPC405EP
        CANBT                   PPC405CR
+       CPCI2DP                 PPC405GP
        CPCI405                 PPC405GP
        CPCI4052                PPC405GP
        CPCI405AB               PPC405GP
@@ -153,6 +157,7 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        VOH405                  PPC405EP
        VOM405                  PPC405EP
        WUH405                  PPC405EP
+       CMS700                  PPC405EP
 
 Frank Gottschling <fgottschling@eltec.de>
 
@@ -235,6 +240,10 @@ Tolunay Orkun <torkun@nextio.com>
        csb272                  PPC405GP
        csb472                  PPC405GP
 
+John Otken <jotken@softadvances.com>
+
+       luan                    PPC440SP
+
 Keith Outwater <Keith_Outwater@mvis.com>
 
        GEN860T                 MPC860T
@@ -245,11 +254,13 @@ Frank Panno <fpanno@delphintech.com>
        ep8260                  MPC8260
 
 Peter Pearse <peter.pearse@arm.com>
-
-       Integrator/AP           CM 926EJ-S, CM7x0T, CM9x0T
-       Integrator/CP           CM 926EJ-S  CM920T, CM940T, CM922T-XA10
-       Versatile/AB            ARM926EJ-S
-       Versatile/PB            ARM926EJ-S
+       integratorcp            All current ARM supplied &
+                               supported core modules
+                               - see http://www.arm.com
+                               /products/DevTools
+                               /Hardware_Platforms.html
+       versatile               ARM926EJ-S
+       versatile               ARM926EJ-S
 
 Denis Peter <d.peter@mpl.ch>
 
@@ -263,10 +274,15 @@ Daniel Poirot <dan.poirot@windriver.com>
 
 Stefan Roese <sr@denx.de>
 
+       uc100                   MPC857
+
+       TQM85xx                 MPC8540/8541/8555/8560
+
        bamboo                  PPC440EP
        bunbinga                PPC405EP
        ebony                   PPC440GP
        ocotea                  PPC440GX
+       p3p440                  PPC440GP
        sycamore                PPC405GPr
        walnut                  PPC405GP
        yellowstone             PPC440GR
@@ -347,10 +363,18 @@ Unknown / orphaned boards:
 #      Board                   CPU                                     #
 #########################################################################
 
+Rowel Atienza <rowel@diwalabs.com>
+
+       armadillo               ARM720T
+
 Rishi Bhattacharya <rishi@ti.com>
 
        omap5912osk             ARM926EJS
 
+Cliff Brake <cliff.brake@gmail.com>
+
+       pxa255_idp              xscale
+
 Rick Bronson <rick@efn.org>
 
        AT91RM9200DK            at91rm9200
diff --git a/MAKEALL b/MAKEALL
index 32fbe45e919955835159b46623d9499987c4d186..fcbab47cab7c8aee706799f50c94d1676170e6c3 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -25,8 +25,9 @@ LIST_5xx="    \
 #########################################################################
 
 LIST_5xxx="    \
-       icecube_5100    icecube_5200    EVAL5200        PM520           \
-       Total5100       Total5200       Total5200_Rev2  TQM5200_auto    \
+       cpci5200        icecube_5100    icecube_5200    EVAL5200        \
+       pf5200          PM520           Total5100       Total5200       \
+       Total5200_Rev2  TQM5200_auto    o2dnt                           \
 "
 
 #########################################################################
@@ -60,17 +61,20 @@ LIST_8xx="  \
 #########################################################################
 
 LIST_4xx="     \
-       ADCIOP          AR405           ASH405          bubinga         \
-       CANBT           CPCI405         CPCI4052        CPCI405AB       \
+       ADCIOP          AP1000          AR405           ASH405          \
+       bubinga         CANBT           CMS700          CPCI2DP         \
+       CPCI405         CPCI4052        CPCI405AB       CPCI405DT       \
        CPCI440         CPCIISER4       CRAYL1          csb272          \
        csb472          DASA_SIM        DP405           DU405           \
-       ebony           ERIC            EXBITGEN        HUB405          \
-       JSE             KAREF           METROBOX        MIP405          \
-       MIP405T         ML2             ml300           ocotea          \
-       OCRTC           ORSG            PCI405          PIP405          \
-       PLU405          PMC405          PPChameleonEVB  VOH405          \
-       W7OLMC          W7OLMG          walnut          WUH405          \
-       XPEDITE1K       yellowstone     yosemite                        \
+       ebony           ERIC            EXBITGEN        G2000           \
+       HH405           HUB405          JSE             KAREF           \
+       luan            METROBOX        MIP405          MIP405T         \
+       ML2             ml300           ocotea          OCRTC           \
+       ORSG            p3p440          PCI405          PIP405          \
+       PLU405          PMC405          PPChameleonEVB  sbc405          \
+       VOH405          VOM405          W7OLMC          W7OLMG          \
+       walnut          WUH405          XPEDITE1K       yellowstone     \
+       yosemite                                                        \
 "
 
 #########################################################################
@@ -86,11 +90,11 @@ LIST_8220=" \
 #########################################################################
 
 LIST_824x="    \
-       A3000           BMW             CPC45           CU824           \
-       debris          eXalion         HIDDEN_DRAGON   MOUSSE          \
-       MUSENKI         MVBLUE          OXC             PN62            \
-       Sandpoint8240   Sandpoint8245   SL8245          utx8245         \
-       sbc8240 \
+       A3000           barco           BMW             CPC45           \
+       CU824           debris          eXalion         HIDDEN_DRAGON   \
+       MOUSSE          MUSENKI         MVBLUE          OXC             \
+       PN62            Sandpoint8240   Sandpoint8245   sbc8240         \
+       SL8245          utx8245                                         \
 "
 
 #########################################################################
@@ -112,7 +116,7 @@ LIST_8260=" \
 #########################################################################
 
 LIST_83xx="    \
-       MPC8349ADS      \
+       MPC8349ADS      TQM834x\
 "
 
 
@@ -124,6 +128,7 @@ LIST_85xx=" \
        MPC8540ADS      MPC8540EVAL     MPC8541CDS      MPC8548CDS      \
        MPC8555CDS      MPC8560ADS      PM854           PM856           \
        sbc8540         sbc8560         stxgp3          TQM8540         \
+       TQM8541         TQM8555         TQM8560                         \
 "
 
 #########################################################################
@@ -157,24 +162,40 @@ LIST_SA="assabet dnp1110 gcplus lart shannon"
 ## ARM7 Systems
 #########################################################################
 
-LIST_ARM7="B2 ep7312 evb4510 impa7 modnet50"
+LIST_ARM7="    \
+       armadillo       B2              ep7312          evb4510         \
+       impa7           integratorap    ap7             ap720t          \
+       modnet50                                                        \
+"
 
 #########################################################################
 ## ARM9 Systems
 #########################################################################
 
 LIST_ARM9="    \
-       at91rm9200dk    cmc_pu2         integratorcp    integratorap    \
-       lpd7a400        mx1ads          mx1fs2          omap1510inn     \
-       omap1610h2      omap1610inn     omap730p2       scb9328         \
-       smdk2400        smdk2410        trab            VCMA9           \
-       versatile       voiceblue                                       \
+       at91rm9200dk    cmc_pu2                                         \
+       ap920t          ap922_XA10      ap926ejs        ap946es         \
+       ap966           cp920t          cp922_XA10      cp926ejs        \
+       cp946es         cp966           lpd7a400        mp2usb          \
+       mx1ads          mx1fs2          omap1510inn     omap1610h2      \
+       omap1610inn     omap730p2       scb9328         smdk2400        \
+       smdk2410        trab            VCMA9           versatile       \
+       versatileab     versatilepb     voiceblue
+"
+
+#########################################################################
+## ARM10 Systems
+#########################################################################
+LIST_ARM10="   \
+       integratorcp    cp1026                                          \
 "
 
 #########################################################################
 ## ARM11 Systems
 #########################################################################
-LIST_ARM11="omap2420h4"
+LIST_ARM11="   \
+       cp1136          omap2420h4                                      \
+"
 
 #########################################################################
 ## Xscale Systems
@@ -182,8 +203,8 @@ LIST_ARM11="omap2420h4"
 
 LIST_pxa="     \
        adsvix          cerf250         cradle          csb226          \
-       innokom         lubbock         wepep250        xaeniax         \
-       xm250           xsengine                                                        \
+       innokom         lubbock         pxa255_idp      wepep250        \
+       xaeniax         xm250           xsengine                        \
 "
 
 LIST_ixp="ixdp425"
@@ -191,7 +212,7 @@ LIST_ixp="ixdp425"
 
 LIST_arm="     \
        ${LIST_SA}                                                      \
-       ${LIST_ARM7} ${LIST_ARM9} ${LIST_ARM11}                         \
+       ${LIST_ARM7} ${LIST_ARM9} ${LIST_ARM10} ${LIST_ARM11}           \
        ${LIST_pxa} ${LIST_ixp}                                         \
 "
 
@@ -273,7 +294,7 @@ for arg in $@
 do
        case "$arg" in
        ppc|5xx|5xxx|8xx|8220|824x|8260|83xx|85xx|4xx|7xx|74xx| \
-       arm|SA|ARM7|ARM9|ARM11|pxa|ixp| \
+       arm|SA|ARM7|ARM9|ARM10|ARM11|pxa|ixp| \
        microblaze| \
        mips|mips_el| \
        nios|nios2| \
index c15efd9c8a4958a2264037cc5ad3dee61f86da99..5e0df98c98d6f4a0bbf7ba947189981112db1813 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -118,10 +118,10 @@ LIBS += disk/libdisk.a
 LIBS += rtc/librtc.a
 LIBS += dtt/libdtt.a
 LIBS += drivers/libdrivers.a
-LIBS += drivers/nand/libnand.a
 LIBS += drivers/sk98lin/libsk98lin.a
 LIBS += post/libpost.a post/cpu/libcpu.a
 LIBS += common/libcommon.a
+LIBS += $(BOARDLIBS)
 .PHONY : $(LIBS)
 
 # Add GCC lib
@@ -235,6 +235,9 @@ PATI_config:                unconfig
 aev_config: unconfig
        @./mkconfig -a aev ppc mpc5xxx tqm5200
 
+cpci5200_config:  unconfig
+       @./mkconfig -a cpci5200  ppc mpc5xxx cpci5200 esd
+
 hmi1001_config:         unconfig
        @./mkconfig hmi1001 ppc mpc5xxx hmi1001
 
@@ -278,6 +281,12 @@ icecube_5100_config:                       unconfig
 inka4x0_config:                unconfig
        @./mkconfig inka4x0 ppc mpc5xxx inka4x0
 
+o2dnt_config:
+       @./mkconfig -a o2dnt ppc mpc5xxx o2dnt
+
+pf5200_config:  unconfig
+       @./mkconfig -a pf5200  ppc mpc5xxx pf5200 esd
+
 PM520_config \
 PM520_DDR_config \
 PM520_ROMBOOT_config \
@@ -327,7 +336,7 @@ Total5200_Rev2_lowboot_config:      unconfig
                }
        @./mkconfig -a Total5200 ppc mpc5xxx total5200
 
-TQM5200_auto_config            \
+TQM5200_auto_config    \
 TQM5200_AA_config      \
 TQM5200_AB_config      \
 TQM5200_AC_config      \
@@ -713,6 +722,9 @@ xtract_4xx = $(subst _25,,$(subst _33,,$(subst _BA,,$(subst _ME,,$(subst _HI,,$(
 ADCIOP_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx adciop esd
 
+AP1000_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx ap1000 amirix
+
 APC405_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx apc405 esd
 
@@ -746,6 +758,9 @@ CATcenter_33_config:        unconfig
                }
        @./mkconfig -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
 
+CPCI2DP_config:        unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx cpci2dp esd
+
 CPCI405_config \
 CPCI4052_config        \
 CPCI405DT_config       \
@@ -801,6 +816,9 @@ JSE_config: unconfig
 KAREF_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx karef sandburst
 
+luan_config:   unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx luan amcc
+
 METROBOX_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx metrobox sandburst
 
@@ -825,6 +843,9 @@ OCRTC_config                \
 ORSG_config:   unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx ocrtc esd
 
+p3p440_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx p3p440 prodrive
+
 PCI405_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx pci405 esd
 
@@ -880,6 +901,9 @@ VOH405_config:      unconfig
 VOM405_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx vom405 esd
 
+CMS700_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx cms700 esd
+
 W7OLMC_config  \
 W7OLMG_config: unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx w7o
@@ -918,6 +942,9 @@ xtract_82xx = $(subst _BIGFLASH,,$(subst _ROMBOOT,,$(subst _L2,,$(subst _266MHz,
 A3000_config: unconfig
        @./mkconfig $(@:_config=) ppc mpc824x a3000
 
+barco_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x barco
+
 BMW_config: unconfig
        @./mkconfig $(@:_config=) ppc mpc824x bmw
 
@@ -976,9 +1003,6 @@ SL8245_config: unconfig
 utx8245_config: unconfig
        @./mkconfig $(@:_config=) ppc mpc824x utx8245
 
-cobra5272_config :             unconfig
-       @./mkconfig $(@:_config=) m68k mcf52x2 cobra5272
-
 #########################################################################
 ## MPC8260 Systems
 #########################################################################
@@ -1208,6 +1232,9 @@ ZPC1900_config: unconfig
 ## Coldfire
 #########################################################################
 
+cobra5272_config :             unconfig
+       @./mkconfig $(@:_config=) m68k mcf52x2 cobra5272
+
 M5272C3_config :               unconfig
        @./mkconfig $(@:_config=) m68k mcf52x2 m5272c3
 
@@ -1224,6 +1251,9 @@ TASREG_config :           unconfig
 MPC8349ADS_config:     unconfig
        @./mkconfig $(@:_config=) ppc mpc83xx mpc8349ads
 
+TQM834x_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc83xx tqm834x
+
 #########################################################################
 ## MPC85xx Systems
 #########################################################################
@@ -1296,11 +1326,19 @@ sbc8560_66_config:      unconfig
 stxgp3_config:         unconfig
        @./mkconfig $(@:_config=) ppc mpc85xx stxgp3
 
-TQM8540_config:      unconfig
-       @./mkconfig $(@:_config=) ppc mpc85xx tqm8540
-
-TQM8560_config:      unconfig
-       @./mkconfig $(@:_config=) ppc mpc85xx tqm8560
+TQM8540_config         \
+TQM8541_config         \
+TQM8555_config         \
+TQM8560_config:                unconfig
+       @CTYPE=$(subst TQM,,$(@:_config=)); \
+       >include/config.h ; \
+       echo "... TQM"$${CTYPE}; \
+       echo "#define CONFIG_MPC$${CTYPE}">>include/config.h; \
+       echo "#define CONFIG_TQM$${CTYPE}">>include/config.h; \
+       echo "#define CONFIG_HOSTNAME tqm$${CTYPE}">>include/config.h; \
+       echo "#define CONFIG_BOARDNAME \"TQM$${CTYPE}\"">>include/config.h; \
+       echo "#define CFG_BOOTFILE \"bootfile=/tftpboot/tqm$${CTYPE}/uImage\0\"">>include/config.h
+       @./mkconfig -a TQM85xx ppc mpc85xx tqm85xx
 
 #########################################################################
 ## 74xx/7xx Systems
@@ -1376,11 +1414,41 @@ at91rm9200dk_config     :       unconfig
 cmc_pu2_config :       unconfig
        @./mkconfig $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
 
-integratorap_config :  unconfig
-       @./mkconfig $(@:_config=) arm arm926ejs integratorap
-
-integratorcp_config :  unconfig
-       @./mkconfig $(@:_config=) arm arm926ejs integratorcp
+csb637_config  :       unconfig
+       @./mkconfig $(@:_config=) arm arm920t csb637 NULL at91rm9200
+
+mp2usb_config  :       unconfig
+       @./mkconfig $(@:_config=) arm arm920t mp2usb NULL at91rm9200
+
+
+########################################################################
+## ARM Integrator boards - see doc/README-integrator for more info.
+integratorap_config    \
+ap_config              \
+ap966_config           \
+ap922_config           \
+ap922_XA10_config      \
+ap7_config             \
+ap720t_config                  \
+ap920t_config          \
+ap926ejs_config                \
+ap946es_config: unconfig
+       @board/integratorap/split_by_variant.sh $@
+
+integratorcp_config    \
+cp_config              \
+cp920t_config          \
+cp926ejs_config                \
+cp946es_config         \
+cp1136_config          \
+cp966_config           \
+cp922_config           \
+cp922_XA10_config      \
+cp1026_config: unconfig
+       @board/integratorcp/split_by_variant.sh $@
+
+kb9202_config  :       unconfig
+       @./mkconfig $(@:_config=) arm arm920t kb9202 NULL at91rm9200
 
 lpd7a400_config \
 lpd7a404_config:       unconfig
@@ -1481,8 +1549,13 @@ trab_old_config: unconfig
 VCMA9_config   :       unconfig
        @./mkconfig $(@:_config=) arm arm920t vcma9 mpl s3c24x0
 
-versatile_config :     unconfig
-       @./mkconfig $(@:_config=) arm arm926ejs versatile
+#========================================================================
+# ARM supplied Versatile development boards
+#========================================================================
+versatile_config       \
+versatileab_config     \
+versatilepb_config :   unconfig
+       @board/versatile/split_by_variant.sh $@
 
 voiceblue_smallflash_config    \
 voiceblue_config:      unconfig
@@ -1514,6 +1587,9 @@ B2_config :       unconfig
 ## ARM720T Systems
 #########################################################################
 
+armadillo_config:      unconfig
+       @./mkconfig $(@:_config=) arm arm720t armadillo
+
 ep7312_config  :       unconfig
        @./mkconfig $(@:_config=) arm arm720t ep7312
 
@@ -1554,6 +1630,9 @@ lubbock_config    :       unconfig
 logodl_config  :       unconfig
        @./mkconfig $(@:_config=) arm pxa logodl
 
+pxa255_idp_config:     unconfig
+       @./mkconfig $(@:_config=) arm pxa pxa255_idp
+
 wepep250_config        :       unconfig
        @./mkconfig $(@:_config=) arm pxa wepep250
 
@@ -1646,6 +1725,11 @@ dbau1550_el_config       :       unconfig
        @echo "#define CONFIG_DBAU1550 1" >>include/config.h
        @./mkconfig -a dbau1x00 mips mips dbau1x00
 
+pb1000_config          :       unconfig
+       @ >include/config.h
+       @echo "#define CONFIG_PB1000 1" >>include/config.h
+       @./mkconfig -a pb1x00 mips mips pb1x00
+
 #########################################################################
 ## MIPS64 5Kc
 #########################################################################
@@ -1759,6 +1843,7 @@ clean:
        rm -f tools/env/fw_printenv tools/env/fw_setenv
        rm -f board/cray/L1/bootscript.c board/cray/L1/bootscript.image
        rm -f board/trab/trab_fkt board/voiceblue/eeprom
+       rm -f board/integratorap/u-boot.lds board/integratorcp/u-boot.lds
 
 clobber:       clean
        find . -type f \( -name .depend \
diff --git a/README b/README
index 9283c5eabdbdac080fea728c29945b37fbd1c93e..6f610082224e54fc0a31246cdea7ad688df1e6d1 100644 (file)
--- a/README
+++ b/README
@@ -145,7 +145,7 @@ Directory Hierarchy:
   - mpc85xx    Files specific to Freescale MPC85xx CPUs
   - nios       Files specific to Altera NIOS CPUs
   - nios2      Files specific to Altera Nios-II CPUs
-  - ppc4xx     Files specific to IBM PowerPC 4xx CPUs
+  - ppc4xx     Files specific to AMCC PowerPC 4xx CPUs
   - pxa                Files specific to Intel XScale PXA CPUs
   - s3c44b0    Files specific to Samsung S3C44B0 CPUs
   - sa1100     Files specific to Intel StrongARM SA1100 CPUs
@@ -261,51 +261,53 @@ The following options need to be configured:
                PowerPC based boards:
                ---------------------
 
-               CONFIG_ADCIOP           CONFIG_GEN860T          CONFIG_PCI405
-               CONFIG_ADS860           CONFIG_GENIETV          CONFIG_PCIPPC2
-               CONFIG_AMX860           CONFIG_GTH              CONFIG_PCIPPC6
-               CONFIG_AR405            CONFIG_gw8260           CONFIG_pcu_e
-               CONFIG_BAB7xx           CONFIG_hermes           CONFIG_PIP405
-               CONFIG_c2mon            CONFIG_hymod            CONFIG_PM826
-               CONFIG_CANBT            CONFIG_IAD210           CONFIG_ppmc8260
-               CONFIG_CCM              CONFIG_ICU862           CONFIG_QS823
-               CONFIG_CMI              CONFIG_IP860            CONFIG_QS850
-               CONFIG_cogent_mpc8260   CONFIG_IPHASE4539       CONFIG_QS860T
-               CONFIG_cogent_mpc8xx    CONFIG_IVML24           CONFIG_RBC823
-               CONFIG_CPCI405          CONFIG_IVML24_128       CONFIG_RPXClassic
-               CONFIG_CPCI4052         CONFIG_IVML24_256       CONFIG_RPXlite
-               CONFIG_CPCIISER4        CONFIG_IVMS8            CONFIG_RPXsuper
-               CONFIG_CPU86            CONFIG_IVMS8_128        CONFIG_rsdproto
-               CONFIG_CRAYL1           CONFIG_IVMS8_256        CONFIG_sacsng
-               CONFIG_CSB272           CONFIG_JSE              CONFIG_Sandpoint8240
-               CONFIG_CU824            CONFIG_LANTEC           CONFIG_Sandpoint8245
-               CONFIG_DASA_SIM         CONFIG_lwmon            CONFIG_sbc8260
-               CONFIG_DB64360          CONFIG_MBX              CONFIG_sbc8560
-               CONFIG_DB64460          CONFIG_MBX860T          CONFIG_SM850
-               CONFIG_DU405            CONFIG_MHPC             CONFIG_SPD823TS
-               CONFIG_DUET_ADS         CONFIG_MIP405           CONFIG_STXGP3
-               CONFIG_EBONY            CONFIG_MOUSSE           CONFIG_SXNI855T
-               CONFIG_ELPPC            CONFIG_MPC8260ADS       CONFIG_TQM823L
-               CONFIG_ELPT860          CONFIG_MPC8540ADS       CONFIG_TQM8260
-               CONFIG_ep8260           CONFIG_MPC8540EVAL      CONFIG_TQM850L
-               CONFIG_ERIC             CONFIG_MPC8560ADS       CONFIG_TQM855L
-               CONFIG_ESTEEM192E       CONFIG_MUSENKI          CONFIG_TQM860L
-               CONFIG_ETX094           CONFIG_MVS1             CONFIG_TTTech
-               CONFIG_EVB64260         CONFIG_NETPHONE         CONFIG_UTX8245
-               CONFIG_FADS823          CONFIG_NETTA            CONFIG_V37
-               CONFIG_FADS850SAR       CONFIG_NETVIA           CONFIG_W7OLMC
-               CONFIG_FADS860T         CONFIG_NX823            CONFIG_W7OLMG
-               CONFIG_FLAGADM          CONFIG_OCRTC            CONFIG_WALNUT
-               CONFIG_FPS850L          CONFIG_ORSG             CONFIG_ZPC1900
-               CONFIG_FPS860L          CONFIG_OXC              CONFIG_ZUMA
+               CONFIG_ADCIOP           CONFIG_GEN860T          CONFIG_PCIPPC2
+               CONFIG_ADS860           CONFIG_GENIETV          CONFIG_PCIPPC6
+               CONFIG_AMX860           CONFIG_GTH              CONFIG_pcu_e
+               CONFIG_AP1000           CONFIG_gw8260           CONFIG_PIP405
+               CONFIG_AR405            CONFIG_hermes           CONFIG_PM826
+               CONFIG_BAB7xx           CONFIG_hymod            CONFIG_ppmc8260
+               CONFIG_c2mon            CONFIG_IAD210           CONFIG_QS823
+               CONFIG_CANBT            CONFIG_ICU862           CONFIG_QS850
+               CONFIG_CCM              CONFIG_IP860            CONFIG_QS860T
+               CONFIG_CMI              CONFIG_IPHASE4539       CONFIG_RBC823
+               CONFIG_cogent_mpc8260   CONFIG_IVML24           CONFIG_RPXClassic
+               CONFIG_cogent_mpc8xx    CONFIG_IVML24_128       CONFIG_RPXlite
+               CONFIG_CPCI405          CONFIG_IVML24_256       CONFIG_RPXsuper
+               CONFIG_CPCI4052         CONFIG_IVMS8            CONFIG_rsdproto
+               CONFIG_CPCIISER4        CONFIG_IVMS8_128        CONFIG_sacsng
+               CONFIG_CPU86            CONFIG_IVMS8_256        CONFIG_Sandpoint8240
+               CONFIG_CRAYL1           CONFIG_JSE              CONFIG_Sandpoint8245
+               CONFIG_CSB272           CONFIG_LANTEC           CONFIG_sbc8260
+               CONFIG_CU824            CONFIG_lwmon            CONFIG_sbc8560
+               CONFIG_DASA_SIM         CONFIG_MBX              CONFIG_SM850
+               CONFIG_DB64360          CONFIG_MBX860T          CONFIG_SPD823TS
+               CONFIG_DB64460          CONFIG_MHPC             CONFIG_STXGP3
+               CONFIG_DU405            CONFIG_MIP405           CONFIG_SXNI855T
+               CONFIG_DUET_ADS         CONFIG_MOUSSE           CONFIG_TQM823L
+               CONFIG_EBONY            CONFIG_MPC8260ADS       CONFIG_TQM8260
+               CONFIG_ELPPC            CONFIG_MPC8540ADS       CONFIG_TQM850L
+               CONFIG_ELPT860          CONFIG_MPC8540EVAL      CONFIG_TQM855L
+               CONFIG_ep8260           CONFIG_MPC8560ADS       CONFIG_TQM860L
+               CONFIG_ERIC             CONFIG_MUSENKI          CONFIG_TTTech
+               CONFIG_ESTEEM192E       CONFIG_MVS1             CONFIG_UTX8245
+               CONFIG_ETX094           CONFIG_NETPHONE         CONFIG_V37
+               CONFIG_EVB64260         CONFIG_NETTA            CONFIG_W7OLMC
+               CONFIG_FADS823          CONFIG_NETVIA           CONFIG_W7OLMG
+               CONFIG_FADS850SAR       CONFIG_NX823            CONFIG_WALNUT
+               CONFIG_FADS860T         CONFIG_OCRTC            CONFIG_ZPC1900
+               CONFIG_FLAGADM          CONFIG_ORSG             CONFIG_ZUMA
+               CONFIG_FPS850L          CONFIG_OXC
+               CONFIG_FPS860L          CONFIG_PCI405
 
                ARM based boards:
                -----------------
 
-               CONFIG_AT91RM9200DK,    CONFIG_CERF250,         CONFIG_DNP1110,
-               CONFIG_EP7312,          CONFIG_H2_OMAP1610,     CONFIG_HHP_CRADLE,
-               CONFIG_IMPA7,           CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610,
-               CONFIG_LART,            CONFIG_LPD7A400         CONFIG_LUBBOCK,
+               CONFIG_ARMADILLO,       CONFIG_AT91RM9200DK,    CONFIG_CERF250,
+               CONFIG_CSB637,          CONFIG_DNP1110,         CONFIG_EP7312,
+               CONFIG_H2_OMAP1610,     CONFIG_HHP_CRADLE,      CONFIG_IMPA7,
+               CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610, CONFIG_KB9202,
+               CONFIG_LART,            CONFIG_LPD7A400,        CONFIG_LUBBOCK,
                CONFIG_OSK_OMAP5912,    CONFIG_OMAP2420H4,      CONFIG_SHANNON,
                CONFIG_P2_OMAP730,      CONFIG_SMDK2400,        CONFIG_SMDK2410,
                CONFIG_TRAB,            CONFIG_VCMA9
@@ -397,6 +399,20 @@ The following options need to be configured:
                expect it to be in bytes, others in MB.
                Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
 
+               CONFIG_OF_FLAT_TREE
+
+               New kernel versions are expecting firmware settings to be
+               passed using flat open firmware trees.
+               The environment variable "disable_of", when set, disables this
+               functionality.
+
+               CONFIG_OF_FLAT_TREE_MAX_SIZE
+
+               The maximum size of the constructed OF tree.
+
+               OF_CPU - The proper name of the cpus node.
+               OF_TBCLK - The timebase frequency.
+
 - Serial Ports:
                CFG_PL010_SERIAL
 
@@ -497,7 +513,7 @@ The following options need to be configured:
 - Console UART Number:
                CONFIG_UART1_CONSOLE
 
-               IBM PPC4xx only.
+               AMCC PPC4xx only.
                If defined internal UART1 (and not UART0) is used
                as default U-Boot console.
 
@@ -960,6 +976,12 @@ The following options need to be configured:
                allows for a "silent" boot where a splash screen is
                loaded very quickly after power-on.
 
+- Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
+
+               If this option is set, additionally to standard BMP
+               images, gzipped BMP images can be displayed via the
+               splashscreen support or the bmp command.
+
 - Compression support:
                CONFIG_BZIP2
 
@@ -1355,7 +1377,7 @@ The following options need to be configured:
                remaining RAM in a form that can be passed as boot
                argument to Linux, for instance like that:
 
-                       setenv bootargs ... mem=\$(mem)
+                       setenv bootargs ... mem=\${mem}
                        saveenv
 
                This way you can tell Linux not to use this memory,
@@ -1481,6 +1503,26 @@ The following options need to be configured:
                When SystemACE support is added, the "ace" device type
                becomes available to the fat commands, i.e. fatls.
 
+- TFTP Fixed UDP Port:
+               CONFIG_TFTP_PORT
+
+               If this is defined, the environment variable tftpsrcp
+               is used to supply the TFTP UDP source port value.
+               If tftpsrcp isn't defined, the normal pseudo-random port
+               number generator is used.
+
+               Also, the environment variable tftpdstp is used to supply
+               the TFTP UDP destination port value.  If tftpdstp isn't
+               defined, the normal port 69 is used.
+
+               The purpose for tftpsrcp is to allow a TFTP server to
+               blindly start the TFTP transfer using the pre-configured
+               target IP address and UDP port. This has the effect of
+               "punching through" the (Windows XP) firewall, allowing
+               the remainder of the TFTP transfer to proceed normally.
+               A better solution is to properly configure the firewall,
+               but sometimes that is not allowed.
+
 - Show boot progress:
                CONFIG_SHOW_BOOT_PROGRESS
 
@@ -1724,6 +1766,12 @@ Configuration Settings:
                This option also enables the building of the cfi_flash driver
                in the drivers directory
 
+- CFG_FLASH_QUIET_TEST
+               If this option is defined, the common CFI flash doesn't
+               print it's warning upon not recognized FLASH banks. This
+               is useful, if some of the configured banks are only
+               optionally available.
+
 - CFG_RX_ETH_BUFFER:
                Defines the number of ethernet receive buffers. On some
                ethernet controllers it is recommended to set this value
@@ -2446,6 +2494,12 @@ Some configuration options can be set using Environment Variables:
                  Useful on scripts which control the retry operation
                  themselves.
 
+  tftpsrcport  - If this is set, the value is used for TFTP's
+                 UDP source port.
+
+  tftpdstport  - If this is set, the value is used for TFTP's UDP
+                 destination port instead of the Well Know Port 69.
+
    vlan                - When set to a value < 4095 the traffic over
                  ethernet is encapsulated/received over 802.1q
                  VLAN tagged frames.
@@ -2498,10 +2552,10 @@ Old, simple command line parser:
 
 - supports environment variables (through setenv / saveenv commands)
 - several commands on one line, separated by ';'
-- variable substitution using "... $(name) ..." syntax
+- variable substitution using "... ${name} ..." syntax
 - special characters ('$', ';') can be escaped by prefixing with '\',
   for example:
-       setenv bootcmd bootm \$(address)
+       setenv bootcmd bootm \${address}
 - You can also escape text by enclosing in single apostrophes, for example:
        setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
 
index da66a563efc262f45d11c542a1e5b07cd3a0aba8..00a8ef7ad9e4ff6127a746e3772880447202eb39 100644 (file)
@@ -51,6 +51,7 @@ SECTIONS
 
        .u_boot_cmd ALIGN(0x4):
        {
+               . = .;
                __u_boot_cmd_start = .;
                *(.u_boot_cmd)
                __u_boot_cmd_end = .;
index 23bc30287899c08cdbcf3f6623d9fa5ad6c6e7f0..9052b097b427492454034e921d362d2c1966e4ea 100644 (file)
@@ -124,9 +124,9 @@ nfsserverip=192.168.0.1
 preboot=echo;echo Type "run nfsboot" to mount root filesystem over NFS;echo
 gatewayip=192.168.0.1
 ramargs=setenv bootargs root=/dev/ram rw
-rootargs=setenv rootpath /tftp/$(ipaddr)
-nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(nfsserverip):$(rootpath)
-addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(nfsserverip):$(gatewayip):$(netmask):$(hostname):eth0:
+rootargs=setenv rootpath /tftp/${ipaddr}
+nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${nfsserverip}:${rootpath}
+addip=setenv bootargs ${bootargs} ip=${ipaddr}:${nfsserverip}:${gatewayip}:${netmask}:${hostname}:eth0:
 ramboot=tftp 400000 /home/leox/pMulti;run ramargs;bootm
 nfsboot=tftp 400000 /home/leox/uImage;run rootargs;run nfsargs;run addip;bootm
 bootcmd=run ramboot
index 82a831f5245b296f47be7c68e2a3988cdd87e82e..775db738e6c3a7680900fd4096c302fa474a91ea 100644 (file)
@@ -169,7 +169,7 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
+       char *s = getenv ("serial#");
 
        if (!s || strncmp (s, "ELPT860", 7))
                printf ("### No HW ID - assuming ELPT860\n");
@@ -253,7 +253,7 @@ long int initdram (int board_type)
         * try 8 column mode
         */
        size8 = dram_size (CFG_MAMR_8COL,
-                          (ulong *) SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
+                          SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
 
        udelay (1000);
 
@@ -261,7 +261,7 @@ long int initdram (int board_type)
         * try 9 column mode
         */
        size9 = dram_size (CFG_MAMR_9COL,
-                          (ulong *) SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
+                          SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
 
        if (size8 < size9) {    /* leave configuration at 9 columns       */
                size_b0 = size9;
index d23af9656a16388bfc6003f130a24812316a172f..b09fc3390a2bfcd0d3dd555f5cd0b37f3e407ce0 100644 (file)
@@ -91,6 +91,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -123,10 +124,12 @@ SECTIONS
   _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 = .;
index 269e8d90ce38ecf4a8ffe21db245faa5c20f9e85..6f5af91fd181a636557a3c7b566d5589e4f12915 100644 (file)
@@ -83,6 +83,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index bfe5eb3ed750f33bbd981be7aa107a22325834ac..cf4f4d0e3d1ac7a1492d0637987e0b23f1e836d7 100644 (file)
@@ -656,7 +656,7 @@ char * kbd_initialize(void)
                              | KBD_MODE_DISABLE_MOUSE
                              | KBD_MODE_KCC);
 
-       /* ibm powerpc portables need this to use scan-code set 1 -- Cort */
+       /* AMCC powerpc portables need this to use scan-code set 1 -- Cort */
        kbd_write_command_w(KBD_CCMD_READ_MODE);
        if (!(kbd_wait_for_input() & KBD_MODE_KCC)) {
                /*
index 2281d35867d8aeb7d5a7d8b1d4033ab79e1eeaf4..b36b3cb450e9c568d7302648f0bc9dad3a014ab1 100644 (file)
@@ -76,6 +76,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -108,11 +109,13 @@ SECTIONS
   _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 = .;
index c2c5b765946e4f64b4078c0b1dc620a8f0e11fa9..a8add85672ca774384ed4c00b00a1763d30cadf2 100644 (file)
@@ -526,7 +526,7 @@ flash_get_size (int portwidth, vu_long * addr, flash_info_t * info)
 
 int flash_erase (flash_info_t * info, int s_first, int s_last)
 {
-       volatile unsigned char *addr = (char *) (info->start[0]);
+       volatile unsigned char *addr = (uchar *) (info->start[0]);
        int flag, prot, sect, l_sect;
        ulong start, now, last;
 
@@ -696,7 +696,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
                for (sect = s_first; sect <= s_last; sect++) {
                        int sector_size = info->size / info->sector_count;
 
-                       addr = (char *) (info->start[sect]);
+                       addr = (uchar *) (info->start[sect]);
                        memset ((void *) addr, 0, sector_size);
                }
                return 0;
@@ -752,7 +752,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
                if (info->protect[sect] == 0) { /* not protected */
-                       addr = (char *) (info->start[sect]);
+                       addr = (uchar *) (info->start[sect]);
                        flash_cmd (info->portwidth, addr, 0, 0x30);
                        l_sect = sect;
                }
@@ -893,7 +893,7 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
 /* broken for 2x16: TODO */
 static int write_word (flash_info_t * info, ulong dest, ulong data)
 {
-       volatile unsigned char *addr = (char *) (info->start[0]);
+       volatile unsigned char *addr = (uchar *) (info->start[0]);
        ulong start;
        int flag, i;
        ulong mask;
@@ -926,7 +926,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
                                           CHIP_CMD_RST);
                                /* 1st cycle of word/byte program */
                                /* write 0x40 to the location to program */
-                               flash_cmd (info->portwidth, (char *) dest, 0,
+                               flash_cmd (info->portwidth, (uchar *) dest, 0,
                                           CHIP_CMD_PROG);
                                /* 2nd cycle of word/byte program */
                                /* write the data to the destination address */
index 624ee5cfbc70f98f74bb064e0a95e244036343f7..32b2b30a4a23af30d0bec002502bbf9632e66cfc 100644 (file)
@@ -168,7 +168,7 @@ static uchar i2c_select_device (uchar dev_addr, uchar read, int ten_bit)
 static uchar i2c_get_data (uchar * return_data, int len)
 {
 
-       unsigned int data, status;
+       unsigned int data, status = 0;
        int count = 0;
 
        DP (puts ("i2c_get_data\n"));
index 8e181d4e68cfc5ad71dd5e719463be25ef97e3d8..a2ab2d7818573449eba8d2f4f54f8481f7a2a8e9 100644 (file)
@@ -610,7 +610,7 @@ unsigned long long pattern[] = {
 int mem_test_data (void)
 {
        unsigned long long *pmem = (unsigned long long *) CFG_MEMTEST_START;
-       unsigned long long temp64;
+       unsigned long long temp64 = 0;
        int num_patterns = sizeof (pattern) / sizeof (pattern[0]);
        int i;
        unsigned int hi, lo;
@@ -717,7 +717,7 @@ int mem_march (volatile unsigned long long *base,
               unsigned long long wmask, short read, short write)
 {
        unsigned int i;
-       unsigned long long temp;
+       unsigned long long temp = 0;
        unsigned int hitemp, lotemp, himask, lomask;
 
        for (i = 0; i < size; i++) {
index e2719b99d1a50b450418205cd10f4b189004028a..3c5dee73b7fbdb97ea5031566d66165be489bd03 100644 (file)
@@ -267,8 +267,9 @@ void mv6436x_eth_initialize (bd_t * bis)
                dev->send = (void *) db64360_eth_transmit;
                dev->recv = (void *) db64360_eth_poll;
 
-               dev->priv = (void *) ethernet_private =
-                       calloc (sizeof (*ethernet_private), 1);
+               ethernet_private = calloc (sizeof (*ethernet_private), 1);
+               dev->priv = (void *) ethernet_private;
+
                if (!ethernet_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
@@ -281,8 +282,8 @@ void mv6436x_eth_initialize (bd_t * bis)
                memcpy (ethernet_private->port_mac_addr, dev->enetaddr, 6);
 
                /* set pointer to memory for stats data structure etc... */
-               ethernet_private->port_private = (void *) port_private =
-                       calloc (sizeof (*ethernet_private), 1);
+               port_private = calloc (sizeof (*ethernet_private), 1);
+               ethernet_private->port_private = (void *)port_private;
                if (!port_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index 75eb5e89be6f98e0ad47b1767e401d3e20ec8335..a4abf8d1fa9839eaaa6bf56de43a87ec7608a320 100644 (file)
@@ -610,7 +610,7 @@ unsigned long long pattern[] = {
 int mem_test_data (void)
 {
        unsigned long long *pmem = (unsigned long long *) CFG_MEMTEST_START;
-       unsigned long long temp64;
+       unsigned long long temp64 = 0;
        int num_patterns = sizeof (pattern) / sizeof (pattern[0]);
        int i;
        unsigned int hi, lo;
@@ -717,7 +717,7 @@ int mem_march (volatile unsigned long long *base,
               unsigned long long wmask, short read, short write)
 {
        unsigned int i;
-       unsigned long long temp;
+       unsigned long long temp = 0;
        unsigned int hitemp, lotemp, himask, lomask;
 
        for (i = 0; i < size; i++) {
index b78fda35c02dbc8ce0152284c51983f21fbc9c74..ec5d581065c7f6beb9c3838426ca27352829735e 100644 (file)
@@ -267,8 +267,8 @@ void mv6446x_eth_initialize (bd_t * bis)
                dev->send = (void *) db64460_eth_transmit;
                dev->recv = (void *) db64460_eth_poll;
 
-               dev->priv = (void *) ethernet_private =
-                       calloc (sizeof (*ethernet_private), 1);
+               ethernet_private = calloc (sizeof (*ethernet_private), 1);
+               dev->priv = (void *)ethernet_private;
                if (!ethernet_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
@@ -281,8 +281,8 @@ void mv6446x_eth_initialize (bd_t * bis)
                memcpy (ethernet_private->port_mac_addr, dev->enetaddr, 6);
 
                /* set pointer to memory for stats data structure etc... */
-               ethernet_private->port_private = (void *) port_private =
-                       calloc (sizeof (*ethernet_private), 1);
+               port_private = calloc (sizeof (*ethernet_private), 1);
+               ethernet_private->port_private = (void *)port_private;
                if (!port_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index 5b12a0c04c2abe84e192621f145784578baec10c..49cb8ad24f6df1efbd9b3fff353a7023c174b3cb 100644 (file)
@@ -114,8 +114,8 @@ void board_get_enetaddr (uchar * enet)
        i2c_init (CFG_I2C_SPEED, CFG_I2C_SLAVE);
 
        /* Read 256 bytes in EEPROM                             */
-       i2c_read (0x54, 0, 1, buff, 128);
-       i2c_read (0x54, 128, 1, buff + 128, 128);
+       i2c_read (0x54, 0, 1, (uchar *)buff, 128);
+       i2c_read (0x54, 128, 1, (uchar *)buff + 128, 128);
 
        /* Retrieve MAC address in buffer (key EA)              */
        for (cp = buff;;) {
@@ -123,7 +123,7 @@ void board_get_enetaddr (uchar * enet)
                        cp += 3;
                        /* Read MAC address                     */
                        for (i = 0; i < 6; i++, cp += 2) {
-                               enet[i] = aschex_to_byte (cp);
+                               enet[i] = aschex_to_byte ((unsigned char *)cp);
                        }
                }
                /* Scan to the end of the record                */
@@ -200,7 +200,7 @@ long int initdram (int board_type)
         * try 10 column mode
         */
 
-       size10 = dram_size (CFG_MAMR_10COL, (ulong *) SDRAM_BASE_PRELIM,
+       size10 = dram_size (CFG_MAMR_10COL, SDRAM_BASE_PRELIM,
                                                SDRAM_MAX_SIZE);
 
        return (size10);
index 082d8b07cfb442db995dede4418dbb6a6f79f65b..049f9901f71c51a853dc6e83957b069073630196 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +111,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index d2c2116c12863e2d937d7d995eee540afd1b1b50..f37e07b9234eff7e441c0d2956a97e7bcf019315 100644 (file)
@@ -137,7 +137,7 @@ long int initdram (int board_type)
         * try 10 column mode
         */
 
-       size10 = dram_size (CFG_MAMR_10COL, (ulong *) SDRAM_BASE_PRELIM,
+       size10 = dram_size (CFG_MAMR_10COL, SDRAM_BASE_PRELIM,
                            SDRAM_MAX_SIZE);
 
        return (size10);
index 082d8b07cfb442db995dede4418dbb6a6f79f65b..049f9901f71c51a853dc6e83957b069073630196 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +111,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index e88f9aa55ddd6ac84f347673bd4d1bdbd45617c8..28bcb318e8bb650e3ba0807178e02df97b7c30b3 100644 (file)
@@ -94,8 +94,8 @@ like[include/configs/RPXlite.h] :
 
 #define CONFIG_BOOTCOMMAND                                                      \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 This is enough for kernel NFS test. But as debug process goes on, you would expect
index 86cf6c1d4d1e13a23bbddb62cffe0c49d683f194..237c58af360b99054136f602dbff8388179a9906 100644 (file)
@@ -142,7 +142,7 @@ long int initdram (int board_type)
          * try 9 column mode
          */
 
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *)SDRAM_BASE_PRELIM, SDRAM_MAX_SIZE);
+       size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE_PRELIM, SDRAM_MAX_SIZE);
 
        /*
         * Final mapping:
index 9f7da0b6513cdbbb451fa1bacb9055fb01050177..a9c88f6487c971a04885f2f8f62595e8adb61ef4 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +111,13 @@ SECTIONS
   _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 = .;
index 4e369d50ef0d69465a17ad1b71896e365d4d779e..c0cf1cb74762dedf9973f03b63affc40de9bbc1d 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index d12ea8268606408a07cfb26b4b234681ad48fac7..f46bb9e8e4891b4fb89292a1390f6af545c33c98 100644 (file)
@@ -93,7 +93,7 @@ const uint sdram_table[] =
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
+       char *s = getenv ("serial#");
 
        puts ("Board: RRvision ");
 
@@ -157,7 +157,7 @@ long int initdram (int board_type)
         * try 8 column mode
         */
        size8 = dram_size (CFG_MAMR_8COL,
-                          (ulong *)SDRAM_BASE2_PRELIM,
+                          SDRAM_BASE2_PRELIM,
                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -166,7 +166,7 @@ long int initdram (int board_type)
         * try 9 column mode
         */
        size9 = dram_size (CFG_MAMR_9COL,
-                          (ulong *) SDRAM_BASE2_PRELIM,
+                          SDRAM_BASE2_PRELIM,
                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
index f81a10e033d75c560a446a3271f727e84bfb9c1b..1d6288fea6158f9a2f2c4ddf2cfc62f57e2c976b 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 6bd865e8cce12f9da4f9ff195074dcc72223b0ca..acb9ffda3b04c9bebed1fe83b4236c83a8d40ec4 100644 (file)
@@ -70,6 +70,8 @@ SECTIONS
     . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -102,10 +104,12 @@ SECTIONS
   _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 = .;
index 1d2a7d764b20a950803f6fab808978db68f5f31c..66c324625a7393383d8e429dc91c3b4f974a2cd8 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 6e4a060bb6ab4b19b22805a9f96c40422e20ca12..889bc77d2f820d3af5cb055013a307d0416a850e 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index a7d35af3f7301fd8a77c50f4920ff3e50fbd67b7..8b01f45e551017863c96ec0aed87580a57028629 100644 (file)
@@ -50,6 +50,7 @@ SECTIONS
        . = ALIGN(4);
        __data_end = .;
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd :
        {
index a7d35af3f7301fd8a77c50f4920ff3e50fbd67b7..8b01f45e551017863c96ec0aed87580a57028629 100644 (file)
@@ -50,6 +50,7 @@ SECTIONS
        . = ALIGN(4);
        __data_end = .;
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd :
        {
index d02add5723e6f5e6d0bbca40faf9cdd6da3f0323..803995ae5d0645d24d38b91296e8a5556d5c1b85 100644 (file)
@@ -31,6 +31,8 @@ void ext_bus_cntlr_init(void);
 void configure_ppc440ep_pins(void);
 int is_nand_selected(void);
 
+unsigned char cfg_simulate_spd_eeprom[128];
+
 gpio_param_s gpio_tab[GPIO_GROUP_MAX][GPIO_MAX];
 #if 0
 {         /* GPIO   Alternate1       Alternate2        Alternate3 */
@@ -357,10 +359,7 @@ void nand_init(void)
 
 int checkboard(void)
 {
-       sys_info_t sysinfo;
-       unsigned char *s = getenv("serial#");
-
-       get_sys_info(&sysinfo);
+       char *s = getenv("serial#");
 
        printf("Board: Bamboo - AMCC PPC440EP Evaluation Board");
        if (s != NULL) {
@@ -369,18 +368,12 @@ int checkboard(void)
        }
        putc('\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);
-
        return (0);
 }
 
 /*************************************************************************
  *
- * fixed_sdram_init -- Bamboo has one bank onboard sdram (plus DIMM)
+ * init_spd_array -- Bamboo has one bank onboard sdram (plus DIMM)
  *
  * Fixed memory is composed of :
  *     MT46V16M16TG-75 from Micron (x 2), 256Mb, 16 M x16, DDR266,
@@ -397,24 +390,40 @@ int checkboard(void)
  *             PLB @ 133 MHz
  *
  ************************************************************************/
-void fixed_sdram_init(void)
+static void init_spd_array(void)
 {
-       /*
-        * clear this first, if the DDR is enabled by a debugger
-        * then you can not make changes.
-        */
-       mtsdram(mem_cfg0, 0x00000000);  /* Disable EEC */
+       cfg_simulate_spd_eeprom[8]     = 0x04;    /* 2.5 Volt */
+       cfg_simulate_spd_eeprom[2]     = 0x07;    /* DDR ram */
 
-       /*--------------------------------------------------------------------
-        * Setup for board-specific specific mem
-        *------------------------------------------------------------------*/
-       /*
-        * Following for CAS Latency = 2.5 @ 133 MHz PLB
-        */
-       mtsdram(mem_b0cr, 0x00082001);
-       mtsdram(mem_b1cr, 0x00000000);
-       mtsdram(mem_b2cr, 0x00000000);
-       mtsdram(mem_b3cr, 0x00000000);
+#ifdef CONFIG_DDR_ECC
+       cfg_simulate_spd_eeprom[11]    = 0x02;    /* ECC ON : 02 OFF : 00 */
+       cfg_simulate_spd_eeprom[31]    = 0x08;    /* bankSizeID: 32MB */
+       cfg_simulate_spd_eeprom[3]     = 0x0C;    /* num Row Addr: 12 */
+#else
+       cfg_simulate_spd_eeprom[11]    = 0x00;    /* ECC ON : 02 OFF : 00 */
+       cfg_simulate_spd_eeprom[31]    = 0x10;    /* bankSizeID: 64MB */
+       cfg_simulate_spd_eeprom[3]     = 0x0D;    /* num Row Addr: 13 */
+#endif
+
+       cfg_simulate_spd_eeprom[4]     = 0x09;    /* numColAddr: 9  */
+       cfg_simulate_spd_eeprom[5]     = 0x01;    /* numBanks: 1 */
+       cfg_simulate_spd_eeprom[0]     = 0x80;    /* number of SPD bytes used: 128 */
+       cfg_simulate_spd_eeprom[1]     = 0x08;    /*  total number bytes in SPD device = 256 */
+       cfg_simulate_spd_eeprom[21]    = 0x00;    /* not registered: 0  registered : 0x02*/
+       cfg_simulate_spd_eeprom[6]     = 0x20;    /* Module data width: 32 bits */
+       cfg_simulate_spd_eeprom[7]     = 0x00;    /* Module data width continued: +0 */
+       cfg_simulate_spd_eeprom[15]    = 0x01;    /* wcsbc = 1 */
+       cfg_simulate_spd_eeprom[27]    = 0x50;    /* tRpNs = 20 ns  */
+       cfg_simulate_spd_eeprom[29]    = 0x50;    /* tRcdNs = 20 ns */
+
+       cfg_simulate_spd_eeprom[30]    = 45;      /* tRasNs */
+
+       cfg_simulate_spd_eeprom[18]    = 0x0C;    /* casBit (2,2.5) */
+
+       cfg_simulate_spd_eeprom[9]     = 0x75;    /* SDRAM Cycle Time (cas latency 2.5) = 7.5 ns */
+       cfg_simulate_spd_eeprom[23]    = 0xA0;    /* SDRAM Cycle Time (cas latency 2) = 10 ns */
+       cfg_simulate_spd_eeprom[25]    = 0x00;    /* SDRAM Cycle Time (cas latency 1.5) = N.A */
+       cfg_simulate_spd_eeprom[12]    = 0x82;    /* refresh Rate Type: Normal (15.625us) + Self refresh */
 }
 
 long int initdram (int board_type)
@@ -422,9 +431,10 @@ long int initdram (int board_type)
        long dram_size = 0;
 
        /*
-        * First init bank0 (onboard sdram) and then configure the DIMM-slots
+        * First write simulated values in eeprom array for onboard bank 0
         */
-       fixed_sdram_init();
+       init_spd_array();
+
        dram_size = spd_sdram (0);
 
        return dram_size;
@@ -483,20 +493,8 @@ int testdram(void)
 #if defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT)
 int pci_pre_init(struct pci_controller *hose)
 {
-       unsigned long strap;
        unsigned long addr;
 
-       /*--------------------------------------------------------------------------+
-        *      Bamboo is always configured as the host & requires the
-        *      PCI arbiter to be enabled.
-        *--------------------------------------------------------------------------*/
-       mfsdr(sdr_sdstp1, strap);
-       if ((strap & SDR0_SDSTP1_PAE_MASK) == 0) {
-               printf("PCI: SDR0_STRP1[PAE] not set.\n");
-               printf("PCI: Configuration aborted.\n");
-               return 0;
-       }
-
        /*-------------------------------------------------------------------------+
          | Set priority for all PLB3 devices to 0.
          | Set PLB3 arbiter to fair mode.
index c978dbafe0ebd6e7e6c8cd7b1b1eb44ccc7406ea..176900ec2f893ef0005ccef5f6b65324328219fa 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
index b4e9349ad706b3e396286e40bcefe4dee87d4088..fe6ce8a6d13298052c25f6e8ac3a74c750a2c130 100644 (file)
@@ -42,7 +42,7 @@ int board_early_init_f(void)
  */
 int checkboard(void)
 {
-       unsigned char *s = getenv("serial#");
+       char *s = getenv("serial#");
 
        puts("Board: Bubinga - AMCC PPC405EP Evaluation Board");
 
index b8f08eaf7edcb99ce9549ec7bf760fe972b92ff9..be030923b8eb816dd391ae11cece84f0ff143a4f 100644 (file)
@@ -68,7 +68,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -88,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -120,10 +120,12 @@ SECTIONS
   _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 = .;
index f6bb83713fd95934cd2524f7439fd65a0634cdca..a2595eec520e82c94af18edaead7beeb975ba567 100644 (file)
@@ -90,10 +90,7 @@ int board_early_init_f(void)
 
 int checkboard(void)
 {
-       sys_info_t sysinfo;
-       unsigned char *s = getenv("serial#");
-
-       get_sys_info(&sysinfo);
+       char *s = getenv("serial#");
 
        printf("Board: Ebony - AMCC PPC440GP Evaluation Board");
        if (s != NULL) {
@@ -102,11 +99,6 @@ int checkboard(void)
        }
        putc('\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);
        return (0);
 }
 
index 0ec3fad8c30a9414254cf42ca6afa7bce37cb3bf..5a1c5b1af46a4612e2de12b806ac803487d7eb1e 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
diff --git a/board/amcc/luan/Makefile b/board/amcc/luan/Makefile
new file mode 100644 (file)
index 0000000..5654f91
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o
+OBJS   += flash.o
+SOBJS  = init.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/amcc/luan/config.mk b/board/amcc/luan/config.mk
new file mode 100644 (file)
index 0000000..f52c206
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (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
+#
+
+#
+# esd ADCIOP boards
+#
+
+#TEXT_BASE = 0x00001000
+
+ifeq ($(ramsym),1)
+TEXT_BASE = 0xFBD00000
+else
+TEXT_BASE = 0xFFFC0000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_440=1
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
+
+ifeq ($(dbcr),1)
+PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000
+endif
diff --git a/board/amcc/luan/epld.h b/board/amcc/luan/epld.h
new file mode 100644 (file)
index 0000000..05362e0
--- /dev/null
@@ -0,0 +1,85 @@
+#define EPLD0_FSEL_FB2         0x80
+#define EPLD0_BOOT_SMALL_FLASH 0x40    /* 0 boot from large flash, 1 from small flash */
+#define EPLD0_RAW_CARD_BIT0    0x20    /* raw card EC level */
+#define EPLD0_RAW_CARD_BIT1    0x10
+#define EPLD0_RAW_CARD_BIT2    0x08
+#define EPLD0_EXT_ARB_SEL_N    0x04    /* 0 select on-board ext PCI-X, 1 internal arbiter */
+#define EPLD0_FLASH_ONBRD_N    0x02    /* 0 small flash/SRAM active, 1 block access */
+#define EPLD0_FLASH_SRAM_SEL_N 0x01    /* 0 SRAM at mem top, 1 small flash at mem top */
+
+#define EPLD1_CLK_CNTL0                0x80    /* FSEL-FB1 of MPC9772 */
+#define EPLD1_PCIX0_CNTL1      0x40    /* S*0 of 9531 */
+#define EPLD1_PCIX0_CNTL2      0x20    /* S*1 of 9531 */
+#define EPLD1_CLK_CNTL3                0x10    /* FSEL-B1 of MPC9772 */
+#define EPLD1_CLK_CNTL4                0x08    /* FSEL-B0 of MPC9772 */
+#define EPLD1_MASTER_CLOCK6    0x04    /* clock source select 6 */
+#define EPLD1_MASTER_CLOCK7    0x02    /* clock source select 7 */
+#define EPLD1_MASTER_CLOCK8    0x01    /* clock source select 8 */
+
+#define EPLD2_ETH_MODE_10      0x80    /* Ethernet mode 10   (default = 1) */
+#define EPLD2_ETH_MODE_100     0x40    /* Ethernet mode 100  (default = 1) */
+#define EPLD2_ETH_MODE_1000    0x20    /* Ethernet mode 1000 (default = 1) */
+#define EPLD2_ETH_DUPLEX_MODE  0x10    /* Ethernet force full duplex mode */
+#define EPLD2_RESET_ETH_N      0x08    /* Ethernet reset (default = 1) */
+#define EPLD2_ETH_AUTO_NEGO    0x04    /* Ethernet auto negotiation */
+#define EPLD2_DEFAULT_UART_N   0x01    /* 0 select DSR DTR for UART1 */
+
+#define EPLD3_STATUS_LED4      0x08    /* status LED 8 (1 = LED on) */
+#define EPLD3_STATUS_LED3      0x04    /* status LED 4 (1 = LED on) */
+#define EPLD3_STATUS_LED2      0x02    /* status LED 2 (1 = LED on) */
+#define EPLD3_STATUS_LED1      0x01    /* status LED 1 (1 = LED on) */
+
+#define EPLD4_PCIX0_VTH1       0x80    /* PCI-X 0 VTH1 status */
+#define EPLD4_PCIX0_VTH2       0x40    /* PCI-X 0 VTH2 status */
+#define EPLD4_PCIX0_VTH3       0x20    /* PCI-X 0 VTH3 status */
+#define EPLD4_PCIX0_VTH4       0x10    /* PCI-X 0 VTH4 status */
+#define EPLD4_PCIX1_VTH1       0x08    /* PCI-X 1 VTH1 status */
+#define EPLD4_PCIX1_VTH2       0x04    /* PCI-X 1 VTH2 status */
+#define EPLD4_PCIX1_VTH3       0x02    /* PCI-X 1 VTH3 status */
+#define EPLD4_PCIX1_VTH4       0x01    /* PCI-X 1 VTH4 status */
+
+#define EPLD5_PCIX0_INT0       0x80    /* PCIX0 INT0 status, write 0 to reset */
+#define EPLD5_PCIX0_INT1       0x40    /* PCIX0 INT1 status, write 0 to reset */
+#define EPLD5_PCIX0_INT2       0x20    /* PCIX0 INT2 status, write 0 to reset */
+#define EPLD5_PCIX0_INT3       0x10    /* PCIX0 INT3 status, write 0 to reset */
+#define EPLD5_PCIX1_INT0       0x08    /* PCIX1 INT0 status, write 0 to reset */
+#define EPLD5_PCIX1_INT1       0x04    /* PCIX1 INT1 status, write 0 to reset */
+#define EPLD5_PCIX1_INT2       0x02    /* PCIX1 INT2 status, write 0 to reset */
+#define EPLD5_PCIX1_INT3       0x01    /* PCIX1 INT3 status, write 0 to reset */
+
+#define EPLD6_PCIX0_RESET_CTL  0x80    /* 0=enable slot reset, 1=disable slot reset */
+#define EPLD6_PCIX1_RESET_CTL  0x40    /* 0=enable slot reset, 1=disable slot reset */
+#define EPLD6_ETH_INT_MODE     0x20    /* 0=IRQ5 recv's external eth int */
+#define EPLD6_PCIX2_RESET_CTL  0x10    /* 0=enable slot reset, 1=disable slot reset */
+#define EPLD6_PCI1_CLKCNTL1    0x80    /* PCI1 clock control S*0 of 9531 */
+#define EPLD6_PCI1_CLKCNTL2    0x40    /* PCI1 clock control S*1 of 9531 */
+#define EPLD6_PCI2_CLKCNTL1    0x20    /* PCI2 clock control S*0 of 9531 */
+#define EPLD6_PCI2_CLKCNTL2    0x10    /* PCI2 clock control S*1 of 9531 */
+
+#define EPLD7_VTH1             0x80    /* PCI2 VTH1 status */
+#define EPLD7_VTH2             0x40    /* PCI2 VTH2 status */
+#define EPLD7_VTH3             0x20    /* PCI2 VTH3 status */
+#define EPLD7_VTH4             0x10    /* PCI2 VTH4 status */
+#define EPLD7_INTA_MODE                0x80    /* see S5 on SW2 for details */
+#define EPLD7_PCI_INT_MODE_N   0x40    /* see S1 on SW2 for details */
+#define EPLD7_WRITE_ENABLE_GPIO        0x20    /* see S2 on SW2 for details */
+#define EPLD7_WRITE_ENABLE_INT 0x10    /* see S3 on SW2 for details */
+
+
+typedef struct {
+    unsigned char  status;             /* misc status */
+    unsigned char  clock;              /* clock status, PCI-X clock control */
+    unsigned char  ethuart;            /* Ethernet, UART status */
+    unsigned char  leds;               /* LED register */
+    unsigned char  vth01;              /* PCI0, PCI1 VTH register */
+    unsigned char  pciints;            /* PCI0, PCI1 interrupts */
+    unsigned char  pci2;               /* PCI2 interrupts, clock control */
+    unsigned char  vth2;               /* PCI2 VTH register */
+    unsigned char  filler1[4096-8];
+    unsigned char  gpio00;             /* GPIO bits  0-7 */
+    unsigned char  gpio08;             /* GPIO bits  8-15 */
+    unsigned char  gpio16;             /* GPIO bits 16-23 */
+    unsigned char  gpio24;             /* GPIO bits 24-31 */
+    unsigned char  filler2[4096-4];
+    unsigned char  version;            /* EPLD version */
+} epld_t;
diff --git a/board/amcc/luan/flash.c b/board/amcc/luan/flash.c
new file mode 100644 (file)
index 0000000..d3c3c0d
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2002 Jun Gu <jung@artesyncp.com>
+ * Add support for Am29F016D and dynamic switch setting.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Modified 4/5/2001
+ * Wait for completion of each sector erase command issued
+ * 4/5/2001
+ * Chris Hallinan - DS4.COM, Inc. - clh@net1plus.com
+ */
+
+#include <common.h>
+#include <ppc4xx.h>
+#include <asm/processor.h>
+
+#undef DEBUG
+#ifdef DEBUG
+#define DEBUGF(x...) printf(x)
+#else
+#define DEBUGF(x...)
+#endif                         /* DEBUG */
+
+static unsigned long flash_addr_table[1][CFG_MAX_FLASH_BANKS] = {
+       {0xff900000, 0xff980000, 0xffc00000},   /* 0:000: configuraton 3 */
+};
+
+/*
+ * include common flash code (for amcc boards)
+ */
+#include "../common/flash.c"
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static ulong flash_get_size(vu_long * addr, flash_info_t * info);
+
+unsigned long flash_init(void)
+{
+       unsigned long total_b = 0;
+       unsigned long size_b[CFG_MAX_FLASH_BANKS];
+       unsigned short index = 0;
+       int i;
+
+       /* read FPGA base register FPGA_REG0 */
+
+       DEBUGF("\n");
+       DEBUGF("FLASH: Index: %d\n", index);
+
+       /* Init: no FLASHes known */
+       for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) {
+               flash_info[i].flash_id = FLASH_UNKNOWN;
+               flash_info[i].sector_count = -1;
+               flash_info[i].size = 0;
+
+               /* check whether the address is 0 */
+               if (flash_addr_table[index][i] == 0) {
+                       continue;
+               }
+
+               /* call flash_get_size() to initialize sector address */
+               size_b[i] = flash_get_size((vu_long *)
+                                          flash_addr_table[index][i],
+                                          &flash_info[i]);
+               flash_info[i].size = size_b[i];
+               if (flash_info[i].flash_id == FLASH_UNKNOWN) {
+                       printf("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",
+                              i, size_b[i], size_b[i] << 20);
+                       flash_info[i].sector_count = -1;
+                       flash_info[i].size = 0;
+               }
+
+               /* Monitor protection ON by default */
+               (void)flash_protect(FLAG_PROTECT_SET, CFG_MONITOR_BASE,
+                                   CFG_MONITOR_BASE + CFG_MONITOR_LEN - 1,
+                                   &flash_info[2]);
+#ifdef CFG_ENV_IS_IN_FLASH
+               (void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR,
+                                   CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1,
+                                   &flash_info[2]);
+               (void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR_REDUND,
+                                   CFG_ENV_ADDR_REDUND + CFG_ENV_SECT_SIZE - 1,
+                                   &flash_info[2]);
+#endif
+
+               total_b += flash_info[i].size;
+       }
+
+       return total_b;
+}
diff --git a/board/amcc/luan/init.S b/board/amcc/luan/init.S
new file mode 100644 (file)
index 0000000..7830ebd
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+*
+* See file CREDITS for list of people who contributed to this
+* project.
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public 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
+
+#if (CFG_LARGE_FLASH == 0xffc00000)    /* if booting from large flash */
+    /* large flash */
+    tlbentry( 0xffc00000,         SZ_1M, 0xffc00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W )
+    tlbentry( 0xffd00000,         SZ_1M, 0xffd00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W )
+    tlbentry( 0xffe00000,         SZ_1M, 0xffe00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W )
+    tlbentry( 0xfff00000,         SZ_1M, 0xfff00000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W )
+
+    tlbentry( 0xff800000,         SZ_1M, 0xff800000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+    tlbentry( 0xff900000,         SZ_1M, 0xff900000,          1, AC_R|AC_W|AC_X|SA_G|SA_I|SA_W )
+#else                                  /* else booting from small flash */
+    tlbentry( 0xffe00000,         SZ_1M, 0xffe00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+    tlbentry( 0xfff00000,         SZ_1M, 0xfff00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+
+    tlbentry( 0xff800000,         SZ_1M, 0xff800000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+    tlbentry( 0xff900000,         SZ_1M, 0xff900000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+    tlbentry( 0xffa00000,         SZ_1M, 0xffa00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+    tlbentry( 0xffb00000,         SZ_1M, 0xffb00000,          1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+#endif
+
+    tlbentry( CFG_EPLD_BASE,    SZ_256K, 0xff000000,          1, AC_R|AC_W|SA_G|SA_I )
+
+#if (CFG_SRAM_BASE != 0)               /* if SRAM up high and SDRAM at zero */
+    tlbentry( 0x00000000, SZ_256M, 0x00000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+    tlbentry( 0x10000000, SZ_256M, 0x10000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+#elif (CFG_SMALL_FLASH == 0xff900000)  /* else SRAM at 0 */
+    tlbentry( 0x00000000,   SZ_1M, 0xff800000, 1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+#elif (CFG_SMALL_FLASH == 0xfff00000)
+    tlbentry( 0x00000000,   SZ_1M, 0xffe00000, 1, AC_R|AC_W|AC_X|SA_G/*|SA_I*/ )
+#else
+    #error DONT KNOW SRAM LOCATION
+#endif
+
+    /* internal ram (l2 cache) */
+    tlbentry( CFG_ISRAM_BASE,    SZ_256K, 0x80000000,      0, AC_R|AC_W|AC_X|SA_I )
+
+    /* peripherals at f0000000 */
+    tlbentry( CFG_PERIPHERAL_BASE, SZ_4K, CFG_PERIPHERAL_BASE, 1, AC_R|AC_W|SA_G|SA_I )
+
+    /* PCI */
+#if (CONFIG_COMMANDS & CFG_CMD_PCI)
+    tlbentry( CFG_PCI_BASE,    SZ_256M, 0x00000000, 9, AC_R|AC_W|SA_G|SA_I )
+    tlbentry( CFG_PCI_MEMBASE, SZ_256M, 0x10000000, 9, AC_R|AC_W|SA_G|SA_I )
+#endif
+    tlbtab_end
diff --git a/board/amcc/luan/luan.c b/board/amcc/luan/luan.c
new file mode 100644 (file)
index 0000000..c6b79a9
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ * (C) Copyright 2005
+ * John Otken, jotken@softadvances.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 <ppc4xx.h>
+#include <asm/processor.h>
+#include <spd_sdram.h>
+#include "epld.h"
+
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+
+
+/*************************************************************************
+ *  int board_early_init_f()
+ *
+ ************************************************************************/
+int board_early_init_f(void)
+{
+       volatile epld_t *x = (epld_t *) CFG_EPLD_BASE;
+
+       mtebc( pb0ap,  0x03800000 );    /* set chip selects */
+       mtebc( pb0cr,  0xffc58000 );    /* ebc0_b0cr, 4MB at 0xffc00000 CS0 */
+       mtebc( pb1ap,  0x03800000 );
+       mtebc( pb1cr,  0xff018000 );    /* ebc0_b1cr, 1MB at 0xff000000 CS1 */
+       mtebc( pb2ap,  0x03800000 );
+       mtebc( pb2cr,  0xff838000 );    /* ebc0_b2cr, 2MB at 0xff800000 CS2 */
+
+       mtdcr( uic1sr, 0xffffffff );    /* Clear all interrupts */
+       mtdcr( uic1er, 0x00000000 );    /* disable all interrupts */
+       mtdcr( uic1cr, 0x00000000 );    /* Set Critical / Non Critical interrupts */
+       mtdcr( uic1pr, 0x7fff83ff );    /* Set Interrupt Polarities */
+       mtdcr( uic1tr, 0x001f8000 );    /* Set Interrupt Trigger Levels */
+       mtdcr( uic1vr, 0x00000001 );    /* Set Vect base=0,INT31 Highest priority */
+       mtdcr( uic1sr, 0x00000000 );    /* clear all interrupts */
+       mtdcr( uic1sr, 0xffffffff );
+
+       mtdcr( uic0sr, 0xffffffff );    /* Clear all interrupts */
+       mtdcr( uic0er, 0x00000000 );    /* disable all interrupts excepted cascade */
+       mtdcr( uic0cr, 0x00000001 );    /* Set Critical / Non Critical interrupts */
+       mtdcr( uic0pr, 0xffffffff );    /* Set Interrupt Polarities */
+       mtdcr( uic0tr, 0x01000004 );    /* Set Interrupt Trigger Levels */
+       mtdcr( uic0vr, 0x00000001 );    /* Set Vect base=0,INT31 Highest priority */
+       mtdcr( uic0sr, 0x00000000 );    /* clear all interrupts */
+       mtdcr( uic0sr, 0xffffffff );
+
+       x->ethuart &= ~EPLD2_RESET_ETH_N; /* put Ethernet+PHY in reset */
+
+       return  0;
+}
+
+
+/*************************************************************************
+ *  int misc_init_r()
+ *
+ ************************************************************************/
+int misc_init_r(void)
+{
+       volatile epld_t *x = (epld_t *) CFG_EPLD_BASE;
+       x->ethuart |= EPLD2_RESET_ETH_N; /* take Ethernet+PHY out of reset */
+
+       return  0;
+}
+
+
+/*************************************************************************
+ *  int checkboard()
+ *
+ ************************************************************************/
+int checkboard(void)
+{
+       char *s = getenv("serial#");
+
+       printf("Board: Luan - AMCC PPC440SP Evaluation Board");
+
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
+
+       return  0;
+}
+
+
+/*************************************************************************
+ *  long int fixed_sdram()
+ *
+ ************************************************************************/
+static long int fixed_sdram(void)
+{                                      /* DDR2 init from BDI2000 script */
+       mtdcr( 0x10, 0x00000021 );      /* MCIF0_MCOPT2 - zero DCEN bit */
+       mtdcr( 0x11, 0x84000000 );
+       mtdcr( 0x10, 0x00000020 );      /* MCIF0_MCOPT1 - no ECC, 64 bits, 4 banks, DDR2 */
+       mtdcr( 0x11, 0x2D122000 );
+       mtdcr( 0x10, 0x00000026 );      /* MCIF0_CODT  - die termination on */
+       mtdcr( 0x11, 0x00800026 );
+       mtdcr( 0x10, 0x00000081 );      /* MCIF0_WRDTR - Write DQS Adv 90 + Fractional DQS Delay */
+       mtdcr( 0x11, 0x82000800 );
+       mtdcr( 0x10, 0x00000080 );      /* MCIF0_CLKTR - advance addr clock by 180 deg */
+       mtdcr( 0x11, 0x80000000 );
+       mtdcr( 0x10, 0x00000040 );      /* MCIF0_MB0CF - turn on CS0, N x 10 coll */
+       mtdcr( 0x11, 0x00000201 );
+       mtdcr( 0x10, 0x00000044 );      /* MCIF0_MB1CF - turn on CS0, N x 10 coll */
+       mtdcr( 0x11, 0x00000201 );
+       mtdcr( 0x10, 0x00000030 );      /* MCIF0_RTR   - refresh every 7.8125uS */
+       mtdcr( 0x11, 0x08200000 );
+       mtdcr( 0x10, 0x00000085 );      /* MCIF0_SDTR1 - timing register 1 */
+       mtdcr( 0x11, 0x80201000 );
+       mtdcr( 0x10, 0x00000086 );      /* MCIF0_SDTR2 - timing register 2 */
+       mtdcr( 0x11, 0x42103242 );
+       mtdcr( 0x10, 0x00000087 );      /* MCIF0_SDTR3 - timing register 3 */
+       mtdcr( 0x11, 0x0C100D14 );
+       mtdcr( 0x10, 0x00000088 );      /* MCIF0_MMODE - CAS is 4 cycles */
+       mtdcr( 0x11, 0x00000642 );
+       mtdcr( 0x10, 0x00000089 );      /* MCIF0_MEMODE - diff DQS disabled */
+       mtdcr( 0x11, 0x00000400 );      /*                ODT term disabled */
+
+       mtdcr( 0x10, 0x00000050 );      /* MCIF0_INITPLR0 - NOP */
+       mtdcr( 0x11, 0x81b80000 );
+       mtdcr( 0x10, 0x00000051 );      /* MCIF0_INITPLR1 - PRE */
+       mtdcr( 0x11, 0x82100400 );
+       mtdcr( 0x10, 0x00000052 );      /* MCIF0_INITPLR2 - EMR2 */
+       mtdcr( 0x11, 0x80820000 );
+       mtdcr( 0x10, 0x00000053 );      /* MCIF0_INITPLR3 - EMR3 */
+       mtdcr( 0x11, 0x80830000 );
+       mtdcr( 0x10, 0x00000054 );      /* MCIF0_INITPLR4 - EMR DLL ENABLE */
+       mtdcr( 0x11, 0x80810000 );
+       mtdcr( 0x10, 0x00000055 );      /* MCIF0_INITPLR5 - MR DLL RESET */
+       mtdcr( 0x11, 0x80800542 );
+       mtdcr( 0x10, 0x00000056 );      /* MCIF0_INITPLR6 - PRE */
+       mtdcr( 0x11, 0x82100400 );
+       mtdcr( 0x10, 0x00000057 );      /* MCIF0_INITPLR7 - refresh */
+       mtdcr( 0x11, 0x99080000 );
+       mtdcr( 0x10, 0x00000058 );      /* MCIF0_INITPLR8 */
+       mtdcr( 0x11, 0x99080000 );
+       mtdcr( 0x10, 0x00000059 );      /* MCIF0_INITPLR9 */
+       mtdcr( 0x11, 0x99080000 );
+       mtdcr( 0x10, 0x0000005A );      /* MCIF0_INITPLR10 */
+       mtdcr( 0x11, 0x99080000 );
+       mtdcr( 0x10, 0x0000005B );      /* MCIF0_INITPLR11 - MR */
+       mtdcr( 0x11, 0x80800442 );
+       mtdcr( 0x10, 0x0000005C );      /* MCIF0_INITPLR12 - EMR OCD Default */
+       mtdcr( 0x11, 0x80810380 );
+       mtdcr( 0x10, 0x0000005D );      /* MCIF0_INITPLR13 - EMR OCD exit */
+       mtdcr( 0x11, 0x80810000 );
+       udelay( 10*1000 );
+
+       mtdcr( 0x10, 0x00000021 );      /* MCIF0_MCOPT2 - execute preloaded init */
+       mtdcr( 0x11, 0x28000000 );      /*                set DC_EN */
+       udelay( 100*1000 );
+
+       mtdcr( 0x40, 0x0000F800 );      /* MQ0_B0BAS: base addr 00000000 / 256MB */
+       mtdcr( 0x41, 0x1000F800 );      /* MQ0_B1BAS: base addr 10000000 / 256MB */
+
+       mtdcr( 0x10, 0x00000078 );      /* MCIF0_RDCC - auto set read stage */
+       mtdcr( 0x11, 0x00000000 );
+       mtdcr( 0x10, 0x00000070 );      /* MCIF0_RQDC - read DQS delay control */
+       mtdcr( 0x11, 0x8000003A );      /*              enabled, frac DQS delay */
+       mtdcr( 0x10, 0x00000074 );      /* MCIF0_RFDC - two clock feedback delay */
+       mtdcr( 0x11, 0x00000200 );
+
+       return  512 << 20;
+}
+
+
+/*************************************************************************
+ *  long int initdram
+ *
+ ************************************************************************/
+long int initdram( int board_type )
+{
+       long dram_size = 0;
+
+#if defined(CONFIG_SPD_EEPROM)
+       dram_size = spd_sdram (0);
+#else
+       dram_size = fixed_sdram ();
+#endif
+
+       return  dram_size;
+}
+
+
+/*************************************************************************
+ *  int testdram()
+ *
+ ************************************************************************/
+#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);
+
+       for (k = 0; k < CFG_KBYTES_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
+
+
+/*************************************************************************
+ *  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) && defined(CFG_PCI_PRE_INIT)
+int pci_pre_init( struct pci_controller *hose )
+{
+       unsigned long strap;
+
+       /*--------------------------------------------------------------------------+
+        *      The luan board is always configured as the host & requires the
+        *      PCI arbiter to be enabled.
+        *--------------------------------------------------------------------------*/
+       mfsdr(sdr_sdstp1, strap);
+       if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ) {
+               printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap);
+
+               return  0;
+       }
+
+       return  1;
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT) */
+
+
+/*************************************************************************
+ *  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)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /*--------------------------------------------------------------------------+
+        * Disable everything
+        *--------------------------------------------------------------------------*/
+       out32r( PCIX0_PIM0SA, 0 ); /* disable */
+       out32r( PCIX0_PIM1SA, 0 ); /* disable */
+       out32r( PCIX0_PIM2SA, 0 ); /* disable */
+       out32r( PCIX0_EROMBA, 0 ); /* disable expansion rom */
+
+       /*--------------------------------------------------------------------------+
+        * Map all of SDRAM to PCI address 0x0000_0000. Note that the 440 strapping
+        * options to not support sizes such as 128/256 MB.
+        *--------------------------------------------------------------------------*/
+       out32r( PCIX0_PIM0LAL, CFG_SDRAM_BASE );
+       out32r( PCIX0_PIM0LAH, 0 );
+       out32r( PCIX0_PIM0SA, ~(gd->ram_size - 1) | 1 );
+
+       out32r( PCIX0_BAR0, 0 );
+
+       /*--------------------------------------------------------------------------+
+        * Program the board's subsystem id/vendor id
+        *--------------------------------------------------------------------------*/
+       out16r( PCIX0_SBSYSVID, CFG_PCI_SUBSYS_VENDORID );
+       out16r( PCIX0_SBSYSID, CFG_PCI_SUBSYS_DEVICEID );
+
+       out16r( PCIX0_CMD, in16r(PCIX0_CMD) | PCI_COMMAND_MEMORY );
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+
+
+/*************************************************************************
+ *  is_pci_host
+ *
+ *     This routine is called to determine if a pci scan should be
+ *     performed. With various hardware environments (especially cPCI and
+ *     PPMC) it's insufficient to depend on the state of the arbiter enable
+ *     bit in the strap register, or generic host/adapter assumptions.
+ *
+ *     Rather than hard-code a bad assumption in the general 440 code, the
+ *     440 pci code requires the board to decide at runtime.
+ *
+ *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ *
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int is_pci_host(struct pci_controller *hose)
+{
+       return  1;
+}
+#endif                         /* defined(CONFIG_PCI) */
+
+
+/*************************************************************************
+ *  hw_watchdog_reset
+ *
+ *     This routine is called to reset (keep alive) the watchdog timer
+ *
+ ************************************************************************/
+#if defined(CONFIG_HW_WATCHDOG)
+void hw_watchdog_reset(void)
+{
+}
+#endif
+
+
+/*************************************************************************
+ *  int on_off()
+ *
+ ************************************************************************/
+static int on_off( const char *s )
+{
+       if (strcmp(s, "on") == 0) {
+               return  1;
+       } else if (strcmp(s, "off") == 0) {
+               return  0;
+       }
+       return  -1;
+}
+
+
+/*************************************************************************
+ *  void l2cache_disable()
+ *
+ ************************************************************************/
+static void l2cache_disable(void)
+{
+       mtdcr( l2_cache_cfg, 0 );
+}
+
+
+/*************************************************************************
+ *  void l2cache_enable()
+ *
+ ************************************************************************/
+static void l2cache_enable(void)       /* see p258 7.4.1 Enabling L2 Cache */
+{
+       mtdcr( l2_cache_cfg, 0x80000000 );      /* enable L2_MODE L2_CFG[L2M] */
+
+       mtdcr( l2_cache_addr, 0 );              /* set L2_ADDR with all zeros */
+
+       mtdcr( l2_cache_cmd, 0x80000000 );      /* issue HCLEAR command via L2_CMD */
+
+       while (!(mfdcr( l2_cache_stat ) & 0x80000000 ))  ;; /* poll L2_SR for completion */
+
+       mtdcr( l2_cache_cmd, 0x10000000 );      /* clear cache errors L2_CMD[CCP] */
+
+       mtdcr( l2_cache_cmd, 0x08000000 );      /* clear tag errors L2_CMD[CTE] */
+
+       mtdcr( l2_cache_snp0, 0 );              /* snoop registers */
+       mtdcr( l2_cache_snp1, 0 );
+
+       __asm__ volatile ("sync");              /* msync */
+
+       mtdcr( l2_cache_cfg, 0xe0000000 );      /* inst and data use L2 */
+
+       __asm__ volatile ("sync");
+}
+
+
+/*************************************************************************
+ *  int l2cache_status()
+ *
+ ************************************************************************/
+static int l2cache_status(void)
+{
+       return  (mfdcr( l2_cache_cfg ) & 0x60000000) != 0;
+}
+
+
+/*************************************************************************
+ *  int do_l2cache()
+ *
+ ************************************************************************/
+int do_l2cache( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] )
+{
+       switch (argc) {
+       case 2:                 /* on / off     */
+               switch (on_off(argv[1])) {
+               case 0: l2cache_disable();
+                       break;
+               case 1: l2cache_enable();
+                       break;
+               }
+               /* FALL TROUGH */
+       case 1:                 /* get status */
+               printf ("L2 Cache is %s\n",
+                       l2cache_status() ? "ON" : "OFF");
+               return 0;
+       default:
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       return  0;
+}
+
+
+U_BOOT_CMD(
+       l2cache,   2,   1,     do_l2cache,
+       "l2cache  - enable or disable L2 cache\n",
+       "[on, off]\n"
+       "    - enable or disable L2 cache\n"
+       );
diff --git a/board/amcc/luan/u-boot.lds b/board/amcc/luan/u-boot.lds
new file mode 100644 (file)
index 0000000..d122f49
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * (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)
+    board/amcc/luan/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)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 5543a4eabd2a7dfc381117c4d5d5f14963ae33bb..9e1833591a2337129b5a90001069f1377677ab57 100644 (file)
@@ -22,7 +22,7 @@
 #
 
 #
-# IBM 440GX Reference Platform (Ocotea) board
+# AMCC 440GX Reference Platform (Ocotea) board
 #
 
 #TEXT_BASE = 0xFFFE0000
index 5f436eaeee98992c92e2eab974f2773f7649ddc7..d1a29c52a513787b4f48f1365dd2153d682c7aaa 100644 (file)
@@ -28,7 +28,7 @@
 #include "ocotea.h"
 #include <asm/processor.h>
 #include <spd_sdram.h>
-#include <440gx_enet.h>
+#include <ppc4xx_enet.h>
 
 #define BOOT_SMALL_FLASH       32      /* 00100000 */
 #define FLASH_ONBD_N           2       /* 00000010 */
@@ -186,10 +186,7 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       sys_info_t sysinfo;
-       unsigned char *s = getenv ("serial#");
-
-       get_sys_info (&sysinfo);
+       char *s = getenv ("serial#");
 
        printf ("Board: Ocotea - AMCC PPC440GX Evaluation Board");
        if (s != NULL) {
@@ -198,11 +195,6 @@ int checkboard (void)
        }
        putc ('\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);
        return (0);
 }
 
@@ -506,6 +498,15 @@ void fpga_init(void)
                }
        }
 
+       /*
+        * new Ocotea with Rev. F (pass 3) chips has SMII PHY reset
+        */
+       if ((in8(FPGA_REG0) & FPGA_REG0_ECLS_MASK) == FPGA_REG0_ECLS_VER2) {
+               out8(FPGA_REG2, in8(FPGA_REG2) & ~FPGA_REG2_SMII_RESET_DISABLE);
+               udelay(10000);
+               out8(FPGA_REG2, in8(FPGA_REG2) | FPGA_REG2_SMII_RESET_DISABLE);
+       }
+
        /* Turn off the LED's */
        out8(FPGA_REG3, (in8(FPGA_REG3) & ~FPGA_REG3_STAT_MASK) |
             FPGA_REG3_STAT_LED8_DISAB | FPGA_REG3_STAT_LED4_DISAB |
index 41bd4500d67d1524a631415daf50f6cb380d5961..95ce1fd3512f51ef18ae806c52b8381e7e3caff1 100644 (file)
@@ -80,6 +80,7 @@
 #define   FPGA_REG2_EXT_INTFACE_MASK      0x04
 #define   FPGA_REG2_EXT_INTFACE_ENABLE    0x00
 #define   FPGA_REG2_EXT_INTFACE_DISABLE   0x04
+#define   FPGA_REG2_SMII_RESET_DISABLE    0x02   /*Use on Ocotea pass 3 boards*/
 #define   FPGA_REG2_DEFAULT_UART1_N       0x01
 #define FPGA_REG3                       (CFG_FPGA_BASE + 0x03)
 #define   FPGA_REG3_GIGABIT_RESET_DISABLE 0x80   /*Use on Ocotea pass 1 boards*/
index a9852461e10754c380a83fa483041779e2d1e6ae..316fee88c03e5dcb84605436d5f673d65543c6c4 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
index 7107880887435cb25aa95143576d4e2c32b327be..1dcbab5a2442abf22b7b44318447c52ee855322d 100644 (file)
@@ -68,7 +68,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -88,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -120,11 +120,13 @@ SECTIONS
   _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 = .;
index 9fca0a60d0e88b76b0e089faef81b751859b2aa0..f1a96a6e7d23a9c90209ccb7caa66d32b74548ef 100644 (file)
@@ -67,7 +67,7 @@ int board_early_init_f(void)
  */
 int checkboard(void)
 {
-       unsigned char *s = getenv("serial#");
+       char *s = getenv("serial#");
        uint pvr = get_pvr();
 
        if (pvr == PVR_405GPR_RB) {
index 5654f91a83513402b92ca853e836ed08209312b9..47116d3674691a1389f37d6ede0ddedeb3c55420 100644 (file)
@@ -26,7 +26,6 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   = $(BOARD).o
-OBJS   += flash.o
 SOBJS  = init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
diff --git a/board/amcc/yellowstone/flash.c b/board/amcc/yellowstone/flash.c
deleted file mode 100644 (file)
index cd6a2e6..0000000
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * (C) Copyright 2002-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * (C) Copyright 2002 Jun Gu <jung@artesyncp.com>
- * Add support for Am29F016D and dynamic switch setting.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/*
- * Modified 4/5/2001
- * Wait for completion of each sector erase command issued
- * 4/5/2001
- * Chris Hallinan - DS4.COM, Inc. - clh@net1plus.com
- */
-
-/*
- * Ported to XPedite1000, 1/2 mb boot flash only
- * Travis B. Sawyer, <travis.sawyer@sandburst.com>
- */
-
-#include <common.h>
-#include <ppc4xx.h>
-#include <asm/processor.h>
-
-#undef DEBUG
-#ifdef DEBUG
-#define DEBUGF(x...) printf(x)
-#else
-#define DEBUGF(x...)
-#endif                         /* DEBUG */
-
-#define BOOT_SMALL_FLASH       32      /* 00100000 */
-#define FLASH_ONBD_N           2       /* 00000010 */
-#define FLASH_SRAM_SEL         1       /* 00000001 */
-
-#define BOOT_SMALL_FLASH_VAL   4
-#define FLASH_ONBD_N_VAL       2
-#define FLASH_SRAM_SEL_VAL     1
-
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips   */
-
-unsigned long flash_addr_table[512][CFG_MAX_FLASH_BANKS] = {
-       {0xfe000000}
-
-};
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static ulong flash_get_size(vu_long * addr, flash_info_t * info);
-static int write_word(flash_info_t * info, ulong dest, ulong data);
-
-#define ADDR0          0xaaaa
-#define ADDR1          0x5554
-#define FLASH_WORD_SIZE unsigned short
-
-/*-----------------------------------------------------------------------
- */
-
-unsigned long flash_init(void)
-{
-       unsigned long total_b = 0;
-       unsigned long size_b[CFG_MAX_FLASH_BANKS];
-       unsigned short index = 0;
-       int i;
-
-       DEBUGF("\n");
-       DEBUGF("FLASH: Index: %d\n", index);
-
-       /* Init: no FLASHes known */
-       for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) {
-               flash_info[i].flash_id = FLASH_UNKNOWN;
-               flash_info[i].sector_count = -1;
-               flash_info[i].size = 0;
-
-               /* check whether the address is 0 */
-               if (flash_addr_table[index][i] == 0) {
-                       continue;
-               }
-
-               /* call flash_get_size() to initialize sector address */
-               size_b[i] = flash_get_size((vu_long *)
-                                          flash_addr_table[index][i],
-                                          &flash_info[i]);
-               flash_info[i].size = size_b[i];
-               if (flash_info[i].flash_id == FLASH_UNKNOWN) {
-                       printf
-                           ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",
-                            i, size_b[i], size_b[i] << 20);
-                       flash_info[i].sector_count = -1;
-                       flash_info[i].size = 0;
-               }
-
-               total_b += flash_info[i].size;
-       }
-
-       /* FLASH protect Monitor */
-       flash_protect(FLAG_PROTECT_SET,
-                     CFG_MONITOR_BASE, 0xFFFFFFFF, &flash_info[0]);
-
-       return total_b;
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info(flash_info_t * info)
-{
-       int i;
-       int k;
-       int size;
-       int erased;
-       volatile unsigned long *flash;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_AMD:
-               printf("AMD ");
-               break;
-       case FLASH_MAN_FUJ:
-               printf("FUJITSU ");
-               break;
-       case FLASH_MAN_SST:
-               printf("SST ");
-               break;
-       default:
-               printf("Unknown Vendor ");
-               break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_AMD016:
-               printf("AM29F016D (16 Mbit, uniform sector size)\n");
-               break;
-       case FLASH_AM040:
-               printf("AM29F040 (512 Kbit, uniform sector size)\n");
-               break;
-       case FLASH_AM400B:
-               printf("AM29LV400B (4 Mbit, bottom boot sect)\n");
-               break;
-       case FLASH_AM400T:
-               printf("AM29LV400T (4 Mbit, top boot sector)\n");
-               break;
-       case FLASH_AM800B:
-               printf("AM29LV800B (8 Mbit, bottom boot sect)\n");
-               break;
-       case FLASH_AM800T:
-               printf("AM29LV800T (8 Mbit, top boot sector)\n");
-               break;
-       case FLASH_AM160B:
-               printf("AM29LV160B (16 Mbit, bottom boot sect)\n");
-               break;
-       case FLASH_AM160T:
-               printf("AM29LV160T (16 Mbit, top boot sector)\n");
-               break;
-       case FLASH_AM320B:
-               printf("AM29LV320B (32 Mbit, bottom boot sect)\n");
-               break;
-       case FLASH_AM320T:
-               printf("AM29LV320T (32 Mbit, top boot sector)\n");
-               break;
-       case FLASH_SST800A:
-               printf("SST39LF/VF800 (8 Mbit, uniform sector size)\n");
-               break;
-       case FLASH_SST160A:
-               printf("SST39LF/VF160 (16 Mbit, uniform sector size)\n");
-               break;
-       default:
-               printf("Unknown Chip Type\n");
-               break;
-       }
-
-       printf("  Size: %ld KB in %d Sectors\n",
-              info->size >> 10, info->sector_count);
-
-       printf("  Sector Start Addresses:");
-       for (i = 0; i < info->sector_count; ++i) {
-               /*
-                * Check if whole sector is erased
-                */
-               if (i != (info->sector_count - 1))
-                       size = info->start[i + 1] - info->start[i];
-               else
-                       size = info->start[0] + info->size - info->start[i];
-               erased = 1;
-               flash = (volatile unsigned long *)info->start[i];
-               size = size >> 2;       /* divide by 4 for longword access */
-               for (k = 0; k < size; k++) {
-                       if (*flash++ != 0xffffffff) {
-                               erased = 0;
-                               break;
-                       }
-               }
-
-               if ((i % 5) == 0)
-                       printf("\n   ");
-               printf(" %08lX%s%s",
-                      info->start[i],
-                      erased ? " E" : "  ", info->protect[i] ? "RO " : "   ");
-       }
-       printf("\n");
-       return;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-/*-----------------------------------------------------------------------
- */
-
-/*
- * The following code cannot be run from FLASH!
- */
-static ulong flash_get_size(vu_long * addr, flash_info_t * info)
-{
-       short i;
-       FLASH_WORD_SIZE value;
-       ulong base = (ulong) addr;
-       volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *) addr;
-
-       DEBUGF("FLASH ADDR: %08x\n", (unsigned)addr);
-
-       /* Write auto select command: read Manufacturer ID */
-       udelay(10000);
-       *(FLASH_WORD_SIZE *) ((int)addr + ADDR0) = (FLASH_WORD_SIZE) 0x00AA;
-       udelay(1000);
-       *(FLASH_WORD_SIZE *) ((int)addr + ADDR1) = (FLASH_WORD_SIZE) 0x0055;
-       udelay(1000);
-       *(FLASH_WORD_SIZE *) ((int)addr + ADDR0) = (FLASH_WORD_SIZE) 0x0090;
-       udelay(1000);
-
-       value = addr2[0];
-
-       DEBUGF("FLASH MANUFACT: %x\n", value);
-
-       switch (value) {
-       case (FLASH_WORD_SIZE) AMD_MANUFACT:
-               info->flash_id = FLASH_MAN_AMD;
-               break;
-       case (FLASH_WORD_SIZE) FUJ_MANUFACT:
-               info->flash_id = FLASH_MAN_FUJ;
-               break;
-       case (FLASH_WORD_SIZE) SST_MANUFACT:
-               info->flash_id = FLASH_MAN_SST;
-               break;
-       case (FLASH_WORD_SIZE) STM_MANUFACT:
-               info->flash_id = FLASH_MAN_STM;
-               break;
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               info->sector_count = 0;
-               info->size = 0;
-               return (0);     /* no or unknown flash  */
-       }
-
-#ifdef CONFIG_ADCIOP
-       value = addr2[0];       /* device ID            */
-       debug("\ndev_code=%x\n", value);
-#else
-       value = addr2[1];       /* device ID            */
-#endif
-
-       DEBUGF("\nFLASH DEVICEID: %x\n", value);
-
-       info->flash_id = 0;
-       info->sector_count = CFG_MAX_FLASH_SECT;
-       info->size = 0x02000000;
-
-       /* set up sector start address table */
-       for (i = 0; i < info->sector_count; i++) {
-               info->start[i] = (int)base + (i * 0x00020000);
-               info->protect[i] = 0;
-       }
-
-       *(FLASH_WORD_SIZE *) ((int)addr) = (FLASH_WORD_SIZE) 0x00F0;    /* reset bank */
-
-       return (info->size);
-}
-
-int wait_for_DQ7(flash_info_t * info, int sect)
-{
-       ulong start, now, last;
-       volatile FLASH_WORD_SIZE *addr =
-           (FLASH_WORD_SIZE *) (info->start[sect]);
-
-       start = get_timer(0);
-       last = start;
-       while ((addr[0] & (FLASH_WORD_SIZE) 0x00800080) !=
-              (FLASH_WORD_SIZE) 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;
-               }
-       }
-       return 0;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-int flash_erase(flash_info_t * info, int s_first, int s_last)
-{
-       volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *) (info->start[0]);
-       volatile FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
-
-       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) {
-               printf("Can't erase unknown flash type - aborted\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");
-       }
-
-       l_sect = -1;
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect <= s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
-                       addr2 = (FLASH_WORD_SIZE *) (info->start[sect]);
-                       printf("Erasing sector %p\n", addr2);
-                       *(FLASH_WORD_SIZE *) ((int)addr + ADDR0) =
-                           (FLASH_WORD_SIZE) 0x00AA;
-                       asm("sync");
-                       asm("isync");
-                       *(FLASH_WORD_SIZE *) ((int)addr + ADDR1) =
-                           (FLASH_WORD_SIZE) 0x0055;
-                       asm("sync");
-                       asm("isync");
-                       *(FLASH_WORD_SIZE *) ((int)addr + ADDR0) =
-                           (FLASH_WORD_SIZE) 0x0080;
-                       asm("sync");
-                       asm("isync");
-                       *(FLASH_WORD_SIZE *) ((int)addr + ADDR0) =
-                           (FLASH_WORD_SIZE) 0x00AA;
-                       asm("sync");
-                       asm("isync");
-                       *(FLASH_WORD_SIZE *) ((int)addr + ADDR1) =
-                           (FLASH_WORD_SIZE) 0x0055;
-                       asm("sync");
-                       asm("isync");
-                       addr2[0] = (FLASH_WORD_SIZE) 0x00300030;        /* sector erase */
-                       asm("sync");
-                       asm("isync");
-
-                       l_sect = sect;
-                       /*
-                        * Wait for each sector to complete, it's more
-                        * reliable.  According to AMD Spec, you must
-                        * issue all erase commands within a specified
-                        * timeout.  This has been seen to fail, especially
-                        * if printf()s are included (for debug)!!
-                        */
-                       wait_for_DQ7(info, sect);
-               }
-       }
-
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts();
-
-       /* wait at least 80us - let's wait 1 ms */
-       udelay(1000);
-
-#if 0
-       /*
-        * We wait for the last triggered sector
-        */
-       if (l_sect < 0)
-               goto DONE;
-       wait_for_DQ7(info, l_sect);
-
-      DONE:
-#endif
-       /* reset to read mode */
-       addr = (FLASH_WORD_SIZE *) info->start[0];
-       addr[0] = (FLASH_WORD_SIZE) 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)
-{
-       ulong cp, wp, data;
-       int i, l, rc;
-       ulong status_value = 0;
-
-       wp = (addr & ~3);       /* get lower word aligned address */
-
-       /*
-        * handle unaligned start bytes
-        */
-       if ((l = addr - wp) != 0) {
-               data = 0;
-               for (i = 0, cp = wp; i < l; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-               for (; i < 4 && cnt > 0; ++i) {
-                       data = (data << 8) | *src++;
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt == 0 && i < 4; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-
-               if ((rc = write_word(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               wp += 4;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       while (cnt >= 4) {
-
-               /*print status if needed */
-               if ((wp >= (status_value + 0x20000))
-                   && (status_value < 0xFFFE0000)) {
-                       status_value = wp;
-                       printf("writing to sector 0x%X\n", status_value);
-               }
-
-               data = 0;
-               for (i = 0; i < 4; ++i) {
-                       data = (data << 8) | *src++;
-               }
-               if ((rc = write_word(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               wp += 4;
-               cnt -= 4;
-       }
-
-       if (cnt == 0) {
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i = 0, cp = wp; i < 4 && cnt > 0; ++i, ++cp) {
-               data = (data << 8) | *src++;
-               --cnt;
-       }
-       for (; i < 4; ++i, ++cp) {
-               data = (data << 8) | (*(uchar *) cp);
-       }
-
-       return (write_word(info, wp, data));
-}
-
-/*-----------------------------------------------------------------------
- * Write a word to Flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-static int write_word(flash_info_t * info, ulong dest, ulong data)
-{
-       vu_long *addr2 = (vu_long *) (info->start[0]);
-       volatile FLASH_WORD_SIZE *dest2 = (FLASH_WORD_SIZE *) dest;
-       volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *) & data;
-       ulong start;
-       int i;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*((volatile FLASH_WORD_SIZE *)dest) &
-            (FLASH_WORD_SIZE) data) != (FLASH_WORD_SIZE) data) {
-               return (2);
-       }
-
-       for (i = 0; i < 4 / sizeof(FLASH_WORD_SIZE); i++) {
-               int flag;
-
-               /* Disable interrupts which might cause a timeout here */
-               flag = disable_interrupts();
-
-               *(FLASH_WORD_SIZE *) ((int)addr2 + ADDR0) =
-                   (FLASH_WORD_SIZE) 0x00AA;
-               asm("sync");
-               asm("isync");
-               *(FLASH_WORD_SIZE *) ((int)addr2 + ADDR1) =
-                   (FLASH_WORD_SIZE) 0x0055;
-               asm("sync");
-               asm("isync");
-               *(FLASH_WORD_SIZE *) ((int)addr2 + ADDR0) =
-                   (FLASH_WORD_SIZE) 0x00A0;
-               asm("sync");
-               asm("isync");
-
-               dest2[i] = data2[i];
-
-               /* re-enable interrupts if necessary */
-               if (flag)
-                       enable_interrupts();
-
-               /* data polling for D7 */
-               start = get_timer(0);
-               while ((dest2[i] & (FLASH_WORD_SIZE) 0x00800080) !=
-                      (data2[i] & (FLASH_WORD_SIZE) 0x00800080)) {
-
-                       if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
-                               return (1);
-                       }
-               }
-       }
-
-       return (0);
-}
-
-/*-----------------------------------------------------------------------
- */
index 7ba43c7b0610d8dba9234dc46664f5f4273acf88..425ad0868f8950438b63e71de6db0f64f1649432 100644 (file)
 
 tlbtab:
     tlbtab_start
-       /*
-               0xf0000000 must be first, before relocation SA_I must be off to use the
-           dcache as stack. It is patched after relocation to enable SA_I
-       */
-    tlbentry( 0xf0000000, SZ_256M, 0xf0000000, 0, AC_R|AC_W|AC_X|SA_G/*|SA_I*/)
-    tlbentry( CFG_SDRAM_BASE, SZ_256M, 0x00000000, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
-    tlbentry( CFG_PCI_BASE, SZ_256M, 0xE0000000, 0, AC_R|AC_W|SA_G|SA_I )
-    tlbentry( CFG_NVRAM_BASE_ADDR, SZ_16K, 0x80000000, 0, AC_R|AC_W|AC_X|SA_W|SA_I )
+
+    /*
+     * 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, 0, AC_R|AC_W|AC_X|SA_G/*|SA_I*/)
+
+    /* 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_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+    tlbentry( CFG_PCI_BASE, SZ_256M, CFG_PCI_BASE, 0, AC_R|AC_W|SA_G|SA_I )
+    tlbentry( CFG_NVRAM_BASE_ADDR, SZ_256M, CFG_NVRAM_BASE_ADDR, 0, AC_R|AC_W|AC_X|SA_W|SA_I )
 
     /* PCI */
     tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 0, AC_R|AC_W|SA_G|SA_I )
index 769eed3ef7d688c38b6d8a19f89618dc27990a8a..a0ba44de889e76704e512364da933efae1fddb07 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
index a6b81e6008a9acda3c95f2bd799d9340189f77f1..8ddf910c8e4e37264ab8e4f292bc9abb3da241f1 100644 (file)
  */
 
 #include <common.h>
+#include <ppc4xx.h>
 #include <asm/processor.h>
 #include <spd_sdram.h>
 
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips   */
+
 int board_early_init_f(void)
 {
        register uint reg;
@@ -35,7 +38,7 @@ int board_early_init_f(void)
        mtdcr(ebccfgd, reg | 0x04000000);       /* Set ATC */
 
        mtebc(pb0ap, 0x03017300);       /* FLASH/SRAM */
-       mtebc(pb0cr, 0xfe0ba000);       /* BAS=0xfe0 32MB r/w 16-bit */
+       mtebc(pb0cr, 0xfc0da000);       /* BAS=0xfc0 64MB r/w 16-bit */
 
        mtebc(pb1ap, 0x00000000);
        mtebc(pb1cr, 0x00000000);
@@ -52,33 +55,14 @@ int board_early_init_f(void)
        mtebc(pb5ap, 0x00000000);
        mtebc(pb5cr, 0x00000000);
 
-       /*--------------------------------------------------------------------
-        * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
-       mtdcr(uic0sr, 0xffffffff);      /* clear all */
-       mtdcr(uic0er, 0x00000000);      /* disable all */
-       mtdcr(uic0cr, 0x00000009);      /* ATI & 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 */
-
        /*--------------------------------------------------------------------
         * Setup the GPIO pins
         *-------------------------------------------------------------------*/
        /*CPLD cs */
-       /*setup Address lines for flash sizes larger than 16Meg. */
-       out32(GPIO0_OSRL, in32(GPIO0_OSRL) | 0x40010000);
-       out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x40010000);
-       out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x40000000);
+       /*setup Address lines for flash size 64Meg. */
+       out32(GPIO0_OSRL, in32(GPIO0_OSRL) | 0x50010000);
+       out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x50010000);
+       out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x50000000);
 
        /*setup emac */
        out32(GPIO0_TCR, in32(GPIO0_TCR) | 0xC080);
@@ -92,12 +76,38 @@ int board_early_init_f(void)
        out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x00080000);
        out32(GPIO1_ISR2L, in32(GPIO1_ISR2L) | 0x00010000);
 
+       /* external interrupts IRQ0...3 */
+       out32(GPIO1_TCR, in32(GPIO1_TCR) & ~0x0f000000);
+       out32(GPIO1_TSRL, in32(GPIO1_TSRL) & ~0x00005500);
+       out32(GPIO1_ISR1L, in32(GPIO1_ISR1L) | 0x00005500);
+
+#if 0 /* test-only */
        /*setup USB 2.0 */
        out32(GPIO1_TCR, in32(GPIO1_TCR) | 0xc0000000);
        out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x50000000);
        out32(GPIO0_TCR, in32(GPIO0_TCR) | 0xf);
        out32(GPIO0_OSRH, in32(GPIO0_OSRH) | 0xaa);
        out32(GPIO0_ISR2H, in32(GPIO0_ISR2H) | 0x00000500);
+#endif
+
+       /*--------------------------------------------------------------------
+        * Setup the interrupt controller polarities, triggers, etc.
+        *-------------------------------------------------------------------*/
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000009);      /* ATI & 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 */
 
        /*--------------------------------------------------------------------
         * Setup other serial configuration
@@ -113,28 +123,80 @@ int board_early_init_f(void)
        /*enable ethernet */
        *(unsigned char *)(CFG_BCSR_BASE | 0x08) = 0xf0;
 
+#if 0 /* test-only */
        /*enable usb 1.1 fs device and remove usb 2.0 reset */
        *(unsigned char *)(CFG_BCSR_BASE | 0x09) = 0x00;
+#endif
 
        /*get rid of flash write protect */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x40;
+       *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x00;
+
+       return 0;
+}
+
+int misc_init_r (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       uint pbcr;
+       int size_val = 0;
+
+       /* Re-do sizing to get full correct info */
+       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);
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       /* Monitor protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           -CFG_MONITOR_LEN,
+                           0xffffffff,
+                           &flash_info[0]);
 
        return 0;
 }
 
 int checkboard(void)
 {
-       sys_info_t sysinfo;
+       char *s = getenv("serial#");
 
-       get_sys_info(&sysinfo);
+       printf("Board: Yellowstone - AMCC PPC440GR Evaluation Board");
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
 
-       printf("Board: AMCC YELLOWSTONE\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("\tPER: %lu MHz\n", sysinfo.freqEPB / 1000000);
-       printf("\tPCI: %lu MHz\n", sysinfo.freqPCI / 1000000);
        return (0);
 }
 
@@ -145,9 +207,85 @@ int checkboard(void)
  *              PLB @ 133 MHz
  *
  ************************************************************************/
+#define NUM_TRIES 64
+#define NUM_READS 10
+
+void sdram_tr1_set(int ram_address, int* tr1_value)
+{
+       int i;
+       int j, k;
+       volatile unsigned int* ram_pointer =  (unsigned int*)ram_address;
+       int first_good = -1, last_bad = 0x1ff;
+
+       unsigned long 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 };
+
+       /* go through all possible SDRAM0_TR1[RDCT] values */
+       for (i=0; i<=0x1ff; i++) {
+               /* set the current value for TR1 */
+               mtsdram(mem_tr1, (0x80800800 | i));
+
+               /* 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;
+                       }
+               }
+
+               /* we have a SDRAM0_TR1[RDCT] that is part of the window */
+               if (j == NUM_TRIES) {
+                       if (first_good == -1)
+                               first_good = i;         /* found beginning of window */
+               } else { /* bad read */
+                       /* if we have not had a good read then don't care */
+                       if(first_good != -1) {
+                               /* first failure after a good read */
+                               last_bad = i-1;
+                               break;
+                       }
+               }
+       }
+
+       /* return the current value for TR1 */
+       *tr1_value = (first_good + last_bad) / 2;
+}
+
 void sdram_init(void)
 {
        register uint reg;
+       int tr1_bank1, tr1_bank2;
 
        /*--------------------------------------------------------------------
         * Setup some default
@@ -159,7 +297,7 @@ void sdram_init(void)
        mtsdram(mem_wddctr, 0x40000000);        /* ?? */
 
        /*clear this first, if the DDR is enabled by a debugger
-          then you can not make changes. */
+         then you can not make changes. */
        mtsdram(mem_cfg0, 0x00000000);  /* Disable EEC */
 
        /*--------------------------------------------------------------------
@@ -170,8 +308,8 @@ void sdram_init(void)
         */
        mtsdram(mem_b0cr, 0x000a4001);  /* SDBA=0x000 128MB, Mode 3, enabled */
        mtsdram(mem_b1cr, 0x080a4001);  /* SDBA=0x080 128MB, Mode 3, enabled */
+
        mtsdram(mem_tr0, 0x410a4012);   /* ?? */
-       mtsdram(mem_tr1, 0x8080080b);   /* ?? */
        mtsdram(mem_rtr, 0x04080000);   /* ?? */
        mtsdram(mem_cfg1, 0x00000000);  /* Self-refresh exit, disable PM    */
        mtsdram(mem_cfg0, 0x34000000);  /* Disable EEC */
@@ -187,6 +325,10 @@ void sdram_init(void)
                if (reg & 0x80000000)
                        break;
        }
+
+       sdram_tr1_set(0x00000000, &tr1_bank1);
+       sdram_tr1_set(0x08000000, &tr1_bank2);
+       mtsdram(mem_tr1, (((tr1_bank1+tr1_bank2)/2) | 0x80800800) );
 }
 
 /*************************************************************************
@@ -252,41 +394,29 @@ int testdram(void)
 #if defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT)
 int pci_pre_init(struct pci_controller *hose)
 {
-       unsigned long strap;
        unsigned long addr;
 
-       /*--------------------------------------------------------------------------+
-     * Bamboo is always configured as the host & requires the
-     * PCI arbiter to be enabled.
-        *--------------------------------------------------------------------------*/
-       mfsdr(sdr_sdstp1, strap);
-       if ((strap & SDR0_SDSTP1_PAE_MASK) == 0) {
-               printf("PCI: SDR0_STRP1[PAE] not set.\n");
-               printf("PCI: Configuration aborted.\n");
-               return 0;
-       }
-
-    /*-------------------------------------------------------------------------+
-    | Set priority for all PLB3 devices to 0.
-    | Set PLB3 arbiter to fair mode.
-    +-------------------------------------------------------------------------*/
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB3 devices to 0.
+         | Set PLB3 arbiter to fair mode.
+         +-------------------------------------------------------------------------*/
        mfsdr(sdr_amp1, addr);
        mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb3_acr);
        mtdcr(plb3_acr, addr | 0x80000000);
 
-    /*-------------------------------------------------------------------------+
-    | Set priority for all PLB4 devices to 0.
-    +-------------------------------------------------------------------------*/
+       /*-------------------------------------------------------------------------+
+         | Set priority for all PLB4 devices to 0.
+         +-------------------------------------------------------------------------*/
        mfsdr(sdr_amp0, addr);
        mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
        mtdcr(plb4_acr, addr);
 
-    /*-------------------------------------------------------------------------+
-    | Set Nebula PLB4 arbiter to fair mode.
-    +-------------------------------------------------------------------------*/
-       /*  Segment0 */
+       /*-------------------------------------------------------------------------+
+         | 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;
@@ -318,13 +448,13 @@ void pci_target_init(struct pci_controller *hose)
        /*--------------------------------------------------------------------------+
         * Set up Direct MMIO registers
         *--------------------------------------------------------------------------*/
-   /*--------------------------------------------------------------------------+
-   | PowerPC440 EP 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.
-   +--------------------------------------------------------------------------*/
+       /*--------------------------------------------------------------------------+
+         | PowerPC440 EP 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 */
@@ -374,11 +504,11 @@ void pci_master_init(struct pci_controller *hose)
 {
        unsigned short temp_short;
 
-   /*--------------------------------------------------------------------------+
-   | Write the PowerPC440 EP PCI Configuration regs.
-   |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
-   |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
-   +--------------------------------------------------------------------------*/
+       /*--------------------------------------------------------------------------+
+         | Write the PowerPC440 EP PCI Configuration regs.
+         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
+         +--------------------------------------------------------------------------*/
        pci_read_config_word(0, PCI_COMMAND, &temp_short);
        pci_write_config_word(0, PCI_COMMAND,
                              temp_short | PCI_COMMAND_MASTER |
@@ -418,5 +548,6 @@ int is_pci_host(struct pci_controller *hose)
 #if defined(CONFIG_HW_WATCHDOG)
 void hw_watchdog_reset(void)
 {
+
 }
 #endif
index 62dc988d934a98794601079cace39da1af888afa..a9a7b0af6abc32472295f56b3a2d1acf59afbcee 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
index b50e99ab8da481eb80082123acb79d15f1053edf..509d8e4cce422daa8c23f09dd2efe734a94f53da 100644 (file)
@@ -55,33 +55,14 @@ int board_early_init_f(void)
        mtebc(pb5ap, 0x00000000);
        mtebc(pb5cr, 0x00000000);
 
-       /*--------------------------------------------------------------------
-        * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
-       mtdcr(uic0sr, 0xffffffff);      /* clear all */
-       mtdcr(uic0er, 0x00000000);      /* disable all */
-       mtdcr(uic0cr, 0x00000009);      /* ATI & 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 */
-
        /*--------------------------------------------------------------------
         * Setup the GPIO pins
         *-------------------------------------------------------------------*/
        /*CPLD cs */
-       /*setup Address lines for flash sizes larger than 16Meg. */
-       out32(GPIO0_OSRL, in32(GPIO0_OSRL) | 0x40010000);
-       out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x40010000);
-       out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x40000000);
+       /*setup Address lines for flash size 64Meg. */
+       out32(GPIO0_OSRL, in32(GPIO0_OSRL) | 0x50010000);
+       out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x50010000);
+       out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x50000000);
 
        /*setup emac */
        out32(GPIO0_TCR, in32(GPIO0_TCR) | 0xC080);
@@ -95,6 +76,11 @@ int board_early_init_f(void)
        out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x00080000);
        out32(GPIO1_ISR2L, in32(GPIO1_ISR2L) | 0x00010000);
 
+       /* external interrupts IRQ0...3 */
+       out32(GPIO1_TCR, in32(GPIO1_TCR) & ~0x0f000000);
+       out32(GPIO1_TSRL, in32(GPIO1_TSRL) & ~0x00005500);
+       out32(GPIO1_ISR1L, in32(GPIO1_ISR1L) | 0x00005500);
+
        /*setup USB 2.0 */
        out32(GPIO1_TCR, in32(GPIO1_TCR) | 0xc0000000);
        out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x50000000);
@@ -102,6 +88,25 @@ int board_early_init_f(void)
        out32(GPIO0_OSRH, in32(GPIO0_OSRH) | 0xaa);
        out32(GPIO0_ISR2H, in32(GPIO0_ISR2H) | 0x00000500);
 
+       /*--------------------------------------------------------------------
+        * Setup the interrupt controller polarities, triggers, etc.
+        *-------------------------------------------------------------------*/
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000009);      /* ATI & 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 */
+
        /*--------------------------------------------------------------------
         * Setup other serial configuration
         *-------------------------------------------------------------------*/
@@ -120,7 +125,7 @@ int board_early_init_f(void)
        *(unsigned char *)(CFG_BCSR_BASE | 0x09) = 0x00;
 
        /*get rid of flash write protect */
-       *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x40;
+       *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x00;
 
        return 0;
 }
@@ -164,6 +169,10 @@ int misc_init_r (void)
        mtdcr(ebccfga, pb0cr);
        mtdcr(ebccfgd, pbcr);
 
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
        /* Monitor protection ON by default */
        (void)flash_protect(FLAG_PROTECT_SET,
                            -CFG_MONITOR_LEN,
@@ -175,18 +184,14 @@ int misc_init_r (void)
 
 int checkboard(void)
 {
-       sys_info_t sysinfo;
-
-       get_sys_info(&sysinfo);
-
-       printf("Board: AMCC YOSEMITE\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("\tPER: %lu MHz\n", sysinfo.freqEPB / 1000000);
-       printf("\tPCI: %lu MHz\n", sysinfo.freqPCI / 1000000);
+       char *s = getenv("serial#");
 
+       printf("Board: Yosemite - AMCC PPC440EP Evaluation Board");
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
 
        return (0);
 }
@@ -198,9 +203,85 @@ int checkboard(void)
  *              PLB @ 133 MHz
  *
  ************************************************************************/
+#define NUM_TRIES 64
+#define NUM_READS 10
+
+void sdram_tr1_set(int ram_address, int* tr1_value)
+{
+       int i;
+       int j, k;
+       volatile unsigned int* ram_pointer =  (unsigned int*)ram_address;
+       int first_good = -1, last_bad = 0x1ff;
+
+       unsigned long 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 };
+
+       /* go through all possible SDRAM0_TR1[RDCT] values */
+       for (i=0; i<=0x1ff; i++) {
+               /* set the current value for TR1 */
+               mtsdram(mem_tr1, (0x80800800 | i));
+
+               /* 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;
+                       }
+               }
+
+               /* we have a SDRAM0_TR1[RDCT] that is part of the window */
+               if (j == NUM_TRIES) {
+                       if (first_good == -1)
+                               first_good = i;         /* found beginning of window */
+               } else { /* bad read */
+                       /* if we have not had a good read then don't care */
+                       if(first_good != -1) {
+                               /* first failure after a good read */
+                               last_bad = i-1;
+                               break;
+                       }
+               }
+       }
+
+       /* return the current value for TR1 */
+       *tr1_value = (first_good + last_bad) / 2;
+}
+
 void sdram_init(void)
 {
        register uint reg;
+       int tr1_bank1, tr1_bank2;
 
        /*--------------------------------------------------------------------
         * Setup some default
@@ -212,7 +293,7 @@ void sdram_init(void)
        mtsdram(mem_wddctr, 0x40000000);        /* ?? */
 
        /*clear this first, if the DDR is enabled by a debugger
-          then you can not make changes. */
+         then you can not make changes. */
        mtsdram(mem_cfg0, 0x00000000);  /* Disable EEC */
 
        /*--------------------------------------------------------------------
@@ -225,7 +306,6 @@ void sdram_init(void)
        mtsdram(mem_b1cr, 0x080a4001);  /* SDBA=0x080 128MB, Mode 3, enabled */
 
        mtsdram(mem_tr0, 0x410a4012);   /* ?? */
-       mtsdram(mem_tr1, 0x8080080b);   /* ?? */
        mtsdram(mem_rtr, 0x04080000);   /* ?? */
        mtsdram(mem_cfg1, 0x00000000);  /* Self-refresh exit, disable PM    */
        mtsdram(mem_cfg0, 0x34000000);  /* Disable EEC */
@@ -241,6 +321,10 @@ void sdram_init(void)
                if (reg & 0x80000000)
                        break;
        }
+
+       sdram_tr1_set(0x00000000, &tr1_bank1);
+       sdram_tr1_set(0x08000000, &tr1_bank2);
+       mtsdram(mem_tr1, (((tr1_bank1+tr1_bank2)/2) | 0x80800800) );
 }
 
 /*************************************************************************
@@ -306,20 +390,8 @@ int testdram(void)
 #if defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT)
 int pci_pre_init(struct pci_controller *hose)
 {
-       unsigned long strap;
        unsigned long addr;
 
-       /*--------------------------------------------------------------------------+
-        *      Bamboo is always configured as the host & requires the
-        *      PCI arbiter to be enabled.
-        *--------------------------------------------------------------------------*/
-       mfsdr(sdr_sdstp1, strap);
-       if ((strap & SDR0_SDSTP1_PAE_MASK) == 0) {
-               printf("PCI: SDR0_STRP1[PAE] not set.\n");
-               printf("PCI: Configuration aborted.\n");
-               return 0;
-       }
-
        /*-------------------------------------------------------------------------+
          | Set priority for all PLB3 devices to 0.
          | Set PLB3 arbiter to fair mode.
diff --git a/board/amirix/ap1000/Makefile b/board/amirix/ap1000/Makefile
new file mode 100644 (file)
index 0000000..4e1ef21
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# (C) Copyright 2000
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o flash.o serial.o pci.o powerspan.o
+SOBJS  = init.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $^
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/amirix/ap1000/ap1000.c b/board/amirix/ap1000/ap1000.c
new file mode 100644 (file)
index 0000000..7d11b29
--- /dev/null
@@ -0,0 +1,699 @@
+/*
+ * amirix.c: ppcboot platform support for AMIRIX board
+ *
+ * Copyright 2002 Mind NV
+ * Copyright 2003 AMIRIX Systems Inc.
+ *
+ * http://www.mind.be/
+ * http://www.amirix.com/
+ *
+ * Author : Peter De Schrijver (p2@mind.be)
+ *          Frank Smith (smith@amirix.com)
+ *
+ * Derived from : Other platform support files in this tree, ml2
+ *
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License (GPL) version 2, incorporated herein by
+ * reference. Drivers based on or derived from this code fall under the GPL
+ * and must retain the authorship, copyright and this license notice. This
+ * file is not a complete program and may only be used when the entire
+ * program is licensed under the GPL.
+ *
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/processor.h>
+
+#include "powerspan.h"
+#include "ap1000.h"
+
+int board_pre_init (void)
+{
+       return 0;
+}
+
+/** serial number and platform display at startup */
+int checkboard (void)
+{
+       char *s = getenv ("serial#");
+       char *e;
+
+       /* After a loadace command, the SystemAce control register is left in a wonky state. */
+       /* this code did not work in board_pre_init */
+       unsigned char *p = (unsigned char *) AP1000_SYSACE_REGBASE;
+
+       p[SYSACE_CTRLREG0] = 0x0;
+
+       /* add platform and device to banner */
+       switch (get_device ()) {
+       case AP1xx_AP107_TARGET:
+               puts (AP1xx_AP107_TARGET_STR);
+               break;
+       case AP1xx_AP120_TARGET:
+               puts (AP1xx_AP120_TARGET_STR);
+               break;
+       case AP1xx_AP130_TARGET:
+               puts (AP1xx_AP130_TARGET_STR);
+               break;
+       case AP1xx_AP1070_TARGET:
+               puts (AP1xx_AP1070_TARGET_STR);
+               break;
+       case AP1xx_AP1100_TARGET:
+               puts (AP1xx_AP1100_TARGET_STR);
+               break;
+       default:
+               puts (AP1xx_UNKNOWN_STR);
+               break;
+       }
+       puts (AP1xx_TARGET_STR);
+       puts (" with ");
+
+       switch (get_platform ()) {
+       case AP100_BASELINE_PLATFORM:
+       case AP1000_BASELINE_PLATFORM:
+               puts (AP1xx_BASELINE_PLATFORM_STR);
+               break;
+       case AP1xx_QUADGE_PLATFORM:
+               puts (AP1xx_QUADGE_PLATFORM_STR);
+               break;
+       case AP1xx_MGT_REF_PLATFORM:
+               puts (AP1xx_MGT_REF_PLATFORM_STR);
+               break;
+       case AP1xx_STANDARD_PLATFORM:
+               puts (AP1xx_STANDARD_PLATFORM_STR);
+               break;
+       case AP1xx_DUAL_PLATFORM:
+               puts (AP1xx_DUAL_PLATFORM_STR);
+               break;
+       case AP1xx_BASE_SRAM_PLATFORM:
+               puts (AP1xx_BASE_SRAM_PLATFORM_STR);
+               break;
+       case AP1xx_PCI_PCB_TESTPLATFORM:
+       case AP1000_PCI_PCB_TESTPLATFORM:
+               puts (AP1xx_PCI_PCB_TESTPLATFORM_STR);
+               break;
+       case AP1xx_DUAL_GE_MEZZ_TESTPLATFORM:
+               puts (AP1xx_DUAL_GE_MEZZ_TESTPLATFORM_STR);
+               break;
+       case AP1xx_SFP_MEZZ_TESTPLATFORM:
+               puts (AP1xx_SFP_MEZZ_TESTPLATFORM_STR);
+               break;
+       default:
+               puts (AP1xx_UNKNOWN_STR);
+               break;
+       }
+
+       if ((get_platform () & AP1xx_TESTPLATFORM_MASK) != 0) {
+               puts (AP1xx_TESTPLATFORM_STR);
+       } else {
+               puts (AP1xx_PLATFORM_STR);
+       }
+
+       putc ('\n');
+
+       puts ("Serial#: ");
+
+       if (!s) {
+               printf ("### No HW ID - assuming AMIRIX");
+       } else {
+               for (e = s; *e; ++e) {
+                       if (*e == ' ')
+                               break;
+               }
+
+               for (; s < e; ++s) {
+                       putc (*s);
+               }
+       }
+
+       putc ('\n');
+
+       return (0);
+}
+
+
+long int initdram (int board_type)
+{
+       char *s = getenv ("dramsize");
+
+       if (s != NULL) {
+               if ((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))) {
+                       s += 2;
+               }
+               return (long int)simple_strtoul (s, NULL, 16);
+       } else {
+               /* give all 64 MB */
+               return 64 * 1024 * 1024;
+       }
+}
+
+unsigned int get_platform (void)
+{
+       unsigned int *revision_reg_ptr = (unsigned int *) AP1xx_FPGA_REV_ADDR;
+
+       return (*revision_reg_ptr & AP1xx_PLATFORM_MASK);
+}
+
+unsigned int get_device (void)
+{
+       unsigned int *revision_reg_ptr = (unsigned int *) AP1xx_FPGA_REV_ADDR;
+
+       return (*revision_reg_ptr & AP1xx_TARGET_MASK);
+}
+
+#if 0                          /* loadace is not working; it appears to be a hardware issue with the system ace. */
+/*
+   This function loads FPGA configurations from the SystemACE CompactFlash
+*/
+int do_loadace (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned char *p = (unsigned char *) AP1000_SYSACE_REGBASE;
+       int cfg;
+
+       if ((p[SYSACE_STATREG0] & 0x10) == 0) {
+               p[SYSACE_CTRLREG0] = 0x80;
+               printf ("\nNo CompactFlash Detected\n\n");
+               p[SYSACE_CTRLREG0] = 0x00;
+               return 1;
+       }
+
+       /* reset configuration controller: |  0x80 */
+       /* select cpflash                  & ~0x40 */
+       /* cfg start                       |  0x20 */
+       /* wait for cfgstart               & ~0x10 */
+       /* force cfgmode:                  |  0x08 */
+       /* do no force cfgaddr:            & ~0x04 */
+       /* clear mpulock:                  & ~0x02 */
+       /* do not force lock request       & ~0x01 */
+
+       p[SYSACE_CTRLREG0] = 0x80 | 0x20 | 0x08;
+       p[SYSACE_CTRLREG1] = 0x00;
+
+       /* force config address if arg2 exists */
+       if (argc == 2) {
+               cfg = simple_strtoul (argv[1], NULL, 10);
+
+               if (cfg > 7) {
+                       printf ("\nInvalid Configuration\n\n");
+                       p[SYSACE_CTRLREG0] = 0x00;
+                       return 1;
+               }
+               /* Set config address */
+               p[SYSACE_CTRLREG1] = (cfg << 5);
+               /* force cfgaddr */
+               p[SYSACE_CTRLREG0] |= 0x04;
+
+       } else {
+               cfg = (p[SYSACE_STATREG1] & 0xE0) >> 5;
+       }
+
+       /* release configuration controller */
+       printf ("\nLoading V2PRO with config %d...\n", cfg);
+       p[SYSACE_CTRLREG0] &= ~0x80;
+
+
+       while ((p[SYSACE_STATREG1] & 0x01) == 0) {
+
+               if (p[SYSACE_ERRREG0] & 0x80) {
+                       /* attempting to load an invalid configuration makes the cpflash */
+                       /* appear to be removed. Reset here to avoid that problem */
+                       p[SYSACE_CTRLREG0] = 0x80;
+                       printf ("\nConfiguration %d Read Error\n\n", cfg);
+                       p[SYSACE_CTRLREG0] = 0x00;
+                       return 1;
+               }
+       }
+
+       p[SYSACE_CTRLREG0] |= 0x20;
+
+       return 0;
+}
+#endif
+
+/** Console command to display and set the software reconfigure byte
+  * <pre>
+  * swconfig        - display the current value of the software reconfigure byte
+  * swconfig [#]    - change the software reconfigure byte to #
+  * </pre>
+  * @param  *cmdtp  [IN] as passed by run_command (ignored)
+  * @param  flag    [IN] as passed by run_command (ignored)
+  * @param  argc    [IN] as passed by run_command if 1, display, if 2 change
+  * @param  *argv[] [IN] contains the parameters to use
+  * @return
+  * <pre>
+  *      0 if passed
+  *     -1 if failed
+  * </pre>
+  */
+int do_swconfigbyte (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned char *sector_buffer = NULL;
+       unsigned char input_char;
+       int write_result;
+       unsigned int input_uint;
+
+       /* display value if no argument */
+       if (argc < 2) {
+               printf ("Software configuration byte is currently: 0x%02x\n",
+                       *((unsigned char *) (SW_BYTE_SECTOR_ADDR +
+                                            SW_BYTE_SECTOR_OFFSET)));
+               return 0;
+       } else if (argc > 3) {
+               printf ("Too many arguments\n");
+               return -1;
+       }
+
+       /* if 3 arguments, 3rd argument is the address to use */
+       if (argc == 3) {
+               input_uint = simple_strtoul (argv[1], NULL, 16);
+               sector_buffer = (unsigned char *) input_uint;
+       } else {
+               sector_buffer = (unsigned char *) DEFAULT_TEMP_ADDR;
+       }
+
+       input_char = simple_strtoul (argv[1], NULL, 0);
+       if ((input_char & ~SW_BYTE_MASK) != 0) {
+               printf ("Input of 0x%02x will be masked to 0x%02x\n",
+                       input_char, (input_char & SW_BYTE_MASK));
+               input_char = input_char & SW_BYTE_MASK;
+       }
+
+       memcpy (sector_buffer, (void *) SW_BYTE_SECTOR_ADDR,
+               SW_BYTE_SECTOR_SIZE);
+       sector_buffer[SW_BYTE_SECTOR_OFFSET] = input_char;
+
+
+       printf ("Erasing Flash...");
+       if (flash_sect_erase
+           (SW_BYTE_SECTOR_ADDR,
+            (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET))) {
+               return -1;
+       }
+
+       printf ("Writing to Flash... ");
+       write_result =
+               flash_write ((char *)sector_buffer, SW_BYTE_SECTOR_ADDR,
+                            SW_BYTE_SECTOR_SIZE);
+       if (write_result != 0) {
+               flash_perror (write_result);
+               return -1;
+       } else {
+               printf ("done\n");
+               printf ("Software configuration byte is now: 0x%02x\n",
+                       *((unsigned char *) (SW_BYTE_SECTOR_ADDR +
+                                            SW_BYTE_SECTOR_OFFSET)));
+       }
+
+       return 0;
+}
+
+#define ONE_SECOND 1000000
+
+int do_pause (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       int pause_time;
+       unsigned int delay_time;
+       int break_loop = 0;
+
+       /* display value if no argument */
+       if (argc < 2) {
+               pause_time = 1;
+       }
+
+       else if (argc > 2) {
+               printf ("Too many arguments\n");
+               return -1;
+       } else {
+               pause_time = simple_strtoul (argv[1], NULL, 0);
+       }
+
+       printf ("Pausing with a poll time of %d, press any key to reactivate\n", pause_time);
+       delay_time = pause_time * ONE_SECOND;
+       while (break_loop == 0) {
+               udelay (delay_time);
+               if (serial_tstc () != 0) {
+                       break_loop = 1;
+                       /* eat user key presses */
+                       while (serial_tstc () != 0) {
+                               serial_getc ();
+                       }
+               }
+       }
+
+       return 0;
+}
+
+int do_swreconfig (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       printf ("Triggering software reconfigure (software config byte is 0x%02x)...\n",
+               *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
+       udelay (1000);
+       *((unsigned char *) AP1000_CPLD_BASE) = 1;
+
+       return 0;
+}
+
+#define GET_DECIMAL(low_byte) ((low_byte >> 5) * 125)
+#define TEMP_BUSY_BIT   0x80
+#define TEMP_LHIGH_BIT  0x40
+#define TEMP_LLOW_BIT   0x20
+#define TEMP_EHIGH_BIT  0x10
+#define TEMP_ELOW_BIT   0x08
+#define TEMP_OPEN_BIT   0x04
+#define TEMP_ETHERM_BIT 0x02
+#define TEMP_LTHERM_BIT 0x01
+
+int do_temp_sensor (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       char cmd;
+       int ret_val = 0;
+       unsigned char temp_byte;
+       int temp;
+       int temp_low;
+       int low;
+       int low_low;
+       int high;
+       int high_low;
+       int therm;
+       unsigned char user_data[4] = { 0 };
+       int user_data_count = 0;
+       int ii;
+
+       if (argc > 1) {
+               cmd = argv[1][0];
+       } else {
+               cmd = 's';      /* default to status */
+       }
+
+       user_data_count = argc - 2;
+       for (ii = 0; ii < user_data_count; ii++) {
+               user_data[ii] = simple_strtoul (argv[2 + ii], NULL, 0);
+       }
+       switch (cmd) {
+       case 's':
+               if (I2CAccess
+                   (0x2, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Status    : 0x%02x  ", temp_byte);
+               if (temp_byte & TEMP_BUSY_BIT)
+                       printf ("BUSY ");
+
+               if (temp_byte & TEMP_LHIGH_BIT)
+                       printf ("LHIGH ");
+
+               if (temp_byte & TEMP_LLOW_BIT)
+                       printf ("LLOW ");
+
+               if (temp_byte & TEMP_EHIGH_BIT)
+                       printf ("EHIGH ");
+
+               if (temp_byte & TEMP_ELOW_BIT)
+                       printf ("ELOW ");
+
+               if (temp_byte & TEMP_OPEN_BIT)
+                       printf ("OPEN ");
+
+               if (temp_byte & TEMP_ETHERM_BIT)
+                       printf ("ETHERM ");
+
+               if (temp_byte & TEMP_LTHERM_BIT)
+                       printf ("LTHERM");
+
+               printf ("\n");
+
+               if (I2CAccess
+                   (0x3, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Config    : 0x%02x  ", temp_byte);
+
+               if (I2CAccess
+                   (0x4, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       printf ("\n");
+                       goto fail;
+               }
+               printf ("Conversion: 0x%02x\n", temp_byte);
+               if (I2CAccess
+                   (0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Cons Alert: 0x%02x  ", temp_byte);
+
+               if (I2CAccess
+                   (0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       printf ("\n");
+                       goto fail;
+               }
+               printf ("Therm Hyst: %d\n", temp_byte);
+
+               if (I2CAccess
+                   (0x0, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp = temp_byte;
+               if (I2CAccess
+                   (0x6, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low = temp_byte;
+               if (I2CAccess
+                   (0x5, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high = temp_byte;
+               if (I2CAccess
+                   (0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               therm = temp_byte;
+               printf ("Local Temp: %2d     Low: %2d     High: %2d     THERM: %2d\n", temp, low, high, therm);
+
+               if (I2CAccess
+                   (0x1, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp = temp_byte;
+               if (I2CAccess
+                   (0x10, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp_low = temp_byte;
+               if (I2CAccess
+                   (0x8, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low = temp_byte;
+               if (I2CAccess
+                   (0x14, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low_low = temp_byte;
+               if (I2CAccess
+                   (0x7, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high = temp_byte;
+               if (I2CAccess
+                   (0x13, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high_low = temp_byte;
+               if (I2CAccess
+                   (0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               therm = temp_byte;
+               if (I2CAccess
+                   (0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Ext Temp  : %2d.%03d Low: %2d.%03d High: %2d.%03d THERM: %2d Offset: %2d\n", temp, GET_DECIMAL (temp_low), low, GET_DECIMAL (low_low), high, GET_DECIMAL (high_low), therm, temp_byte);
+               break;
+       case 'l':               /* alter local limits : low, high, therm */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* low */
+               if (I2CAccess
+                   (0xC, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* high */
+                       if (I2CAccess
+                           (0xB, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* therm */
+                       if (I2CAccess
+                           (0x20, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       case 'e':               /* alter external limits: low, high, therm, offset */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* low */
+               if (I2CAccess
+                   (0xE, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* high */
+                       if (I2CAccess
+                           (0xD, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* therm */
+                       if (I2CAccess
+                           (0x19, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 3) {
+                       /* offset */
+                       if (I2CAccess
+                           (0x11, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[3],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       case 'c':               /* alter config settings: config, conv, cons alert, therm hyst */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* config */
+               if (I2CAccess
+                   (0x9, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* conversion */
+                       if (I2CAccess
+                           (0xA, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* cons alert */
+                       if (I2CAccess
+                           (0x22, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 3) {
+                       /* therm hyst */
+                       if (I2CAccess
+                           (0x21, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[3],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       default:
+               goto usage;
+       }
+
+       goto done;
+fail:
+       printf ("Access to sensor failed\n");
+       ret_val = -1;
+       goto done;
+usage:
+       printf ("Usage:\n%s\n", cmdtp->help);
+
+done:
+       return ret_val;
+}
+
+U_BOOT_CMD (temp, 6, 0, do_temp_sensor,
+           "temp    - interact with the temperature sensor\n",
+           "temp [s]\n"
+           "        - Show status.\n"
+           "temp l LOW [HIGH] [THERM]\n"
+           "        - Set local limits.\n"
+           "temp e LOW [HIGH] [THERM] [OFFSET]\n"
+           "        - Set external limits.\n"
+           "temp c CONFIG [CONVERSION] [CONS. ALERT] [THERM HYST]\n"
+           "        - Set config options.\n"
+           "\n"
+           "All values can be decimal or hex (hex preceded with 0x).\n"
+           "Only whole numbers are supported for external limits.\n");
+
+#if 0
+U_BOOT_CMD (loadace, 2, 0, do_loadace,
+           "loadace - load fpga configuration from System ACE compact flash\n",
+           "N\n"
+           "    - Load configuration N (0-7) from System ACE compact flash\n"
+           "loadace\n" "    - loads default configuration\n");
+#endif
+
+U_BOOT_CMD (swconfig, 2, 0, do_swconfigbyte,
+           "swconfig- display or modify the software configuration byte\n",
+           "N [ADDRESS]\n"
+           "    - set software configuration byte to N, optionally use ADDRESS as\n"
+           "      location of buffer for flash copy\n"
+           "swconfig\n" "    - display software configuration byte\n");
+
+U_BOOT_CMD (pause, 2, 0, do_pause,
+           "pause   - sleep processor until any key is pressed with poll time of N seconds\n",
+           "N\n"
+           "    - sleep processor until any key is pressed with poll time of N seconds\n"
+           "pause\n"
+           "    - sleep processor until any key is pressed with poll time of 1 second\n");
+
+U_BOOT_CMD (swrecon, 1, 0, do_swreconfig,
+           "swrecon - trigger a board reconfigure to the software selected configuration\n",
+           "\n"
+           "    - trigger a board reconfigure to the software selected configuration\n");
diff --git a/board/amirix/ap1000/ap1000.h b/board/amirix/ap1000/ap1000.h
new file mode 100644 (file)
index 0000000..118c4d1
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * ap1000.h: AP1000 (e.g. AP1070, AP1100) board specific definitions and functions that are needed globally
+ *
+ * Author : James MacAulay
+ *
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License (GPL) version 2, incorporated herein by
+ * reference. Drivers based on or derived from this code fall under the GPL
+ * and must retain the authorship, copyright and this license notice. This
+ * file is not a complete program and may only be used when the entire
+ * program is licensed under the GPL.
+ *
+ */
+
+#ifndef __AP1000_H
+#define __AP1000_H
+
+/*
+ *  Revision Register stuff
+ */
+#define AP1xx_FPGA_REV_ADDR 0x29000000
+
+#define AP1xx_PLATFORM_MASK     0xFF000000
+#define AP100_BASELINE_PLATFORM         0x01000000
+#define AP1xx_QUADGE_PLATFORM   0x02000000
+#define AP1xx_MGT_REF_PLATFORM  0x03000000
+#define AP1xx_STANDARD_PLATFORM         0x04000000
+#define AP1xx_DUAL_PLATFORM     0x05000000
+#define AP1xx_BASE_SRAM_PLATFORM 0x06000000
+
+#define AP1000_BASELINE_PLATFORM 0x21000000
+
+#define AP1xx_TESTPLATFORM_MASK                0xC0000000
+#define AP1xx_PCI_PCB_TESTPLATFORM     0xC0000000
+#define AP1xx_DUAL_GE_MEZZ_TESTPLATFORM 0xC1000000
+#define AP1xx_SFP_MEZZ_TESTPLATFORM    0xC2000000
+
+#define AP1000_PCI_PCB_TESTPLATFORM     0xC3000000
+
+#define AP1xx_TARGET_MASK  0x00FF0000
+#define AP1xx_AP107_TARGET 0x00010000
+#define AP1xx_AP120_TARGET 0x00020000
+#define AP1xx_AP130_TARGET 0x00030000
+#define AP1xx_AP1070_TARGET 0x00040000
+#define AP1xx_AP1100_TARGET 0x00050000
+
+#define AP1xx_UNKNOWN_STR "Unknown"
+
+#define AP1xx_PLATFORM_STR          " Platform"
+#define AP1xx_BASELINE_PLATFORM_STR  "Baseline"
+#define AP1xx_QUADGE_PLATFORM_STR    "Quad GE"
+#define AP1xx_MGT_REF_PLATFORM_STR   "MGT Reference"
+#define AP1xx_STANDARD_PLATFORM_STR  "Standard"
+#define AP1xx_DUAL_PLATFORM_STR             "Dual"
+#define AP1xx_BASE_SRAM_PLATFORM_STR "Baseline with SRAM"
+
+#define AP1xx_TESTPLATFORM_STR             " Test Platform"
+#define AP1xx_PCI_PCB_TESTPLATFORM_STR     "Base"
+#define AP1xx_DUAL_GE_MEZZ_TESTPLATFORM_STR "Dual GE Mezzanine"
+#define AP1xx_SFP_MEZZ_TESTPLATFORM_STR            "SFP Mezzanine"
+
+#define AP1xx_TARGET_STR       " Board"
+#define AP1xx_AP107_TARGET_STR "AP107"
+#define AP1xx_AP120_TARGET_STR "AP120"
+#define AP1xx_AP130_TARGET_STR "AP130"
+
+#define AP1xx_AP1070_TARGET_STR "AP1070"
+#define AP1xx_AP1100_TARGET_STR "AP1100"
+
+/*
+ *  Flash Stuff
+ */
+#define AP1xx_PROGRAM_FLASH_INDEX   0
+#define AP1xx_CONFIG_FLASH_INDEX    1
+
+/*
+ *  System Ace Stuff
+ */
+#define AP1000_SYSACE_REGBASE  0x28000000
+
+#define SYSACE_STATREG0 0x04 /* 7:0 */
+#define SYSACE_STATREG1 0x05 /* 15:8 */
+#define SYSACE_STATREG2 0x06 /* 23:16 */
+#define SYSACE_STATREG3 0x07 /* 31:24 */
+
+#define SYSACE_ERRREG0 0x08 /* 7:0 */
+#define SYSACE_ERRREG1 0x09 /* 15:8 */
+#define SYSACE_ERRREG2 0x0a /* 23:16 */
+#define SYSACE_ERRREG3 0x0b /* 31:24 */
+
+#define SYSACE_CTRLREG0 0x18 /* 7:0 */
+#define SYSACE_CTRLREG1 0x19 /* 15:8 */
+#define SYSACE_CTRLREG2 0x1A /* 23:16 */
+#define SYSACE_CTRLREG3 0x1B /* 31:24 */
+
+/*
+ *  Software reconfig thing
+ */
+#define SW_BYTE_SECTOR_ADDR    0x24FE0000
+#define SW_BYTE_SECTOR_OFFSET  0x0001FFFF
+#define SW_BYTE_SECTOR_SIZE    0x00020000
+#define SW_BYTE_MASK           0x00000003
+
+#define DEFAULT_TEMP_ADDR      0x00100000
+
+#define AP1000_CPLD_BASE       0x26000000
+
+/* PowerSpan II Stuff */
+#define PSII_SYNC() asm("eieio")
+#define PSPAN_BASEADDR 0x30000000
+#define EEPROM_DEFAULT { 0x01,      /* Byte 0 - Long Load = 0x02, short = 01, use 0xff for try no load */  \
+                       0x0,0x0,0x0, /* Bytes 1 - 3 Power span reserved */ \
+                       0x0,         /* Byte 4 - Powerspan reserved  - start of short load */ \
+                       0x0F,        /* Byte 5 - Enable PCI 1 & 2 as Bus masters and Memory targets. */ \
+                       0x0E,        /* Byte 6 - PCI 1 Target image prefetch - on for image 0,1,2, off for i20 & 3. */ \
+                       0x00, 0x00,  /* Byte 7,8 - PCI-1 Subsystem ID - */ \
+                       0x00, 0x00,  /* Byte 9,10 - PCI-1 Subsystem Vendor Id -  */ \
+                       0x00,        /* Byte 11 - No PCI interrupt generation on PCI-1 PCI-2 int A */ \
+                       0x1F,        /* Byte 12 - PCI-1 enable bridge registers, all target images */ \
+                       0xBA,        /* Byte 13 - Target 0 image 128 Meg(Ram), Target 1 image 64 Meg. (config Flash/CPLD )*/ \
+                       0xA0,        /* Byte 14 - Target 2 image 64 Meg(program Flash), target 3 64k. */ \
+                       0x00,        /* Byte 15 - Vital Product Data Disabled. */ \
+                       0x88,        /* Byte 16 - PCI arbiter config complete, all requests routed through PCI-1, Unlock PCI-1  */ \
+                       0x40,        /* Byte 17 - Interrupt direction control - PCI-1 Int A out, everything else in. */ \
+                       0x00,        /* Byte 18 - I2O disabled */ \
+                       0x00,        /* Byte 19 - PCI-2 Target image prefetch - off for all images. */ \
+                       0x00,0x00,   /* Bytes 20,21 - PCI 2 Subsystem Id */ \
+                       0x00,0x00,   /* Bytes 22,23 - PCI 2 Subsystem Vendor id */ \
+                       0x0C,        /* Byte 24 - PCI-2 BAR enables, target image 0, & 1 */ \
+                       0xBB,        /* Byte 25 - PCI-2 target 0 - 128 Meg(Ram), target 1  - 128 Meg (program/config flash) */ \
+                       0x00,        /* Byte 26 - PCI-2 target 2 & 3 unused. */ \
+                       0x00,0x00,0x00,0x00,0x00, /* Bytes 27,28,29,30, 31 - Reserved */ \
+                       /* Long Load Information */ \
+                       0x82,0x60,   /* Bytes 32,33 - PCI-1 Device ID - Powerspan II */ \
+                       0x10,0xE3,   /* Bytes 24,35 - PCI-1 Vendor ID - Tundra */ \
+                       0x06,        /* Byte 36 - PCI-1 Class Base - Bridge device. */ \
+                       0x80,        /* Byte 37 - PCI-1 Class sub class - Other bridge. */ \
+                       0x00,        /* Byte 38 - PCI-1 Class programing interface - Other bridge */ \
+                       0x01,        /* Byte 39 - Power span revision 1. */ \
+                       0x6E,        /* Byte 40 - PB SI0 enabled, translation enabled, decode enabled, 64 Meg */ \
+                       0x40,        /* Byte 41 - PB SI0 memory command mode, PCI-1 dest */ \
+                       0x22,        /* Byte 42 - Prefetch discard after read, PCI-little endian conversion, 32 byte prefetch */ \
+                       0x00,0x00,   /* Bytes 43, 44 - Translation address for SI0, set to zero for now. */ \
+                       0x0E,        /* Byte 45 - Translation address (0) and PB bus master enables - all. */ \
+                       0x2c,00,00,  /* Bytes 46,47,48 - PB SI0 processor base address - 0x2C000000 */ \
+                       0x30,00,00,  /* Bytes 49,50,51 - PB Address for Powerspan registers - 0x30000000, big Endian */ \
+                       0x82,0x60,   /* Bytes 52, 53 - PCI-2 Device ID - Powerspan II */ \
+                       0x10,0xE3,   /* Bytes 54,55 - PCI 2 Vendor Id - Tundra */ \
+                       0x06,        /* Byte 56 - PCI-2 Class Base - Bridge device */ \
+                       0x80,        /* Byte 57 - PCI-2 Class sub class - Other Bridge. */ \
+                       0x00,        /* Byte 58 - PCI-2 class programming interface - Other bridge */ \
+                       0x01,        /* Byte 59 - PCI-2 class revision  1 */ \
+                       0x00,0x00,0x00,0x00 }; /* Bytes 60,61, 62, 63 - Powerspan reserved */
+
+
+#define EEPROM_LENGTH  64  /* Long Load */
+
+#define I2C_SENSOR_DEV     0x9
+#define I2C_SENSOR_CHIP_SEL 0x4
+
+/*
+ *  Board Functions
+ */
+void set_eat_machine_checks(int a_flag);
+int get_eat_machine_checks(void);
+unsigned int get_platform(void);
+unsigned int get_device(void);
+void* memcpyb(void * dest,const void *src,size_t count);
+int process_bootflag(ulong bootflag);
+void user_led_on(void);
+void user_led_off(void);
+
+#endif /* __COMMON_H_ */
diff --git a/board/amirix/ap1000/config.mk b/board/amirix/ap1000/config.mk
new file mode 100644 (file)
index 0000000..c09783a
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# (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
+#
+
+# Start at bottom of RAM, but at an aliased address so that it looks
+# like it's not in RAM.  This is a bit of voodoo to allow it to be
+# run from RAM instead of Flash.
+TEXT_BASE = 0x08000000
diff --git a/board/amirix/ap1000/flash.c b/board/amirix/ap1000/flash.c
new file mode 100644 (file)
index 0000000..1a3b252
--- /dev/null
@@ -0,0 +1,903 @@
+/**
+ * @file flash.c
+ */
+
+/*
+ * (C) Copyright 2003
+ * AMIRIX Systems Inc.
+ *
+ * Originated from ppcboot-2.0.0/board/esd/cpci440/strataflash.c
+ *
+ * (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 ppcboot.
+ * 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
+ */
+uchar *flash_make_addr (flash_info_t * info, int sect, int offset)
+{
+       return ((uchar *) (info->start[sect] + (offset * info->chipwidth)));
+}
+
+/*-----------------------------------------------------------------------
+ * read a character at a port width address
+ */
+uchar flash_read_uchar (flash_info_t * info, uchar offset)
+{
+       if (info->portwidth == FLASH_CFI_8BIT) {
+               volatile uchar *cp;
+               uchar c;
+
+               cp = flash_make_addr (info, 0, offset);
+               c = *cp;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_uchar offset=%04x ptr=%08x c=%02x\n",
+                       offset, (unsigned int) cp, c);
+#endif
+               return (c);
+
+       } else if (info->portwidth == FLASH_CFI_16BIT) {
+               volatile ushort *sp;
+               ushort s;
+               uchar c;
+
+               sp = (ushort *) flash_make_addr (info, 0, offset);
+               s = *sp;
+               c = (uchar) s;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_uchar offset=%04x ptr=%08x s=%04x c=%02x\n", offset, (unsigned int) sp, s, c);
+#endif
+               return (c);
+
+       }
+
+       return 0;
+}
+
+/*-----------------------------------------------------------------------
+ * read a short word by swapping for ppc format.
+ */
+ushort flash_read_ushort (flash_info_t * info, int sect, uchar offset)
+{
+       if (info->portwidth == FLASH_CFI_8BIT) {
+               volatile uchar *cp;
+               uchar c0, c1;
+               ushort s;
+
+               cp = flash_make_addr (info, 0, offset);
+               c1 = cp[2];
+               c0 = cp[0];
+               s = c1 << 8 | c0;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_ushort offset=%04x ptr=%08x c1=%02x c0=%02x s=%04x\n", offset, (unsigned int) cp, c1, c0, s);
+#endif
+               return (s);
+
+       } else if (info->portwidth == FLASH_CFI_16BIT) {
+               volatile ushort *sp;
+               ushort s;
+               uchar c0, c1;
+
+               sp = (ushort *) flash_make_addr (info, 0, offset);
+               s = *sp;
+               c1 = (uchar) sp[1];
+               c0 = (uchar) sp[0];
+               s = c1 << 8 | c0;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_ushort offset=%04x ptr=%08x c1=%02x c0=%02x s=%04x\n", offset, (unsigned int) sp, c1, c0, s);
+#endif
+               return (s);
+
+       }
+
+       return 0;
+}
+
+/*-----------------------------------------------------------------------
+ * 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)
+{
+       if (info->portwidth == FLASH_CFI_8BIT) {
+               volatile uchar *cp;
+               uchar c0, c1, c2, c3;
+               ulong l;
+
+               cp = flash_make_addr (info, 0, offset);
+               c3 = cp[6];
+               c2 = cp[4];
+               c1 = cp[2];
+               c0 = cp[0];
+               l = c3 << 24 | c2 << 16 | c1 << 8 | c0;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_long offset=%04x ptr=%08x c3=%02x c2=%02x c1=%02x c0=%02x l=%08x\n", offset, (unsigned int) cp, c3, c2, c1, c0, l);
+#endif
+               return (l);
+
+       } else if (info->portwidth == FLASH_CFI_16BIT) {
+               volatile ushort *sp;
+               uchar c0, c1, c2, c3;
+               ulong l;
+
+               sp = (ushort *) flash_make_addr (info, 0, offset);
+               c3 = (uchar) sp[3];
+               c2 = (uchar) sp[2];
+               c1 = (uchar) sp[1];
+               c0 = (uchar) sp[0];
+               l = c3 << 24 | c2 << 16 | c1 << 8 | c0;
+#ifdef DEBUG_FLASH
+               printf ("flash_read_long offset=%04x ptr=%08x c3=%02x c2=%02x c1=%02x c0=%02x l=%08x\n", offset, (unsigned int) sp, c3, c2, c1, c0, l);
+#endif
+               return (l);
+
+       }
+
+       return 0;
+}
+
+/*-----------------------------------------------------------------------
+ */
+unsigned long flash_init (void)
+{
+       unsigned long size;
+
+       size = 0;
+
+       flash_info[0].flash_id = FLASH_UNKNOWN;
+       flash_info[0].portwidth = FLASH_CFI_16BIT;
+       flash_info[0].chipwidth = FLASH_CFI_16BIT;
+       size += flash_info[0].size = flash_get_size (CFG_PROGFLASH_BASE, 0);
+       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
+               printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n", 1, flash_info[0].size, flash_info[0].size << 20);
+       };
+
+       flash_info[1].flash_id = FLASH_UNKNOWN;
+       flash_info[1].portwidth = FLASH_CFI_8BIT;
+       flash_info[1].chipwidth = FLASH_CFI_16BIT;
+       size += flash_info[1].size = flash_get_size (CFG_CONFFLASH_BASE, 1);
+       if (flash_info[1].flash_id == FLASH_UNKNOWN) {
+               printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n", 2, flash_info[1].size, flash_info[1].size << 20);
+       };
+
+       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 (x%d device in x%d mode)",
+               (info->chipwidth << 3), (info->portwidth << 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; */
+       if (info->portwidth == FLASH_CFI_8BIT
+           && info->chipwidth == FLASH_CFI_16BIT) {
+               cp[0] = cmd;
+       } else if (info->portwidth == FLASH_CFI_16BIT
+                  && info->chipwidth == FLASH_CFI_16BIT) {
+               cp[0] = '\0';
+               cp[1] = 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)
+{
+
+#if 0
+       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;
+               }
+       }
+#endif
+       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;
+       } else {
+               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 = 1; /* 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_count = (tmp & 0xffff) + 1;
+                       tmp >>= 16;
+                       erase_region_size =
+                               (tmp & 0xffff) ? ((tmp & 0xffff) * 256) : 128;
+                       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 */
diff --git a/board/amirix/ap1000/init.S b/board/amirix/ap1000/init.S
new file mode 100644 (file)
index 0000000..3aaa5c2
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * init.S: Stubs for ppcboot initialization
+ *
+ * Copyright 2002 Mind NV
+ *
+ * http://www.mind.be/
+ *
+ * Author : Peter De Schrijver (p2@mind.be)
+ *
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License (GPL) version 2, incorporated herein by
+ * reference. Drivers based on or derived from this code fall under the GPL
+ * and must retain the authorship, copyright and this license notice. This
+ * file is not a complete program and may only be used when the entire
+ * program is licensed under the GPL.
+ *
+ */
+
+#include <ppc4xx.h>
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+
+#include <asm/cache.h>
+#include <asm/mmu.h>
+
+
+       .globl  ext_bus_cntlr_init
+ext_bus_cntlr_init:
+       blr
+
+       .globl  sdram_init
+sdram_init:
+       blr
diff --git a/board/amirix/ap1000/pci.c b/board/amirix/ap1000/pci.c
new file mode 100644 (file)
index 0000000..a6436ac
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+ * (C) Copyright 2003
+ * AMIRIX Systems 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 <ppc4xx.h>
+#include <asm/processor.h>
+#include <pci.h>
+
+#define PCI_MEM_82559ER_CSR_BASE    0x30200000
+#define PCI_IO_82559ER_CSR_BASE     0x40000200
+
+/** AP1100 specific values */
+#define PSII_BASE                   0x30000000   /**< PowerSpan II dual bridge local bus register address */
+#define PSII_CONFIG_ADDR            0x30000290   /**< PowerSpan II Configuration Cycle Address configuration register */
+#define PSII_CONFIG_DATA            0x30000294   /**< PowerSpan II Configuration Cycle Data register. */
+#define PSII_CONFIG_DEST_PCI2       0x01000000   /**< PowerSpan II configuration cycle destination selection, set for PCI2 bus */
+#define PSII_PCI_MEM_BASE           0x30200000   /**< Local Bus address for start of PCI memory space on PCI2 bus. */
+#define PSII_PCI_MEM_SIZE           0x1BE00000   /**< PCI Memory space about 510 Meg. */
+#define AP1000_SYS_MEM_START        0x00000000   /**< System memory starts at 0. */
+#define AP1000_SYS_MEM_SIZE         0x08000000   /**< System memory is 128 Meg. */
+
+/* static int G_verbosity_level = 1; */
+#define G_verbosity_level 1
+
+void write1 (unsigned long addr, unsigned char val)
+{
+       volatile unsigned char *p = (volatile unsigned char *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("write1: addr=%08x val=%02x\n", (unsigned int) addr,
+                       val);
+       *p = val;
+       asm ("eieio");
+}
+
+unsigned char read1 (unsigned long addr)
+{
+       unsigned char val;
+       volatile unsigned char *p = (volatile unsigned char *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("read1: addr=%08x ", (unsigned int) addr);
+       val = *p;
+       asm ("eieio");
+       if (G_verbosity_level > 1)
+               printf ("val=%08x\n", val);
+       return val;
+}
+
+void write2 (unsigned long addr, unsigned short val)
+{
+       volatile unsigned short *p = (volatile unsigned short *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("write2: addr=%08x val=%04x -> *p=%04x\n",
+                       (unsigned int) addr, val,
+                       ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8));
+
+       *p = ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8);
+       asm ("eieio");
+}
+
+unsigned short read2 (unsigned long addr)
+{
+       unsigned short val;
+       volatile unsigned short *p = (volatile unsigned short *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("read2: addr=%08x ", (unsigned int) addr);
+       val = *p;
+       val = ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8);
+       asm ("eieio");
+       if (G_verbosity_level > 1)
+               printf ("*p=%04x -> val=%04x\n",
+                       ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8), val);
+       return val;
+}
+
+void write4 (unsigned long addr, unsigned long val)
+{
+       volatile unsigned long *p = (volatile unsigned long *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("write4: addr=%08x val=%08x -> *p=%08x\n",
+                       (unsigned int) addr, (unsigned int) val,
+                       (unsigned int) (((val & 0xFF000000) >> 24) |
+                                       ((val & 0x000000FF) << 24) |
+                                       ((val & 0x00FF0000) >> 8) |
+                                       ((val & 0x0000FF00) << 8)));
+
+       *p = ((val & 0xFF000000) >> 24) | ((val & 0x000000FF) << 24) |
+               ((val & 0x00FF0000) >> 8) | ((val & 0x0000FF00) << 8);
+       asm ("eieio");
+}
+
+unsigned long read4 (unsigned long addr)
+{
+       unsigned long val;
+       volatile unsigned long *p = (volatile unsigned long *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("read4: addr=%08x", (unsigned int) addr);
+
+       val = *p;
+       val = ((val & 0xFF000000) >> 24) | ((val & 0x000000FF) << 24) |
+               ((val & 0x00FF0000) >> 8) | ((val & 0x0000FF00) << 8);
+       asm ("eieio");
+
+       if (G_verbosity_level > 1)
+               printf ("*p=%04x -> val=%04x\n",
+                       (unsigned int) (((val & 0xFF000000) >> 24) |
+                                       ((val & 0x000000FF) << 24) |
+                                       ((val & 0x00FF0000) >> 8) |
+                                       ((val & 0x0000FF00) << 8)),
+                       (unsigned int) val);
+       return val;
+}
+
+void write4be (unsigned long addr, unsigned long val)
+{
+       volatile unsigned long *p = (volatile unsigned long *) addr;
+
+       if (G_verbosity_level > 1)
+               printf ("write4: addr=%08x val=%08x\n", (unsigned int) addr,
+                       (unsigned int) val);
+       *p = val;
+       asm ("eieio");
+}
+
+/** One byte configuration write on PSII.
+ *  Currently fixes destination PCI bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Address of location for received byte.
+ *  @return Always Zero.
+ */
+static int psII_read_config_byte (struct pci_controller *hose,
+                                 pci_dev_t dev, int reg, u8 * val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       *val = read1 (PSII_CONFIG_DATA + (reg & 0x03));
+       return (0);
+}
+
+/** One byte configuration write on PSII.
+ *  Currently fixes destination bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Output byte.
+ *  @return Always Zero.
+ */
+static int psII_write_config_byte (struct pci_controller *hose,
+                                  pci_dev_t dev, int reg, u8 val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       write1 (PSII_CONFIG_DATA + (reg & 0x03), (unsigned char) val);
+
+       return (0);
+}
+
+/** One word (16 bit) configuration read on PSII.
+ *  Currently fixes destination PCI bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Address of location for received word.
+ *  @return Always Zero.
+ */
+static int psII_read_config_word (struct pci_controller *hose,
+                                 pci_dev_t dev, int reg, u16 * val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       *val = read2 (PSII_CONFIG_DATA + (reg & 0x03));
+       return (0);
+}
+
+/** One word (16 bit) configuration write on PSII.
+ *  Currently fixes destination bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Output word.
+ *  @return Always Zero.
+ */
+static int psII_write_config_word (struct pci_controller *hose,
+                                  pci_dev_t dev, int reg, u16 val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       write2 (PSII_CONFIG_DATA + (reg & 0x03), (unsigned short) val);
+
+       return (0);
+}
+
+/** One DWord (32 bit) configuration read on PSII.
+ *  Currently fixes destination PCI bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Address of location for received byte.
+ *  @return Always Zero.
+ */
+static int psII_read_config_dword (struct pci_controller *hose,
+                                  pci_dev_t dev, int reg, u32 * val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       *val = read4 (PSII_CONFIG_DATA);
+       return (0);
+}
+
+/** One DWord (32 bit) configuration write on PSII.
+ *  Currently fixes destination bus to PCI2, onboard
+ *  pci.
+ *  @param    hose    PCI Host controller information. Ignored.
+ *  @param    dev        Encoded PCI device/Bus and Function value.
+ *  @param    reg        PCI Configuration register number.
+ *  @param    val        Output Dword.
+ *  @return Always Zero.
+ */
+static int psII_write_config_dword (struct pci_controller *hose,
+                                   pci_dev_t dev, int reg, u32 val)
+{
+       write4be (PSII_CONFIG_ADDR, PSII_CONFIG_DEST_PCI2 |     /* Operate on PCI2 bus interface . */
+                 (PCI_BUS (dev) << 16) | (PCI_DEV (dev) << 11) | (PCI_FUNC (dev) << 8) | ((reg & 0xFF) & ~3)); /* Configuation cycle type 0 */
+
+       write4 (PSII_CONFIG_DATA, (unsigned long) val);
+
+       return (0);
+}
+
+static struct pci_config_table ap1000_config_table[] = {
+#ifdef CONFIG_AP1000
+       {PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+        PCI_BUS (CFG_ETH_DEV_FN), PCI_DEV (CFG_ETH_DEV_FN),
+        PCI_FUNC (CFG_ETH_DEV_FN),
+        pci_cfgfunc_config_device,
+        {CFG_ETH_IOBASE, CFG_ETH_MEMBASE,
+         PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER}},
+#endif
+       {}
+};
+
+static struct pci_controller psII_hose = {
+      config_table:ap1000_config_table,
+};
+
+void pci_init_board (void)
+{
+       struct pci_controller *hose = &psII_hose;
+
+       /*
+        * Register the hose
+        */
+       hose->first_busno = 0;
+       hose->last_busno = 0xff;
+
+       /* System memory space */
+       pci_set_region (hose->regions + 0,
+                       AP1000_SYS_MEM_START, AP1000_SYS_MEM_START,
+                       AP1000_SYS_MEM_SIZE,
+                       PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+       /* PCI Memory space */
+       pci_set_region (hose->regions + 1,
+                       PSII_PCI_MEM_BASE, PSII_PCI_MEM_BASE,
+                       PSII_PCI_MEM_SIZE, PCI_REGION_MEM);
+
+       /* No IO Memory space  - for now */
+
+       pci_set_ops (hose,
+                    psII_read_config_byte,
+                    psII_read_config_word,
+                    psII_read_config_dword,
+                    psII_write_config_byte,
+                    psII_write_config_word, psII_write_config_dword);
+
+       hose->region_count = 2;
+
+       pci_register_hose (hose);
+
+       hose->last_busno = pci_hose_scan (hose);
+}
diff --git a/board/amirix/ap1000/powerspan.c b/board/amirix/ap1000/powerspan.c
new file mode 100644 (file)
index 0000000..f048155
--- /dev/null
@@ -0,0 +1,750 @@
+/**
+ * @file powerspan.c Source file for PowerSpan II code.
+ */
+
+/*
+ * (C) Copyright 2005
+ * AMIRIX Systems Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/processor.h>
+#include "powerspan.h"
+#define tolower(x) x
+#include "ap1000.h"
+
+#ifdef INCLUDE_PCI
+
+/** Write one byte with byte swapping.
+  * @param  addr [IN] the address to write to
+  * @param  val  [IN] the value to write
+  */
+void write1 (unsigned long addr, unsigned char val)
+{
+       volatile unsigned char *p = (volatile unsigned char *) addr;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("write1: addr=%08x val=%02x\n", addr, val);
+       }
+#endif
+       *p = val;
+       PSII_SYNC ();
+}
+
+/** Read one byte with byte swapping.
+  * @param  addr  [IN] the address to read from
+  * @return the value at addr
+  */
+unsigned char read1 (unsigned long addr)
+{
+       unsigned char val;
+       volatile unsigned char *p = (volatile unsigned char *) addr;
+
+       val = *p;
+       PSII_SYNC ();
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("read1: addr=%08x val=%02x\n", addr, val);
+       }
+#endif
+       return val;
+}
+
+/** Write one 2-byte word with byte swapping.
+  * @param  addr  [IN] the address to write to
+  * @param  val   [IN] the value to write
+  */
+void write2 (unsigned long addr, unsigned short val)
+{
+       volatile unsigned short *p = (volatile unsigned short *) addr;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("write2: addr=%08x val=%04x -> *p=%04x\n", addr, val,
+                       ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8));
+       }
+#endif
+       *p = ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8);
+       PSII_SYNC ();
+}
+
+/** Read one 2-byte word with byte swapping.
+  * @param  addr  [IN] the address to read from
+  * @return the value at addr
+  */
+unsigned short read2 (unsigned long addr)
+{
+       unsigned short val;
+       volatile unsigned short *p = (volatile unsigned short *) addr;
+
+       val = *p;
+       val = ((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8);
+       PSII_SYNC ();
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("read2: addr=%08x *p=%04x -> val=%04x\n", addr, *p,
+                       val);
+       }
+#endif
+       return val;
+}
+
+/** Write one 4-byte word with byte swapping.
+  * @param  addr  [IN] the address to write to
+  * @param  val   [IN] the value to write
+  */
+void write4 (unsigned long addr, unsigned long val)
+{
+       volatile unsigned long *p = (volatile unsigned long *) addr;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("write4: addr=%08x val=%08x -> *p=%08x\n", addr, val,
+                       ((val & 0xFF000000) >> 24) |
+                       ((val & 0x000000FF) << 24) |
+                       ((val & 0x00FF0000) >>  8) |
+                       ((val & 0x0000FF00) <<  8));
+       }
+#endif
+       *p = ((val & 0xFF000000) >> 24) | ((val & 0x000000FF) << 24) |
+               ((val & 0x00FF0000) >> 8) | ((val & 0x0000FF00) << 8);
+       PSII_SYNC ();
+}
+
+/** Read one 4-byte word with byte swapping.
+  * @param  addr  [IN] the address to read from
+  * @return the value at addr
+  */
+unsigned long read4 (unsigned long addr)
+{
+       unsigned long val;
+       volatile unsigned long *p = (volatile unsigned long *) addr;
+
+       val = *p;
+       val = ((val & 0xFF000000) >> 24) | ((val & 0x000000FF) << 24) |
+               ((val & 0x00FF0000) >> 8) | ((val & 0x0000FF00) << 8);
+       PSII_SYNC ();
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("read4: addr=%08x *p=%08x -> val=%08x\n", addr, *p,
+                       val);
+       }
+#endif
+       return val;
+}
+
+int PCIReadConfig (int bus, int dev, int fn, int reg, int width,
+                  unsigned long *val)
+{
+       unsigned int conAdrVal;
+       unsigned int conDataReg = REG_CONFIG_DATA;
+       unsigned int status;
+       int ret_val = 0;
+
+
+       /* DEST bit hardcoded to 1: local pci is PCI-2 */
+       /* TYPE bit is hardcoded to 1: all config cycles are local */
+       conAdrVal = (1 << 24)
+               | ((bus & 0xFF) << 16)
+               | ((dev & 0xFF) << 11)
+               | ((fn & 0x07) << 8)
+               | (reg & 0xFC);
+
+       /* clear any pending master aborts */
+       write4 (REG_P1_CSR, CLEAR_MASTER_ABORT);
+
+       /* Load the conAdrVal value first, then read from pb_conf_data */
+       write4 (REG_CONFIG_ADDRESS, conAdrVal);
+       PSII_SYNC ();
+
+
+       /* Note: documentation does not match the pspan library code */
+       /* Note: *pData comes back as -1 if device is not present */
+       switch (width) {
+       case 4:
+               *(unsigned int *) val = read4 (conDataReg);
+               break;
+       case 2:
+               *(unsigned short *) val = read2 (conDataReg);
+               break;
+       case 1:
+               *(unsigned char *) val = read1 (conDataReg);
+               break;
+       default:
+               ret_val = ILLEGAL_REG_OFFSET;
+               break;
+       }
+       PSII_SYNC ();
+
+       /* clear any pending master aborts */
+       status = read4 (REG_P1_CSR);
+       if (status & CLEAR_MASTER_ABORT) {
+               ret_val = NO_DEVICE_FOUND;
+               write4 (REG_P1_CSR, CLEAR_MASTER_ABORT);
+       }
+
+       return ret_val;
+}
+
+
+int PCIWriteConfig (int bus, int dev, int fn, int reg, int width,
+                   unsigned long val)
+{
+       unsigned int conAdrVal;
+       unsigned int conDataReg = REG_CONFIG_DATA;
+       unsigned int status;
+       int ret_val = 0;
+
+
+       /* DEST bit hardcoded to 1: local pci is PCI-2 */
+       /* TYPE bit is hardcoded to 1: all config cycles are local */
+       conAdrVal = (1 << 24)
+               | ((bus & 0xFF) << 16)
+               | ((dev & 0xFF) << 11)
+               | ((fn & 0x07) << 8)
+               | (reg & 0xFC);
+
+       /* clear any pending master aborts */
+       write4 (REG_P1_CSR, CLEAR_MASTER_ABORT);
+
+       /* Load the conAdrVal value first, then read from pb_conf_data */
+       write4 (REG_CONFIG_ADDRESS, conAdrVal);
+       PSII_SYNC ();
+
+
+       /* Note: documentation does not match the pspan library code */
+       /* Note: *pData comes back as -1 if device is not present */
+       switch (width) {
+       case 4:
+               write4 (conDataReg, val);
+               break;
+       case 2:
+               write2 (conDataReg, val);
+               break;
+       case 1:
+               write1 (conDataReg, val);
+               break;
+       default:
+               ret_val = ILLEGAL_REG_OFFSET;
+               break;
+       }
+       PSII_SYNC ();
+
+       /* clear any pending master aborts */
+       status = read4 (REG_P1_CSR);
+       if (status & CLEAR_MASTER_ABORT) {
+               ret_val = NO_DEVICE_FOUND;
+               write4 (REG_P1_CSR, CLEAR_MASTER_ABORT);
+       }
+
+       return ret_val;
+}
+
+
+int pci_read_config_byte (int bus, int dev, int fn, int reg,
+                         unsigned char *val)
+{
+       unsigned long read_val;
+       int ret_val;
+
+       ret_val = PCIReadConfig (bus, dev, fn, reg, 1, &read_val);
+       *val = read_val & 0xFF;
+
+       return ret_val;
+}
+
+int pci_write_config_byte (int bus, int dev, int fn, int reg,
+                          unsigned char val)
+{
+       return PCIWriteConfig (bus, dev, fn, reg, 1, val);
+}
+
+int pci_read_config_word (int bus, int dev, int fn, int reg,
+                         unsigned short *val)
+{
+       unsigned long read_val;
+       int ret_val;
+
+       ret_val = PCIReadConfig (bus, dev, fn, reg, 2, &read_val);
+       *val = read_val & 0xFFFF;
+
+       return ret_val;
+}
+
+int pci_write_config_word (int bus, int dev, int fn, int reg,
+                          unsigned short val)
+{
+       return PCIWriteConfig (bus, dev, fn, reg, 2, val);
+}
+
+int pci_read_config_dword (int bus, int dev, int fn, int reg,
+                          unsigned long *val)
+{
+       return PCIReadConfig (bus, dev, fn, reg, 4, val);
+}
+
+int pci_write_config_dword (int bus, int dev, int fn, int reg,
+                           unsigned long val)
+{
+       return PCIWriteConfig (bus, dev, fn, reg, 4, val);
+}
+
+#endif /* INCLUDE_PCI */
+
+int I2CAccess (unsigned char theI2CAddress, unsigned char theDevCode,
+              unsigned char theChipSel, unsigned char *theValue, int RWFlag)
+{
+       int ret_val = 0;
+       unsigned int reg_value;
+
+       reg_value = PowerSpanRead (REG_I2C_CSR);
+
+       if (reg_value & I2C_CSR_ACT) {
+               printf ("Error: I2C busy\n");
+               ret_val = I2C_BUSY;
+       } else {
+               reg_value = ((theI2CAddress & 0xFF) << 24)
+                       | ((theDevCode & 0x0F) << 12)
+                       | ((theChipSel & 0x07) << 9)
+                       | I2C_CSR_ERR;
+               if (RWFlag == I2C_WRITE) {
+                       reg_value |= I2C_CSR_RW | ((*theValue & 0xFF) << 16);
+               }
+
+               PowerSpanWrite (REG_I2C_CSR, reg_value);
+               udelay (1);
+
+               do {
+                       reg_value = PowerSpanRead (REG_I2C_CSR);
+
+                       if ((reg_value & I2C_CSR_ACT) == 0) {
+                               if (reg_value & I2C_CSR_ERR) {
+                                       ret_val = I2C_ERR;
+                               } else {
+                                       *theValue =
+                                               (reg_value & I2C_CSR_DATA) >>
+                                               16;
+                               }
+                       }
+               } while (reg_value & I2C_CSR_ACT);
+       }
+
+       return ret_val;
+}
+
+int EEPROMRead (unsigned char theI2CAddress, unsigned char *theValue)
+{
+       return I2CAccess (theI2CAddress, I2C_EEPROM_DEV, I2C_EEPROM_CHIP_SEL,
+                         theValue, I2C_READ);
+}
+
+int EEPROMWrite (unsigned char theI2CAddress, unsigned char theValue)
+{
+       return I2CAccess (theI2CAddress, I2C_EEPROM_DEV, I2C_EEPROM_CHIP_SEL,
+                         &theValue, I2C_WRITE);
+}
+
+int do_eeprom (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       char cmd;
+       int ret_val = 0;
+       unsigned int address = 0;
+       unsigned char value = 1;
+       unsigned char read_value;
+       int ii;
+       int error = 0;
+       unsigned char *mem_ptr;
+       unsigned char default_eeprom[] = EEPROM_DEFAULT;
+
+       if (argc < 2) {
+               goto usage;
+       }
+
+       cmd = argv[1][0];
+       if (argc > 2) {
+               address = simple_strtoul (argv[2], NULL, 16);
+               if (argc > 3) {
+                       value = simple_strtoul (argv[3], NULL, 16) & 0xFF;
+               }
+       }
+
+       switch (cmd) {
+       case 'r':
+               if (address > 256) {
+                       printf ("Illegal Address\n");
+                       goto usage;
+               }
+               printf ("@0x%x: ", address);
+               for (ii = 0; ii < value; ii++) {
+                       if (EEPROMRead (address + ii, &read_value) !=
+                           0) {
+                               printf ("Read Error\n");
+                       } else {
+                               printf ("0x%02x ", read_value);
+                       }
+
+                       if (((ii + 1) % 16) == 0) {
+                               printf ("\n");
+                       }
+               }
+               printf ("\n");
+               break;
+       case 'w':
+               if (address > 256) {
+                       printf ("Illegal Address\n");
+                       goto usage;
+               }
+               if (argc < 4) {
+                       goto usage;
+               }
+               if (EEPROMWrite (address, value) != 0) {
+                       printf ("Write Error\n");
+               }
+               break;
+       case 'g':
+               if (argc != 3) {
+                       goto usage;
+               }
+               mem_ptr = (unsigned char *) address;
+               for (ii = 0; ((ii < EEPROM_LENGTH) && (error == 0));
+                    ii++) {
+                       if (EEPROMRead (ii, &read_value) != 0) {
+                               printf ("Read Error\n");
+                               error = 1;
+                       } else {
+                               *mem_ptr = read_value;
+                               mem_ptr++;
+                       }
+               }
+               break;
+       case 'p':
+               if (argc != 3) {
+                       goto usage;
+               }
+               mem_ptr = (unsigned char *) address;
+               for (ii = 0; ((ii < EEPROM_LENGTH) && (error == 0));
+                    ii++) {
+                       if (EEPROMWrite (ii, *mem_ptr) != 0) {
+                               printf ("Write Error\n");
+                               error = 1;
+                       }
+
+                       mem_ptr++;
+               }
+               break;
+       case 'd':
+               if (argc != 2) {
+                       goto usage;
+               }
+               for (ii = 0; ((ii < EEPROM_LENGTH) && (error == 0));
+                    ii++) {
+                       if (EEPROMWrite (ii, default_eeprom[ii]) != 0) {
+                               printf ("Write Error\n");
+                               error = 1;
+                       }
+               }
+               break;
+       default:
+               goto usage;
+       }
+
+       goto done;
+      usage:
+       printf ("Usage:\n%s\n", cmdtp->help);
+
+      done:
+       return ret_val;
+
+}
+
+U_BOOT_CMD (eeprom, 4, 0, do_eeprom,
+           "eeprom  - read/write/copy to/from the PowerSpan II eeprom\n",
+           "eeprom r OFF [NUM]\n"
+           "    - read NUM words starting at OFF\n"
+           "eeprom w OFF VAL\n"
+           "    - write word VAL at offset OFF\n"
+           "eeprom g ADD\n"
+           "    - store contents of eeprom at address ADD\n"
+           "eeprom p ADD\n"
+           "    - put data stored at address ADD into the eeprom\n"
+           "eeprom d\n" "    - return eeprom to default contents\n");
+
+unsigned int PowerSpanRead (unsigned int theOffset)
+{
+       volatile unsigned int *ptr =
+               (volatile unsigned int *) (PSPAN_BASEADDR + theOffset);
+       unsigned int ret_val;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("PowerSpanRead: offset=%08x ", theOffset);
+       }
+#endif
+       ret_val = *ptr;
+       PSII_SYNC ();
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("value=%08x\n", ret_val);
+       }
+#endif
+
+       return ret_val;
+}
+
+void PowerSpanWrite (unsigned int theOffset, unsigned int theValue)
+{
+       volatile unsigned int *ptr =
+               (volatile unsigned int *) (PSPAN_BASEADDR + theOffset);
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("PowerSpanWrite: offset=%08x val=%02x\n", theOffset,
+                       theValue);
+       }
+#endif
+       *ptr = theValue;
+       PSII_SYNC ();
+}
+
+/**
+ * Sets the indicated bits in the indicated register.
+ * @param theOffset [IN] the register to access.
+ * @param theMask   [IN] bits set in theMask will be set in the register.
+ */
+void PowerSpanSetBits (unsigned int theOffset, unsigned int theMask)
+{
+       volatile unsigned int *ptr =
+               (volatile unsigned int *) (PSPAN_BASEADDR + theOffset);
+       unsigned int register_value;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("PowerSpanSetBits: offset=%08x mask=%02x\n",
+                       theOffset, theMask);
+       }
+#endif
+       register_value = *ptr;
+       PSII_SYNC ();
+
+       register_value |= theMask;
+       *ptr = register_value;
+       PSII_SYNC ();
+}
+
+/**
+ * Clears the indicated bits in the indicated register.
+ * @param theOffset [IN] the register to access.
+ * @param theMask   [IN] bits set in theMask will be cleared in the register.
+ */
+void PowerSpanClearBits (unsigned int theOffset, unsigned int theMask)
+{
+       volatile unsigned int *ptr =
+               (volatile unsigned int *) (PSPAN_BASEADDR + theOffset);
+       unsigned int register_value;
+
+#ifdef VERBOSITY
+       if (gVerbosityLevel > 1) {
+               printf ("PowerSpanClearBits: offset=%08x mask=%02x\n",
+                       theOffset, theMask);
+       }
+#endif
+       register_value = *ptr;
+       PSII_SYNC ();
+
+       register_value &= ~theMask;
+       *ptr = register_value;
+       PSII_SYNC ();
+}
+
+/**
+ * Configures a slave image on the local bus, based on the parameters and some hardcoded system values.
+ * Slave Images are images that cause the PowerSpan II to be a master on the PCI bus.  Thus, they
+ *  are outgoing from the standpoint of the local bus.
+ * @param theImageIndex    [IN] the PowerSpan II image to set (assumed to be 0-7).
+ * @param theBlockSize     [IN] the block size of the image (as used by PowerSpan II: PB_SIx_CTL[BS]).
+ * @param theMemIOFlag     [IN] if PX_TGT_USE_MEM_IO, this image will have the MEM_IO bit set.
+ * @param theEndianness    [IN] the endian bits for the image (already shifted, use defines).
+ * @param theLocalBaseAddr [IN] the Local address for the image (assumed to be valid with provided block size).
+ * @param thePCIBaseAddr   [IN] the PCI address for the image (assumed to be valid with provided block size).
+ */
+int SetSlaveImage (int theImageIndex, unsigned int theBlockSize,
+                  int theMemIOFlag, int theEndianness,
+                  unsigned int theLocalBaseAddr, unsigned int thePCIBaseAddr)
+{
+       unsigned int reg_offset = theImageIndex * PB_SLAVE_IMAGE_OFF;
+       unsigned int reg_value = 0;
+
+       /* Make sure that the Slave Image is disabled */
+       PowerSpanClearBits ((REGS_PB_SLAVE_CSR + reg_offset),
+                           PB_SLAVE_CSR_IMG_EN);
+
+       /* Setup the mask required for requested PB Slave Image configuration */
+       reg_value = PB_SLAVE_CSR_TA_EN | theEndianness | (theBlockSize << 24);
+       if (theMemIOFlag == PB_SLAVE_USE_MEM_IO) {
+               reg_value |= PB_SLAVE_CSR_MEM_IO;
+       }
+
+       /* hardcoding the following:
+          TA_EN = 1
+          MD_EN = 0
+          MODE  = 0
+          PRKEEP = 0
+          RD_AMT = 0
+        */
+       PowerSpanWrite ((REGS_PB_SLAVE_CSR + reg_offset), reg_value);
+
+       /* these values are not checked by software */
+       PowerSpanWrite ((REGS_PB_SLAVE_BADDR + reg_offset), theLocalBaseAddr);
+       PowerSpanWrite ((REGS_PB_SLAVE_TADDR + reg_offset), thePCIBaseAddr);
+
+       /* Enable the Slave Image */
+       PowerSpanSetBits ((REGS_PB_SLAVE_CSR + reg_offset),
+                         PB_SLAVE_CSR_IMG_EN);
+
+       return 0;
+}
+
+/**
+ * Configures a target image on the local bus, based on the parameters and some hardcoded system values.
+ * Target Images are used when the PowerSpan II is acting as a target for an access.  Thus, they
+ *  are incoming from the standpoint of the local bus.
+ * In order to behave better on the host PCI bus, if thePCIBaseAddr is NULL (0x00000000), then the PCI
+ *  base address will not be updated; makes sense given that the hosts own memory should be mapped to
+ *  PCI address 0x00000000.
+ * @param theImageIndex    [IN] the PowerSpan II image to set.
+ * @param theBlockSize     [IN] the block size of the image (as used by PowerSpan II: Px_TIx_CTL[BS]).
+ * @param theMemIOFlag     [IN] if PX_TGT_USE_MEM_IO, this image will have the MEM_IO bit set.
+ * @param theEndianness    [IN] the endian bits for the image (already shifted, use defines).
+ * @param theLocalBaseAddr [IN] the Local address for the image (assumed to be valid with provided block size).
+ * @param thePCIBaseAddr   [IN] the PCI address for the image (assumed to be valid with provided block size).
+ */
+int SetTargetImage (int theImageIndex, unsigned int theBlockSize,
+                   int theMemIOFlag, int theEndianness,
+                   unsigned int theLocalBaseAddr,
+                   unsigned int thePCIBaseAddr)
+{
+       unsigned int csr_reg_offset = theImageIndex * P1_TGT_IMAGE_OFF;
+       unsigned int pci_reg_offset = theImageIndex * P1_BST_OFF;
+       unsigned int reg_value = 0;
+
+       /* Make sure that the Slave Image is disabled */
+       PowerSpanClearBits ((REGS_P1_TGT_CSR + csr_reg_offset),
+                           PB_SLAVE_CSR_IMG_EN);
+
+       /* Setup the mask required for requested PB Slave Image configuration */
+       reg_value =
+               PX_TGT_CSR_TA_EN | PX_TGT_CSR_BAR_EN | (theBlockSize << 24) |
+               PX_TGT_CSR_RTT_READ | PX_TGT_CSR_WTT_WFLUSH | theEndianness;
+       if (theMemIOFlag == PX_TGT_USE_MEM_IO) {
+               reg_value |= PX_TGT_MEM_IO;
+       }
+
+       /* hardcoding the following:
+          TA_EN = 1
+          BAR_EN = 1
+          MD_EN = 0
+          MODE  = 0
+          DEST  = 0
+          RTT = 01010
+          GBL = 0
+          CI = 0
+          WTT = 00010
+          PRKEEP = 0
+          MRA = 0
+          RD_AMT = 0
+        */
+       PowerSpanWrite ((REGS_P1_TGT_CSR + csr_reg_offset), reg_value);
+
+       PowerSpanWrite ((REGS_P1_TGT_TADDR + csr_reg_offset),
+                       theLocalBaseAddr);
+
+       if (thePCIBaseAddr != (unsigned int) NULL) {
+               PowerSpanWrite ((REGS_P1_BST + pci_reg_offset),
+                               thePCIBaseAddr);
+       }
+
+       /* Enable the Slave Image */
+       PowerSpanSetBits ((REGS_P1_TGT_CSR + csr_reg_offset),
+                         PB_SLAVE_CSR_IMG_EN);
+
+       return 0;
+}
+
+int do_bridge (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       char cmd;
+       int ret_val = 1;
+       unsigned int image_index;
+       unsigned int block_size;
+       unsigned int mem_io;
+       unsigned int local_addr;
+       unsigned int pci_addr;
+       int endianness;
+
+       if (argc != 8) {
+               goto usage;
+       }
+
+       cmd = argv[1][0];
+       image_index = simple_strtoul (argv[2], NULL, 16);
+       block_size = simple_strtoul (argv[3], NULL, 16);
+       mem_io = simple_strtoul (argv[4], NULL, 16);
+       endianness = argv[5][0];
+       local_addr = simple_strtoul (argv[6], NULL, 16);
+       pci_addr = simple_strtoul (argv[7], NULL, 16);
+
+
+       switch (cmd) {
+       case 'i':
+               if (tolower (endianness) == 'b') {
+                       endianness = PX_TGT_CSR_BIG_END;
+               } else if (tolower (endianness) == 'l') {
+                       endianness = PX_TGT_CSR_TRUE_LEND;
+               } else {
+                       goto usage;
+               }
+               SetTargetImage (image_index, block_size, mem_io,
+                               endianness, local_addr, pci_addr);
+               break;
+       case 'o':
+               if (tolower (endianness) == 'b') {
+                       endianness = PB_SLAVE_CSR_BIG_END;
+               } else if (tolower (endianness) == 'l') {
+                       endianness = PB_SLAVE_CSR_TRUE_LEND;
+               } else {
+                       goto usage;
+               }
+               SetSlaveImage (image_index, block_size, mem_io,
+                              endianness, local_addr, pci_addr);
+               break;
+       default:
+               goto usage;
+       }
+
+       goto done;
+usage:
+       printf ("Usage:\n%s\n", cmdtp->help);
+
+done:
+       return ret_val;
+}
diff --git a/board/amirix/ap1000/powerspan.h b/board/amirix/ap1000/powerspan.h
new file mode 100644 (file)
index 0000000..4e9a8c1
--- /dev/null
@@ -0,0 +1,170 @@
+/**
+ * @file powerspan.h Header file for PowerSpan II code.
+ */
+
+/*
+ * (C) Copyright 2005
+ * AMIRIX Systems Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 POWERSPAN_H
+#define POWERSPAN_H
+
+#define CLEAR_MASTER_ABORT 0xdeadbeef
+#define NO_DEVICE_FOUND     -1
+#define ILLEGAL_REG_OFFSET  -2
+#define I2C_BUSY            -3
+#define I2C_ERR             -4
+
+#define REG_P1_CSR          0x004
+#define REGS_P1_BST         0x018
+#define REG_P1_ERR_CSR      0x150
+#define REG_P1_MISC_CSR     0x160
+#define REGS_P1_TGT_CSR     0x100
+#define REGS_P1_TGT_TADDR   0x104
+#define REGS_PB_SLAVE_CSR   0x200
+#define REGS_PB_SLAVE_TADDR 0x204
+#define REGS_PB_SLAVE_BADDR 0x208
+#define REG_CONFIG_ADDRESS  0x290
+#define REG_CONFIG_DATA     0x294
+#define REG_PB_ERR_CSR      0x2B0
+#define REG_PB_MISC_CSR     0x2C0
+#define REG_MISC_CSR        0x400
+#define REG_I2C_CSR         0x408
+#define REG_RESET_CSR       0x40C
+#define REG_ISR0            0x410
+#define REG_ISR1            0x414
+#define REG_IER0            0x418
+#define REG_MBOX_MAP        0x420
+#define REG_HW_MAP          0x42C
+#define REG_IDR             0x444
+
+#define CSR_MEMORY_SPACE_ENABLE 0x00000002
+#define CSR_PCI_MASTER_ENABLE   0x00000004
+
+#define P1_BST_OFF  0x04
+
+#define PX_ERR_ERR_STATUS   0x01000000
+
+#define PX_MISC_CSR_MAX_RETRY_MASK  0x00000F00
+#define PX_MISC_CSR_MAX_RETRY       0x00000F00
+#define PX_MISC_REG_BAR_ENABLE      0x00008000
+#define PB_MISC_TEA_ENABLE          0x00000010
+#define PB_MISC_MAC_TEA             0x00000040
+
+#define P1_TGT_IMAGE_OFF    0x010
+#define PX_TGT_CSR_IMG_EN   0x80000000
+#define PX_TGT_CSR_TA_EN    0x40000000
+#define PX_TGT_CSR_BAR_EN   0x20000000
+#define PX_TGT_CSR_MD_EN    0x10000000
+#define PX_TGT_CSR_MODE     0x00800000
+#define PX_TGT_CSR_DEST     0x00400000
+#define PX_TGT_CSR_MEM_IO   0x00200000
+#define PX_TGT_CSR_GBL      0x00080000
+#define PX_TGT_CSR_CL       0x00040000
+#define PX_TGT_CSR_PRKEEP   0x00000080
+
+#define PX_TGT_CSR_BS_MASK      0x0F000000
+#define PX_TGT_MEM_IO           0x00200000
+#define PX_TGT_CSR_RTT_MASK     0x001F0000
+#define PX_TGT_CSR_RTT_READ     0x000A0000
+#define PX_TGT_CSR_WTT_MASK     0x00001F00
+#define PX_TGT_CSR_WTT_WFLUSH   0x00000200
+#define PX_TGT_CSR_END_MASK     0x00000060
+#define PX_TGT_CSR_BIG_END      0x00000040
+#define PX_TGT_CSR_TRUE_LEND    0x00000060
+#define PX_TGT_CSR_RDAMT_MASK   0x00000007
+
+#define PX_TGT_CSR_BS_64MB  0xa
+#define PX_TGT_CSR_BS_16MB  0x8
+
+#define PX_TGT_USE_MEM_IO   1
+#define PX_TGT_NOT_MEM_IO   0
+
+#define PB_SLAVE_IMAGE_OFF  0x010
+#define PB_SLAVE_CSR_IMG_EN 0x80000000
+#define PB_SLAVE_CSR_TA_EN  0x40000000
+#define PB_SLAVE_CSR_MD_EN  0x20000000
+#define PB_SLAVE_CSR_MODE   0x00800000
+#define PB_SLAVE_CSR_DEST   0x00400000
+#define PB_SLAVE_CSR_MEM_IO 0x00200000
+#define PB_SLAVE_CSR_PRKEEP 0x00000080
+
+#define PB_SLAVE_CSR_BS_MASK    0x1F000000
+#define PB_SLAVE_CSR_END_MASK   0x00000060
+#define PB_SLAVE_CSR_BIG_END    0x00000040
+#define PB_SLAVE_CSR_TRUE_LEND  0x00000060
+#define PB_SLAVE_CSR_RDAMT_MASK 0x00000007
+
+#define PB_SLAVE_USE_MEM_IO 1
+#define PB_SLAVE_NOT_MEM_IO 0
+
+
+#define MISC_CSR_PCI1_LOCK  0x00000080
+
+#define I2C_CSR_ADDR      0xFF000000  /* Specifies I2C Device Address to be Accessed */
+#define I2C_CSR_DATA      0x00FF0000  /* Specifies the Required Data for a Write */
+#define I2C_CSR_DEV_CODE  0x0000F000  /* Device Select. I2C 4-bit Device Code */
+#define I2C_CSR_CS        0x00000E00  /* Chip Select */
+#define I2C_CSR_RW        0x00000100  /* Read/Write */
+#define I2C_CSR_ACT       0x00000080  /* I2C Interface Active */
+#define I2C_CSR_ERR       0x00000040  /* Error */
+
+#define I2C_EEPROM_DEV      0xa
+#define I2C_EEPROM_CHIP_SEL 0
+
+#define I2C_READ    0
+#define I2C_WRITE   1
+
+#define RESET_CSR_EEPROM_LOAD 0x00000010
+
+#define ISR_CLEAR_ALL   0xFFFFFFFF
+
+#define IER0_DMA_INTS_EN    0x0F000000
+#define IER0_PCI_1_EN       0x00400000
+#define IER0_HW_INTS_EN     0x003F0000
+#define IER0_MB_INTS_EN     0x000000FF
+#define IER0_DEFAULT        (IER0_DMA_INTS_EN | IER0_PCI_1_EN | IER0_HW_INTS_EN | IER0_MB_INTS_EN)
+
+#define MBOX_MAP_TO_INT4    0xCCCCCCCC
+
+#define HW_MAP_HW4_TO_INT4  0x000C0000
+
+#define IDR_PCI_A_OUT   0x40000000
+#define IDR_MBOX_OUT    0x10000000
+
+
+int pci_read_config_byte(int bus, int dev, int fn, int reg, unsigned char* val);
+int pci_write_config_byte(int bus, int dev, int fn, int reg, unsigned char val);
+int pci_read_config_word(int bus, int dev, int fn, int reg, unsigned short* val);
+int pci_write_config_word(int bus, int dev, int fn, int reg, unsigned short val);
+int pci_read_config_dword(int bus, int dev, int fn, int reg, unsigned long* val);
+int pci_write_config_dword(int bus, int dev, int fn, int reg, unsigned long val);
+
+unsigned int PowerSpanRead(unsigned int theOffset);
+void PowerSpanWrite(unsigned int theOffset, unsigned int theValue);
+
+int I2CAccess(unsigned char theI2CAddress, unsigned char theDevCode, unsigned char theChipSel, unsigned char* theValue, int RWFlag);
+
+int PCIWriteConfig(int bus, int dev, int fn, int reg, int width, unsigned long val);
+int PCIReadConfig(int bus, int dev, int fn, int reg, int width, unsigned long* val);
+
+int SetSlaveImage(int theImageIndex, unsigned int theBlockSize, int theMemIOFlag, int theEndianness, unsigned int theLocalBaseAddr, unsigned int thePCIBaseAddr);
+int SetTargetImage(int theImageIndex, unsigned int theBlockSize, int theMemIOFlag, int theEndianness, unsigned int theLocalBaseAddr, unsigned int thePCIBaseAddr);
+
+#endif
diff --git a/board/amirix/ap1000/serial.c b/board/amirix/ap1000/serial.c
new file mode 100644 (file)
index 0000000..39c4157
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * (C) Copyright 2002
+ * Peter De Schrijver (p2@mind.be), Mind Linux Solutions, NV.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <asm/u-boot.h>
+#include <asm/processor.h>
+#include <common.h>
+#include <command.h>
+#include <config.h>
+
+#include <ns16550.h>
+
+#if 0
+#include "serial.h"
+#endif
+
+const NS16550_t COM_PORTS[] =
+       { (NS16550_t) CFG_NS16550_COM1, (NS16550_t) CFG_NS16550_COM2 };
+
+#undef CFG_DUART_CHAN
+#define CFG_DUART_CHAN gComPort
+static int gComPort = 0;
+
+int serial_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       int clock_divisor = CFG_NS16550_CLK / 16 / gd->baudrate;
+
+       (void) NS16550_init (COM_PORTS[0], clock_divisor);
+       gComPort = 0;
+
+       return 0;
+}
+
+void serial_putc (const char c)
+{
+       if (c == '\n') {
+               NS16550_putc (COM_PORTS[CFG_DUART_CHAN], '\r');
+       }
+
+       NS16550_putc (COM_PORTS[CFG_DUART_CHAN], c);
+}
+
+int serial_getc (void)
+{
+       return NS16550_getc (COM_PORTS[CFG_DUART_CHAN]);
+}
+
+int serial_tstc (void)
+{
+       return NS16550_tstc (COM_PORTS[CFG_DUART_CHAN]);
+}
+
+void serial_setbrg (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       int clock_divisor = CFG_NS16550_CLK / 16 / gd->baudrate;
+
+#ifdef CFG_INIT_CHAN1
+       NS16550_reinit (COM_PORTS[0], clock_divisor);
+#endif
+#ifdef CFG_INIT_CHAN2
+       NS16550_reinit (COM_PORTS[1], clock_divisor);
+#endif
+}
+
+void serial_puts (const char *s)
+{
+       while (*s) {
+               serial_putc (*s++);
+       }
+}
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+void kgdb_serial_init (void)
+{
+}
+
+void putDebugChar (int c)
+{
+       serial_putc (c);
+}
+
+void putDebugStr (const char *str)
+{
+       serial_puts (str);
+}
+
+int getDebugChar (void)
+{
+       return serial_getc ();
+}
+
+void kgdb_interruptible (int yes)
+{
+       return;
+}
+#endif /* CFG_CMD_KGDB */
diff --git a/board/amirix/ap1000/u-boot.lds b/board/amirix/ap1000/u-boot.lds
new file mode 100644 (file)
index 0000000..109e7fe
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_ARCH(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      :
+  {
+    /* 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/amirix/ap1000/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)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/armadillo/Makefile b/board/armadillo/Makefile
new file mode 100644 (file)
index 0000000..52ea7f2
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2002
+# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+# Marius Groeger <mgroeger@sysgo.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    = lib$(BOARD).a
+
+OBJS   := armadillo.o flash.o
+SOBJS  := lowlevel_init.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/armadillo/armadillo.c b/board/armadillo/armadillo.c
new file mode 100644 (file)
index 0000000..de04c66
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2005 Rowel Atienza <rowel@diwalabs.com>
+ * Armadillo board HT1070
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 <clps7111.h>
+
+/* ------------------------------------------------------------------------- */
+
+
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+int board_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* Activate LED flasher */
+       IO_LEDFLSH = 0x40;
+
+       /* arch number MACH_TYPE_ARMADILLO - not official*/
+       gd->bd->bi_arch_number = 83;
+
+       /* location of boot parameters */
+       gd->bd->bi_boot_params = 0xc0000100;
+
+       return 0;
+}
+
+int dram_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+
+       return (0);
+}
diff --git a/board/armadillo/config.mk b/board/armadillo/config.mk
new file mode 100644 (file)
index 0000000..23c432f
--- /dev/null
@@ -0,0 +1,29 @@
+#
+# (C) Copyright 2000
+# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+# Marius Groeger <mgroeger@sysgo.de>
+#
+# (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
+#
+
+#address where u-boot will be relocated
+TEXT_BASE = 0xc0f80000
diff --git a/board/armadillo/flash.c b/board/armadillo/flash.c
new file mode 100644 (file)
index 0000000..037a643
--- /dev/null
@@ -0,0 +1,338 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2005 Rowel Atienza <rowel@diwalabs.com>
+ * Flash driver for armadillo board HT1070
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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>
+
+#define FLASH_BANK_SIZE 0x400000
+
+/*value used by hermit is 0x200*/
+/*document says sector size is either 64k in low mem reg and 8k in high mem reg*/
+#define MAIN_SECT_SIZE  0x10000
+
+#define UNALIGNED_MASK (3)
+#define FL_WORD(addr) (*(volatile unsigned short*)(addr))
+#define FLASH_TIMEOUT 20000000
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+
+/*-----------------------------------------------------------------------
+ */
+
+ulong flash_init (void)
+{
+       int i, j;
+       ulong size = 0;
+
+       for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
+               ulong flashbase = 0;
+
+               flash_info[i].flash_id = (FUJ_MANUFACT & FLASH_VENDMASK);
+               /*(INTEL_ID_28F128J3 & FLASH_TYPEMASK); */
+               flash_info[i].size = FLASH_BANK_SIZE;
+               flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
+               memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
+               if (i == 0)
+                       flashbase = PHYS_FLASH_1;
+               else
+                       panic ("configured too many flash banks!\n");
+               for (j = 0; j < flash_info[i].sector_count; j++) {
+                       flash_info[i].start[j] =
+                               flashbase + j * MAIN_SECT_SIZE;
+               }
+               size += flash_info[i].size;
+       }
+
+       /* Protect monitor and environment sectors
+        */
+       flash_protect (FLAG_PROTECT_SET,
+                      CFG_FLASH_BASE,
+                      CFG_FLASH_BASE + monitor_flash_len - 1,
+                      &flash_info[0]);
+
+       flash_protect (FLAG_PROTECT_SET,
+                      CFG_ENV_ADDR,
+                      CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
+
+       return size;
+}
+
+/*-----------------------------------------------------------------------
+ */
+void flash_print_info (flash_info_t * info)
+{
+       int i;
+
+       switch (info->flash_id & FLASH_VENDMASK) {
+       case (FUJ_MANUFACT & FLASH_VENDMASK):
+               printf ("Fujitsu: ");
+               break;
+       default:
+               printf ("Unknown Vendor ");
+               break;
+       }
+/*
+       switch (info->flash_id & FLASH_TYPEMASK) {
+       case (INTEL_ID_28F128J3 & FLASH_TYPEMASK):
+               printf ("28F128J3 (128Mbit)\n");
+               break;
+       default:
+               printf ("Unknown Chip Type\n");
+               goto Done;
+               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");
+
+/*
+Done:  ;
+*/
+}
+
+/*
+ *  * Loop until both write state machines complete.
+ *   */
+static unsigned short flash_status_wait (unsigned long addr,
+                                        unsigned short value)
+{
+       unsigned short status;
+       long timeout = FLASH_TIMEOUT;
+
+       while (((status = (FL_WORD (addr))) != value) && timeout > 0) {
+               timeout--;
+       }
+       return status;
+}
+
+/*
+ * Loop until the Write State machine is ready, then do a full error
+ * check.  Clear status and leave the flash in Read Array mode; return
+ * 0 for no error, -1 for error.
+ */
+static int flash_status_full_check (unsigned long addr, unsigned short value1,
+                                   unsigned short value2)
+{
+       unsigned short status1, status2;
+
+       status1 = flash_status_wait (addr, value1);
+       status2 = flash_status_wait (addr + 2, value2);
+       return (status1 != value1 || status2 != value2) ? -1 : 0;
+}
+
+/*-----------------------------------------------------------------------
+ */
+
+int flash_erase (flash_info_t * info, int s_first, int s_last)
+{
+       int flag, prot, sect;
+       int rc = ERR_OK;
+       unsigned long base;
+       unsigned long addr;
+
+       if ((info->flash_id & FLASH_VENDMASK) !=
+           (FUJ_MANUFACT & FLASH_VENDMASK)) {
+               return ERR_UNKNOWN_FLASH_VENDOR;
+       }
+
+       prot = 0;
+       for (sect = s_first; sect <= s_last; ++sect) {
+               if (info->protect[sect]) {
+                       prot++;
+               }
+       }
+       if (prot)
+               return ERR_PROTECTED;
+
+       /*
+        * Disable interrupts which might cause a timeout
+        * here. Remember that our exception vectors are
+        * at address 0 in the flash, and we don't want a
+        * (ticker) exception to happen while the flash
+        * chip is in programming mode.
+        */
+       flag = disable_interrupts ();
+
+       printf ("Erasing %d sectors starting at sector %2d.\n"
+               "This make take some time ... ",
+               s_last - s_first, sect);
+       /* Start erase on unprotected sectors */
+       for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
+               /* ARM simple, non interrupt dependent timer */
+               reset_timer_masked ();
+
+               if (info->protect[sect] == 0) { /* not protected */
+
+                       addr = sect * MAIN_SECT_SIZE;
+                       addr &= ~(unsigned long) UNALIGNED_MASK;        /* word align */
+                       base = addr & 0xF0000000;
+
+                       FL_WORD (base + (0x555 << 1)) = 0xAA;
+                       FL_WORD (base + (0x2AA << 1)) = 0x55;
+                       FL_WORD (base + (0x555 << 1)) = 0x80;
+                       FL_WORD (base + (0x555 << 1)) = 0xAA;
+                       FL_WORD (base + (0x2AA << 1)) = 0x55;
+                       FL_WORD (addr) = 0x30;
+                       if (flash_status_full_check (addr, 0xFFFF, 0xFFFF))
+                               return ERR_PROTECTED;
+               }
+       }
+       printf ("\nDone.\n");
+       if (ctrlc ())
+               printf ("User Interrupt!\n");
+
+       /* allow flash to settle - wait 10 ms */
+       udelay_masked (10000);
+
+       if (flag)
+               enable_interrupts ();
+
+       return rc;
+}
+
+
+/*-----------------------------------------------------------------------
+ * Copy memory to flash
+ */
+
+static int write_word (flash_info_t * info, ulong dest, ushort data)
+{
+       int flag;
+       unsigned long base;
+
+       /* Check if Flash is (sufficiently) erased
+        */
+       if ((FL_WORD (dest) & data) != data)
+               return ERR_NOT_ERASED;
+
+       /*if(dest & UNALIGNED_MASK) return ERR_ALIGN; */
+
+       /*
+        * Disable interrupts which might cause a timeout
+        * here. Remember that our exception vectors are
+        * at address 0 in the flash, and we don't want a
+        * (ticker) exception to happen while the flash
+        * chip is in programming mode.
+        */
+       flag = disable_interrupts ();
+
+       /* arm simple, non interrupt dependent timer */
+       reset_timer_masked ();
+
+       base = dest & 0xF0000000;
+       FL_WORD (base + (0x555 << 1)) = 0xAA;
+       FL_WORD (base + (0x2AA << 1)) = 0x55;
+       FL_WORD (base + (0x555 << 1)) = 0xA0;
+       FL_WORD (dest) = data;
+       /*printf("writing 0x%p = 0x%x\n",dest,data); */
+       if (flash_status_wait (dest, data) != data)
+               return ERR_PROG_ERROR;
+
+       if (flag)
+               enable_interrupts ();
+
+       return ERR_OK;
+}
+
+/*-----------------------------------------------------------------------
+ * Copy memory to flash.
+ */
+
+int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
+{
+       ulong cp, wp;
+       ushort data;
+       int l;
+       int i, rc;
+
+       wp = (addr & ~1);       /* get lower word aligned address */
+       printf ("Writing %d short data to 0x%p from 0x%p.\n ", cnt, wp, src);
+
+       /*
+        * handle unaligned start bytes
+        */
+       if ((l = addr - wp) != 0) {
+               data = 0;
+               for (i = 0, cp = wp; i < l; ++i, ++cp) {
+                       data = (data >> 8) | (*(uchar *) cp << 8);
+               }
+               for (; i < 2 && cnt > 0; ++i) {
+                       data = (data >> 8) | (*src++ << 8);
+                       --cnt;
+                       ++cp;
+               }
+               for (; cnt == 0 && i < 2; ++i, ++cp) {
+                       data = (data >> 8) | (*(uchar *) cp << 8);
+               }
+
+               if ((rc = write_word (info, wp, data)) != 0) {
+                       return (rc);
+               }
+               wp += 2;
+       }
+
+       /*
+        * handle word aligned part
+        */
+       while (cnt >= 2) {
+               data = *((vu_short *) src);
+               if ((rc = write_word (info, wp, data)) != 0) {
+                       return (rc);
+               }
+               src += 2;
+               wp += 2;
+               cnt -= 2;
+       }
+
+       if (cnt == 0) {
+               printf ("\nDone.\n");
+               return ERR_OK;
+       }
+
+       /*
+        * handle unaligned tail bytes
+        */
+       data = 0;
+       for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
+               data = (data >> 8) | (*src++ << 8);
+               --cnt;
+       }
+       for (; i < 2; ++i, ++cp) {
+               data = (data >> 8) | (*(uchar *) cp << 8);
+       }
+
+       return write_word (info, wp, data);
+}
diff --git a/board/armadillo/lowlevel_init.S b/board/armadillo/lowlevel_init.S
new file mode 100644 (file)
index 0000000..6cf6426
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Initialization stuff - taken from hermit
+ * (C) Copyright 2005 Rowel Atienza <rowel@diwalabs.com>
+ * Armadillo board HT1070
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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>
+
+
+/* some parameters for the board */
+/* setting up the memory */
+#define        SRAM_START      0x60000000
+#define        SRAM_SIZE       0x0000c000
+
+.globl lowlevel_init
+lowlevel_init:
+       mov     r0, #0x70               /* 32-bit code + data, MMU mandatory */
+       mcr     p15, 0, r0, c1, c0, 0   /* MMU init */
+
+       mov     r0, #0
+       mcr     p15, 0, r0, c7, c7, 0   /* flush v3/v4 cache */
+       mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
+
+       mov     r0, #0x80000000         /* I/O base */
+
+       mov     r1, #0x6                /* CLKCTL_73 in SYSCON3 */
+       add     r2, r0, #0x2200         /* address of SYSCON3 in r2 */
+       str     r1, [r2]                /* set clock speed to 73.728 MHz */
+
+       mov     r1, #0x81               /* 64KHz DRAM refresh period */
+       str     r1, [r0, #0x200]        /* set DRFPR */
+
+       mov     r1, #0x500              /* permanent enable, 16bits wide */
+       add     r1, r1, #0x42           /* 128Mbit, CAS lat = 2 SDRAM */
+       add     r2, r0, #0x2300         /* load address in r2 */
+       str     r1, [r2]
+
+       mov     r1, #0x100              /* SDRAM refresh rate */
+       add     r2, r0, #0x2340         /* load address in r2 */
+       str     r1, [r2]
+
+       mov     sp, #SRAM_START         /* init stack pointer */
+       add     sp, sp, #SRAM_SIZE
+
+       /* everything is fine now */
+       mov     pc, lr
diff --git a/board/armadillo/u-boot.lds b/board/armadillo/u-boot.lds
new file mode 100644 (file)
index 0000000..64d946c
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * (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_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text      :
+       {
+         cpu/arm720t/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 : { *(.bss) }
+       _end = .;
+}
index 92ad9f8e56991ac00e505e1780f732862d8a3c35..7a3a9b8fc86b14fbffc958c67e9b4a5c7dd483ff 100644 (file)
@@ -46,6 +46,7 @@ SECTIONS
        .got : { *(.got) }
 
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 2f70ec6f368820e83fc8e8fa55fd84645b417721..ec77da9de3723dda07c64d3feece615c38ef56c5 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := at91rm9200dk.o at45.o dm9161.o flash.o
+OBJS   := at91rm9200dk.o at45.o flash.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS) $(SOBJS)
index 2cb60b0fa38bd42b62d26564db1d20228e3a6dbe..90167768539174d40dae3f14d21d64b0781402cc 100644 (file)
@@ -24,6 +24,8 @@
 
 #include <common.h>
 #include <asm/arch/AT91RM9200.h>
+#include <at91rm9200_net.h>
+#include <dm9161.h>
 
 /* ------------------------------------------------------------------------- */
 /*
@@ -39,7 +41,7 @@ int board_init (void)
 
        /* Correct IRDA resistor problem */
        /* Set PA23_TXD in Output */
-       (AT91PS_PIO) AT91C_BASE_PIOA->PIO_OER = AT91C_PA23_TXD2;
+       ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER = AT91C_PA23_TXD2;
 
        /* memory and cpu-speed are setup before relocation */
        /* so we do _nothing_ here */
@@ -61,6 +63,30 @@ int dram_init (void)
        return 0;
 }
 
+#ifdef CONFIG_DRIVER_ETHER
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+/*
+ * Name:
+ *     at91rm9200_GetPhyInterface
+ * Description:
+ *     Initialise the interface functions to the PHY
+ * Arguments:
+ *     None
+ * Return value:
+ *     None
+ */
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
+{
+       p_phyops->Init = dm9161_InitPhy;
+       p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
+       p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
+       p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+#endif /* CONFIG_DRIVER_ETHER */
+
 /*
  * Disk On Chip (NAND) Millenium initialization.
  * The NAND lives in the CS2* space
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..f4fbf969c3cf6445dd210053c319e591440dc3ae 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 26b7c80d3526611bae108181b39e66a973d19db6..2ab60e866b2ff40c93a297956e2c06338bbeda2e 100644 (file)
@@ -181,7 +181,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
index 7ac29a0fb247d602eed0dc6fb5cbce5a95f02100..eee83d09937192e660237c617166246dcb3c2a6b 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,10 +95,12 @@ SECTIONS
   _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 = .;
diff --git a/board/barco/Makefile b/board/barco/Makefile
new file mode 100644 (file)
index 0000000..d6bbf2f
--- /dev/null
@@ -0,0 +1,40 @@
+#
+# (C) Copyright 2000
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS =  $(BOARD).o flash.o
+
+$(LIB):        .depend $(OBJS)
+       $(AR) crv $@ $(OBJS)
+
+#########################################################################
+
+.depend:       Makefile $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/barco/README b/board/barco/README
new file mode 100644 (file)
index 0000000..d255a3d
--- /dev/null
@@ -0,0 +1,11 @@
+This port of U-Boot is tuned to run on a range of Barco Control Rooms
+Streaming Video Solutions, including:
+
+   - Streaming Video Card (SVC)
+   - Sample Compress Network (SCN)
+
+For more information, see http://www.barcocontrolrooms.com/
+
+Code and configuration are originally based on the Sandpoint board
+
+Marc Leeman <marc.leeman@barco.com>
diff --git a/board/barco/barco.c b/board/barco/barco.c
new file mode 100644 (file)
index 0000000..becbd0a
--- /dev/null
@@ -0,0 +1,363 @@
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/barco.c,v $
+ * $Revision: 1.4 $
+ * $Author: mleeman $
+ * $Date: 2005/03/02 16:40:20 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco.c,v $
+ * Revision 1.4  2005/03/02 16:40:20  mleeman
+ * remove empty labels (3.4 complains)
+ *
+ * Revision 1.3  2005/02/21 12:48:58  mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.2  2005/02/21 10:10:53  mleeman
+ * - split up switch statement to a function call (Linux kernel coding guidelines)
+ *   ( feedback wd)
+ *
+ * Revision 1.1  2005/02/14 09:31:07  mleeman
+ * renaming of files
+ *
+ * Revision 1.1  2005/02/14 09:23:46  mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ *   supporting and adding multiple boards
+ *
+ * Revision 1.3  2005/02/10 13:57:32  mleeman
+ * fixed flash corruption: I should exit from the moment I find the correct value
+ *
+ * Revision 1.2  2005/02/09 12:56:23  mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2004
+ * Marc Leeman <marc.leeman@barco.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 <mpc824x.h>
+#include <pci.h>
+#include <malloc.h>
+#include <command.h>
+
+#include "config.h"
+#include "barco_svc.h"
+
+#define TRY_WORKING  (3)
+#define BOOT_DEFAULT (2)
+#define BOOT_WORKING (1)
+
+int checkboard (void)
+{
+       /*TODO: Check processor type */
+
+       puts (  "Board: Streaming Video Card for Hydra systems "
+#ifdef CONFIG_MPC8240
+               "8240"
+#endif
+#ifdef CONFIG_MPC8245
+               "8245"
+#endif
+               " Unity ##Test not implemented yet##\n");
+       return 0;
+}
+
+long int initdram (int board_type)
+{
+       long size;
+       long new_bank0_end;
+       long mear1;
+       long emear1;
+
+       size = get_ram_size (CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE);
+
+       new_bank0_end = size - 1;
+       mear1 = mpc824x_mpc107_getreg (MEAR1);
+       emear1 = mpc824x_mpc107_getreg (EMEAR1);
+       mear1 = (mear1  & 0xFFFFFF00) |
+               ((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
+       emear1 = (emear1 & 0xFFFFFF00) |
+               ((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
+       mpc824x_mpc107_setreg (MEAR1, mear1);
+       mpc824x_mpc107_setreg (EMEAR1, emear1);
+
+       return (size);
+}
+
+/*
+ * Initialize PCI Devices, report devices found.
+ */
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_barcohydra_config_table[] = {
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x0f, PCI_ANY_ID,
+         pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
+                                      PCI_ENET0_MEMADDR,
+                                      PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
+       { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x10, PCI_ANY_ID,
+         pci_cfgfunc_config_device, { PCI_ENET1_IOADDR,
+                                      PCI_ENET1_MEMADDR,
+                                      PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
+       { }
+};
+#endif
+
+struct pci_controller hose = {
+#ifndef CONFIG_PCI_PNP
+       config_table: pci_barcohydra_config_table,
+#endif
+};
+
+void pci_init_board (void)
+{
+       pci_mpc824x_init (&hose);
+}
+
+int write_flash (char *addr, char value)
+{
+       char *adr = (char *)0xFF800000;
+       int cnt = 0;
+       char status,oldstatus;
+
+       *(adr+0x55) = 0xAA; udelay (1);
+       *(adr+0xAA) = 0x55; udelay (1);
+       *(adr+0x55) = 0xA0; udelay (1);
+       *addr = value;
+
+       status = *addr;
+       do {
+               oldstatus = status;
+               status = *addr;
+
+               if ((oldstatus & 0x40) == (status & 0x40)) {
+                       return 4;
+               }
+               cnt++;
+               if (cnt > 10000) {
+                       return 2;
+               }
+       } while ( (status & 0x20) == 0 );
+
+       oldstatus = *addr;
+       status = *addr;
+
+       if ((oldstatus & 0x40) == (status & 0x40)) {
+               return 0;
+       } else {
+               *(adr+0x55) = 0xF0;
+               return 1;
+       }
+}
+
+unsigned update_flash (unsigned char *buf)
+{
+       switch ((*buf) & 0x3) {
+       case TRY_WORKING:
+               printf ("found 3 and converted it to 2\n");
+               write_flash ((char *)buf, (*buf) & 0xFE);
+               *((unsigned char *)0xFF800000) = 0xF0;
+               udelay (100);
+               printf ("buf [%#010x] %#010x\n", buf, (*buf));
+               /* XXX - fall through??? */
+       case BOOT_WORKING :
+               return BOOT_WORKING;
+       }
+       return BOOT_DEFAULT;
+}
+
+unsigned scan_flash (void)
+{
+       char section[] =  "kernel";
+       int cfgFileLen  =  (CFG_FLASH_ERASE_SECTOR_LENGTH >> 1);
+       int sectionPtr  = 0;
+       int foundItem   = 0; /* 0: None, 1: section found, 2: "=" found */
+       int bufPtr;
+       unsigned char *buf;
+
+       buf = (unsigned char*)(CFG_FLASH_RANGE_BASE + CFG_FLASH_RANGE_SIZE \
+                       - CFG_FLASH_ERASE_SECTOR_LENGTH);
+       for (bufPtr = 0; bufPtr < cfgFileLen; ++bufPtr) {
+               if ((buf[bufPtr]==0xFF) && (*(int*)(buf+bufPtr)==0xFFFFFFFF)) {
+                       return BOOT_DEFAULT;
+               }
+               /* This is the scanning loop, we try to find a particular
+                * quoted value
+                */
+               switch (foundItem) {
+               case 0:
+                       if ((section[sectionPtr] == 0)) {
+                               ++foundItem;
+                       } else if (buf[bufPtr] == section[sectionPtr]) {
+                               ++sectionPtr;
+                       } else {
+                               sectionPtr = 0;
+                       }
+                       break;
+               case 1:
+                       ++foundItem;
+                       break;
+               case 2:
+                       ++foundItem;
+                       break;
+               case 3:
+               default:
+                       return update_flash (&buf[bufPtr - 1]);
+               }
+       }
+
+       printf ("Failed to read %s\n",section);
+       return BOOT_DEFAULT;
+}
+
+TSBootInfo* find_boot_info (void)
+{
+       unsigned bootimage = scan_flash ();
+       TSBootInfo* info = (TSBootInfo*)malloc (sizeof(TSBootInfo));
+
+       switch (bootimage) {
+       case TRY_WORKING:
+               info->address = CFG_WORKING_KERNEL_ADDRESS;
+               break;
+       case BOOT_WORKING :
+               info->address = CFG_WORKING_KERNEL_ADDRESS;
+               break;
+       case BOOT_DEFAULT:
+       default:
+               info->address= CFG_DEFAULT_KERNEL_ADDRESS;
+
+       }
+       info->size = *((unsigned int *)(info->address ));
+
+       return info;
+}
+
+void barcobcd_boot (void)
+{
+       TSBootInfo* start;
+       char *bootm_args[2];
+       char *buf;
+       int cnt;
+       extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
+
+       buf = (char *)(0x00800000);
+       /* make certain there are enough chars to print the command line here!
+        */
+       bootm_args[0] = (char *)malloc (16*sizeof(char));
+       bootm_args[1] = (char *)malloc (16*sizeof(char));
+
+       start = find_boot_info ();
+
+       printf ("Booting kernel at address %#10x with size %#10x\n",
+                       start->address, start->size);
+
+       /* give length of the kernel image to bootm */
+       sprintf (bootm_args[0],"%x",start->size);
+       /* give address of the kernel image to bootm */
+       sprintf (bootm_args[1],"%x",buf);
+
+       printf ("flash address: %#10x\n",start->address+8);
+       printf ("buf address: %#10x\n",buf);
+
+       /* aha, we reserve 8 bytes here... */
+       for (cnt = 0; cnt < start->size ; cnt++) {
+               buf[cnt] = ((char *)start->address)[cnt+8];
+       }
+
+       /* initialise RAM memory */
+       *((unsigned int *)0xFEC00000) = 0x00141A98;
+       do_bootm (NULL,0,2,bootm_args);
+}
+
+int barcobcd_boot_image (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+#if 0
+       if (argc > 1) {
+               printf ("Usage:\n (%d) %s\n", argc, cmdtp->usage);
+               return 1;
+       }
+#endif
+       barcobcd_boot ();
+
+       return 0;
+}
+
+/* Currently, boot_working and boot_default are the same command. This is
+ * left in here to see what we'll do in the future */
+
+U_BOOT_CMD (
+               try_working, 1, 1, barcobcd_boot_image,
+               " try_working - check flash value and boot the appropriate image\n",
+               "\n"
+         );
+
+U_BOOT_CMD (
+               boot_working, 1, 1, barcobcd_boot_image,
+               " boot_working - check flash value and boot the appropriate image\n",
+               "\n"
+         );
+
+U_BOOT_CMD (
+               boot_default, 1, 1, barcobcd_boot_image,
+               " boot_default - check flash value and boot the appropriate image\n",
+               "\n"
+         );
+/*
+ * We are not using serial communication, so just provide empty functions
+ */
+int serial_init (void)
+{
+       return 0;
+}
+void serial_setbrg (void)
+{
+       return;
+}
+void serial_putc (const char c)
+{
+       return;
+}
+void serial_puts (const char *c)
+{
+       return;
+}
+void serial_addr (unsigned int i)
+{
+       return;
+}
+int serial_getc (void)
+{
+       return 0;
+}
+int serial_tstc (void)
+{
+       return 0;
+}
+
+unsigned long post_word_load (void)
+{
+       return 0l;
+}
+void post_word_store (unsigned long val)
+{
+       return;
+}
diff --git a/board/barco/barco_svc.h b/board/barco/barco_svc.h
new file mode 100644 (file)
index 0000000..088f61e
--- /dev/null
@@ -0,0 +1,68 @@
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/barco_svc.h,v $
+ * $Revision: 1.2 $
+ * $Author: mleeman $
+ * $Date: 2005/02/21 12:48:58 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco_svc.h,v $
+ * Revision 1.2  2005/02/21 12:48:58  mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1  2005/02/14 09:31:07  mleeman
+ * renaming of files
+ *
+ * Revision 1.1  2005/02/14 09:23:46  mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ *   supporting and adding multiple boards
+ *
+ * Revision 1.1  2005/02/08 15:40:19  mleeman
+ * modified and added platform files
+ *
+ * Revision 1.2  2005/01/25 08:05:04  mleeman
+ * more cleanup of the code
+ *
+ * Revision 1.1  2004/07/20 08:49:55  mleeman
+ * Working version of the default and nfs kernel booting.
+ *
+ *
+ *******************************************************************/
+
+#ifndef _LOCAL_BARCOHYDRA_H_
+#define _LOCAL_BARCOHYDRA_H_
+
+#include <flash.h>
+#include <asm/io.h>
+
+/* Defines for the barcohydra board */
+#ifndef CFG_FLASH_ERASE_SECTOR_LENGTH
+#define CFG_FLASH_ERASE_SECTOR_LENGTH (0x10000)
+#endif
+
+#ifndef CFG_DEFAULT_KERNEL_ADDRESS
+#define CFG_DEFAULT_KERNEL_ADDRESS (CFG_FLASH_BASE + 0x30000)
+#endif
+
+#ifndef CFG_WORKING_KERNEL_ADDRESS
+#define CFG_WORKING_KERNEL_ADDRESS (0xFFE00000)
+#endif
+
+
+typedef struct SBootInfo {
+       unsigned int address;
+       unsigned int size;
+       unsigned char state;
+}TSBootInfo;
+
+/* barcohydra.c */
+int checkboard(void);
+long int initdram(int board_type);
+void pci_init_board(void);
+void check_flash(void);
+int write_flash(char *addr, char value);
+TSBootInfo* find_boot_info(void);
+void final_boot(void);
+#endif
similarity index 77%
rename from board/tqm8540/config.mk
rename to board/barco/config.mk
index b0ba25fae6fc641469cea86dd6ab5af5c901afab..f950c07b01591edc8e1dec9f8f71ddb6fe656d5a 100644 (file)
@@ -1,6 +1,6 @@
-# Copyright 2004 Freescale Semiconductor.
-# Modified by Xianghua Xiao, X.Xiao@motorola.com
-# (C) Copyright 2002,Motorola Inc.
+#
+# (C) Copyright 2000, 2001
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
 # project.
@@ -22,8 +22,9 @@
 #
 
 #
-# tqm8540 board
-# default CCARBAR is at 0xff700000
-# assume U-Boot is less than 256k
+# Barco Hydra/SCN boards
 #
-TEXT_BASE = 0xfffc0000
+
+TEXT_BASE = 0xFFF00000
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
diff --git a/board/barco/early_init.S b/board/barco/early_init.S
new file mode 100644 (file)
index 0000000..07dafb7
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * (C) Copyright 2001
+ * Thomas Koeller, tkoeller@gmx.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
+ */
+
+#ifndef        __ASSEMBLY__
+#define __ASSEMBLY__   1
+#endif
+
+#include <config.h>
+#include <asm/processor.h>
+#include <mpc824x.h>
+#include <ppc_asm.tmpl>
+
+#if defined(USE_DINK32)
+  /* We are running from RAM, so do not clear the MCCR1_MEMGO bit! */
+  #define MCCR1VAL ((CFG_ROMNAL << MCCR1_ROMNAL_SHIFT) | (CFG_ROMFAL << MCCR1_ROMFAL_SHIFT) | MCCR1_MEMGO)
+#else
+  #define MCCR1VAL (CFG_ROMNAL << MCCR1_ROMNAL_SHIFT) | (CFG_ROMFAL << MCCR1_ROMFAL_SHIFT)
+#endif
+
+       .text
+
+       /* Values to program into memory controller registers */
+tbl:   .long   MCCR1, MCCR1VAL
+       .long   MCCR2, CFG_REFINT << MCCR2_REFINT_SHIFT
+       .long   MCCR3
+       .long   (((CFG_BSTOPRE & 0x000000f0) >> 4) << MCCR3_BSTOPRE2TO5_SHIFT) | \
+               (CFG_REFREC << MCCR3_REFREC_SHIFT) | \
+               (CFG_RDLAT  << MCCR3_RDLAT_SHIFT)
+       .long   MCCR4
+       .long   (CFG_PRETOACT << MCCR4_PRETOACT_SHIFT) | (CFG_ACTTOPRE << MCCR4_ACTTOPRE_SHIFT) | \
+               (CFG_REGISTERD_TYPE_BUFFER << 20) | \
+               (((CFG_BSTOPRE & 0x00000300) >> 8) << MCCR4_BSTOPRE0TO1_SHIFT ) | \
+               ((CFG_SDMODE_CAS_LAT << 4) | (CFG_SDMODE_WRAP << 3) | \
+               (CFG_SDMODE_BURSTLEN) << MCCR4_SDMODE_SHIFT) | \
+               (CFG_ACTTORW << MCCR4_ACTTORW_SHIFT) | \
+               ((CFG_BSTOPRE & 0x0000000f) << MCCR4_BSTOPRE6TO9_SHIFT )
+       .long   MSAR1
+       .long   (((CFG_BANK0_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  0) | \
+               (((CFG_BANK1_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  8) | \
+               (((CFG_BANK2_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 16) | \
+               (((CFG_BANK3_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 24)
+       .long   EMSAR1
+       .long   (((CFG_BANK0_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  0) | \
+               (((CFG_BANK1_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  8) | \
+               (((CFG_BANK2_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 16) | \
+               (((CFG_BANK3_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 24)
+       .long   MSAR2
+       .long   (((CFG_BANK4_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  0) | \
+               (((CFG_BANK5_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  8) | \
+               (((CFG_BANK6_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 16) | \
+               (((CFG_BANK7_START & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 24)
+       .long   EMSAR2
+       .long   (((CFG_BANK4_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  0) | \
+               (((CFG_BANK5_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  8) | \
+               (((CFG_BANK6_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 16) | \
+               (((CFG_BANK7_START & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 24)
+       .long   MEAR1
+       .long   (((CFG_BANK0_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  0) | \
+               (((CFG_BANK1_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  8) | \
+               (((CFG_BANK2_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 16) | \
+               (((CFG_BANK3_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 24)
+       .long   EMEAR1
+       .long   (((CFG_BANK0_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  0) | \
+               (((CFG_BANK1_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  8) | \
+               (((CFG_BANK2_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 16) | \
+               (((CFG_BANK3_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 24)
+       .long   MEAR2
+       .long   (((CFG_BANK4_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  0) | \
+               (((CFG_BANK5_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) <<  8) | \
+               (((CFG_BANK6_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 16) | \
+               (((CFG_BANK7_END & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT) << 24)
+       .long   EMEAR2
+       .long   (((CFG_BANK4_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  0) | \
+               (((CFG_BANK5_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) <<  8) | \
+               (((CFG_BANK6_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 16) | \
+               (((CFG_BANK7_END & MICR_EADDR_MASK) >> MICR_EADDR_SHIFT) << 24)
+       .long   0
+
+
+       /*
+        * Early CPU initialization. Set up memory controller, so we can access any RAM at all. This
+        * must be done in assembly, since we have no stack at this point.
+        */
+       .global early_init_f
+early_init_f:
+       mflr    r10
+
+       /* basic memory controller configuration */
+       lis     r3, CONFIG_ADDR_HIGH
+       lis     r4, CONFIG_DATA_HIGH
+       bl      lab
+lab:   mflr    r5
+       lwzu    r0, tbl - lab(r5)
+loop:  lwz     r1, 4(r5)
+       stwbrx  r0, 0, r3
+       eieio
+       stwbrx  r1, 0, r4
+       eieio
+       lwzu    r0, 8(r5)
+       cmpli   cr0, 0, r0, 0
+       bne     cr0, loop
+
+       /* set bank enable bits */
+       lis     r0, MBER@h
+       ori     r0, 0, MBER@l
+       li      r1, CFG_BANK_ENABLE
+       stwbrx  r0, 0, r3
+       eieio
+       stb     r1, 0(r4)
+       eieio
+
+       /* delay loop */
+       lis     r0, 0x0003
+       mtctr   r0
+delay: bdnz    delay
+
+       /* enable memory controller */
+       lis     r0, MCCR1@h
+       ori     r0, 0, MCCR1@l
+       stwbrx  r0, 0, r3
+       eieio
+       lwbrx   r0, 0, r4
+       oris    r0, 0, MCCR1_MEMGO@h
+       stwbrx  r0, 0, r4
+       eieio
+
+       /* set up stack pointer */
+       lis     r1, CFG_INIT_SP_OFFSET@h
+       ori     r1, r1, CFG_INIT_SP_OFFSET@l
+
+       mtlr    r10
+       blr
diff --git a/board/barco/flash.c b/board/barco/flash.c
new file mode 100644 (file)
index 0000000..6cb19b7
--- /dev/null
@@ -0,0 +1,611 @@
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/flash.c,v $
+ * $Revision: 1.3 $
+ * $Author: mleeman $
+ * $Date: 2005/02/21 12:48:58 $
+ *
+ * Last ChangeLog Entry
+ * $Log: flash.c,v $
+ * Revision 1.3  2005/02/21 12:48:58  mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.2  2005/02/21 11:04:04  mleeman
+ * remove dead code and Coding style (feedback wd)
+ *
+ * Revision 1.1  2005/02/14 09:23:46  mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ *   supporting and adding multiple boards
+ *
+ * Revision 1.2  2005/02/09 12:56:23  mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <mpc824x.h>
+#include <asm/processor.h>
+#include <flash.h>
+
+#define ROM_CS0_START  0xFF800000
+#define ROM_CS1_START  0xFF000000
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips    */
+
+#if defined(CFG_ENV_IS_IN_FLASH)
+# ifndef  CFG_ENV_ADDR
+#  define CFG_ENV_ADDR  (CFG_FLASH_BASE + CFG_ENV_OFFSET)
+# endif
+# ifndef  CFG_ENV_SIZE
+#  define CFG_ENV_SIZE  CFG_ENV_SECT_SIZE
+# endif
+# ifndef  CFG_ENV_SECT_SIZE
+#  define CFG_ENV_SECT_SIZE  CFG_ENV_SIZE
+# endif
+#endif
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static int write_word (flash_info_t *info, ulong dest, ulong data);
+
+/*flash command address offsets*/
+
+#define ADDR0          (0xAAA)
+#define ADDR1          (0x555)
+#define ADDR3          (0x001)
+
+#define FLASH_WORD_SIZE unsigned char
+
+/*-----------------------------------------------------------------------
+ */
+
+static unsigned long flash_id(unsigned char mfct, unsigned char chip) __attribute__ ((const));
+
+typedef struct{
+  FLASH_WORD_SIZE extval;
+  unsigned short intval;
+} map_entry;
+
+static unsigned long flash_id(unsigned char mfct, unsigned char chip)
+{
+       static const map_entry mfct_map[] = {
+               {(FLASH_WORD_SIZE) AMD_MANUFACT,        (unsigned short) ((unsigned long) FLASH_MAN_AMD >> 16)},
+               {(FLASH_WORD_SIZE) FUJ_MANUFACT,        (unsigned short) ((unsigned long) FLASH_MAN_FUJ >> 16)},
+               {(FLASH_WORD_SIZE) STM_MANUFACT,        (unsigned short) ((unsigned long) FLASH_MAN_STM >> 16)},
+               {(FLASH_WORD_SIZE) MT_MANUFACT, (unsigned short) ((unsigned long) FLASH_MAN_MT >> 16)},
+               {(FLASH_WORD_SIZE) INTEL_MANUFACT,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)},
+               {(FLASH_WORD_SIZE) INTEL_ALT_MANU,(unsigned short) ((unsigned long) FLASH_MAN_INTEL >> 16)}
+       };
+
+       static const map_entry chip_map[] = {
+               {AMD_ID_F040B,  FLASH_AM040},
+               {AMD_ID_F033C,  FLASH_AM033},
+               {AMD_ID_F065D,  FLASH_AM065},
+               {ATM_ID_LV040,  FLASH_AT040},
+               {(FLASH_WORD_SIZE) STM_ID_x800AB,       FLASH_STM800AB}
+       };
+
+       const map_entry *p;
+       unsigned long result = FLASH_UNKNOWN;
+
+       /* find chip id */
+       for(p = &chip_map[0]; p < &chip_map[sizeof chip_map / sizeof chip_map[0]]; p++){
+               if(p->extval == chip){
+                       result = FLASH_VENDMASK | p->intval;
+                       break;
+               }
+       }
+
+       /* find vendor id */
+       for(p = &mfct_map[0]; p < &mfct_map[sizeof mfct_map / sizeof mfct_map[0]]; p++){
+               if(p->extval == mfct){
+                       result &= ~FLASH_VENDMASK;
+                       result |= (unsigned long) p->intval << 16;
+                       break;
+               }
+       }
+
+       return result;
+}
+
+
+unsigned long flash_init(void)
+{
+       unsigned long i;
+       unsigned char j;
+       static const ulong flash_banks[] = CFG_FLASH_BANKS;
+
+       /* Init: no FLASHes known */
+       for (i = 0; i < CFG_MAX_FLASH_BANKS; i++){
+               flash_info_t * const pflinfo = &flash_info[i];
+               pflinfo->flash_id = FLASH_UNKNOWN;
+               pflinfo->size = 0;
+               pflinfo->sector_count = 0;
+       }
+
+       /* Enable writes to Hydra/Argus flash */
+       {
+               register unsigned int temp;
+               CONFIG_READ_WORD(PICR1,temp);
+               temp |= PICR1_FLASH_WR_EN;
+               CONFIG_WRITE_WORD(PICR1,temp);
+       }
+
+       for(i = 0; i < sizeof flash_banks / sizeof flash_banks[0]; i++){
+               flash_info_t * const pflinfo = &flash_info[i];
+               const unsigned long base_address = flash_banks[i];
+               volatile FLASH_WORD_SIZE * const flash = (FLASH_WORD_SIZE *) base_address;
+
+               /* write autoselect sequence */
+               flash[0x5555] = 0xaa;
+               flash[0x2aaa] = 0x55;
+               flash[0x5555] = 0x90;
+               __asm__ __volatile__("sync");
+
+               pflinfo->flash_id = flash_id(flash[0x0], flash[0x1]);
+
+               switch(pflinfo->flash_id & FLASH_TYPEMASK){
+                       case FLASH_AM033:
+                               pflinfo->size = 0x00200000;
+                               pflinfo->sector_count = 64;
+                               for(j = 0; j < 64; j++){
+                                       pflinfo->start[j] = base_address + 0x00010000 * j;
+                                       pflinfo->protect[j] = flash[(j << 16) | 0x2];
+                               }
+                               break;
+                       case FLASH_AM065:
+                               pflinfo->size = 0x00800000;
+                               pflinfo->sector_count =128;
+                               for(j = 0; j < 128; j++){
+                                       pflinfo->start[j] = base_address + 0x00010000 * j;
+                                       pflinfo->protect[j] = flash[(j << 16) | 0x2];
+                               }
+                               break;
+                       case FLASH_AT040:
+                               pflinfo->size = 0x00080000;
+                               pflinfo->sector_count = 2;
+                               pflinfo->start[0] = base_address ;
+                               pflinfo->start[1] = base_address + 0x00004000;
+                               pflinfo->protect[0] = ((flash[0x02] & 0X01)==0) ? 0X02 : 0X01;
+                               pflinfo->protect[1] = 0X02;
+                               break;
+                       case FLASH_AM040:
+                               pflinfo->size = 0x00080000;
+                               pflinfo->sector_count = 8;
+                               for(j = 0; j < 8; j++){
+                                       pflinfo->start[j] = base_address + 0x00010000 * j;
+                                       pflinfo->protect[j] = flash[(j << 16) | 0x2];
+                               }
+                               break;
+                       case FLASH_STM800AB:
+                               pflinfo->size = 0x00100000;
+                               pflinfo->sector_count = 19;
+                               pflinfo->start[0] = base_address;
+                               pflinfo->start[1] = base_address + 0x4000;
+                               pflinfo->start[2] = base_address + 0x6000;
+                               pflinfo->start[3] = base_address + 0x8000;
+                               for(j = 1; j < 16; j++){
+                                       pflinfo->start[j+3] = base_address + 0x00010000 * j;
+                               }
+                               break;
+               }
+               /* Protect monitor and environment sectors */
+#if CFG_MONITOR_BASE >= CFG_FLASH_BASE
+               flash_protect(FLAG_PROTECT_SET,
+                               CFG_MONITOR_BASE,
+                               CFG_MONITOR_BASE + monitor_flash_len - 1,
+                               &flash_info[0]);
+#endif
+
+#if (CFG_ENV_IS_IN_FLASH == 1) && defined(CFG_ENV_ADDR)
+               flash_protect(FLAG_PROTECT_SET,
+                               CFG_ENV_ADDR,
+                               CFG_ENV_ADDR + CFG_ENV_SIZE - 1,
+                               &flash_info[0]);
+#endif
+
+               /* reset device to read mode */
+               flash[0x0000] = 0xf0;
+               __asm__ __volatile__("sync");
+       }
+
+       return flash_info[0].size + flash_info[1].size;
+}
+
+/*-----------------------------------------------------------------------
+ */
+void flash_print_info(flash_info_t *info)
+{
+       static const char unk[] = "Unknown";
+       const char *mfct = unk, *type = unk;
+       unsigned int i;
+
+       if(info->flash_id != FLASH_UNKNOWN){
+               switch(info->flash_id & FLASH_VENDMASK){
+                       case FLASH_MAN_ATM:
+                               mfct = "Atmel";
+                               break;
+                       case FLASH_MAN_AMD:
+                               mfct = "AMD";
+                               break;
+                       case FLASH_MAN_FUJ:
+                               mfct = "FUJITSU";
+                               break;
+                       case FLASH_MAN_STM:
+                               mfct = "STM";
+                               break;
+                       case FLASH_MAN_SST:
+                               mfct = "SST";
+                               break;
+                       case FLASH_MAN_BM:
+                               mfct = "Bright Microelectonics";
+                               break;
+                       case FLASH_MAN_INTEL:
+                               mfct = "Intel";
+                               break;
+               }
+
+               switch(info->flash_id & FLASH_TYPEMASK){
+                       case FLASH_AT040:
+                               type = "AT49LV040 (512K * 8, uniform sector size)";
+                               break;
+                       case FLASH_AM033:
+                               type = "AM29F033C (4 Mbit * 8, uniform sector size)";
+                               break;
+                       case FLASH_AM040:
+                               type = "AM29F040B (512K * 8, uniform sector size)";
+                               break;
+                       case FLASH_AM065:
+                               type = "AM29F0465D ( 8 MBit * 8, uniform sector size) or part of AM29F652D( 16 MB)";
+                               break;
+                       case FLASH_AM400B:
+                               type = "AM29LV400B (4 Mbit, bottom boot sect)";
+                               break;
+                       case FLASH_AM400T:
+                               type = "AM29LV400T (4 Mbit, top boot sector)";
+                               break;
+                       case FLASH_AM800B:
+                               type = "AM29LV800B (8 Mbit, bottom boot sect)";
+                               break;
+                       case FLASH_AM800T:
+                               type = "AM29LV800T (8 Mbit, top boot sector)";
+                               break;
+                       case FLASH_AM160T:
+                               type = "AM29LV160T (16 Mbit, top boot sector)";
+                               break;
+                       case FLASH_AM320B:
+                               type = "AM29LV320B (32 Mbit, bottom boot sect)";
+                               break;
+                       case FLASH_AM320T:
+                               type = "AM29LV320T (32 Mbit, top boot sector)";
+                               break;
+                       case FLASH_STM800AB:
+                               type = "M29W800AB (8 Mbit, bottom boot sect)";
+                               break;
+                       case FLASH_SST800A:
+                               type = "SST39LF/VF800 (8 Mbit, uniform sector size)";
+                               break;
+                       case FLASH_SST160A:
+                               type = "SST39LF/VF160 (16 Mbit, uniform sector size)";
+                               break;
+               }
+       }
+
+       printf(
+                       "\n  Brand: %s Type: %s\n"
+                       "  Size: %lu KB in %d Sectors\n",
+                       mfct,
+                       type,
+                       info->size >> 10,
+                       info->sector_count
+             );
+
+       printf ("  Sector Start Addresses:");
+
+       for (i = 0; i < info->sector_count; i++){
+               unsigned long size;
+               unsigned int erased;
+               unsigned long * flash = (unsigned long *) info->start[i];
+
+               /*
+                * Check if whole sector is erased
+                */
+               size =
+                       (i != (info->sector_count - 1)) ?
+                       (info->start[i + 1] - info->start[i]) >> 2 :
+                       (info->start[0] + info->size - info->start[i]) >> 2;
+
+               for(
+                               flash = (unsigned long *) info->start[i], erased = 1;
+                               (flash != (unsigned long *) info->start[i] + size) && erased;
+                               flash++
+                  ){
+                       erased = *flash == ~0x0UL;
+               }
+
+               printf(
+                               "%s %08lX %s %s",
+                               (i % 5) ? "" : "\n   ",
+                               info->start[i],
+                               erased ? "E" : " ",
+                               info->protect[i] ? "RO" : "  "
+                     );
+       }
+
+       puts("\n");
+       return;
+}
+
+int flash_erase(flash_info_t *info, int s_first, int s_last)
+{
+       volatile FLASH_WORD_SIZE *addr = (FLASH_WORD_SIZE *)(info->start[0]);
+       int flag, prot, sect, l_sect;
+       ulong start, now, last;
+       unsigned char sh8b;
+
+       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_MAN_STM | FLASH_AMD_COMP))) {
+               printf ("Can't erase unknown flash type - aborted\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");
+       }
+
+       l_sect = -1;
+
+       /* Check the ROM CS */
+       if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
+               sh8b = 3;
+       }
+       else{
+               sh8b = 0;
+       }
+
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
+
+       addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+       addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+       addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
+       addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+       addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+
+       /* Start erase on unprotected sectors */
+       for (sect = s_first; sect<=s_last; sect++) {
+               if (info->protect[sect] == 0) { /* not protected */
+                       addr = (FLASH_WORD_SIZE *)(info->start[0] + (
+                                               (info->start[sect] - info->start[0]) << sh8b));
+                       if (info->flash_id & FLASH_MAN_SST){
+                               addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+                               addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+                               addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00800080;
+                               addr[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+                               addr[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+                               addr[0] = (FLASH_WORD_SIZE)0x00500050;  /* block erase */
+                               udelay(30000);  /* wait 30 ms */
+                       }
+                       else
+                               addr[0] = (FLASH_WORD_SIZE)0x00300030;  /* sector erase */
+                       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 = (FLASH_WORD_SIZE *)(info->start[0] + (
+                               (info->start[l_sect] - info->start[0]) << sh8b));
+       while ((addr[0] & (FLASH_WORD_SIZE)0x00800080) != (FLASH_WORD_SIZE)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 */
+                       serial_putc ('.');
+                       last = now;
+               }
+       }
+
+DONE:
+       /* reset to read mode */
+       addr = (FLASH_WORD_SIZE *)info->start[0];
+       addr[0] = (FLASH_WORD_SIZE)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)
+{
+       ulong cp, wp, data;
+       int i, l, rc;
+
+       wp = (addr & ~3);   /* get lower word aligned address */
+
+       /*
+        * handle unaligned start bytes
+        */
+       if ((l = addr - wp) != 0) {
+               data = 0;
+               for (i=0, cp=wp; i<l; ++i, ++cp) {
+                       data = (data << 8) | (*(uchar *)cp);
+               }
+               for (; i<4 && cnt>0; ++i) {
+                       data = (data << 8) | *src++;
+                       --cnt;
+                       ++cp;
+               }
+               for (; cnt==0 && i<4; ++i, ++cp) {
+                       data = (data << 8) | (*(uchar *)cp);
+               }
+
+               if ((rc = write_word(info, wp, data)) != 0) {
+                       return (rc);
+               }
+               wp += 4;
+       }
+
+       /*
+        * handle word aligned part
+        */
+       while (cnt >= 4) {
+               data = 0;
+               for (i=0; i<4; ++i) {
+                       data = (data << 8) | *src++;
+               }
+               if ((rc = write_word(info, wp, data)) != 0) {
+                       return (rc);
+               }
+               wp  += 4;
+               cnt -= 4;
+       }
+
+       if (cnt == 0) {
+               return (0);
+       }
+
+       /*
+        * handle unaligned tail bytes
+        */
+       data = 0;
+       for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
+               data = (data << 8) | *src++;
+               --cnt;
+       }
+       for (; i<4; ++i, ++cp) {
+               data = (data << 8) | (*(uchar *)cp);
+       }
+
+       return (write_word(info, wp, data));
+}
+
+/*-----------------------------------------------------------------------
+ * Write a word to Flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+static int write_word (flash_info_t *info, ulong dest, ulong data)
+{
+       volatile FLASH_WORD_SIZE *addr2 = (FLASH_WORD_SIZE *)info->start[0];
+       volatile FLASH_WORD_SIZE *dest2;
+       volatile FLASH_WORD_SIZE *data2 = (FLASH_WORD_SIZE *)&data;
+       ulong start;
+       int flag;
+       int i;
+       unsigned char sh8b;
+
+       /* Check the ROM CS */
+       if ((info->start[0] >= ROM_CS1_START) && (info->start[0] < ROM_CS0_START)){
+               sh8b = 3;
+       }
+       else{
+               sh8b = 0;
+       }
+
+       dest2 = (FLASH_WORD_SIZE *)(((dest - info->start[0]) << sh8b) +
+                       info->start[0]);
+
+       /* Check if Flash is (sufficiently) erased */
+       if ((*dest2 & (FLASH_WORD_SIZE)data) != (FLASH_WORD_SIZE)data) {
+               return (2);
+       }
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
+
+       for (i=0; i<4/sizeof(FLASH_WORD_SIZE); i++){
+               addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00AA00AA;
+               addr2[ADDR1 << sh8b] = (FLASH_WORD_SIZE)0x00550055;
+               addr2[ADDR0 << sh8b] = (FLASH_WORD_SIZE)0x00A000A0;
+
+               dest2[i << sh8b] = data2[i];
+
+               /* re-enable interrupts if necessary */
+               if (flag){
+                       enable_interrupts();
+               }
+
+               /* data polling for D7 */
+               start = get_timer (0);
+               while ((dest2[i << sh8b] & (FLASH_WORD_SIZE)0x00800080) !=
+                               (data2[i] & (FLASH_WORD_SIZE)0x00800080)) {
+                       if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
+                               return (1);
+                       }
+               }
+       }
+
+       return (0);
+}
+
+/*----------------------------------------------------------------------- */
diff --git a/board/barco/speed.h b/board/barco/speed.h
new file mode 100644 (file)
index 0000000..46860e8
--- /dev/null
@@ -0,0 +1,78 @@
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/board/barco/speed.h,v $
+ * $Revision: 1.2 $
+ * $Author: mleeman $
+ * $Date: 2005/02/21 12:48:58 $
+ *
+ * Last ChangeLog Entry
+ * $Log: speed.h,v $
+ * Revision 1.2  2005/02/21 12:48:58  mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1  2005/02/14 09:23:46  mleeman
+ * - moved 'barcohydra' directory to a more generic barco; since we will be
+ *   supporting and adding multiple boards
+ *
+ * Revision 1.2  2005/02/09 12:56:23  mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (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
+ */
+
+/*-----------------------------------------------------------------------
+ * Timer value for timer 2, ICLK = 10
+ *
+ * SPEED_FCOUNT2 =  GCLK / (16 * (TIMER_TMR_PS + 1))
+ * SPEED_TMR3_PS = (GCLK / (16 * SPEED_FCOUNT3)) - 1
+ *
+ * SPEED_FCOUNT2       timer 2 counting frequency
+ * GCLK                        CPU clock
+ * SPEED_TMR2_PS       prescaler
+ */
+#define SPEED_TMR2_PS          (250 - 1)       /* divide by 250        */
+
+/*-----------------------------------------------------------------------
+ * Timer value for PIT
+ *
+ * PIT_TIME = SPEED_PITC / PITRTCLK
+ * PITRTCLK = 8192
+ */
+#define SPEED_PITC     (82 << 16)      /* start counting from 82       */
+
+/*
+ * The new value for PTA is calculated from
+ *
+ *     PTA = (gclk * Trefresh) / (2 ^ (2 * DFBRG) * PTP * NCS)
+ *
+ * gclk                CPU clock (not bus clock !)
+ * Trefresh    Refresh cycle * 4 (four word bursts used)
+ * DFBRG       For normal mode (no clock reduction) always 0
+ * PTP         Prescaler (already adjusted for no. of banks and 4K / 8K refresh)
+ * NCS         Number of SDRAM banks (chip selects) on this UPM.
+ */
diff --git a/board/barco/u-boot.lds b/board/barco/u-boot.lds
new file mode 100644 (file)
index 0000000..7bf8531
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+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/mpc824x/start.o        (.text)
+    lib_ppc/board.o    (.text)
+    lib_ppc/ppcstring.o        (.text)
+
+       . = DEFINED(env_offset) ? env_offset : .;
+    common/environment.o (.text)
+
+       *(.text)
+
+    *(.fixup)
+    *(.got1)
+    . = ALIGN(16);
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x0FFF) & 0xFFFFF000;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(4096);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(4096);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+
+  _end = . ;
+  PROVIDE (end = .);
+}
index 98584dcf0a54641b69699391f79e61eba8367848..eaee3fdefc6b1011d14de252053f7531878187b0 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index 873ff8ccee20fdc6b72e4450863c01779b06eb05..ca8eb0cb02bbddec7839acf5eb511772fcbd6198 100644 (file)
@@ -91,7 +91,7 @@ const uint sdram_table[] =
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
+       unsigned char *s = (unsigned char *)getenv ("serial#");
 
        puts ("Board: TTTech C2MON ");
 
@@ -155,7 +155,7 @@ long int initdram (int board_type)
         * try 8 column mode
         */
        size8 = dram_size (CFG_MAMR_8COL,
-                          (ulong *)SDRAM_BASE2_PRELIM,
+                          SDRAM_BASE2_PRELIM,
                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -164,7 +164,7 @@ long int initdram (int board_type)
         * try 9 column mode
         */
        size9 = dram_size (CFG_MAMR_9COL,
-                          (ulong *) SDRAM_BASE2_PRELIM,
+                          SDRAM_BASE2_PRELIM,
                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
index 86e587ff2fe776c3bc1e85ddbc8af584f9ef5bbb..cdf550f67b57f61612a53b23634c62db6a138554 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index f6f7cf4fa5358e21bf43ce1e3da21968816c7034..3165d56345159f4f26a7a73c842a6d7c57c5eff3 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 7c52b0499fda42079820f18ebb62d3e02e33d787..88dc118e8fd3df0fe5ca58b4a93e89b15b33bdb1 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index bd697d8d0c56378f314f139a79b0cfa003974025..1bea0074fa1c7b5da9bbf2a7139f8badd0ed7fa7 100644 (file)
@@ -86,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -118,10 +119,12 @@ SECTIONS
   _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 = .;
index 36d24073d20a3f5e7fa929cf38dd72fb220af979..2c8fe9603d9121882c49752a959458c5ee4fd6ea 100644 (file)
@@ -86,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -118,10 +119,12 @@ SECTIONS
   _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 = .;
index 5d45d38036310b2ae2a7da16808fa9224382c8ad..2aa2ad78fcd551b3e89fd8b1594b46eb2a37a04a 100644 (file)
@@ -86,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -118,10 +119,12 @@ SECTIONS
   _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 = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 0d8a47f8c486a6b8f7eab5630552beaf45968c57..ec09fa23c33e8f15b576f4bc435e77adda323e90 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 0d8a47f8c486a6b8f7eab5630552beaf45968c57..ec09fa23c33e8f15b576f4bc435e77adda323e90 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index ba433d5bf2f5ffadbac0cb02377d7b8cef261335..d0def055200c5c96e12281a193fa650cf1105a25 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := cmc_pu2.o at45.o dm9161.o flash.o
+OBJS   := cmc_pu2.o at45.o flash.o load_sernum_ethaddr.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS) $(SOBJS)
index 8e0f6d3b739c5de5c08271c6475210045fc4f97e..14168e636bb8a06694bf0de5d9941608866b51e8 100644 (file)
 #include <common.h>
 #include <asm/mach-types.h>
 #include <asm/arch/AT91RM9200.h>
+#include <at91rm9200_net.h>
+#include <dm9161.h>
 
 /* ------------------------------------------------------------------------- */
 /*
  * Miscelaneous platform dependent initialisations
  */
-#define CMC_BASIC      1
+#define CMC_HP_BASIC   1
 #define CMC_PU2                2
+#define CMC_BASIC      4
 
 int hw_detect (void);
 
@@ -74,14 +77,14 @@ int board_init (void)
        /*
         * On CMC-PU2 board configure PB3-PB6 to input without pull ups to
         * clear the duo LEDs (the external pull downs assure a proper
-        * signal). On CMC-BASIC set PB3-PB6 to output and drive it
-        * high, to configure current meassurement on AINx.
+        * signal). On CMC-BASIC and CMC-HP-BASIC set PB3-PB6 to output and
+        * drive it high, to configure current measurement on AINx.
         */
        if (hw_detect() & CMC_PU2) {
                piob->PIO_ODR = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
                                AT91C_PIO_PB5 | AT91C_PIO_PB6;
        }
-       else if (hw_detect() & CMC_BASIC) {
+       else if ((hw_detect() & CMC_BASIC) || (hw_detect() & CMC_HP_BASIC)) {
                piob->PIO_SODR = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
                                AT91C_PIO_PB5 | AT91C_PIO_PB6;
                piob->PIO_OER = AT91C_PIO_PB3 | AT91C_PIO_PB4 |
@@ -119,6 +122,8 @@ int checkboard (void)
                puts ("Board: CMC-PU2 (Rittal GmbH)\n");
        else if (hw_detect() & CMC_BASIC)
                puts ("Board: CMC-BASIC (Rittal GmbH)\n");
+       else if (hw_detect() & CMC_HP_BASIC)
+               puts ("Board: CMC-HP-BASIC (Rittal GmbH)\n");
        else
                puts ("Board: unknown\n");
        return 0;
@@ -136,6 +141,40 @@ int hw_detect (void)
        pio->PIO_PPUDR = AT91C_PIO_PB12;
        pio->PIO_PER = AT91C_PIO_PB12;
 
+       /* configure PB13 as input without pull up */
+       pio->PIO_ODR = AT91C_PIO_PB13;
+       pio->PIO_PPUDR = AT91C_PIO_PB13;
+       pio->PIO_PER = AT91C_PIO_PB13;
+
        /* read board identification pin */
-       return ((pio->PIO_PDSR & AT91C_PIO_PB12) ? CMC_PU2 : CMC_BASIC);
+       if (pio->PIO_PDSR & AT91C_PIO_PB12)
+               return ((pio->PIO_PDSR & AT91C_PIO_PB13)
+                       ? CMC_PU2 : 0);
+       else
+               return ((pio->PIO_PDSR & AT91C_PIO_PB13)
+                       ? CMC_HP_BASIC : CMC_BASIC);
 }
+
+#ifdef CONFIG_DRIVER_ETHER
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+/*
+ * Name:
+ *     at91rm9200_GetPhyInterface
+ * Description:
+ *     Initialise the interface functions to the PHY
+ * Arguments:
+ *     None
+ * Return value:
+ *     None
+ */
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
+{
+       p_phyops->Init = dm9161_InitPhy;
+       p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
+       p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
+       p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+#endif /* CONFIG_DRIVER_ETHER */
diff --git a/board/cmc_pu2/load_sernum_ethaddr.c b/board/cmc_pu2/load_sernum_ethaddr.c
new file mode 100644 (file)
index 0000000..94aa30d
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * (C) Copyright 2000, 2001, 2002
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2005
+ * 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
+ */
+
+/* #define DEBUG */
+
+#include <common.h>
+
+#define I2C_CHIP       0x50    /* I2C bus address of onboard EEPROM */
+#define I2C_ALEN       1       /* length of EEPROM addresses in bytes */
+#define I2C_OFFSET     0x0     /* start address of manufacturere data block
+                                * in EEPROM */
+
+/* 64 Byte manufacturer data block in EEPROM */
+struct manufacturer_data {
+       unsigned int    serial_number;  /* serial number (0...999999) */
+       unsigned short  hardware;       /* hardware version (e.g. V1.02) */
+       unsigned short  manuf_date;     /* manufacture date (e.g. 25/02) */
+       unsigned char   name[20];       /* device name (in CHIP.INI) */
+       unsigned char   macadr[6];      /* MAC address */
+       signed char     a_kal[4];       /* calibration value for U */
+       signed char     i_kal[4];       /* calibration value for I */
+       unsigned char   reserve[18];    /* reserved */
+       unsigned short  save_nr;        /* save count */
+       unsigned short  chksum;         /* checksum */
+};
+
+
+int i2c_read (unsigned char chip, unsigned int addr, int alen,
+             unsigned char *buffer, int len);
+
+/*-----------------------------------------------------------------------
+ * Process manufacturer data block in EEPROM:
+ *
+ * If we boot on a system fresh from factory, check if the manufacturer data
+ * in the EEPROM is valid and save some information it contains.
+ *
+ * CMC manufacturer data is defined as follows:
+ *
+ * - located in the onboard EEPROM
+ * - starts at offset 0x0
+ * - size 0x00000040
+ *
+ * Internal structure: see struct definition
+ */
+
+void load_sernum_ethaddr (void)
+{
+       struct manufacturer_data data;
+       unsigned char  serial [9];
+       unsigned char  ethaddr[18];
+       unsigned short chksum;
+       unsigned char *p;
+       unsigned short i, is, id;
+
+#if !defined(CONFIG_HARD_I2C) && !defined(CONFIG_SOFT_I2C)
+#error you must define some I2C support (CONFIG_HARD_I2C or CONFIG_SOFT_I2C)
+#endif
+       if (i2c_read(I2C_CHIP, I2C_OFFSET, I2C_ALEN, (unsigned char *)&data,
+                    sizeof(data)) != 0) {
+               puts ("Error reading manufacturer data from EEPROM\n");
+               return;
+       }
+
+       /* check if manufacturer data block is valid  */
+       p = (unsigned char *)&data;
+       chksum = 0;
+       for (i = 0; i < (sizeof(data) - sizeof(data.chksum)); i++)
+               chksum += *p++;
+
+       debug ("checksum of manufacturer data block: %#.4x\n", chksum);
+
+       if (chksum != data.chksum) {
+               puts ("Error: manufacturer data block has invalid checksum\n");
+               return;
+       }
+
+       /* copy MAC address */
+       is = 0;
+       id = 0;
+       for (i = 0; i < 6; i++) {
+               sprintf (&ethaddr[id], "%02x", data.macadr[is++]);
+               id += 2;
+               if (is < 6)
+                       ethaddr[id++] = ':';
+       }
+       ethaddr[id] = '\0';     /* just to be sure */
+
+       /* copy serial number */
+       sprintf (serial, "%d", data.serial_number);
+
+       /* set serial# and ethaddr if not yet defined */
+       if (getenv("serial#") == NULL) {
+               setenv ("serial#", serial);
+       }
+
+       if (getenv("ethaddr") == NULL) {
+               setenv ("ethaddr", ethaddr);
+       }
+}
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..f4fbf969c3cf6445dd210053c319e591440dc3ae 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 3188801081f1fe88b2698ef179e639eb7fc9eddf..5b03fef66c77ddac1bbbe0c032a0525b5752953b 100644 (file)
@@ -69,6 +69,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -101,11 +102,13 @@ SECTIONS
   _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 = .;
index ed20c5967e0987d1070dac32423d287f7fda5935..872f09439c24533a858efd6f70ad9cda03607bd9 100644 (file)
@@ -110,11 +110,13 @@ SECTIONS
   _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 = .;
index d9a1b68a9cccb7b92287c3c1f38b799b2734d193..5ce2694cbf7dd85155267f865adc8d13d7a5419e 100644 (file)
@@ -64,6 +64,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -96,11 +98,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index b1807dd086acbf28e13959084c338575323a9729..9ea26aa2659f27d7e779c382a9fc0d987d46ce1e 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -104,10 +105,12 @@ SECTIONS
   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 = .;
index ce6c4540d075028597ec0db06ed81c9121a74827..05f29c6ed08047d8226c6eea40aca4ee246759bb 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index ed7c8394b41aa73f82614d1e173a51e474d02998..fb7e665b67f6d5d5c8afaafe98bf9fbfad705de0 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index fb28c42a552cee43be19a59089ccd0786f23653e..a7114eb074ece8394a0c26c608f674b3904a8294 100644 (file)
@@ -133,7 +133,7 @@ int checkboard (void)
 /* ------------------------------------------------------------------------- */
 int misc_init_r (void)
 {
-       unsigned char *s, *e;
+       char *s, *e;
        image_header_t *hdr;
        time_t timestamp;
        struct rtc_time tm;
@@ -146,7 +146,7 @@ int misc_init_r (void)
 
 #define FACTORY_SETTINGS 0xFFFC0000
        if ((s = getenv ("ethaddr")) == NULL) {
-               e = (unsigned char *) (FACTORY_SETTINGS);
+               e = (char *) (FACTORY_SETTINGS);
                if (*(e + 0) != '0'
                        || *(e + 1) != '0'
                        || *(e + 2) != ':'
@@ -314,7 +314,7 @@ static u8 *dhcp_env_update (u8 thing, u8 * pop)
        {
                setenv (Things[thing].envname, Things[thing].dhcpvalue);
        }
-       return (Things[thing].dhcpvalue);
+       return ((u8 *)(Things[thing].dhcpvalue));
 }
 
 /* ------------------------------------------------------------------------- */
index 88c880e2000a1464db3c15e382af2251dc6b30be..cf4bbb921d362ae9e099b3888ca9bf413e946b3a 100644 (file)
@@ -69,7 +69,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -89,6 +89,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -121,11 +122,13 @@ SECTIONS
   _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 = .;
index d483424ad6de09c5fff24218e17ad2797f004a38..1608f8cdaa38f02898160fe0bc028be7cdd51f20 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index fecd7e8ef387620dd09db9c5b570d44e74bf11a4..24c6f0d9869f6940f563398f361ab1aae9a85c0e 100644 (file)
@@ -25,7 +25,7 @@
 #include <asm/processor.h>
 #include <i2c.h>
 #include <miiphy.h>
-#include <405gp_enet.h>
+#include <ppc4xx_enet.h>
 
 /*
  * Configuration data for AMIS FS6377-01 Programmable 3-PLL Clock Generator
@@ -164,10 +164,15 @@ long initdram (int board_type)
 int last_stage_init(void)
 {
        /* initialize the PHY */
-       miiphy_reset(CONFIG_PHY_ADDR);
-       miiphy_write(CONFIG_PHY_ADDR, PHY_BMCR,
-                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);     /* AUTO neg */
-       miiphy_write(CONFIG_PHY_ADDR, PHY_FCSCR, 0x0d08);       /* LEDs     */
+       miiphy_reset("ppc_4xx_eth0", CONFIG_PHY_ADDR);
+
+       /* AUTO neg */
+       miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+
+       /* LEDs     */
+       miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, PHY_FCSCR, 0x0d08);
+
 
        return 0; /* success */
 }
index 8dbc5927a034afc7620a44d9f3cafa3d8f69f3d6..d75d6d1ce9aa4c29f74384f043c717b4b1198dc3 100644 (file)
@@ -69,7 +69,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
 
@@ -90,6 +90,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -122,11 +123,13 @@ SECTIONS
   _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 = .;
index 97de0fd9af924fef47da9fb5070eff94cceaeb77..833bbce923d90859f818d76fefcc1b985a82fad6 100644 (file)
@@ -25,7 +25,7 @@
 #include <asm/processor.h>
 #include <i2c.h>
 #include <miiphy.h>
-#include <405gp_enet.h>
+#include <ppc4xx_enet.h>
 
 /*
  * board_early_init_f: do early board initialization
@@ -132,10 +132,14 @@ long initdram (int board_type)
 int last_stage_init(void)
 {
        /* initialize the PHY */
-       miiphy_reset(CONFIG_PHY_ADDR);
-       miiphy_write(CONFIG_PHY_ADDR, PHY_BMCR,
-                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);     /* AUTO neg */
-       miiphy_write(CONFIG_PHY_ADDR, PHY_FCSCR, 0x0d08);       /* LEDs     */
+       miiphy_reset("ppc_4xx_eth0", CONFIG_PHY_ADDR);
+
+       /* AUTO neg */
+       miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+
+       /* LEDs     */
+       miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, PHY_FCSCR, 0x0d08);
 
        return 0; /* success */
 }
index f3e28ae8d89b5df3c4fb606e948bc525b26dd111..14ac3fb4fcd9b6ce45e85f0a8827b461ab28a3d0 100644 (file)
@@ -69,7 +69,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
 
@@ -90,6 +90,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -122,11 +123,13 @@ SECTIONS
   _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 = .;
diff --git a/board/csb637/Makefile b/board/csb637/Makefile
new file mode 100644 (file)
index 0000000..61d5a35
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   := csb637.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/csb637/config.mk b/board/csb637/config.mk
new file mode 100644 (file)
index 0000000..4c6f631
--- /dev/null
@@ -0,0 +1 @@
+TEXT_BASE = 0x23fc0000
diff --git a/board/csb637/csb637.c b/board/csb637/csb637.c
new file mode 100644 (file)
index 0000000..6100a53
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * (C) Copyright 2005 REA Elektronik GmbH <www.rea.de>
+ * Anders Larsen <alarsen@rea.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/arch/AT91RM9200.h>
+#include <at91rm9200_net.h>
+#include <bcm5221.h>
+
+/* ------------------------------------------------------------------------- */
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+int board_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* Enable Ctrlc */
+       console_init_f ();
+
+       /* memory and cpu-speed are setup before relocation */
+       /* so we do _nothing_ here */
+
+       /* arch number of CSB637-Board */
+       gd->bd->bi_arch_number = MACH_TYPE_CSB637;
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       return 0;
+}
+
+int dram_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
+       return 0;
+}
+
+#ifdef CONFIG_DRIVER_ETHER
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+/*
+ * Name:
+ *     at91rm9200_GetPhyInterface
+ * Description:
+ *     Initialise the interface functions to the PHY
+ * Arguments:
+ *     None
+ * Return value:
+ *     None
+ */
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
+{
+       p_phyops->Init           = bcm5221_InitPhy;
+       p_phyops->IsPhyConnected = bcm5221_IsPhyConnected;
+       p_phyops->GetLinkSpeed   = bcm5221_GetLinkSpeed;
+       p_phyops->AutoNegotiate  = bcm5221_AutoNegotiate;
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+#endif /* CONFIG_DRIVER_ETHER */
similarity index 91%
rename from board/integratorap/u-boot.lds
rename to board/csb637/u-boot.lds
index 33931be12773e399b6daf6c4cd627b2f8d8e567a..76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8 100644 (file)
  */
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
 OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
 {
        . = 0x00000000;
+
        . = ALIGN(4);
-       .text   :
+       .text      :
        {
-         cpu/arm926ejs/start.o (.text)
+         cpu/arm920t/start.o   (.text)
          *(.text)
        }
+
+       . = ALIGN(4);
        .rodata : { *(.rodata) }
+
        . = ALIGN(4);
        .data : { *(.data) }
+
        . = ALIGN(4);
        .got : { *(.got) }
 
index 7e6053aaeccb583694345c126da238f750b1bdc1..7be85e4410aef2c9ea4b84f57ad51175e692da1e 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index f1bbd5dc1c06cce8c38e69dd76934b3a0dfa8b49..e10ac437ec585167ca55fd9965d0514208baeba6 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+  . = .;
   __u_boot_cmd_start = .;
   .u_boot_cmd : { *(.u_boot_cmd) }
   __u_boot_cmd_end = .;
index 39d2feceb422d6fc6b586a0eed4085da53497cf8..581a5802b4c684641e6414505fc618988eeb65ca 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   = $(BOARD).o flash.o
+OBJS   = $(BOARD).o flash.o nand.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
index 1f6512d0eada746057a59dedfbb9c022a6462941..52055b85b38dad679f5f4f2a8c06cda74520b816 100644 (file)
@@ -185,7 +185,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
@@ -238,33 +238,6 @@ int testdram (void)
 
 /* ------------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_NAND)
-extern ulong
-nand_probe(ulong physadr);
-
-void
-nand_init(void)
-{
-       ulong totlen = 0;
-
-/*
-       The HI model is equipped with a large block NAND chip not supported yet
-       by U-Boot
-    (CONFIG_PPCHAMELEON_MODULE_MODEL == CONFIG_PPCHAMELEON_MODULE_HI)
-*/
-
-#if (CONFIG_PPCHAMELEON_MODULE_MODEL == CONFIG_PPCHAMELEON_MODULE_ME)
-       debug ("Probing at 0x%.8x\n", CFG_NAND0_BASE);
-       totlen += nand_probe (CFG_NAND0_BASE);
-#endif /* CONFIG_PPCHAMELEON_MODULE_ME, CONFIG_PPCHAMELEON_MODULE_HI */
-
-       debug ("Probing at 0x%.8x\n", CFG_NAND1_BASE);
-       totlen += nand_probe (CFG_NAND1_BASE);
-
-       printf ("%3lu MB\n", totlen >>20);
-}
-#endif
-
 #ifdef CONFIG_CFB_CONSOLE
 # ifdef CONFIG_CONSOLE_EXTRA_INFO
 # include <video_fb.h>
@@ -279,10 +252,10 @@ void video_get_info_str (int line_number, char *info)
        case 1:
                switch (pvr) {
                case PVR_405EP_RB:
-                       sprintf (info, " IBM PowerPC 405EP Rev. B");
+                       sprintf (info, " AMCC PowerPC 405EP Rev. B");
                        break;
                default:
-                       sprintf (info, " IBM PowerPC 405EP Rev. <unknown>");
+                       sprintf (info, " AMCC PowerPC 405EP Rev. <unknown>");
                        break;
                }
                return;
index 5856aec0ce595f2ca2de5496e964abfbb19e54cd..6e03b72b66fa8c5a1a48b6d54185739589b6bd5b 100644 (file)
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2000
+# (C) Copyright 2000, 2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
 #
 
 # Reserve 256 kB for Monitor
-TEXT_BASE = 0xFFFC0000
+#TEXT_BASE = 0xFFFC0000
 
 # Reserve 320 kB for Monitor
-#TEXT_BASE = 0xFFFB0000
+TEXT_BASE = 0xFFFB0000
+
+# Compile the new NAND code (needed iff #ifdef CONFIG_NEW_NAND_CODE)
+BOARDLIBS = drivers/nand/libnand.a
diff --git a/board/dave/PPChameleonEVB/nand.c b/board/dave/PPChameleonEVB/nand.c
new file mode 100644 (file)
index 0000000..16c67cd
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * (C) Copyright 2006 DENX Software Engineering
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 (CONFIG_COMMANDS & CFG_CMD_NAND)
+#ifdef CONFIG_NEW_NAND_CODE
+/* new NAND handling */
+
+#include <nand.h>
+
+/*
+ * hardware specific access to control-lines
+ * function borrowed from Linux 2.6 (drivers/mtd/nand/ppchameleonevb.c)
+ */
+static void ppchameleonevb_hwcontrol(struct mtd_info *mtdinfo, int cmd)
+{
+       struct nand_chip *this = mtdinfo->priv;
+       ulong base = (ulong) this->IO_ADDR_W;
+
+       switch(cmd) {
+       case NAND_CTL_SETCLE:
+               MACRO_NAND_CTL_SETCLE((unsigned long)base);
+               break;
+       case NAND_CTL_CLRCLE:
+               MACRO_NAND_CTL_CLRCLE((unsigned long)base);
+               break;
+       case NAND_CTL_SETALE:
+               MACRO_NAND_CTL_SETALE((unsigned long)base);
+               break;
+       case NAND_CTL_CLRALE:
+               MACRO_NAND_CTL_CLRALE((unsigned long)base);
+               break;
+       case NAND_CTL_SETNCE:
+               MACRO_NAND_ENABLE_CE((unsigned long)base);
+               break;
+       case NAND_CTL_CLRNCE:
+               MACRO_NAND_DISABLE_CE((unsigned long)base);
+               break;
+       }
+}
+
+
+/*
+ * read device ready pin
+ * function +/- borrowed from Linux 2.6 (drivers/mtd/nand/ppchameleonevb.c)
+ */
+static int ppchameleonevb_device_ready(struct mtd_info *mtdinfo)
+{
+       struct nand_chip *this = mtdinfo->priv;
+       ulong rb_gpio_pin;
+
+       /* use the base addr to find out which chip are we dealing with */
+       switch((ulong) this->IO_ADDR_W) {
+       case CFG_NAND0_BASE:
+               rb_gpio_pin = CFG_NAND0_RDY;
+               break;
+       case CFG_NAND1_BASE:
+               rb_gpio_pin = CFG_NAND1_RDY;
+               break;
+       default: /* this should never happen */
+               return 0;
+               break;
+       }
+
+        if (in32(GPIO0_IR) & rb_gpio_pin)
+               return 1;
+       return 0;
+}
+
+
+/*
+ * Board-specific NAND initialization. The following members of the
+ * argument are board-specific (per include/linux/mtd/nand_new.h):
+ * - IO_ADDR_R?: address to read the 8 I/O lines of the flash device
+ * - IO_ADDR_W?: address to write the 8 I/O lines of the flash device
+ * - hwcontrol: hardwarespecific function for accesing control-lines
+ * - dev_ready: hardwarespecific function for  accesing device ready/busy line
+ * - enable_hwecc?: function to enable (reset)  hardware ecc generator. Must
+ *   only be provided if a hardware ECC is available
+ * - eccmode: mode of ecc, see defines
+ * - chip_delay: chip dependent delay for transfering data from array to
+ *   read regs (tR)
+ * - options: various chip options. They can partly be set to inform
+ *   nand_scan about special functionality. See the defines for further
+ *   explanation
+ * Members with a "?" were not set in the merged testing-NAND branch,
+ * so they are not set here either.
+ */
+void board_nand_init(struct nand_chip *nand)
+{
+
+       nand->hwcontrol = ppchameleonevb_hwcontrol;
+       nand->dev_ready = ppchameleonevb_device_ready;
+       nand->eccmode = NAND_ECC_SOFT;
+       nand->chip_delay = NAND_BIG_DELAY_US;
+       nand->options = NAND_SAMSUNG_LP_OPTIONS;
+}
+
+#else
+
+/* old NAND handling */
+extern ulong
+nand_probe(ulong physadr);
+
+void
+nand_init(void)
+{
+       ulong totlen = 0;
+
+/*
+       The HI model is equipped with a large block NAND chip not supported yet
+       by U-Boot
+    (CONFIG_PPCHAMELEON_MODULE_MODEL == CONFIG_PPCHAMELEON_MODULE_HI)
+*/
+
+#if (CONFIG_PPCHAMELEON_MODULE_MODEL == CONFIG_PPCHAMELEON_MODULE_ME)
+       debug ("Probing at 0x%.8x\n", CFG_NAND0_BASE);
+       totlen += nand_probe (CFG_NAND0_BASE);
+#endif /* CONFIG_PPCHAMELEON_MODULE_ME, CONFIG_PPCHAMELEON_MODULE_HI */
+
+       debug ("Probing at 0x%.8x\n", CFG_NAND1_BASE);
+       totlen += nand_probe (CFG_NAND1_BASE);
+
+       printf ("%3lu MB\n", totlen >>20);
+}
+#endif
+#endif
index d6117674b189d1324a20a03ff5b8c567b414263b..481d291874c85f2b9604cd1f4fa3295a805d6bac 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -83,6 +83,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -115,11 +117,13 @@ SECTIONS
   _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 = .;
index a2d19a84c9eae9195799605bbd7b2f0338555b2f..10c99179864c752ad1309610c23eaab28cc03620 100644 (file)
@@ -54,6 +54,7 @@ SECTIONS
 
        .sdata  : { *(.sdata) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index bfb7c38cc89f799ab487fc80f65eb2140471c9d2..258bece23cf59813a511d23556e4da02ff940c25 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 98584dcf0a54641b69699391f79e61eba8367848..eaee3fdefc6b1011d14de252053f7531878187b0 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index b50d11b7518c0ae5396b80fe1c69c99bd0afbe11..6a2480741110ad2a9562967c21c2290316d70907 100644 (file)
@@ -58,7 +58,7 @@ unsigned char  scsi_sym53c8xx_ccf = 0x13;
 int misc_init_r (void)
 {
     revinfo eerev;
-    u_char *ptr;
+    char *ptr;
     u_int  i, l, initSrom, copyNv;
     char buf[256];
     char hex[23] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0,
@@ -139,7 +139,7 @@ int misc_init_r (void)
     if (strcmp (eerev.magic, "ELTEC") != 0)
     {
        /* srom is not initialized -> create a default revision info */
-       for (i = 0, ptr = (u_char *)&eerev; i < sizeof(revinfo); i++)
+       for (i = 0, ptr = (char *)&eerev; i < sizeof(revinfo); i++)
            *ptr++ = 0x00;
        strcpy(eerev.magic, "ELTEC");
        eerev.revrev[0] = 1;
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index 9754c1d248e19ea50f4fde9e4a334948ed59186a..f021c50cd647090314617c23b3faca4a94ef6c6d 100644 (file)
@@ -57,7 +57,7 @@ int eepro100_srom_store (unsigned short *source)
 
     /* get onboard network iobase */
     pci_read_config_dword(PCI_BDF(0,0x10,0), PCI_BASE_ADDRESS_0,
-                &onboard_dev.iobase);
+                (unsigned int *)&onboard_dev.iobase);
     onboard_dev.iobase &= ~0xf;
 
     source[63] = eepro100_srom_checksum (source);
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index bc3d9f4c6289f3dc9f5051033592cc54aee68f2d..0ffbdf0e575a765536c3d3b29811159b2b5ac28d 100644 (file)
@@ -160,7 +160,7 @@ int misc_init_r (void)
        int i;
 
        /* check revision data */
-       eeprom_read (CFG_I2C_EEPROM_ADDR, 480, (char *) &mhpcRevInfo, 32);
+       eeprom_read (CFG_I2C_EEPROM_ADDR, 480, (uchar *) &mhpcRevInfo, 32);
 
        if (strncmp ((char *) &mhpcRevInfo.board[2], "MHPC", 4) != 0) {
                printf ("Enter revision number (0-9): %c  ",
@@ -228,7 +228,7 @@ int misc_init_r (void)
                }
 
                /* setup new revision data */
-               eeprom_write (CFG_I2C_EEPROM_ADDR, 480, (char *) &mhpcRevInfo,
+               eeprom_write (CFG_I2C_EEPROM_ADDR, 480, (uchar *) &mhpcRevInfo,
                              32);
        }
 
@@ -422,8 +422,8 @@ void *video_hw_init (void)
        immap_t *immr = (immap_t *) CFG_IMMR;
 
        /* enable video only on CLUT value */
-       if ((penv = getenv ("clut")) != NULL)
-               clut = (u_int) simple_strtoul (penv, NULL, 10);
+       if ((penv = (uchar *)getenv ("clut")) != NULL)
+               clut = (u_int) simple_strtoul ((char *)penv, NULL, 10);
        else
                return NULL;
 
index 526198cc51e3affe40b1d8871485be24065edcf9..7099fc40de6fe2d54e167a363011f38bba0791c5 100644 (file)
@@ -67,6 +67,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -99,11 +100,13 @@ SECTIONS
   _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 = .;
index f6f7cf4fa5358e21bf43ce1e3da21968816c7034..3165d56345159f4f26a7a73c842a6d7c57c5eff3 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 28fe29d6445bbac983c9a4f5da17904183309c00..d6161bf3586a5a158d7dbf5f05cef40b6ea6e5f2 100644 (file)
@@ -165,7 +165,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
index cbb7f8f376f63127a4b93afbbdf8dad33385cf66..8a3a12b047f99f1d635aef2a36e8d253852b3c73 100644 (file)
@@ -69,11 +69,11 @@ void read_factory_r (void)
                /*printf ("%s\n", buf); */
                /* search for our specific entry */
                if (!strncmp ((char *) buf, "[RLA/lan/Ethernet] ", 19)) {
-                       setenv ("ethaddr", buf + 19);
+                       setenv ("ethaddr", (char *)(buf + 19));
                } else if (!strncmp ((char *) buf, "[BOARD/SERIAL] ", 15)) {
-                       setenv ("serial#", buf + 15);
+                       setenv ("serial#", (char *)(buf + 15));
                } else if (!strncmp ((char *) buf, "[BOARD/TYPE] ", 13)) {
-                       setenv ("board_id", buf + 13);
+                       setenv ("board_id", (char *)(buf + 13));
                }
        }
 }
index d999dd16ad92f7d4ca9811b277f9c3fe933ea48a..f23432ecfa8016e4f41d47dd09e927ea6d29c9c2 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index f6f54857a4a969f430c1b10964c87b2bf3cd697e..b3747e42426e94d50f9372505a110aa31569dc94 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -99,11 +100,13 @@ SECTIONS
   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 = .;
index 8d91be585fb2a849cf60cb85672287e686a78fc3..580575a5a2201818fd46b8585fe1bea1581d73e8 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 64d946c439210f6a58ece41c2838bea70d3a6498..1122d7521c43ed8247912246da5b541f63e20482 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index d6f35f31e09c8ce7488504a591dbd90b4cbdcfb1..18c4b46f47b3826e9ffdf4a9ddf4f65051bcefe3 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index 4ea3c86153d59b723a5b61f719aa8acc2fe3e8a4..4250e83f76a349244cfeb8c5cdd8dddd7316613e 100644 (file)
@@ -63,6 +63,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -95,11 +96,13 @@ SECTIONS
   _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 = .;
index 860e5064b84cd28aaf34385b20c01d3b8a5e20fe..5413ae15c75e24d12b6fd78d3eade2ab4f235c82 100644 (file)
 #include "eric.h"
 #include <asm/processor.h>
 
-#define IBM405GP_GPIO0_OR      0xef600700      /* GPIO Output */
-#define IBM405GP_GPIO0_TCR     0xef600704      /* GPIO Three-State Control */
-#define IBM405GP_GPIO0_ODR     0xef600718      /* GPIO Open Drain */
-#define IBM405GP_GPIO0_IR      0xef60071c      /* GPIO Input */
+#define PPC405GP_GPIO0_OR      0xef600700      /* GPIO Output */
+#define PPC405GP_GPIO0_TCR     0xef600704      /* GPIO Three-State Control */
+#define PPC405GP_GPIO0_ODR     0xef600718      /* GPIO Open Drain */
+#define PPC405GP_GPIO0_IR      0xef60071c      /* GPIO Input */
 
 int board_early_init_f (void)
 {
@@ -50,7 +50,7 @@ int board_early_init_f (void)
    |       IRQ 30 (EXT IRQ 5) PCI INTB#; active low; level sensitive
    |       IRQ 31 (EXT IRQ 6) PCI INTA#; active low; level sensitive
    |        -> IRQ6 Pin is NOW GPIO23 and can be activateted by setting
-   |           IBM405GP_GPIO0_TCR Bit 0 = 1 (driving the output as defined in IBM405GP_GPIO0_OR,
+   |           PPC405GP_GPIO0_TCR Bit 0 = 1 (driving the output as defined in PPC405GP_GPIO0_OR,
    |           else tristate)
    | Note for ERIC board:
    |       An interrupt taken for the HOST (IRQ 28) indicates that
@@ -70,8 +70,8 @@ int board_early_init_f (void)
 
        mtdcr (cntrl0, 0x00002000);     /* set IRQ6 as GPIO23 to generate an interrupt request to the PCP2PCI bridge */
 
-       out32 (IBM405GP_GPIO0_OR, 0x60000000);  /*fixme is SMB_INT high or low active??; IRQ6 is GPIO23 output */
-       out32 (IBM405GP_GPIO0_TCR, 0x7E400000);
+       out32 (PPC405GP_GPIO0_OR, 0x60000000);  /*fixme is SMB_INT high or low active??; IRQ6 is GPIO23 output */
+       out32 (PPC405GP_GPIO0_TCR, 0x7E400000);
 
        return 0;
 }
@@ -85,8 +85,8 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
-       unsigned char *e;
+       char *s = getenv ("serial#");
+       char *e;
 
        puts ("Board: ");
 
index 10f57d8499fc754e7a1081c0b49832d163a2e579..4a0e5b4aedf4ae40974a21b8bf46c9c4fe50e5a4 100644 (file)
@@ -69,7 +69,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -89,6 +89,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -121,11 +122,13 @@ SECTIONS
   _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 = .;
index 93bc8431bf95935d73dcc8a4885bd6e7de823932..7a11a12cefbb5035e4912096ef167bd42e126a80 100644 (file)
@@ -60,7 +60,7 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index b07d11786f23bf66fced8f578f23aed285ccaabe..ef937dd01513b2e09d827cc1f0fe615cf11e3746 100644 (file)
@@ -75,6 +75,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -107,11 +108,13 @@ SECTIONS
   _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 = .;
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index 14b0e42890f7ea88be1c17bd7e5182fc3e27aca9..3aac3c6732936ce5a12807d83ee25db2c542ef67 100644 (file)
@@ -155,7 +155,7 @@ int checkboard (void)
 
        int index;
        int len;
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
        const unsigned char *fpga;
 
index fcba23b6846dff081cddbfb51aa7fc83ea79d278..3b9aa7c5d1ce23dffbd48a8f0f5818ecafea20d9 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o                (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o         (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o          (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o          (.text)
@@ -100,6 +100,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -132,11 +133,13 @@ SECTIONS
   _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 = .;
index 012505e4e6c92d05ad5defd0a539300d7e660641..03ae7fda4bfd3bd0dddb49dd316159c26a0029c5 100644 (file)
@@ -193,7 +193,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index ba555501ed4c02ad465130cd0a47e7e6aea0228d..95854f29327d5a278db4ece3752dbb2999728b62 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +119,12 @@ SECTIONS
   _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 = .;
index ab4924970256ac4e44be432008f18ac6e9f173b4..2ced6cb17f282767fbf8aad2a658a165da19f2aa 100644 (file)
@@ -156,7 +156,7 @@ int checkboard (void)
 {
        int index;
        int len;
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index d739cea7765ef6c591f70f8dec8c1abbff87614e..ff15b3fef9f2ba7af0a1838701e29b858cf1b815 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o                (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o         (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o          (.text)
     lib_ppc/extable.o          (.text)
     lib_ppc/board.o            (.text)
@@ -99,6 +98,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -131,11 +131,13 @@ SECTIONS
   _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 = .;
diff --git a/board/esd/cms700/Makefile b/board/esd/cms700/Makefile
new file mode 100644 (file)
index 0000000..a11ee82
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2000
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+# Objects for Xilinx JTAG programming (CPLD)
+CPLD    = ../common/xilinx_jtag/lenval.o \
+         ../common/xilinx_jtag/micro.o \
+         ../common/xilinx_jtag/ports.o
+
+OBJS   = $(BOARD).o flash.o ../common/misc.o $(CPLD)
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/esd/cms700/cms700.c b/board/esd/cms700/cms700.c
new file mode 100644 (file)
index 0000000..e4cfe14
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <command.h>
+#include <malloc.h>
+
+
+extern void lxt971_no_sleep(void);
+
+
+/* fpga configuration data - not compressed, generated by bin2c */
+const unsigned char fpgadata[] =
+{
+#include "fpgadata.c"
+};
+int filesize = sizeof(fpgadata);
+
+
+int board_early_init_f (void)
+{
+       /*
+        * IRQ 0-15  405GP internally generated; active high; level sensitive
+        * IRQ 16    405GP internally generated; active low; level sensitive
+        * IRQ 17-24 RESERVED
+        * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive
+        * IRQ 26 (EXT IRQ 1) SER0 ; active low; level sensitive
+        * IRQ 27 (EXT IRQ 2) SER1; active low; level sensitive
+        * IRQ 28 (EXT IRQ 3) FPGA 0; active low; level sensitive
+        * IRQ 29 (EXT IRQ 4) FPGA 1; active low; level sensitive
+        * IRQ 30 (EXT IRQ 5) PCI INTA; active low; level sensitive
+        * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive
+        */
+       mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */
+       mtdcr(uicer, 0x00000000);       /* disable all ints */
+       mtdcr(uiccr, 0x00000000);       /* set all to be non-critical*/
+       mtdcr(uicpr, 0xFFFFFF80);       /* set int polarities */
+       mtdcr(uictr, 0x10000000);       /* set int trigger levels */
+       mtdcr(uicvcr, 0x00000001);      /* set vect base=0,INT0 highest priority*/
+       mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */
+
+       /*
+        * EBC Configuration Register: set ready timeout to 512 ebc-clks -> ca. 15 us
+        */
+       mtebc (epcr, 0xa8400000); /* ebc always driven */
+
+       /*
+        * Reset CPLD via GPIO12 (CS3) pin
+        */
+       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_PLD_RESET);
+       udelay(1000); /* wait 1ms */
+       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_PLD_RESET);
+       udelay(1000); /* wait 1ms */
+
+       return 0;
+}
+
+
+/* ------------------------------------------------------------------------- */
+
+int misc_init_f (void)
+{
+       return 0;  /* dummy implementation */
+}
+
+
+int misc_init_r (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       /*
+        * Setup and enable EEPROM write protection
+        */
+       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_EEPROM_WP);
+
+       /*
+        * Set NAND-FLASH GPIO signals to default
+        */
+       out32(GPIO0_OR, in32(GPIO0_OR) & ~(CFG_NAND_CLE | CFG_NAND_ALE));
+       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND_CE);
+
+       return (0);
+}
+
+
+/*
+ * Check Board Identity:
+ */
+
+int checkboard (void)
+{
+       char str[64];
+       int flashcnt;
+       int delay;
+       volatile unsigned char *led_reg = (unsigned char *)((ulong)CFG_PLD_BASE + 0x1000);
+       volatile unsigned char *ver_reg = (unsigned char *)((ulong)CFG_PLD_BASE + 0x1001);
+
+       puts ("Board: ");
+
+       if (getenv_r("serial#", str, sizeof(str))  == -1) {
+               puts ("### No HW ID - assuming CMS700");
+       } else {
+               puts(str);
+       }
+
+       printf(" (PLD-Version=%02d)\n", *ver_reg);
+
+       /*
+        * Flash LEDs
+        */
+       for (flashcnt = 0; flashcnt < 3; flashcnt++) {
+               *led_reg = 0x00;        /* LEDs off */
+               for (delay = 0; delay < 100; delay++)
+                       udelay(1000);
+               *led_reg = 0x0f;        /* LEDs on */
+               for (delay = 0; delay < 50; delay++)
+                       udelay(1000);
+       }
+       *led_reg = 0x70;
+
+       return 0;
+}
+
+/* ------------------------------------------------------------------------- */
+
+long int initdram (int board_type)
+{
+       unsigned long val;
+
+       mtdcr(memcfga, mem_mb0cf);
+       val = mfdcr(memcfgd);
+
+#if 0
+       printf("\nmb0cf=%x\n", val); /* test-only */
+       printf("strap=%x\n", mfdcr(strap)); /* test-only */
+#endif
+
+       return (4*1024*1024 << ((val & 0x000e0000) >> 17));
+}
+
+/* ------------------------------------------------------------------------- */
+
+#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 GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in32(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) */
+
+/* ------------------------------------------------------------------------- */
+
+#if (CONFIG_COMMANDS & CFG_CMD_NAND)
+#include <linux/mtd/nand.h>
+extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE];
+
+void nand_init(void)
+{
+       nand_probe(CFG_NAND_BASE);
+       if (nand_dev_desc[0].ChipID != NAND_ChipID_UNKNOWN) {
+               print_size(nand_dev_desc[0].totlen, "\n");
+       }
+}
+#endif
+
+void reset_phy(void)
+{
+#ifdef CONFIG_LXT971_NO_SLEEP
+
+       /*
+        * Disable sleep mode in LXT971
+        */
+       lxt971_no_sleep();
+#endif
+}
diff --git a/board/esd/cms700/config.mk b/board/esd/cms700/config.mk
new file mode 100644 (file)
index 0000000..5c3c01c
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# (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
+#
+
+#
+# esd CMS405 boards
+#
+
+TEXT_BASE = 0xFFFC0000
diff --git a/board/esd/cms700/flash.c b/board/esd/cms700/flash.c
new file mode 100644 (file)
index 0000000..89af119
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * (C) Copyright 2001
+ * 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 <ppc4xx.h>
+#include <asm/processor.h>
+
+/*
+ * include common flash code (for esd boards)
+ */
+#include "../common/flash.c"
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static ulong flash_get_size (vu_long * addr, flash_info_t * info);
+static void flash_get_offsets (ulong base, flash_info_t * info);
+
+/*-----------------------------------------------------------------------
+ */
+
+unsigned long flash_init (void)
+{
+       unsigned long size_b0;
+       int i;
+       uint pbcr;
+       unsigned long base_b0;
+       int size_val = 0;
+
+       /* Init: no FLASHes known */
+       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
+               flash_info[i].flash_id = FLASH_UNKNOWN;
+       }
+
+       /* Static FLASH Bank configuration here - FIXME XXX */
+
+       size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
+
+       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
+               printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
+                       size_b0, size_b0<<20);
+       }
+
+       /* Setup offsets */
+       flash_get_offsets (-size_b0, &flash_info[0]);
+
+       /* Re-do sizing to get full correct info */
+       mtdcr(ebccfga, pb0cr);
+       pbcr = mfdcr(ebccfgd);
+       mtdcr(ebccfga, pb0cr);
+       base_b0 = -size_b0;
+       switch (size_b0) {
+       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;
+       }
+       pbcr = (pbcr & 0x0001ffff) | base_b0 | (size_val << 17);
+       mtdcr(ebccfgd, pbcr);
+
+       /* Monitor protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           -CFG_MONITOR_LEN,
+                           0xffffffff,
+                           &flash_info[0]);
+
+       flash_info[0].size = size_b0;
+
+       return (size_b0);
+}
diff --git a/board/esd/cms700/fpgadata.c b/board/esd/cms700/fpgadata.c
new file mode 100644 (file)
index 0000000..08be5e7
--- /dev/null
@@ -0,0 +1,1812 @@
+  0x07,0x20,0x12,0x00,0x12,0x01,0x04,0x00,0x00,0x00,0x00,0x02,0x08,0xff,0x02,0x08,
+  0xfe,0x08,0x00,0x00,0x00,0x20,0x01,0x0f,0xff,0xff,0xff,0x09,0x00,0x00,0x00,0x00,
+  0xf9,0x60,0x40,0x93,0x02,0x08,0xff,0x02,0x08,0xff,0x02,0x08,0xe8,0x08,0x00,0x00,
+  0x00,0x06,0x01,0x00,0x09,0x05,0x00,0x02,0x08,0xed,0x04,0x00,0x03,0x0d,0x40,0x08,
+  0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x00,0x09,0x03,0xff,0xff,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x03,0x09,0x03,0xff,0xfd,0x03,0xff,0xfd,0x04,0x00,0x00,0x00,0x00,0x02,
+  0x08,0xea,0x08,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x00,0x24,0x00,0x1c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x00,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x00,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,
+  0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0x44,
+  0x00,0x14,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0x48,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0x4c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x50,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x00,
+  0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x84,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x00,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x00,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x00,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,
+  0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xa4,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xa8,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xac,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xc4,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x00,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x00,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x01,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x01,0x04,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x01,0x08,0x10,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x0c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x10,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x20,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x24,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x28,0x10,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x01,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x01,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x01,0x48,0x0c,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x01,0x4c,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x01,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x01,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x01,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x01,0x88,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x01,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x01,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x01,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x01,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x01,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x01,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x01,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0xc8,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x01,0xcc,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x01,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x02,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x02,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x02,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x02,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x02,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x28,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x2c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x30,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x44,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x48,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x02,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x02,0x80,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x02,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x8c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0x90,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xa0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x02,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x02,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x02,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x02,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x02,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x03,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x03,0x04,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x03,0x08,0x80,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0x0c,0x00,0x00,0x03,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0x10,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x03,0x20,0x00,0x1c,0x12,0x81,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x03,0x24,0x00,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x03,0x28,0x20,0x1c,0x11,0x81,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x03,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x03,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x03,0x40,0x00,0x14,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x03,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,
+  0x48,0x40,0x14,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0x4c,
+  0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x03,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x03,0x80,0x00,0x0c,0x01,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x03,0x84,0x00,
+  0x24,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x03,0x88,0x00,0x34,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x03,0x8c,0x00,0x50,0x43,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x03,0x90,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x03,0xa0,0x00,0x00,0x03,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x03,0xa4,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,
+  0xa8,0x00,0x00,0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xac,
+  0x00,0x5c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xb0,0x00,
+  0x1c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xc0,0x00,0x00,
+  0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xc4,0x00,0x00,0x00,
+  0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xc8,0x00,0x28,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x03,0xcc,0x00,0x54,0x00,0x61,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x03,0xd0,0x00,0x14,0x00,0x63,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x04,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x04,
+  0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x10,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x20,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x28,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x2c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x40,0x00,0x04,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x04,0x48,0x00,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x04,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x04,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x04,0x80,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x04,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x04,0x88,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0x90,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x04,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x04,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x04,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x04,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x04,0xc0,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x04,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x04,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x04,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x04,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x05,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x05,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x05,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x05,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x05,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x05,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x05,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x05,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x40,0x20,
+  0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x44,0x20,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x4c,0x00,0x04,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x05,0x50,0x00,0x04,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x05,0x80,0x00,
+  0x08,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x05,0x84,0x00,0x24,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x05,0x88,0x00,0x14,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,
+  0x8c,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0x90,
+  0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xa0,0x00,
+  0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xc0,0x00,0x00,0x00,0x81,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xc4,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x05,0xc8,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x05,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x05,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x06,0x02,0x03,0x02,0x02,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x06,0x07,0x03,0x03,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x06,0x0a,0x03,0x03,0x03,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0x0f,0x02,0x03,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0x12,0x03,0x03,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0x23,0x03,0x03,0x03,0x81,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0x27,0x03,0x03,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x06,0x29,0x03,0x03,0x03,0x81,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x06,0x2e,0x03,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x06,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x06,0x40,0x20,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x06,0x44,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x06,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x06,0x4c,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x06,0x50,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x06,0x80,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x06,
+  0x84,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x06,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x06,0x8c,0x01,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x06,0x90,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x06,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x06,0xa4,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x06,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x06,0xac,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0xc0,
+  0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0xc4,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0xc8,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x06,0xcc,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x06,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x07,0x00,
+  0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x07,0x04,0x03,0x01,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x07,0x0a,0x01,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x07,0x0e,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,
+  0x12,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x22,
+  0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x26,0x03,
+  0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x28,0x03,0x03,
+  0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x2e,0x03,0x02,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x30,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x40,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x44,0x20,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x07,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x07,0x80,0x13,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x07,0x84,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x07,0x88,0x01,0x02,
+  0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x8c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0x90,0x01,0x01,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0xa0,0x00,0x02,0x03,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x07,0xa8,0x01,0x02,0x02,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x07,0xac,0x01,0x00,0x02,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x07,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x07,0xc0,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x07,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x07,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x07,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x07,0xd0,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x08,0x02,0x02,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x08,0x06,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x08,0x09,0x03,0x03,0x02,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x08,0x0e,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x08,0x13,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x08,0x23,0x02,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x08,0x27,0x02,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x08,0x29,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x08,0x2f,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x08,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,
+  0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0x44,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0x48,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0x4c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x08,0x50,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x08,
+  0x82,0x03,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x08,0x86,0x00,0x02,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x08,0x89,0x02,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x08,0x8e,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x08,0x93,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,
+  0xa3,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xa7,
+  0x03,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xa9,0x02,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xad,0x02,0x02,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xc0,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xc4,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x08,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x08,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x09,0x00,0x22,0x00,0x02,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x04,0x41,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x0a,0x03,
+  0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x0c,0x02,0x02,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x11,0x03,0x02,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x20,0x02,0x00,0x02,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x24,0x42,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x28,0x0b,0x00,0x02,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x2d,0x03,0x02,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x09,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x09,0x44,0x80,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x09,0x48,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x09,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x09,0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x09,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0x8a,0x02,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x8c,0x02,0x02,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x09,0x91,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x09,0xa0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x09,0xa4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x09,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x09,0xad,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x09,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x09,0xc0,0x00,0x40,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0xc8,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x09,0xcc,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x09,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x0a,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0a,0x04,0x01,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x0a,0x08,0x01,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0a,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0a,0x10,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0a,0x20,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x28,
+  0x01,0x00,0x02,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x2c,0x03,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x30,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x44,0x00,0x00,0x80,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x48,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x0a,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0a,0x80,0x02,0x40,0x90,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0a,0x84,0x00,0x00,0x80,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0a,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x8c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0x90,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xa0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xa4,0x02,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xa8,0x02,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0a,0xc0,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0a,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0a,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0a,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0a,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x0b,0x00,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x0b,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0b,0x09,0x01,0x02,0x02,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0x0c,0x00,0x01,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0x10,0x01,0x01,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0x20,0x00,0x02,0x03,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0b,0x24,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0b,0x2a,0x01,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0b,0x2c,0x01,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0b,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0b,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0b,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,
+  0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0b,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x0b,0x80,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0b,0x84,0x01,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x0b,0x88,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0b,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0b,0x90,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0b,0xa0,0x00,0x00,0x02,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0b,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,
+  0xa8,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xac,
+  0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xc8,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0b,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x0b,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0c,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0c,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0c,
+  0x08,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x10,0x01,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x20,0x00,0x00,
+  0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x28,0x00,0x00,0x02,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x2c,0x01,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0c,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0c,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x0c,0x50,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0c,0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x0c,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0c,0x88,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x8c,0x00,0x00,0x02,0x21,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0x90,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0c,0xa4,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0c,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0c,0xac,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0c,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0c,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0c,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0c,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0c,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0c,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x0d,0x02,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0d,0x07,
+  0x03,0x03,0x01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x0d,0x0b,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0d,0x0f,0x02,0x03,0x01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0d,0x13,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0d,0x23,0x03,0x03,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0d,0x27,0x03,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0d,0x2b,0x0b,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,
+  0x2f,0x03,0x03,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x30,
+  0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x0d,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0d,0x80,0x60,
+  0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0d,0x84,0x40,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x0d,0x88,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0x90,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xa0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0d,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0d,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x0d,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0e,0x00,0x80,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x0e,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0e,0x08,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0x0c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0x10,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0e,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0e,0x40,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0e,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0e,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0e,0x4c,0x00,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0e,0x50,0x00,0x04,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x0e,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0e,
+  0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x0e,0x88,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0e,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0e,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0e,0xa0,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0e,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0e,0xa8,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0e,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0xc0,
+  0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0xc4,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0xc8,0x50,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0e,0xcc,0x10,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0e,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0f,0x00,
+  0x00,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x0f,0x04,0x02,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x0f,0x08,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x0f,0x0c,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,
+  0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x20,
+  0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x24,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x2a,0x00,0x01,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x2c,0x00,0x01,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x30,0x00,0x80,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x40,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x44,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x48,0x10,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x0f,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x0f,0x80,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x0f,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0f,0x88,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x8c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0x90,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0xa0,0x20,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0xa4,0x00,0x80,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0xa8,0x00,0x00,0x8c,0x0d,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x0f,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x0f,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x0f,0xc0,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x0f,0xc4,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x0f,0xc8,0x00,0x00,0x60,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x0f,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x0f,0xd0,0x00,
+  0x80,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x10,0x00,0x01,0x0a,0x0a,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x10,0x05,0x03,0x35,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x10,0x08,0x01,0x16,0x03,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x10,0x0d,0x00,0x91,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x10,0x10,0x01,0x21,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x10,0x20,0x01,0x1f,0x03,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x10,0x24,0x01,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x10,0x2a,0x01,0x3f,0x13,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x10,0x2e,0x01,0x1d,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x10,0x30,0x00,0x1c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,
+  0x40,0x00,0x14,0x00,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0x44,
+  0x00,0x80,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0x48,0x00,
+  0x1c,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0x4c,0x00,0x94,
+  0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x10,0x50,0x00,0x94,0x00,0x63,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x10,
+  0x80,0x00,0x80,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x10,0x84,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x10,0x88,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x10,0x8c,0x00,0x40,0x40,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x10,0x90,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,
+  0xa0,0x00,0xa0,0x9c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xa4,
+  0x00,0xa0,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xa8,0x00,
+  0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xac,0x00,0x40,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xb0,0x00,0x80,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xc0,0x00,0x80,0x60,0x09,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xc4,0x00,0x08,0x08,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xc8,0x00,0x20,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x10,0xcc,0x00,0x40,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x10,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x11,0x00,0x02,0x00,0x08,0xc1,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x11,0x04,0x00,0x24,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x11,0x08,0x62,
+  0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x0c,0x02,0x82,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x10,0x02,0x02,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x20,0x02,0x9c,0x00,0x81,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x24,0x02,0x00,0x10,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x28,0x42,0x20,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x2c,0x0a,0x9c,0x00,0x81,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x11,0x40,0x00,0x94,0x08,0xe1,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x11,0x44,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x11,0x48,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x11,0x4c,0x00,0x94,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x11,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x11,0x80,0x00,0x98,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x11,0x84,0x00,0x80,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x11,0x88,0x00,0x24,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x8c,0x00,0x50,0x40,0x09,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x11,0x90,0x00,0xa0,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x11,0xa0,0x00,0x00,0x10,0x61,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x11,0xa4,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x11,0xa8,0x00,0x1c,0xdc,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x11,0xac,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x11,0xb0,0x00,0x1c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x11,0xc0,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,
+  0xc4,0x00,0x80,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0xc8,
+  0x00,0x34,0x60,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x11,0xcc,0x00,
+  0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x11,0xd0,0x00,0x94,0x00,0x63,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x12,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x12,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x12,0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x12,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x12,0x11,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x12,0x20,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x28,
+  0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x2d,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x30,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x44,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x48,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x12,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x12,0x80,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x12,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x12,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x8c,0x02,
+  0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0x90,0x02,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xa0,0x02,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x12,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x12,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x12,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x12,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x12,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x13,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x13,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x13,0x08,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x13,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x13,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x13,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x13,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x13,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x13,0x40,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x13,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,
+  0x48,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x13,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x13,0x82,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x13,0x86,0x00,
+  0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x13,0x89,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x13,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x13,0x92,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x13,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x13,0xa7,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,
+  0xa9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xac,
+  0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xc8,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x13,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x13,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x14,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x14,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x14,
+  0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x10,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x20,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x28,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x2c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x40,0x20,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x14,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x14,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x14,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x14,0x80,0x10,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x14,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x14,0x88,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0x90,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,0xa0,0x10,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x14,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x14,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x14,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x14,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x14,0xc0,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x14,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x14,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x14,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x14,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x15,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x15,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x15,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x15,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x15,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x15,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x15,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x15,0x28,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x15,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x15,0x80,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x15,0x84,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x15,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0x90,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xa0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xc0,0x00,0x20,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x15,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x15,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x15,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x16,0x00,0x00,0x02,0x02,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x16,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x16,0x08,0x01,0x02,0x03,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0x0c,0x00,0x01,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0x10,0x01,0x01,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0x20,0x00,0x03,0x03,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x16,0x2a,0x01,0x03,0x03,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x16,0x2c,0x01,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x16,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x16,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x16,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x16,0x48,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x16,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x16,0x50,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x16,0x82,0x03,0x22,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x16,
+  0x87,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x16,0x8a,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x16,0x8f,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x16,0x92,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x16,0xa3,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x16,0xa7,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x16,0xa9,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x16,0xae,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0xc0,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0xc4,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0xc8,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x16,0xcc,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x16,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x17,0x00,
+  0x03,0x08,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x17,0x04,0x03,0x01,0x09,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x17,0x0a,0x01,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x17,0x0e,0x00,0x11,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,
+  0x12,0x01,0x21,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x22,
+  0x01,0xa3,0x8f,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x26,0x03,
+  0x82,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x28,0x03,0x1f,
+  0x13,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x2e,0x03,0x82,0x02,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x30,0x00,0x9c,0x00,0x81,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x40,0x00,0x80,0x68,0x09,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x44,0x00,0x08,0x00,0x81,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x48,0x00,0x14,0x00,0x61,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x17,0x50,0x00,0x94,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x17,0x82,0x03,0x01,0x2a,0xc1,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x17,0x86,0x03,0xb7,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x17,0x89,0x03,0x33,
+  0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x8e,0x02,0xc2,0x41,
+  0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0x93,0x03,0x83,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0xa3,0x03,0x1e,0x13,0x81,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0xa7,0x03,0x03,0x10,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x17,0xa9,0x03,0x23,0xce,0x0d,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x17,0xaf,0x03,0x5e,0x00,0x81,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x17,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x17,0xc0,0x00,0x1c,0x00,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x17,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x17,0xc8,0x00,0x28,0x60,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x17,0xcc,0x00,0xd4,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x17,0xd0,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x18,0x00,0x02,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x18,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x18,0x0a,0x03,0x00,0x02,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x18,0x0c,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x18,0x11,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x18,0x20,0x02,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x18,0x24,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x18,0x28,0x03,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x18,0x2d,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x18,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,
+  0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0x44,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0x48,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0x4c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x18,0x50,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x18,
+  0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x18,0x84,0x01,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x18,0x88,0x01,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x18,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x18,0x90,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,
+  0xa0,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xa4,
+  0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xa8,0x03,
+  0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xac,0x03,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xc0,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xc4,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x18,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x18,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x19,0x00,0x01,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x19,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x19,0x08,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x0c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x10,0x01,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x20,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x24,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x28,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x2c,0x00,0x10,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x30,0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x19,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x19,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x19,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x19,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x19,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x19,0x83,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x19,0x87,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x19,0x88,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x19,0x93,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x19,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x19,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x19,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x19,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x19,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x19,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0xc8,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x19,0xcc,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x19,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x1a,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1a,0x04,0x02,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x1a,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1a,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1a,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1a,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x28,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x2c,0x00,
+  0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x30,0x00,0x08,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x44,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x48,0x00,0x00,0x40,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x1a,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1a,0x81,0x01,0x01,0x01,
+  0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1a,0x85,0x01,0x03,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1a,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x8c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0x91,0x00,0x02,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xa0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1a,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1a,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1a,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1a,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1a,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x1b,0x04,0x01,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1b,0x08,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0x10,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1b,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1b,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1b,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1b,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1b,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1b,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,
+  0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1b,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x1b,0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1b,0x87,0x01,
+  0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x1b,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1b,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1b,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1b,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1b,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,
+  0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xac,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xc8,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1b,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x1b,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1c,0x01,0x42,0x08,
+  0x03,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1c,0x05,0x02,0xa7,0x02,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1c,
+  0x08,0x00,0x14,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x0c,
+  0x00,0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x11,0x00,
+  0x23,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x20,0x40,0x1c,
+  0x00,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x24,0x00,0x1c,0x00,
+  0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x28,0x00,0x1c,0x8c,0x8d,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x2c,0x00,0x9c,0x00,0x81,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x30,0x00,0x1c,0x00,0x81,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x40,0x80,0x14,0x00,0xe1,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x44,0x00,0x14,0x00,0xe1,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1c,0x48,0x00,0x1c,0x60,0x69,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1c,0x4c,0x00,0x14,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x1c,0x50,0x00,0x14,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1c,0x83,0x20,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x1c,0x87,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1c,0x88,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0x93,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1c,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1c,0xa8,0x08,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1c,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1c,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1c,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1c,0xc4,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1c,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1c,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1c,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x1d,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1d,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x1d,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1d,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1d,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1d,0x20,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1d,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1d,0x28,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x1d,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1d,0x81,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1d,0x85,0x00,0x00,0x02,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x1d,0x88,0x01,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0x91,
+  0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xa0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1d,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1d,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x1d,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1e,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x1e,0x04,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1e,0x0a,0x01,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0x0c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0x10,0x00,0x01,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1e,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1e,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1e,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1e,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1e,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1e,0x50,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x1e,0x81,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1e,
+  0x84,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x1e,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1e,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1e,0x90,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1e,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1e,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1e,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1e,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0xc0,
+  0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0xc4,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0xc8,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1e,0xcc,0x00,0x00,0x80,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1e,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1f,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x1f,0x04,0x00,0x02,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x1f,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x1f,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,
+  0x10,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x20,
+  0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x24,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x28,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x2c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x30,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x40,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x44,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x1f,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x1f,0x81,0x00,0x01,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x1f,0x85,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1f,0x88,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x8c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0x91,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0xa0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x1f,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x1f,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x1f,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x1f,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x1f,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x1f,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x1f,0xd0,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x20,0x03,0x01,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x20,0x07,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x20,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x20,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x20,0x13,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x20,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x20,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x20,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x20,0x2c,0x00,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x20,0x30,0x00,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,
+  0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0x44,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0x48,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0x4c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x20,0x50,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x20,
+  0x81,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x20,0x85,0x01,0x01,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x20,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x20,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x20,0x91,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,
+  0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xa4,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xa8,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xac,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xc0,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xc4,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xc8,0x80,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x20,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x20,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x21,0x02,0x01,0x01,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x21,0x06,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x21,0x08,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x0c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x10,0x01,0x01,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x20,0x00,0x04,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x24,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x28,0x00,0x04,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x21,0x40,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x21,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x21,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x21,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x21,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x21,0x81,0x01,0x01,0x93,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x21,0x85,0x00,0x00,0x82,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x21,0x88,0x00,0x02,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x21,0x91,0x01,0x01,0x03,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x21,0xa0,0x00,0x00,0x20,0x11,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x21,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x21,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x21,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x21,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x21,0xc0,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0xc8,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x21,0xcc,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x21,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x22,0x00,0x00,0x08,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x22,0x04,0x01,0x24,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x22,0x08,0x00,0x34,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x22,0x0c,0x00,0x50,0x40,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x22,0x10,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x22,0x20,0x00,0x00,0x10,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,
+  0x24,0x00,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x28,
+  0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x2c,0x00,
+  0x5c,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x30,0x00,0x1c,
+  0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x40,0x00,0x00,0x00,
+  0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x44,0x00,0x00,0x00,0x81,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x48,0x00,0x28,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x4c,0x00,0xd4,0x00,0x61,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x22,0x50,0x00,0x14,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x22,0x80,0x02,0x06,0x02,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x22,0x84,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x22,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x8c,0x00,
+  0x80,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0x90,0x02,0x82,
+  0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xa0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x22,0xc0,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x22,0xc4,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x22,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x22,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x22,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x23,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x23,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x23,0x08,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x23,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x23,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x23,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x23,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x23,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x23,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x23,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,
+  0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x23,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x23,0x80,0x02,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x23,0x86,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x23,0x88,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x23,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x23,0x92,0x02,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x23,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x23,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,
+  0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xac,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xc8,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x23,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x23,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x24,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x24,0x04,0x00,0x02,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x24,
+  0x08,0x01,0x00,0x01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x0c,
+  0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x10,0x00,
+  0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x20,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x28,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x2c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x24,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x24,0x4c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x24,0x50,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x24,0x80,0x01,0x01,0x01,0x21,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x24,0x84,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x24,0x8a,0x02,0x02,0x02,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0x90,0x01,0x01,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x24,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x24,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x24,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x24,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x24,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x24,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x24,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x24,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x24,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x25,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x25,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x25,0x08,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x25,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x25,0x10,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x25,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x25,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x25,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x25,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x25,0x80,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x25,0x84,0x00,0x00,0x02,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x25,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0x90,
+  0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xa0,0x04,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x25,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x25,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x25,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x26,0x00,0x03,0x00,0x02,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x26,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x26,0x08,0x00,0x03,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0x0c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0x10,0x03,0x00,0x02,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x26,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x26,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x26,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x26,0x40,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x26,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x26,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x26,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x26,0x50,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x26,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x26,
+  0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x26,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x26,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x26,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x26,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x26,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x26,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x26,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0xc0,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0xc4,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0xc8,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x26,0xcc,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x26,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x27,0x01,
+  0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x27,0x04,0x01,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x27,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x27,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,
+  0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x20,
+  0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x25,0x01,
+  0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x28,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x2c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x30,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x40,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x44,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x27,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x27,0x80,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x27,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x27,0x88,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x8c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0x90,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0xa0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x27,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x27,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x27,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x27,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x27,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x27,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x27,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x27,0xd0,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x28,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x28,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x28,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x28,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x28,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x28,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x28,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x28,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x28,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x28,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,
+  0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0x44,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0x48,0x00,
+  0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0x4c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x28,0x50,0x00,0x00,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x28,
+  0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x28,0x84,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x28,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x28,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x28,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,
+  0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xa4,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xa8,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xac,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xc0,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xc4,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x28,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x28,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x29,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x29,0x04,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x29,0x08,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x0c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x10,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x20,0x20,0x00,0x00,0x09,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x24,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x28,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x29,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x29,0x44,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x29,0x48,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x29,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x29,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x29,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x29,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x29,0x88,0x80,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x29,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x29,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x29,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x29,0xa8,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x29,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x29,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x29,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0xc8,
+  0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x29,0xcc,0x10,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x29,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x2a,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2a,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x2a,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2a,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2a,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2a,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x28,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x2c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x30,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x44,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x48,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x2a,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2a,0x80,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2a,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2a,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x8c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0x90,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xa0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2a,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2a,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2a,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2a,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2a,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x2b,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x2b,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2b,0x08,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2b,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2b,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2b,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2b,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2b,0x40,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2b,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,
+  0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2b,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x2b,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2b,0x84,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x2b,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2b,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2b,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2b,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2b,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,
+  0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xac,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xc8,0x80,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2b,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x2b,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2c,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2c,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2c,
+  0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x10,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x20,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x28,0x00,0x00,0x04,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x2c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2c,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2c,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x2c,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2c,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x2c,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2c,0x88,0x00,0x00,0x00,0x21,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0x90,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0xa0,0x00,0x00,0x40,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2c,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2c,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2c,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2c,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2c,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2c,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2c,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2c,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2c,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x2d,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2d,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x2d,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2d,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2d,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2d,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2d,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2d,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x2d,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2d,0x80,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2d,0x84,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x2d,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0x90,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xa0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xa4,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2d,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2d,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x2d,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2e,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x2e,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2e,0x08,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0x0c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0x10,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0x24,0x00,0x1c,0x00,0x81,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2e,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2e,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2e,0x44,0x00,0x14,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2e,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2e,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,
+  0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2e,0x50,0x00,0x00,
+  0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x03,0x09,0x00,0x2e,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2e,
+  0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x2e,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2e,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2e,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2e,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2e,0xa4,0x00,0x00,0x8c,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2e,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2e,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,
+  0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0xc0,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0xc4,0x00,
+  0x00,0x60,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0xc8,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2e,0xcc,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2e,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2f,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x2f,0x04,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x2f,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x2f,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,
+  0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x20,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x24,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x28,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x2c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x30,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x40,0x00,0x00,0x00,0x41,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x44,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x2f,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x2f,0x80,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x2f,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2f,0x88,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x8c,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0x90,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0xa0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x2f,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x2f,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x2f,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x2f,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x2f,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x2f,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,
+  0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x2f,0xd0,0x00,
+  0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x03,0x09,0x00,0x30,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x30,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x30,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x30,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x30,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x30,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x30,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x30,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x30,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x30,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,
+  0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0x44,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0x48,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0x4c,0x00,0x10,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x30,0x50,0x00,0x10,0x00,0x03,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x30,
+  0x80,0xe0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x30,0x84,0xc0,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x30,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x30,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x30,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,
+  0xa0,0x60,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xa4,
+  0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xa8,0x08,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xac,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xb0,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xc0,0x40,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xc4,0x40,0x00,0x00,0x05,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xc8,0x10,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x30,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x30,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x31,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x31,0x04,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x31,0x08,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x0c,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x10,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x20,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x24,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x28,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x31,0x40,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x31,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x31,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x31,0x4c,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,
+  0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x31,0x50,
+  0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x03,0x09,0x00,0x31,0x80,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x31,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x31,0x88,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x31,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x31,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x31,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x31,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x31,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x31,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x31,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,
+  0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0xc8,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x31,0xcc,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x31,0xd0,0x00,0x00,0x00,0x03,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,
+  0x32,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x32,0x04,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x32,0x08,0x00,0xc0,0xd4,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x32,0x0c,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x32,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x32,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,
+  0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x28,
+  0x00,0xc0,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x2c,0x00,
+  0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x30,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x40,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x44,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x48,0x00,0xc0,0x84,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x4c,0x00,0x20,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x32,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x32,0x80,0x08,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x32,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x32,0x88,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x8c,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0x90,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xa0,0x04,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xa4,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xa8,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xac,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x32,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x32,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x32,0xc8,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x32,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x32,
+  0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x03,0x09,0x00,0x33,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+  0x09,0x00,0x33,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x33,0x08,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x33,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x33,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x33,0x28,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x33,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x33,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x33,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x33,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,
+  0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0x4c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x33,0x50,0x00,0x00,0x00,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,
+  0x00,0x33,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x33,0x84,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x09,0x00,0x33,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x33,0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x33,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x33,0xa0,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x33,0xa4,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,
+  0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xac,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xb0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xc0,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xc4,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xc8,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x33,0xcc,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x33,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x34,0x00,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x34,0x04,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x34,
+  0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x0c,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x10,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x20,0x00,0x00,
+  0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x24,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x28,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x2c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x30,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x34,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x34,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x34,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x34,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+  0x00,0x09,0x00,0x34,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x34,0x88,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x8c,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0x90,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x34,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x34,0xa8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x34,0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x34,0xb0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x34,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x34,0xc4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x34,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x34,
+  0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,
+  0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x34,0xd0,0x00,0x00,0x00,
+  0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+  0x09,0x00,0x35,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x35,0x04,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x09,0x00,0x35,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x09,0x00,0x35,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x01,0x09,0x00,0x35,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+  0x09,0x00,0x35,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,
+  0x00,0x35,0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,
+  0x35,0x28,0x00,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,
+  0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x30,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x40,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x44,0x00,0x00,
+  0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x48,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x4c,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x09,0x00,0x35,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x35,0x80,0x00,
+  0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x35,0x84,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,
+  0x35,0x88,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,
+  0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0x90,
+  0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xa0,0x00,
+  0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xa4,0x00,0x1c,
+  0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xa8,0x00,0x00,0x00,
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xac,0x00,0x00,0x00,0x01,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xb0,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xc4,0x00,0x14,0x00,0x61,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x01,0x09,0x00,0x35,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x01,0x09,0x00,0x35,0xcc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x01,0x04,0x00,0x00,0x4e,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+  0x00,0x35,0xd0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x03,0x09,0x00,0x35,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x02,0x08,0xff,0x04,0x00,0x00,
+  0x00,0x64,0x02,0x08,0xf0,0x04,0x00,0x00,0x00,0x00,0x02,0x08,0xff,0x02,0x08,0xff,
+  0x08,0x00,0x00,0x00,0x01,0x01,0x00,0x09,0x00,0x00,0x00,
diff --git a/board/esd/cms700/u-boot.lds b/board/esd/cms700/u-boot.lds
new file mode 100644 (file)
index 0000000..f7a20d1
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * (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
+{
+  .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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.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)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 0604a4e6fed55cf842ce2e4321f66e6cbf131e7b..1decc0ec0cd63b875862ae3297bb8ccdb32966b9 100644 (file)
@@ -65,7 +65,7 @@ extern int transfer_pic(unsigned char, unsigned char *, int, int);
 #endif
 extern int flash_sect_erase(ulong, ulong);
 extern int flash_sect_protect (int, ulong, ulong);
-extern int flash_write (uchar *, ulong, ulong);
+extern int flash_write (char *, ulong, ulong);
 /* change char* to void* to shutup the compiler */
 extern block_dev_desc_t *get_dev (char*, int);
 
@@ -103,7 +103,7 @@ int au_check_cksum_valid(int i, long nbytes)
        /* check the data CRC */
        checksum = ntohl(hdr->ih_dcrc);
 
-       if (crc32 (0, (char *)(LOAD_ADDR + sizeof(*hdr)), ntohl(hdr->ih_size))
+       if (crc32 (0, (uchar *)(LOAD_ADDR + sizeof(*hdr)), ntohl(hdr->ih_size))
                != checksum) {
                printf ("Image %s bad data checksum\n", au_image[i].name);
                return -1;
@@ -140,7 +140,7 @@ int au_check_header_valid(int i, long nbytes)
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)hdr, sizeof(*hdr)) != checksum) {
+       if (crc32 (0, (uchar *)hdr, sizeof(*hdr)) != checksum) {
                printf ("Image %s bad header checksum\n", au_image[i].name);
                return -1;
        }
@@ -283,12 +283,12 @@ int au_do_update(int i, long sz)
                 */
                if (au_image[i].type != AU_NAND) {
                        debug ("flash_write(%p, %lx %x)\n", addr, start, nbytes);
-                       rc = flash_write(addr, start, nbytes);
+                       rc = flash_write((char *)addr, start, nbytes);
                } else {
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
                        debug ("nand_rw(%p, %lx %x)\n", addr, start, nbytes);
                        rc = nand_rw(nand_dev_desc, NANDRW_WRITE | NANDRW_JFFS2,
-                                    start, nbytes, &total, addr);
+                                    start, nbytes, (size_t *)&total, (uchar *)addr);
                        debug ("nand_rw: ret=%x total=%d nbytes=%d\n", rc, total, nbytes);
 #endif
                }
@@ -301,12 +301,12 @@ int au_do_update(int i, long sz)
                 * check the dcrc of the copy
                 */
                if (au_image[i].type != AU_NAND) {
-                       rc = crc32 (0, (char *)(start + off), ntohl(hdr->ih_size));
+                       rc = crc32 (0, (uchar *)(start + off), ntohl(hdr->ih_size));
                } else {
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
                        rc = nand_rw(nand_dev_desc, NANDRW_READ | NANDRW_JFFS2 | NANDRW_JFFS2_SKIP,
-                                    start, nbytes, &total, addr);
-                       rc = crc32 (0, (char *)(addr + off), ntohl(hdr->ih_size));
+                                    start, nbytes, (size_t *)&total, (uchar *)addr);
+                       rc = crc32 (0, (uchar *)(addr + off), ntohl(hdr->ih_size));
 #endif
                }
                if (rc != ntohl(hdr->ih_dcrc)) {
diff --git a/board/esd/common/cmd_loadpci.c b/board/esd/common/cmd_loadpci.c
new file mode 100644 (file)
index 0000000..3478f82
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+#include <common.h>
+#include <command.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_BSP)
+
+extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
+extern int do_autoscript (cmd_tbl_t *, int, int, char *[]);
+
+#define ADDRMASK 0xfffff000
+
+/*
+ * Command loadpci: wait for signal from host and boot image.
+ */
+int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int *ptr = 0;
+       int count = 0;
+       int count2 = 0;
+       char addr[16];
+       char str[] = "\\|/-";
+       char *local_args[2];
+
+       while(1) {
+               /*
+                * Mark sync address
+                */
+               ptr = 0;
+               memset(ptr, 0, 0x20);
+
+               *ptr = 0xffffffff;
+               puts("\nWaiting for action from pci host -");
+
+               /*
+                * Wait for host to write the start address
+                */
+               while (*ptr == 0xffffffff) {
+                       count++;
+                       if (!(count % 100)) {
+                               count2++;
+                               putc(0x08); /* backspace */
+                               putc(str[count2 % 4]);
+                       }
+
+                       /* Abort if ctrl-c was pressed */
+                       if (ctrlc()) {
+                               puts("\nAbort\n");
+                               return 0;
+                       }
+
+                       udelay(1000);
+               }
+
+               printf("\nGot bootcode %08x: ", *ptr);
+               sprintf(addr, "%08x", *ptr & ADDRMASK);
+
+               switch (*ptr & ~ADDRMASK) {
+               case 0:
+                       /*
+                        * Boot image via bootm
+                        */
+                       printf("booting image at addr 0x%s ...\n", addr);
+                       setenv("loadaddr", addr);
+
+                       do_bootm (cmdtp, 0, 0, NULL);
+                       break;
+
+               case 1:
+                       /*
+                        * Boot image via autoscr
+                        */
+                       printf("executing script at addr 0x%s ...\n", addr);
+
+                       local_args[0] = addr;
+                       local_args[1] = NULL;
+                       do_autoscript(cmdtp, 0, 1, local_args);
+                       break;
+
+               case 2:
+                       /*
+                        * Call run_cmd
+                        */
+                       printf("running command at addr 0x%s ...\n", addr);
+                       run_command ((char*)(*ptr & ADDRMASK), 0);
+                       break;
+
+               default:
+                       printf("unhandled boot method\n");
+                       break;
+               }
+       }
+}
+
+U_BOOT_CMD(
+       loadpci,        1,      1,      do_loadpci,
+       "loadpci - Wait for pci bootcmd and boot it\n",
+       NULL
+       );
+
+#endif
+
index d2d642a1a7260ff75367396345731146d7e20109..0edc08308a1320d0bc7db82e54d5443988ee7d34 100644 (file)
@@ -2,6 +2,9 @@
  * (C) Copyright 2003-2004
  * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
  *
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
 #include "lcd.h"
 
 
+extern int video_display_bitmap (ulong, int, int);
+
+
 int palette_index;
 int palette_value;
-
+int lcd_depth;
+unsigned char *glob_lcd_reg;
+unsigned char *glob_lcd_mem;
 
 #ifdef CFG_LCD_ENDIAN
 void lcd_setup(int lcd, int config)
@@ -67,92 +75,55 @@ void lcd_setup(int lcd, int config)
 #endif /* #ifdef CFG_LCD_ENDIAN */
 
 
-void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
-             uchar *logo_bmp, ulong len)
+void lcd_bmp(uchar *logo_bmp)
 {
        int i;
-       ushort s1dReg;
-       uchar s1dValue;
        uchar *ptr;
        ushort *ptr2;
        ushort val;
-       unsigned char *dst;
+       unsigned char *dst = NULL;
        int x, y;
        int width, height, bpp, colors, line_size;
        int header_size;
        unsigned char *bmp;
        unsigned char r, g, b;
        BITMAPINFOHEADER *bm_info;
-       int reg_byte_swap;
+       ulong len;
 
        /*
-        * Detect epson
+        * Check for bmp mark 'BM'
         */
-       if (lcd_reg[0] == 0x1c) {
+       if (*(ushort *)logo_bmp != 0x424d) {
+
                /*
-                * Big epson detected
+                * Decompress bmp image
                 */
-               reg_byte_swap = FALSE;
-               palette_index = 0x1e2;
-               palette_value = 0x1e4;
-               puts("LCD:   S1D13806");
-       } else if (lcd_reg[1] == 0x1c) {
-               /*
-                * Big epson detected (with register swap bug)
-                */
-               reg_byte_swap = TRUE;
-               palette_index = 0x1e3;
-               palette_value = 0x1e5;
-               puts("LCD:   S1D13806S");
-       } else if (lcd_reg[0] == 0x18) {
+               len = CFG_VIDEO_LOGO_MAX_SIZE;
+               dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE);
+               if (dst == NULL) {
+                       printf("Error: malloc in gunzip failed!\n");
+                       return;
+               }
+               if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) {
+                       return;
+               }
+               if (len == CFG_VIDEO_LOGO_MAX_SIZE) {
+                       printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n");
+               }
+
                /*
-                * Small epson detected (704)
+                * Check for bmp mark 'BM'
                 */
-               reg_byte_swap = FALSE;
-               palette_index = 0x15;
-               palette_value = 0x17;
-               puts("LCD:   S1D13704");
-       } else if (lcd_reg[0x10000] == 0x24) {
+               if (*(ushort *)dst != 0x424d) {
+                       printf("LCD: Unknown image format!\n");
+                       free(dst);
+                       return;
+               }
+       } else {
                /*
-                * Small epson detected (705)
+                * Uncompressed BMP image, just use this pointer
                 */
-               reg_byte_swap = FALSE;
-               palette_index = 0x15;
-               palette_value = 0x17;
-               lcd_reg += 0x10000; /* add offset for 705 regs */
-               puts("LCD:   S1D13705");
-       } else {
-               puts("LCD:   No controller detected!\n");
-               return;
-       }
-
-       for (i = 0; i<reg_count; i++) {
-               s1dReg = regs[i].Index;
-               if (reg_byte_swap) {
-                       if ((s1dReg & 0x0001) == 0)
-                               s1dReg |= 0x0001;
-                       else
-                               s1dReg &= ~0x0001;
-               }
-               s1dValue = regs[i].Value;
-               lcd_reg[s1dReg] = s1dValue;
-       }
-
-       /*
-        * Decompress bmp image
-        */
-       dst = malloc(CFG_LCD_LOGO_MAX_SIZE);
-       if (gunzip(dst, CFG_LCD_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) {
-               return;
-       }
-
-       /*
-        * Check for bmp mark 'BM'
-        */
-       if (*(ushort *)dst != 0x424d) {
-               printf("LCD: Unknown image format!\n");
-               free(dst);
-               return;
+               dst = (uchar *)logo_bmp;
        }
 
        /*
@@ -181,7 +152,9 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
                break;
        default:
                printf("LCD: Unknown bpp (%d) im image!\n", bpp);
-               free(dst);
+               if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
+                       free(dst);
+               }
                return;
        }
        printf(" (%d*%d, %dbpp)\n", width, height, bpp);
@@ -189,35 +162,48 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        /*
         * Write color palette
         */
-       if (colors <= 256) {
+       if ((colors <= 256) && (lcd_depth <= 8)) {
                ptr = (unsigned char *)(dst + 14 + 40);
                for (i=0; i<colors; i++) {
                        b = *ptr++;
                        g = *ptr++;
                        r = *ptr++;
                        ptr++;
-                       S1D_WRITE_PALETTE(lcd_reg, i, r, g, b);
+                       S1D_WRITE_PALETTE(glob_lcd_reg, i, r, g, b);
                }
        }
 
        /*
         * Write bitmap data into framebuffer
         */
-       ptr = lcd_mem;
-       ptr2 = (ushort *)lcd_mem;
+       ptr = glob_lcd_mem;
+       ptr2 = (ushort *)glob_lcd_mem;
        header_size = 14 + 40 + 4*colors;          /* skip bmp header */
        for (y=0; y<height; y++) {
                bmp = &dst[(height-1-y)*line_size + header_size];
-               if (bpp == 24) {
-                       for (x=0; x<width; x++) {
-                               /*
-                                * Generate epson 16bpp fb-format from 24bpp image
-                                */
-                               b = *bmp++ >> 3;
-                               g = *bmp++ >> 2;
-                               r = *bmp++ >> 3;
-                               val = ((r & 0x1f) << 11) | ((g & 0x3f) << 5) | (b & 0x1f);
-                               *ptr2++ = val;
+               if (lcd_depth == 16) {
+                       if (bpp == 24) {
+                               for (x=0; x<width; x++) {
+                                       /*
+                                        * Generate epson 16bpp fb-format from 24bpp image
+                                        */
+                                       b = *bmp++ >> 3;
+                                       g = *bmp++ >> 2;
+                                       r = *bmp++ >> 3;
+                                       val = ((r & 0x1f) << 11) | ((g & 0x3f) << 5) | (b & 0x1f);
+                                       *ptr2++ = val;
+                               }
+                       } else if (bpp == 8) {
+                               for (x=0; x<line_size; x++) {
+                                       /* query rgb value from palette */
+                                       ptr = (unsigned char *)(dst + 14 + 40) ;
+                                       ptr += (*bmp++) << 2;
+                                       b = *ptr++ >> 3;
+                                       g = *ptr++ >> 2;
+                                       r = *ptr++ >> 3;
+                                       val = ((r & 0x1f) << 11) | ((g & 0x3f) << 5) | (b & 0x1f);
+                                       *ptr2++ = val;
+                               }
                        }
                } else {
                        for (x=0; x<line_size; x++) {
@@ -226,5 +212,123 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
                }
        }
 
-       free(dst);
+       if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
+               free(dst);
+       }
 }
+
+
+void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
+             uchar *logo_bmp, ulong len)
+{
+       int i;
+       ushort s1dReg;
+       uchar s1dValue;
+       int reg_byte_swap;
+
+       /*
+        * Detect epson
+        */
+       if (lcd_reg[0] == 0x1c) {
+               /*
+                * Big epson detected
+                */
+               reg_byte_swap = FALSE;
+               palette_index = 0x1e2;
+               palette_value = 0x1e4;
+               lcd_depth = 16;
+               puts("LCD:   S1D13806");
+       } else if (lcd_reg[1] == 0x1c) {
+               /*
+                * Big epson detected (with register swap bug)
+                */
+               reg_byte_swap = TRUE;
+               palette_index = 0x1e3;
+               palette_value = 0x1e5;
+               lcd_depth = 16;
+               puts("LCD:   S1D13806S");
+       } else if (lcd_reg[0] == 0x18) {
+               /*
+                * Small epson detected (704)
+                */
+               reg_byte_swap = FALSE;
+               palette_index = 0x15;
+               palette_value = 0x17;
+               lcd_depth = 8;
+               puts("LCD:   S1D13704");
+       } else if (lcd_reg[0x10000] == 0x24) {
+               /*
+                * Small epson detected (705)
+                */
+               reg_byte_swap = FALSE;
+               palette_index = 0x15;
+               palette_value = 0x17;
+               lcd_depth = 8;
+               lcd_reg += 0x10000; /* add offset for 705 regs */
+               puts("LCD:   S1D13705");
+       } else {
+               puts("LCD:   No controller detected!\n");
+               return;
+       }
+
+       /*
+        * Setup lcd controller regs
+        */
+       for (i = 0; i<reg_count; i++) {
+               s1dReg = regs[i].Index;
+               if (reg_byte_swap) {
+                       if ((s1dReg & 0x0001) == 0)
+                               s1dReg |= 0x0001;
+                       else
+                               s1dReg &= ~0x0001;
+               }
+               s1dValue = regs[i].Value;
+               lcd_reg[s1dReg] = s1dValue;
+       }
+
+       /*
+        * Save reg & mem pointer for later usage (e.g. bmp command)
+        */
+       glob_lcd_reg = lcd_reg;
+       glob_lcd_mem = lcd_mem;
+
+       /*
+        * Display bmp image
+        */
+       lcd_bmp(logo_bmp);
+}
+
+#ifdef CONFIG_VIDEO_SM501
+int do_esdbmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong addr;
+       char *str;
+
+       if (argc != 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       addr = simple_strtoul(argv[1], NULL, 16);
+
+       str = getenv("bd_type");
+       if ((strcmp(str, "ppc221") == 0) || (strcmp(str, "ppc231") == 0)) {
+               /*
+                * SM501 available, use standard bmp command
+                */
+               return (video_display_bitmap(addr, 0, 0));
+       } else {
+               /*
+                * No SM501 available, use esd epson bmp command
+                */
+               lcd_bmp((uchar *)addr);
+               return 0;
+       }
+}
+
+U_BOOT_CMD(
+       esdbmp, 2,      1,      do_esdbmp,
+       "esdbmp   - display BMP image\n",
+       "<imageAddr> - display image\n"
+);
+#endif
index cba8c92f2e5bef5e223eb757eba17b46dc8c8ed1..48b4b7c7b96beb910731a15e9fbafd1efd47d667 100644 (file)
@@ -33,8 +33,8 @@ void lxt971_no_sleep(void)
 {
        unsigned short reg;
 
-       miiphy_read(CONFIG_PHY_ADDR, 0x10, &reg);
+       miiphy_read("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x10, &reg);
        reg &= ~0x0040;                  /* disable sleep mode */
-       miiphy_write(CONFIG_PHY_ADDR, 0x10, reg);
+       miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x10, reg);
 }
 #endif /* CONFIG_LXT971_NO_SLEEP */
diff --git a/board/esd/cpci2dp/Makefile b/board/esd/cpci2dp/Makefile
new file mode 100644 (file)
index 0000000..88b0ae3
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# (C) Copyright 2000
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o flash.o ../common/misc.o ../common/cmd_loadpci.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/esd/cpci2dp/config.mk b/board/esd/cpci2dp/config.mk
new file mode 100644 (file)
index 0000000..2da4c9f
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# (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
+#
+
+#
+# esd CPCI2DP board
+#
+
+TEXT_BASE = 0xFFFC0000
diff --git a/board/esd/cpci2dp/cpci2dp.c b/board/esd/cpci2dp/cpci2dp.c
new file mode 100644 (file)
index 0000000..2800420
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <command.h>
+#include <malloc.h>
+
+int board_early_init_f (void)
+{
+       unsigned long cntrl0Reg;
+
+       /*
+        * Setup GPIO pins
+        */
+       cntrl0Reg = mfdcr(cntrl0);
+       mtdcr(cntrl0, cntrl0Reg | ((CFG_EEPROM_WP | CFG_PB_LED | CFG_SELF_RST | CFG_INTA_FAKE) << 5));
+
+        /* set output pins to high */
+       out32(GPIO0_OR,  CFG_EEPROM_WP);
+        /* setup for output (LED=off) */
+       out32(GPIO0_TCR, CFG_EEPROM_WP | CFG_PB_LED);
+
+       /*
+        * IRQ 0-15  405GP internally generated; active high; level sensitive
+        * IRQ 16    405GP internally generated; active low; level sensitive
+        * IRQ 17-24 RESERVED
+        * IRQ 25 (EXT IRQ 0) PB0; active low; level sensitive
+        * IRQ 26 (EXT IRQ 1) PB1; active low; level sensitive
+        * IRQ 27 (EXT IRQ 2) PCI SLOT 0; active low; level sensitive
+        * IRQ 28 (EXT IRQ 3) PCI SLOT 1; active low; level sensitive
+        * IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive
+        * IRQ 30 (EXT IRQ 5) PCI SLOT 3; active low; level sensitive
+        * IRQ 31 (EXT IRQ 6) unused
+        */
+       mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */
+       mtdcr(uicer, 0x00000000);       /* disable all ints */
+       mtdcr(uiccr, 0x00000000);       /* set all to be non-critical*/
+       mtdcr(uicpr, 0xFFFFFF81);       /* set int polarities */
+
+       mtdcr(uictr, 0x10000000);       /* set int trigger levels */
+       mtdcr(uicvcr, 0x00000001);      /* set vect base=0,INT0 highest priority*/
+       mtdcr(uicsr, 0xFFFFFFFF);       /* clear all ints */
+
+       return 0;
+}
+
+
+int misc_init_f (void)
+{
+       return 0;  /* dummy implementation */
+}
+
+
+int misc_init_r (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       unsigned long cntrl0Reg;
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       /*
+        * Select cts (and not dsr) on uart1
+        */
+       cntrl0Reg = mfdcr(cntrl0);
+       mtdcr(cntrl0, cntrl0Reg | 0x00001000);
+
+       return (0);
+}
+
+
+/*
+ * Check Board Identity:
+ */
+int checkboard (void)
+{
+       char str[64];
+       int i = getenv_r ("serial#", str, sizeof(str));
+
+       puts ("Board: ");
+
+       if (i == -1) {
+               puts ("### No HW ID - assuming CPCI2DP");
+       } else {
+               puts(str);
+       }
+
+       printf(" (Ver 1.0)");
+
+       putc ('\n');
+
+       return 0;
+}
+
+/* ------------------------------------------------------------------------- */
+
+long int initdram (int board_type)
+{
+       unsigned long val;
+
+       mtdcr(memcfga, mem_mb0cf);
+       val = mfdcr(memcfgd);
+
+       return (4*1024*1024 << ((val & 0x000e0000) >> 17));
+}
+
+/* ------------------------------------------------------------------------- */
+
+#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 GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in32(GPIO0_OR) & CFG_EEPROM_WP));
+                       break;
+               }
+       }
+       return state;
+}
+#endif
+
+#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) */
diff --git a/board/esd/cpci2dp/flash.c b/board/esd/cpci2dp/flash.c
new file mode 100644 (file)
index 0000000..de847f9
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * (C) Copyright 2001
+ * 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 <ppc4xx.h>
+#include <asm/processor.h>
+
+/*
+ * include common flash code (for esd boards)
+ */
+#include "../common/flash.c"
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static ulong flash_get_size (vu_long *addr, flash_info_t *info);
+static void flash_get_offsets (ulong base, flash_info_t *info);
+
+/*-----------------------------------------------------------------------
+ */
+
+unsigned long flash_init (void)
+{
+       unsigned long size_b0;
+       int i;
+       uint pbcr;
+       unsigned long base_b0;
+
+       /* Init: no FLASHes known */
+       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
+               flash_info[i].flash_id = FLASH_UNKNOWN;
+       }
+
+       /* Static FLASH Bank configuration here - FIXME XXX */
+
+       size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
+
+       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
+               printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
+                       size_b0, size_b0<<20);
+       }
+
+       /* Setup offsets */
+       flash_get_offsets (-size_b0, &flash_info[0]);
+
+       /* Re-do sizing to get full correct info */
+       mtdcr(ebccfga, pb0cr);
+       pbcr = mfdcr(ebccfgd);
+       mtdcr(ebccfga, pb0cr);
+       base_b0 = -size_b0;
+       pbcr = (pbcr & 0x0001ffff) | base_b0 | (((size_b0/1024/1024)-1)<<17);
+       mtdcr(ebccfgd, pbcr);
+       /*          printf("pb1cr = %x\n", pbcr); */
+
+       /* Monitor protection ON by default */
+       (void)flash_protect(FLAG_PROTECT_SET,
+                           -monitor_flash_len,
+                           0xffffffff,
+                           &flash_info[0]);
+
+       flash_info[0].size = size_b0;
+
+       return (size_b0);
+}
diff --git a/board/esd/cpci2dp/u-boot.lds b/board/esd/cpci2dp/u-boot.lds
new file mode 100644 (file)
index 0000000..f7a20d1
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * (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
+{
+  .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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.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)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index f27668d142752845bea368efb02abc8415477ac4..2ab96731e04138181ede471b992e36c5ead969d2 100644 (file)
@@ -440,7 +440,7 @@ int checkboard (void)
        int index;
        int len;
 #endif
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
        unsigned short ver;
 
@@ -468,7 +468,7 @@ int checkboard (void)
 #endif
 
        if (ctermm2()) {
-               unsigned char str[4];
+               char str[4];
 
                /*
                 * Read board-id and save in env-variable
@@ -664,7 +664,7 @@ int do_onewire(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        int result;
        int i;
        unsigned char ow_id[6];
-       unsigned char str[32];
+       char str[32];
        unsigned char ow_crc;
 
        /*
@@ -717,10 +717,10 @@ int do_get_bpip(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        IPaddr_t ipaddr;
 
        buf = malloc(CFG_ENV_SIZE_2);
-       if (eeprom_read(CFG_I2C_EEPROM_ADDR_2, 0, buf, CFG_ENV_SIZE_2)) {
+       if (eeprom_read(CFG_I2C_EEPROM_ADDR_2, 0, (uchar *)buf, CFG_ENV_SIZE_2)) {
                puts("\nError reading backplane EEPROM!\n");
        } else {
-               crc = crc32(0, buf+4, CFG_ENV_SIZE_2-4);
+               crc = crc32(0, (uchar *)(buf+4), CFG_ENV_SIZE_2-4);
                if (crc != *(ulong *)buf) {
                        printf("ERROR: crc mismatch %08lx %08lx\n", crc, *(ulong *)buf);
                        return -1;
@@ -766,7 +766,7 @@ U_BOOT_CMD(
 int do_set_bpip(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        char *buf;
-       unsigned char str[32];
+       char str[32];
        ulong crc;
 
        if (argc < 2) {
@@ -779,10 +779,10 @@ int do_set_bpip(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        memset(buf, 0, CFG_ENV_SIZE_2);
        sprintf(str, "bp_ip=%s", argv[1]);
        strcpy(buf+4, str);
-       crc = crc32(0, buf+4, CFG_ENV_SIZE_2-4);
+       crc = crc32(0, (uchar *)(buf+4), CFG_ENV_SIZE_2-4);
        *(ulong *)buf = crc;
 
-       if (eeprom_write(CFG_I2C_EEPROM_ADDR_2, 0, buf, CFG_ENV_SIZE_2)) {
+       if (eeprom_write(CFG_I2C_EEPROM_ADDR_2, 0, (uchar *)buf, CFG_ENV_SIZE_2)) {
                puts("\nError writing backplane EEPROM!\n");
        }
 
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index 3925ad9eb67f9719270ed0cd3659cbfe006c17be..57220d385a3b5f172784c53a21b14fa298dfac20 100644 (file)
@@ -76,7 +76,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -96,6 +95,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -128,11 +128,13 @@ SECTIONS
   _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 = .;
diff --git a/board/esd/cpci5200/Makefile b/board/esd/cpci5200/Makefile
new file mode 100644 (file)
index 0000000..2ca73a9
--- /dev/null
@@ -0,0 +1,53 @@
+
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+# Objects for Xilinx JTAG programming (CPLD)
+# CPLD  = ../common/xilinx_jtag/lenval.o \
+#        ../common/xilinx_jtag/micro.o \
+#        ../common/xilinx_jtag/ports.o
+
+# OBJS = $(BOARD).o flash.o $(CPLD)
+OBJS   = $(BOARD).o strataflash.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/esd/cpci5200/config.mk b/board/esd/cpci5200/config.mk
new file mode 100644 (file)
index 0000000..07b5de1
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# IceCube board:
+#
+#      Valid values for TEXT_BASE are:
+#
+#      0xFFF00000   boot high (standard configuration)
+#      0xFF000000   boot low for 16 MiB boards
+#      0xFF800000   boot low for  8 MiB boards
+#      0x00100000   boot from RAM (for testing only)
+#
+
+sinclude $(TOPDIR)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+## Standard: boot high
+TEXT_BASE = 0xFFF00000
+## For testing: boot from RAM
+# TEXT_BASE = 0x00100000
+endif
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board
diff --git a/board/esd/cpci5200/cpci5200.c b/board/esd/cpci5200/cpci5200.c
new file mode 100644 (file)
index 0000000..6c98f13
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (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
+ */
+
+/*
+ * cpci5200.c - main board support/init for the esd cpci5200.
+ */
+
+#include <common.h>
+#include <mpc5xxx.h>
+#include <pci.h>
+#include <command.h>
+
+#include "mt46v16m16-75.h"
+
+void init_ata_reset(void);
+
+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");
+
+       /* 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");
+
+       /* 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");
+}
+
+/*
+ * 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 test1, test2;
+
+       /* setup SDRAM chip selects */
+       *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0x0000001e; /* 2G at 0x0 */
+       *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x80000000; /* disabled */
+       __asm__ volatile ("sync");
+
+       /* setup config registers */
+       *(vu_long *) MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
+       *(vu_long *) MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
+       __asm__ volatile ("sync");
+
+       /* set tap delay */
+       *(vu_long *) MPC5XXX_CDM_PORCFG = SDRAM_TAPDELAY;
+       __asm__ volatile ("sync");
+
+       /* find RAM size using SDRAM CS0 only */
+       sdram_start(0);
+       test1 = get_ram_size((long *) CFG_SDRAM_BASE, 0x80000000);
+       sdram_start(1);
+       test2 = get_ram_size((long *) CFG_SDRAM_BASE, 0x80000000);
+
+       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;
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize + 0x0000001e;      /* 2G */
+       } else {
+#if 0
+               *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0;  /* disabled */
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize + 0x0000001e;      /* 2G */
+#else
+               *(vu_long *) MPC5XXX_SDRAM_CS0CFG =
+                   0x13 + __builtin_ffs(0x08000000 >> 20) - 1;
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x08000000 + 0x0000001e;    /* 2G */
+#endif
+       }
+
+#if 0
+       /* find RAM size using SDRAM CS1 only */
+       sdram_start(0);
+       get_ram_size((ulong *) (CFG_SDRAM_BASE + dramsize), 0x80000000);
+       sdram_start(1);
+       get_ram_size((ulong *) (CFG_SDRAM_BASE + dramsize), 0x80000000);
+       sdram_start(0);
+#endif
+       /* set SDRAM CS1 size according to the amount of RAM found */
+
+       *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize;   /* disabled */
+
+       init_ata_reset();
+       return (dramsize);
+}
+
+int checkboard(void)
+{
+       puts("Board: esd CPCI5200 (cpci5200)\n");
+       return 0;
+}
+
+void flash_preinit(void)
+{
+       /*
+        * Now, when we are in RAM, enable flash write
+        * access for detection process.
+        * Note that CS_BOOT cannot be cleared when
+        * executing in flash.
+        */
+       *(vu_long *) MPC5XXX_BOOTCS_CFG &= ~0x1;        /* clear RO */
+}
+
+void flash_afterinit(ulong size)
+{
+       if (size == 0x02000000) {
+               /* adjust mapping */
+               *(vu_long *) MPC5XXX_BOOTCS_START =
+                   *(vu_long *) MPC5XXX_CS0_START =
+                   START_REG(CFG_BOOTCS_START | size);
+               *(vu_long *) MPC5XXX_BOOTCS_STOP =
+                   *(vu_long *) MPC5XXX_CS0_STOP =
+                   STOP_REG(CFG_BOOTCS_START | size, size);
+       }
+}
+
+#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 (CFG_CMD_IDE) && defined (CONFIG_IDE_RESET)
+
+#define GPIO_PSC1_4    0x01000000UL
+
+void init_ide_reset(void)
+{
+       debug("init_ide_reset\n");
+
+       /* Configure PSC1_4 as GPIO output for ATA reset */
+       *(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_PSC1_4;
+       *(vu_long *) MPC5XXX_WU_GPIO_DIR |= GPIO_PSC1_4;
+}
+
+void ide_set_reset(int idereset)
+{
+       debug("ide_reset(%d)\n", idereset);
+
+       if (idereset) {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA &= ~GPIO_PSC1_4;
+       } else {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA |= GPIO_PSC1_4;
+       }
+}
+#endif                         /* defined (CFG_CMD_IDE) && defined (CONFIG_IDE_RESET) */
+
+#define MPC5XXX_SIMPLEIO_GPIO_ENABLE       (MPC5XXX_GPIO + 0x0004)
+#define MPC5XXX_SIMPLEIO_GPIO_DIR          (MPC5XXX_GPIO + 0x000C)
+#define MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT  (MPC5XXX_GPIO + 0x0010)
+#define MPC5XXX_SIMPLEIO_GPIO_DATA_INPUT   (MPC5XXX_GPIO + 0x0014)
+
+#define MPC5XXX_INTERRUPT_GPIO_ENABLE      (MPC5XXX_GPIO + 0x0020)
+#define MPC5XXX_INTERRUPT_GPIO_DIR         (MPC5XXX_GPIO + 0x0028)
+#define MPC5XXX_INTERRUPT_GPIO_DATA_OUTPUT (MPC5XXX_GPIO + 0x002C)
+#define MPC5XXX_INTERRUPT_GPIO_STATUS      (MPC5XXX_GPIO + 0x003C)
+
+#define GPIO_WU6       0x40000000UL
+#define GPIO_USB0       0x00010000UL
+#define GPIO_USB9       0x08000000UL
+#define GPIO_USB9S      0x00080000UL
+
+void init_ata_reset(void)
+{
+       debug("init_ata_reset\n");
+
+       /* Configure GPIO_WU6 as GPIO output for ATA reset */
+       *(vu_long *) MPC5XXX_WU_GPIO_DATA |= GPIO_WU6;
+       *(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_WU6;
+       *(vu_long *) MPC5XXX_WU_GPIO_DIR |= GPIO_WU6;
+       __asm__ volatile ("sync");
+
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT &= ~GPIO_USB0;
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_ENABLE |= GPIO_USB0;
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DIR |= GPIO_USB0;
+       __asm__ volatile ("sync");
+
+       *(vu_long *) MPC5XXX_INTERRUPT_GPIO_DATA_OUTPUT &= ~GPIO_USB9;
+       *(vu_long *) MPC5XXX_INTERRUPT_GPIO_ENABLE &= ~GPIO_USB9;
+       __asm__ volatile ("sync");
+
+       if ((*(vu_long *) MPC5XXX_INTERRUPT_GPIO_STATUS & GPIO_USB9S) == 0) {
+               *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT |= GPIO_USB0;
+               __asm__ volatile ("sync");
+       }
+}
+
+int do_writepci(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int addr;
+       unsigned int size;
+       int i;
+       volatile unsigned long *ptr;
+
+       addr = simple_strtol(argv[1], NULL, 16);
+       size = simple_strtol(argv[2], NULL, 16);
+
+       printf("\nWriting at addr %08x, size %08x.\n", addr, size);
+
+       while (1) {
+               ptr = (volatile unsigned long *)addr;
+               for (i = 0; i < (size >> 2); i++) {
+                       *ptr++ = i;
+               }
+
+               /* Abort if ctrl-c was pressed */
+               if (ctrlc()) {
+                       puts("\nAbort\n");
+                       return 0;
+               }
+               putc('.');
+       }
+       return 0;
+}
+
+U_BOOT_CMD(writepci, 3, 1, do_writepci,
+          "writepci- Write some data to pcibus\n",
+          "<addr> <size>\n" "        - Write some data to pcibus.\n");
diff --git a/board/esd/cpci5200/mt46v16m16-75.h b/board/esd/cpci5200/mt46v16m16-75.h
new file mode 100644 (file)
index 0000000..22d0a55
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * (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      1       /* is DDR */
+
+#if defined(CONFIG_MPC5200)
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x705f0f00
+#define SDRAM_CONFIG1  0x73722930
+#define SDRAM_CONFIG2  0x47770000
+#define SDRAM_TAPDELAY 0x10000000
+
+#else
+#error CONFIG_MPC5200 not defined
+#endif
similarity index 63%
rename from board/esd/pmc405/strataflash.c
rename to board/esd/cpci5200/strataflash.c
index ad7a71dc4db819d342da587d740a362337867897..d76af02dbefeb5dfc522ed3c7e5ec308df01600c 100644 (file)
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/cache.h>
 
 #undef  DEBUG_FLASH
 /*
- * This file implements a Common Flash Interface (CFI) driver for ppcboot.
+ * 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.
@@ -94,38 +95,44 @@ typedef union {
 } cfiword_t;
 
 typedef union {
-       unsigned char * cp;
+       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        */
+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 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);
+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);
+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)
+inline uchar *flash_make_addr(flash_info_t * info, int sect, int offset)
 {
-       return ((uchar *)(info->start[sect] + (offset * info->portwidth)));
+       return ((uchar *) (info->start[sect] + (offset * info->portwidth)));
 }
+
 /*-----------------------------------------------------------------------
  * read a character at a port width address
  */
@@ -139,12 +146,13 @@ inline uchar flash_read_uchar(flash_info_t * info, uchar offset)
 /*-----------------------------------------------------------------------
  * read a short word by swapping for ppc format.
  */
-ushort flash_read_ushort(flash_info_t * info, int sect,  uchar offset)
+ushort flash_read_ushort(flash_info_t * info, int sect, uchar offset)
 {
-    uchar * addr;
+       uchar *addr;
 
-    addr = flash_make_addr(info, sect, offset);
-    return ((addr[(2*info->portwidth) - 1] << 8) | addr[info->portwidth - 1]);
+       addr = flash_make_addr(info, sect, offset);
+       return ((addr[(2 * info->portwidth) - 1] << 8) |
+               addr[info->portwidth - 1]);
 
 }
 
@@ -152,24 +160,25 @@ ushort flash_read_ushort(flash_info_t * info, int sect,  uchar offset)
  * 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)
+ulong flash_read_long(flash_info_t * info, int sect, uchar offset)
 {
-    uchar * addr;
+       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]);
+       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 flash_init(void)
 {
        unsigned long size;
        int i;
-       unsigned long  address;
-
+       unsigned long address;
 
        /* The flash is positioned back to back, with the demultiplexing of the chip
         * based on the A24 address line.
@@ -180,27 +189,25 @@ unsigned long flash_init (void)
        size = 0;
 
        /* Init: no FLASHes known */
-       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
+       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 (flash_info[i].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 */
+#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+CFG_MONITOR_LEN-1; i++)
+       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
-#else
-       /* monitor protection ON by default */
-       flash_protect (FLAG_PROTECT_SET,
-                      - CFG_MONITOR_LEN,
-                      - 1, &flash_info[1]);
 #endif
 
        return (size);
@@ -208,112 +215,79 @@ unsigned long flash_init (void)
 
 /*-----------------------------------------------------------------------
  */
-int flash_erase (flash_info_t *info, int s_first, int s_last)
+int flash_erase(flash_info_t * info, int s_first, int s_last)
 {
        int rcode = 0;
        int prot;
        int sect;
 
-       ifinfo->flash_id != FLASH_MAN_CFI) {
-               printf ("Can't erase unknown flash type - aborted\n");
+       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");
+               printf("- no sectors to erase\n");
                return 1;
        }
 
        prot = 0;
-       for (sect=s_first; sect<=s_last; ++sect) {
+       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);
+               printf("- Warning: %d protected sectors will not be erased!\n",
+                      prot);
        } else {
-               printf ("\n");
+               printf("\n");
        }
 
-
-       for (sect = s_first; sect<=s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
+       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")) {
+                       if (flash_full_status_check
+                           (info, sect, info->erase_blk_tout, "erase")) {
                                rcode = 1;
                        } else
                                printf(".");
                }
        }
-       printf (" done\n");
+       printf(" done\n");
        return rcode;
 }
 
 /*-----------------------------------------------------------------------
  */
-void flash_print_info  (flash_info_t *info)
+void flash_print_info(flash_info_t * info)
 {
        int i;
 
        if (info->flash_id != FLASH_MAN_CFI) {
-               printf ("missing or unknown FLASH type\n");
+               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) {
-#ifdef CFG_FLASH_EMPTY_INFO
-               int k;
-               int size;
-               int erased;
-               volatile unsigned long *flash;
-
-               /*
-                * Check if whole sector is erased
-                */
-               if (i != (info->sector_count-1))
-                 size = info->start[i+1] - info->start[i];
-               else
-                 size = info->start[0] + info->size - info->start[i];
-               erased = 1;
-               flash = (volatile unsigned long *)info->start[i];
-               size = size >> 2;        /* divide by 4 for longword access */
-               for (k=0; k<size; k++)
-                 {
-                   if (*flash++ != 0xffffffff)
-                     {
-                       erased = 0;
-                       break;
-                     }
-                 }
-
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               /* print empty and read-only info */
-               printf (" %08lX%s%s",
-                       info->start[i],
-                       erased ? " E" : "  ",
-                       info->protect[i] ? "RO " : "   ");
-#else
+              (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%s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : "     ");
-#endif
+                       printf("\n");
+               printf(" %08lX%5s",
+                      info->start[i], info->protect[i] ? " (RO)" : " ");
        }
-       printf ("\n");
+       printf("\n");
        return;
 }
 
@@ -323,7 +297,7 @@ void flash_print_info  (flash_info_t *info)
  * 1 - write timeout
  * 2 - Flash not erased
  */
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
+int write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt)
 {
        ulong wp;
        ulong cp;
@@ -335,46 +309,45 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
        wp = (addr & ~(info->portwidth - 1));
 
        /* handle unaligned start */
-       if((aln = addr - wp) != 0) {
+       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 = 0; i < aln; ++i, ++cp)
+                       flash_add_byte(info, &cword, (*(uchar *) cp));
 
-               for(; (i< info->portwidth) && (cnt > 0) ; i++) {
+               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)
+               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)
+       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;
+               cnt -= i;
        }
 #else
        /* handle the aligned part */
-       while(cnt >= info->portwidth) {
+       while (cnt >= info->portwidth) {
                cword.l = 0;
-               for(i = 0; i < info->portwidth; i++) {
+               for (i = 0; i < info->portwidth; i++) {
                        flash_add_byte(info, &cword, *src++);
                }
-               if((rc = flash_write_cfiword(info, wp, cword)) != 0)
+               if ((rc = flash_write_cfiword(info, wp, cword)) != 0)
                        return rc;
                wp += info->portwidth;
                cnt -= info->portwidth;
        }
-#endif /* CFG_FLASH_USE_BUFFER_WRITE */
+#endif                         /* CFG_FLASH_USE_BUFFER_WRITE */
        if (cnt == 0) {
                return (0);
        }
@@ -383,12 +356,12 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
         * handle unaligned tail bytes
         */
        cword.l = 0;
-       for (i=0, cp=wp; (i<info->portwidth) && (cnt>0); ++i, ++cp) {
+       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));
+       for (; i < info->portwidth; ++i, ++cp) {
+               flash_add_byte(info, &cword, (*(uchar *) cp));
        }
 
        return flash_write_cfiword(info, wp, cword);
@@ -396,26 +369,27 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
 
 /*-----------------------------------------------------------------------
  */
-int flash_real_protect(flash_info_t *info, long sector, int prot)
+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)
+       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) {
+       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) {
+               if (prot == 0) {
                        int i;
-                       for(i = 0 ; i<info->sector_count; i++) {
-                               if(info->protect[i])
+                       for (i = 0; i < info->sector_count; i++) {
+                               if (info->protect[i])
                                        flash_real_protect(info, i, 1);
                        }
                }
@@ -423,59 +397,69 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
 
        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)
+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)) {
+       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]);
+                       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)
+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)) {
+       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("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)){
+               } 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)){
+               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))
+               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)
+static void flash_add_byte(flash_info_t * info, cfiword_t * cword, uchar c)
 {
-       switch(info->portwidth) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                cword->c = c;
                break;
@@ -487,29 +471,29 @@ static void flash_add_byte(flash_info_t *info, cfiword_t * cword, uchar 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)
+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;
+       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)
+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) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                *addr.cp = cword.c;
                break;
@@ -531,7 +515,7 @@ static int flash_isequal(flash_info_t * info, int sect, uchar offset, uchar cmd)
        int retval;
        cptr.cp = flash_make_addr(info, sect, offset);
        flash_make_cmd(info, cmd, &cword);
-       switch(info->portwidth) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                retval = (cptr.cp[0] == cword.c);
                break;
@@ -547,6 +531,7 @@ static int flash_isequal(flash_info_t * info, int sect, uchar offset, uchar cmd)
        }
        return retval;
 }
+
 /*-----------------------------------------------------------------------
  */
 static int flash_isset(flash_info_t * info, int sect, uchar offset, uchar cmd)
@@ -556,7 +541,7 @@ static int flash_isset(flash_info_t * info, int sect, uchar offset, uchar cmd)
        int retval;
        cptr.cp = flash_make_addr(info, sect, offset);
        flash_make_cmd(info, cmd, &cword);
-       switch(info->portwidth) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                retval = ((cptr.cp[0] & cword.c) == cword.c);
                break;
@@ -577,93 +562,120 @@ static int flash_isset(flash_info_t * info, int sect, uchar offset, uchar cmd)
  * 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) {
+       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'))
+                       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)
+static ulong flash_get_size(ulong base, int banknum)
 {
-       flash_info_t * info = &flash_info[banknum];
+       flash_info_t *info = &flash_info[banknum];
        int i, j;
        int sect_cnt;
        unsigned long sector;
        unsigned long tmp;
-       int size_ratio;
+       int size_ratio = 0;
        uchar num_erase_regions;
-       int  erase_region_size;
-       int  erase_region_count;
+       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 */
+#if 0
+       invalidate_dcache_range(base, base + 0x400);
 #endif
+       if (flash_detect_cfi(info)) {
+
                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
+               num_erase_regions =
+                   flash_read_uchar(info, FLASH_OFFSET_NUM_ERASE_REGIONS);
+
                sect_cnt = 0;
                sector = base;
-               for(i = 0 ; i < num_erase_regions; i++) {
-                       if(i > NUM_ERASE_REGIONS) {
+               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 =
+                           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++) {
+                       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);
+                               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));
+               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)));
+               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)));
+               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->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);
+#ifdef DEBUG_FLASH
+       printf("portwidth=%d chipwidth=%d\n", info->portwidth, info->chipwidth);        /* test-only */
+#endif
+#ifdef DEBUG_FLASH
+       printf("found %d erase regions\n", num_erase_regions);
+#endif
+#ifdef DEBUG_FLASH
+       printf("size=%08x sectors=%08x \n", info->size, info->sector_count);
+#endif
+       return (info->size);
 }
 
-
 /*-----------------------------------------------------------------------
  */
-static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
+static int flash_write_cfiword(flash_info_t * info, ulong dest, cfiword_t cword)
 {
 
        cfiptr_t ctladdr;
@@ -671,11 +683,10 @@ static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
        int flag;
 
        ctladdr.cp = flash_make_addr(info, 0, 0);
-       cptr.cp = (uchar *)dest;
-
+       cptr.cp = (uchar *) dest;
 
        /* Check if Flash is (sufficiently) erased */
-       switch(info->portwidth) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                flag = ((cptr.cp[0] & cword.c) == cword.c);
                break;
@@ -683,12 +694,12 @@ static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
                flag = ((cptr.wp[0] & cword.w) == cword.w);
                break;
        case FLASH_CFI_32BIT:
-               flag = ((cptr.lp[0] & cword.l)  == cword.l);
+               flag = ((cptr.lp[0] & cword.l) == cword.l);
                break;
        default:
                return 2;
        }
-       if(!flag)
+       if (!flag)
                return 2;
 
        /* Disable interrupts which might cause a timeout here */
@@ -697,7 +708,7 @@ static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
        flash_write_cmd(info, 0, 0, FLASH_CMD_CLEAR_STATUS);
        flash_write_cmd(info, 0, 0, FLASH_CMD_WRITE);
 
-       switch(info->portwidth) {
+       switch (info->portwidth) {
        case FLASH_CFI_8BIT:
                cptr.cp[0] = cword.c;
                break;
@@ -710,7 +721,7 @@ static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
        }
 
        /* re-enable interrupts if necessary */
-       if(flag)
+       if (flag)
                enable_interrupts();
 
        return flash_full_status_check(info, 0, info->write_tout, "write");
@@ -722,17 +733,18 @@ static int flash_write_cfiword (flash_info_t *info, ulong dest, cfiword_t cword)
  * 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)
+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])
+       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)
+static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp,
+                                int len)
 {
 
        int sector;
@@ -742,13 +754,13 @@ static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp, in
        volatile cfiptr_t dst;
 
        src.cp = cp;
-       dst.cp = (uchar *)dest;
+       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) {
+       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;
@@ -762,9 +774,9 @@ static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp, in
                        return ERR_INVAL;
                        break;
                }
-               flash_write_cmd(info, sector, 0, (uchar)cnt-1);
-               while(cnt-- > 0) {
-                       switch(info->portwidth) {
+               flash_write_cmd(info, sector, 0, (uchar) cnt - 1);
+               while (cnt-- > 0) {
+                       switch (info->portwidth) {
                        case FLASH_CFI_8BIT:
                                *dst.cp++ = *src.cp++;
                                break;
@@ -779,11 +791,14 @@ static int flash_write_cfibuffer(flash_info_t * info, ulong dest, uchar * cp, in
                                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_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 */
+#endif                         /* CFG_USE_FLASH_BUFFER_WRITE */
similarity index 57%
rename from board/tqm8560/u-boot.lds
rename to board/esd/cpci5200/u-boot.lds
index ebe22401a4ffd046698475c0bec5d2be92df1921..f23432ecfa8016e4f41d47dd09e927ea6d29c9c2 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * (C) Copyright 2002,2003, Motorola,Inc.
- * Xianghua Xiao, X.Xiao@motorola.com.
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -12,7 +12,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -27,73 +27,48 @@ SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/
    __DYNAMIC = 0;    */
 SECTIONS
 {
-  .resetvec 0xFFFFFFFC :
-  {
-    *(.resetvec)
-  } = 0xffff
-
-  .bootpg 0xFFFFF000 :
-  {
-    cpu/mpc85xx/start.o (.bootpg)
-    board/tqm8560/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)   }
+  .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             :
+  .text      :
   {
-    cpu/mpc85xx/start.o (.text)
-    board/tqm8560/init.o (.text)
-    cpu/mpc85xx/traps.o (.text)
-    cpu/mpc85xx/interrupts.o (.text)
-    cpu/mpc85xx/cpu_init.o (.text)
-    cpu/mpc85xx/cpu.o (.text)
-    cpu/mpc85xx/speed.o (.text)
-    cpu/mpc85xx/pci.o (.text)
-    common/dlmalloc.o (.text)
-    lib_generic/crc32.o (.text)
-    lib_ppc/extable.o (.text)
-    lib_generic/zlib.o (.text)
+    cpu/mpc5xxx/start.o        (.text)
     *(.text)
     *(.fixup)
     *(.got1)
-   }
-    _etext = .;
-    PROVIDE (etext = .);
-    .rodata    :
-   {
+    . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
-  .fini             : { *(.fini)    } =0
+  .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
   .dtors     : { *(.dtors)   }
 
   /* Read-write section, merged into data segment: */
-  . = (. + 0x00FF) & 0xFFFFFF00;
+  . = (. + 0x0FFF) & 0xFFFFF000;
   _erotext = .;
   PROVIDE (erotext = .);
   .reloc   :
@@ -107,7 +82,7 @@ SECTIONS
   __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
   __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
 
-  .data           :
+  .data    :
   {
     *(.data)
     *(.data1)
@@ -119,23 +94,26 @@ SECTIONS
   _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);
+  . = ALIGN(4096);
   __init_begin = .;
   .text.init : { *(.text.init) }
   .data.init : { *(.data.init) }
-  . = ALIGN(256);
+  . = ALIGN(4096);
   __init_end = .;
 
   __bss_start = .;
-  .bss      :
+  .bss       :
   {
    *(.sbss) *(.scommon)
    *(.dynbss)
index 68f121d6bfc6962cfa3f30c40d63c09ccd8d9009..e4b062bdd04f206b367af9f4e24d94519c7dfd92 100644 (file)
@@ -555,7 +555,7 @@ unsigned long long pattern[] = {
 int mem_test_data (void)
 {
        unsigned long long *pmem = (unsigned long long *) CFG_MEMTEST_START;
-       unsigned long long temp64;
+       unsigned long long temp64 = 0;
        int num_patterns = sizeof (pattern) / sizeof (pattern[0]);
        int i;
        unsigned int hi, lo;
@@ -662,7 +662,7 @@ int mem_march (volatile unsigned long long *base,
               unsigned long long wmask, short read, short write)
 {
        unsigned int i;
-       unsigned long long temp;
+       unsigned long long temp = 0;
        unsigned int hitemp, lotemp, himask, lomask;
 
        for (i = 0; i < size; i++) {
index e2719b99d1a50b450418205cd10f4b189004028a..be176dcc845693f150dba3dda4e01ebccbd5ea04 100644 (file)
@@ -267,8 +267,9 @@ void mv6436x_eth_initialize (bd_t * bis)
                dev->send = (void *) db64360_eth_transmit;
                dev->recv = (void *) db64360_eth_poll;
 
-               dev->priv = (void *) ethernet_private =
+               ethernet_private =
                        calloc (sizeof (*ethernet_private), 1);
+               dev->priv = (void *) ethernet_private;
                if (!ethernet_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
@@ -281,8 +282,9 @@ void mv6436x_eth_initialize (bd_t * bis)
                memcpy (ethernet_private->port_mac_addr, dev->enetaddr, 6);
 
                /* set pointer to memory for stats data structure etc... */
-               ethernet_private->port_private = (void *) port_private =
+               port_private =
                        calloc (sizeof (*ethernet_private), 1);
+               ethernet_private->port_private = (void *)port_private;
                if (!port_private) {
                        printf ("%s: %s allocation failure, %s\n",
                                __FUNCTION__, dev->name,
index 3e44fb97376b0f9c371c1db9be168d6d1a9b6d7f..37c7150423c04bf964503f0ce9e6469fecf3d454 100644 (file)
@@ -44,6 +44,14 @@ static const unsigned char pci_irq_swizzle[2][PCI_MAX_DEVICES] = {
        {0, 0, 0, 0, 0, 0, 0, 29, 29, [9 ... PCI_MAX_DEVICES - 1] = 0 },
 };
 
+#ifdef CONFIG_USE_CPCIDVI
+typedef struct {
+        unsigned int base;
+        unsigned int init;
+} GT_CPCIDVI_ROM_T;
+
+static GT_CPCIDVI_ROM_T gt_cpcidvi_rom = {0, 0};
+#endif
 
 #ifdef DEBUG
 static const unsigned int pci_bus_list[] = { PCI_0_MODE, PCI_1_MODE };
@@ -800,21 +808,63 @@ static void gt_setup_ide (struct pci_controller *hose,
                unsigned int offset =
                        (bar < 2) ? bar * 8 : 0x100 + (bar - 2) * 8;
 
-               pci_write_config_dword (dev, PCI_BASE_ADDRESS_0 + offset,
-                                       0x0);
-               pci_read_config_dword (dev, PCI_BASE_ADDRESS_0 + offset,
-                                      &bar_response);
+               pci_hose_write_config_dword (hose, dev, PCI_BASE_ADDRESS_0 + offset,
+                                            0x0);
+               pci_hose_read_config_dword (hose, dev, PCI_BASE_ADDRESS_0 + offset,
+                                           &bar_response);
 
                pciauto_region_allocate (bar_response &
                                         PCI_BASE_ADDRESS_SPACE_IO ? hose->
                                         pci_io : hose->pci_mem, ide_bar[bar],
                                         &bar_value);
 
-               pci_write_config_dword (dev, PCI_BASE_ADDRESS_0 + bar * 4,
-                                       bar_value);
+               pci_hose_write_config_dword (hose, dev, PCI_BASE_ADDRESS_0 + bar * 4,
+                                            bar_value);
        }
 }
 
+#ifdef CONFIG_USE_CPCIDVI
+static void gt_setup_cpcidvi (struct pci_controller *hose,
+                             pci_dev_t dev, struct pci_config_table *entry)
+{
+       u32               bar_value, pci_response;
+
+       pci_hose_read_config_dword (hose, dev, PCI_COMMAND, &pci_response);
+       pci_hose_write_config_dword (hose, dev, PCI_BASE_ADDRESS_0, 0xffffffff);
+       pci_hose_read_config_dword (hose, dev, PCI_BASE_ADDRESS_0, &pci_response);
+       pciauto_region_allocate (hose->pci_mem, 0x01000000, &bar_value);
+       pci_hose_write_config_dword (hose, dev, PCI_BASE_ADDRESS_0, (bar_value & 0xffffff00));
+       pci_hose_write_config_dword (hose, dev, PCI_ROM_ADDRESS, 0x0);
+       pciauto_region_allocate (hose->pci_mem, 0x40000, &bar_value);
+       pci_hose_write_config_dword (hose, dev, PCI_ROM_ADDRESS, (bar_value & 0xffffff00) | 0x01);
+       gt_cpcidvi_rom.base = bar_value & 0xffffff00;
+       gt_cpcidvi_rom.init = 1;
+}
+
+unsigned char gt_cpcidvi_in8(unsigned int offset)
+{
+        unsigned char     data;
+
+       if (gt_cpcidvi_rom.init == 0) {
+               return(0);
+               }
+        data = in8((offset & 0x04) + 0x3f000 + gt_cpcidvi_rom.base);
+        return(data);
+}
+
+void gt_cpcidvi_out8(unsigned int offset, unsigned char data)
+{
+        unsigned int      off;
+               
+       if (gt_cpcidvi_rom.init == 0) {
+               return;
+               }
+       off = data;
+       off = ((off << 3) & 0x7f8) + (offset & 0x4) + 0x3e000 + gt_cpcidvi_rom.base;
+        in8(off);
+        return;
+}
+#endif
 
 /* TODO BJW: Change this for DB64360. This was pulled from the EV64260  */
 /* and is curently not called *. */
@@ -835,9 +885,12 @@ static void gt_fixup_irq (struct pci_controller *hose, pci_dev_t dev)
 #endif
 
 struct pci_config_table gt_config_table[] = {
+#ifdef CONFIG_USE_CPCIDVI
+       {PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69030, PCI_CLASS_DISPLAY_VGA,
+        PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, gt_setup_cpcidvi},
+#endif
        {PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE,
         PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, gt_setup_ide},
-
        {}
 };
 
@@ -857,10 +910,21 @@ void pci_init_board (void)
 #ifdef CONFIG_PCI_PNP
        unsigned int bar;
 #endif
-
 #ifdef DEBUG
        gt_pci_bus_mode_display (PCI_HOST0);
 #endif
+#ifdef CONFIG_USE_CPCIDVI
+       gt_cpcidvi_rom.init = 0;
+       gt_cpcidvi_rom.base = 0;
+#endif
+
+       pci0_hose.config_table = gt_config_table;
+       pci1_hose.config_table = gt_config_table;
+
+#ifdef CONFIG_USE_CPCIDVI
+       gt_config_table[0].config_device =  gt_setup_cpcidvi;
+#endif
+       gt_config_table[1].config_device =  gt_setup_ide;
 
        pci0_hose.first_busno = 0;
        pci0_hose.last_busno = 0xff;
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index 3d1f1fa09726428d7120481c4e8ccf2721c8ee9e..7bf7bb5a5e5490309e68fbfe1567ebc0b411bfc9 100644 (file)
@@ -153,7 +153,7 @@ int checkboard (void)
 {
        int index;
        int len;
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index 9edb3afaa5f25d7f28666da0ef073f7857d56b02..89a4aaf80a5d339d94c8ac8a7e0f71b976861a9b 100644 (file)
@@ -111,7 +111,7 @@ static void showPci9054 (void)
                for (i = 0; i < 4; i++) {
                        pci_read_config_dword (CFG_PCI9054_DEV_FN,
                                                l * 16 + i * 4,
-                                               &val);
+                                               (unsigned int *)&val);
                        printf ("%08x ", val);
                }
                printf ("\n");
index 57a971f433c2da3ae7fd5322155e58a506efa0fc..2f8ab1a47873e1dfb28c8f24d7e34393a3f8456e 100644 (file)
@@ -162,7 +162,7 @@ int checkboard (void)
 {
        int index;
        int len;
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
        int fpga;
        unsigned short val;
index 5e7b2250143f7e034d6b72a6d1a37ce5708a3d16..fef5b524331695479dbad53fcdc6bf5b74fcbb2d 100644 (file)
@@ -101,6 +101,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -133,11 +134,13 @@ SECTIONS
   _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 = .;
index 056063e6dacd429fa8749e0cab54471f7d26c02a..fd51f7f343e8fcd5af4356608201b63565b4a4a1 100644 (file)
@@ -100,7 +100,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
        unsigned char trans[16] = {0x0,0x8,0x4,0xc,0x2,0xa,0x6,0xe,
                                   0x1,0x9,0x5,0xd,0x3,0xb,0x7,0xf};
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..43f776579ef780a00497dc67bc4f6b9759373bc8 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +120,13 @@ SECTIONS
   _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 = .;
index 7db2a609789a80dd016455bcfb0693c1108831bc..26e834196bd923f2b2051d8fc9c0e12a8b981b02 100644 (file)
@@ -162,7 +162,7 @@ int checkboard (void)
 {
        int index;
        int len;
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index b1793a2782f7ab7822a184d909703012211e6ba9..1cf375fef56ca3f8ef4110767628b15750332ecd 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index 2b1448e8337041ec13d4afcd15d809926106e2f7..58ee3a846fcf00e11c1b354decc641ef035a4875 100644 (file)
-  0x1f,0x8b,0x08,0x08,0x00,0x37,0x39,0x42,0x00,0x03,0x68,0x68,0x34,0x30,0x35,0x5f,
-  0x31,0x5f,0x30,0x34,0x2e,0x62,0x69,0x74,0x00,0xec,0xfd,0x7f,0x7c,0x54,0xe5,0x99,
-  0x37,0x8e,0x5f,0xe7,0x3e,0x27,0xe1,0x64,0xce,0x24,0x73,0x98,0x04,0x1b,0x01,0xf1,
-  0x64,0x12,0x70,0xa0,0x93,0x30,0x4c,0x10,0x31,0xc6,0xc9,0x61,0x12,0xe9,0x08,0x54,
-  0xa6,0xd6,0xed,0xb2,0x5d,0x3f,0xdd,0x81,0xd2,0x6e,0xda,0x8f,0x75,0xa3,0xed,0xb3,
-  0x4b,0x5d,0xd7,0xde,0x99,0x04,0x98,0x10,0x84,0x01,0xa9,0x46,0xcb,0xe3,0x0e,0x31,
-  0x6a,0x54,0xda,0x0e,0x01,0x25,0x28,0xc5,0x13,0x8c,0x1a,0x20,0x62,0x6a,0x69,0x17,
-  0xad,0xd5,0x41,0x83,0x06,0x1b,0x35,0x58,0xb4,0x09,0x3f,0xbf,0xd7,0x75,0x26,0xc9,
-  0x9c,0x09,0xdd,0x7d,0x76,0x3f,0xcf,0xeb,0xf3,0x7d,0xed,0xf7,0xf5,0x7d,0xb2,0x7f,
-  0xec,0xdd,0x33,0x37,0xc7,0x73,0xee,0x73,0xdf,0xd7,0xf5,0xbe,0xde,0xd7,0x2f,0xc8,
-  0x71,0x0c,0xa5,0xfe,0x0f,0x40,0x58,0x09,0x8e,0xda,0xda,0xf9,0xde,0x6b,0xff,0x6e,
-  0xde,0xdf,0x79,0xe7,0x97,0xdd,0xf9,0xed,0xd5,0xb0,0x0a,0x14,0xdf,0x0f,0xaf,0xf5,
-  0x7e,0xe7,0x47,0x77,0xcd,0x9b,0x3f,0x1f,0xbe,0x8d,0xff,0xcb,0xeb,0xbd,0x76,0xae,
-  0xb7,0x7c,0xee,0xbc,0xeb,0x60,0x35,0xe4,0x78,0x17,0x56,0x5c,0x3b,0xaf,0xc2,0x77,
-  0x3d,0x7c,0x07,0x84,0xf2,0xb6,0x4b,0xf8,0xf7,0xf4,0xc3,0x7f,0xf5,0x5d,0x2f,0x70,
-  0x01,0x00,0x26,0x79,0x85,0x30,0xfd,0x7f,0xc5,0x2b,0x68,0x02,0xf0,0xaa,0x52,0x2f,
-  0x18,0xf4,0xbf,0x61,0xf4,0xf7,0x1c,0x2f,0x68,0xd6,0xff,0x2d,0x78,0x41,0x87,0x10,
-  0xe8,0x1b,0x55,0x27,0xfc,0x27,0xfe,0x64,0x89,0x8f,0x0d,0xff,0x53,0xf3,0x61,0x7c,
-  0xfe,0xa5,0xc3,0xfc,0xdf,0x9d,0x94,0xfe,0xab,0xfa,0x2c,0x3e,0x3a,0x52,0x99,0xf7,
-  0x7f,0x3d,0x5d,0x08,0xc2,0xd8,0x5d,0x3f,0x7d,0xeb,0x3f,0x73,0xff,0xeb,0xbe,0x18,
-  0xbb,0xff,0x7f,0x75,0x3e,0xa8,0xff,0x89,0xe9,0xf8,0xbe,0x63,0x83,0x4f,0x55,0x41,
-  0xc7,0x7f,0x93,0x0d,0x02,0x87,0x30,0x14,0xfe,0x3b,0x83,0xeb,0xba,0xc7,0xe6,0x1b,
-  0x6b,0x87,0x4b,0xde,0xee,0xba,0xee,0xe5,0xdc,0x3d,0xa2,0xbf,0xe6,0xc3,0x98,0xaf,
-  0xdb,0xde,0x2b,0xde,0x57,0x73,0x2e,0x56,0xd5,0xbf,0x6c,0xa4,0xf8,0x22,0x0c,0x86,
-  0x77,0x73,0xfb,0x29,0x71,0x48,0xaa,0x1b,0x9b,0x5f,0x78,0x4a,0x8b,0x82,0x2b,0x2a,
-  0x77,0x30,0x0f,0x6f,0xd6,0x5a,0x7b,0x96,0x44,0xf2,0x77,0xf2,0x17,0xb4,0xb2,0x1e,
-  0x9b,0xcf,0x35,0xa8,0x75,0xd6,0xb9,0x22,0xb6,0x56,0x36,0x24,0x8d,0xad,0x62,0x4f,
-  0x56,0x3b,0x9f,0xaa,0x95,0x18,0x39,0x09,0x66,0x6f,0xfc,0xb2,0x6b,0x4e,0x4f,0x90,
-  0x3b,0xed,0xd1,0xdd,0x9a,0xa7,0x47,0xf6,0xb1,0xde,0xc6,0x56,0xd0,0x82,0xb2,0x8b,
-  0x7d,0x26,0x8c,0xdf,0x5f,0x6a,0xaf,0x69,0x06,0x57,0xa3,0xdc,0xce,0x3c,0xd0,0xdc,
-  0x38,0xa7,0x6f,0x2a,0x67,0x3b,0x85,0x17,0xa4,0x32,0xc3,0x96,0x60,0x83,0xf0,0x3c,
-  0xb8,0x16,0xd9,0xe2,0x6c,0x08,0xdf,0x24,0xf5,0xb7,0x68,0x4a,0x2d,0xef,0x93,0x17,
-  0xe8,0xa5,0xfb,0x9b,0x3d,0xf2,0x09,0xa3,0x22,0xbc,0xd1,0x55,0xec,0x91,0xcf,0x49,
-  0x7e,0xc3,0x9e,0x10,0x07,0xd5,0x53,0x89,0x8e,0xf8,0xc6,0x78,0xe0,0x18,0x8c,0xdd,
-  0x3f,0x2e,0x74,0xc0,0x05,0xed,0x46,0xc3,0x91,0x98,0x7c,0x5e,0xbe,0xc0,0xfe,0x29,
-  0xe8,0x30,0xc4,0xf3,0xf2,0x25,0xa8,0x32,0x1c,0x43,0xdf,0x3e,0x0f,0x23,0xf0,0x62,
-  0x70,0x73,0x92,0x0d,0x8c,0xdf,0xdf,0x50,0x77,0xc2,0x59,0x56,0x61,0xe4,0x6e,0x13,
-  0x77,0xe2,0xaf,0xbe,0xbe,0xbc,0x88,0xe2,0xe1,0x7f,0x94,0x7d,0x3d,0x8e,0x84,0xe8,
-  0x81,0x3f,0xc9,0xde,0xad,0x8e,0x56,0x31,0x01,0xda,0xe8,0xfc,0xe3,0x59,0x12,0xec,
-  0x03,0xd7,0x79,0x79,0x26,0x3e,0x7f,0x8b,0xa4,0xdd,0x9e,0xbb,0x91,0x95,0xaa,0xcd,
-  0x30,0x67,0x48,0x49,0x38,0x3d,0xf0,0x02,0xb8,0x74,0xa5,0x7d,0xc3,0x02,0xdc,0xfd,
-  0x63,0xef,0x1b,0x54,0x13,0x93,0xb5,0x64,0x8e,0x37,0x7b,0x27,0xec,0x82,0xb0,0xa1,
-  0x48,0xec,0xfe,0x9a,0x72,0x58,0x35,0xa4,0x78,0x99,0x1d,0x12,0xaa,0xd6,0xa8,0x68,
-  0x6c,0xa1,0x14,0x1a,0x9d,0x3f,0x1c,0xfa,0xa6,0xfe,0x2c,0x2f,0x6a,0x0b,0xae,0xc9,
-  0x9e,0x01,0x57,0xc5,0x1e,0xeb,0x6f,0x5a,0x12,0x39,0x50,0xb3,0x97,0xcf,0x1e,0x58,
-  0xba,0x86,0xcd,0x80,0x3d,0xbc,0x28,0xac,0x9c,0x62,0x95,0xe3,0xf7,0x0f,0xca,0x41,
-  0x78,0x9e,0xf9,0x8c,0xd2,0x85,0xe2,0x46,0x7e,0x3a,0xe9,0x1d,0xc8,0xe3,0xe2,0x2f,
-  0xf8,0x39,0xee,0x7d,0x6f,0x92,0x57,0xb4,0xc3,0x67,0x82,0x37,0xea,0xd0,0xc4,0xad,
-  0x6c,0x6c,0x3f,0xe8,0x53,0x3a,0xd5,0x0b,0xea,0x73,0xdc,0x31,0x24,0x9e,0x87,0x37,
-  0x85,0x1b,0x79,0xde,0xc1,0xa5,0x77,0xf0,0x23,0x2a,0xad,0x8f,0x72,0x5e,0xbf,0xa0,
-  0x56,0xe9,0x9b,0xc3,0x4a,0x5f,0xf6,0xd8,0xfa,0xc8,0x6a,0x1b,0x1c,0x07,0xbf,0xb1,
-  0x2c,0x91,0xef,0x51,0x47,0x20,0xa1,0x4f,0xf7,0x8a,0x3b,0xa5,0x23,0xf5,0xbe,0x2e,
-  0x47,0xa2,0x7a,0x50,0xde,0x07,0x3e,0xee,0x89,0xe7,0xcc,0x19,0x5f,0xff,0x1e,0x75,
-  0x1b,0x64,0xb1,0x52,0xc3,0x5d,0xe7,0x9c,0x0e,0xcf,0x42,0x91,0xfe,0x4d,0x5d,0x38,
-  0xaf,0xae,0x87,0x22,0x43,0xa9,0x63,0x6f,0xc3,0x01,0x98,0xad,0xcb,0x61,0xe6,0x93,
-  0xc6,0xee,0xaf,0xc1,0x3a,0x35,0x9b,0x7b,0x4e,0x04,0x17,0xba,0xbe,0x05,0xbf,0x8a,
-  0xfe,0x7d,0xb2,0xa5,0xc7,0xf5,0x28,0x3c,0xc4,0x67,0x26,0x95,0x35,0xec,0x1d,0x58,
-  0x5f,0x5f,0x14,0x97,0x07,0x9c,0xe1,0xf1,0xf5,0xaf,0x95,0xd6,0xb9,0xea,0xfb,0x3c,
-  0xdd,0xb2,0xd7,0xb6,0x0c,0x76,0x49,0x25,0x49,0x9b,0x68,0xeb,0x85,0x07,0xa0,0xc4,
-  0xc0,0xf5,0xec,0x15,0x76,0xc3,0x9c,0x3b,0x64,0x8d,0xdd,0x3a,0xbe,0x3f,0x07,0x84,
-  0x73,0xfc,0x28,0xab,0x8a,0xdb,0x07,0x26,0xd5,0xc2,0x17,0xea,0x75,0x9d,0xf6,0x81,
-  0x69,0xed,0xec,0x2d,0xf8,0x8c,0x3b,0xe2,0xe2,0xc0,0xe4,0xa3,0x7a,0x39,0xb7,0x27,
-  0xc5,0x8a,0xf1,0xe7,0x09,0x0a,0x78,0x59,0xf3,0x6b,0x57,0xaf,0x9d,0x14,0x87,0x61,
-  0x5c,0x5a,0x5c,0xcf,0xa4,0x3c,0x10,0xa8,0x00,0x07,0x0e,0xb2,0x86,0x6d,0x7e,0xd8,
-  0xcc,0xc5,0xad,0x30,0x76,0x7f,0x19,0xd6,0xc1,0x21,0xb8,0xaf,0xc6,0xde,0x32,0x69,
-  0x96,0x3c,0x02,0xf3,0xf5,0xdc,0x98,0x58,0x42,0x57,0xf4,0x49,0x31,0xb1,0x5f,0x1a,
-  0x11,0x7c,0xb5,0xf6,0x47,0x6c,0x6c,0xfc,0x79,0xb8,0xfa,0xf7,0xc2,0x9b,0x7a,0x59,
-  0xa8,0xf4,0x11,0xe5,0xef,0x71,0xf5,0x5a,0xf5,0xb9,0xdb,0xc4,0xd5,0xf0,0xa6,0xeb,
-  0xbe,0x90,0xb2,0x8d,0x7d,0x08,0xfb,0x74,0x57,0x58,0x56,0x1d,0xe1,0x71,0xb1,0xb0,
-  0x30,0x6b,0xe6,0x4d,0x4f,0xe9,0x1e,0x5d,0x9e,0x3c,0x6b,0xa6,0xbe,0x8f,0xcd,0xd2,
-  0x7f,0x5c,0xe0,0x92,0xa0,0x49,0xb8,0x13,0xe7,0x3b,0x4f,0xde,0xb4,0x43,0x77,0x19,
-  0x72,0x2c,0xfb,0x95,0xf1,0xfd,0xa0,0x15,0x64,0xe5,0xec,0x58,0xe4,0xe9,0x93,0x0b,
-  0xb2,0xb3,0xa4,0x7d,0xba,0x16,0x9a,0x56,0xc0,0x6e,0x12,0xb6,0x04,0x6a,0x43,0x4a,
-  0x01,0x7b,0x59,0xd8,0xa5,0xc7,0x43,0xf2,0xb6,0xec,0x83,0xc2,0xd8,0x7e,0x58,0x93,
-  0x1b,0x66,0xed,0xac,0x0c,0x64,0xce,0x34,0x7c,0xdf,0x05,0x90,0xcb,0x45,0x0d,0x0c,
-  0x28,0x13,0xe8,0x7d,0xf1,0x8a,0x17,0x3c,0x5c,0xdc,0x24,0x8e,0xed,0xcf,0x96,0xac,
-  0xcf,0xe1,0x0f,0x50,0x15,0x72,0x1c,0x13,0xcf,0xe0,0xf7,0x7d,0x31,0xb4,0xbc,0x4f,
-  0xec,0xc7,0x83,0xe3,0xd7,0x1d,0xf8,0xbe,0x70,0xa9,0x06,0x7f,0x0a,0x89,0xb3,0xb2,
-  0xc7,0xf6,0x43,0x61,0x56,0xbf,0x7e,0x08,0x7c,0xcb,0x37,0xe2,0xaf,0xea,0x21,0xdd,
-  0x77,0x93,0x5d,0xc5,0xf5,0x19,0x81,0x7b,0x74,0xfb,0x16,0xb1,0x44,0x3f,0xe2,0xf6,
-  0x2d,0xb6,0xc7,0x26,0xbd,0x32,0xbe,0x7f,0x16,0x16,0x9e,0x60,0x51,0xad,0xb5,0x50,
-  0x6e,0x5c,0x97,0x8c,0x44,0xf1,0x75,0x64,0x6e,0xd3,0x0a,0x3a,0xa1,0x02,0xdc,0x7c,
-  0x69,0x98,0x7e,0x52,0xf3,0x0c,0x76,0x74,0x7c,0x3d,0x83,0x59,0xdb,0x8c,0xb5,0xb3,
-  0x8b,0x83,0xd1,0xaf,0x07,0x8e,0xcd,0xbc,0x1f,0x8a,0x82,0x3d,0xdf,0x6c,0x2d,0x68,
-  0xbf,0xd6,0x5d,0xba,0x44,0x0e,0xb1,0x82,0xc6,0xb5,0xee,0x22,0x3d,0xe7,0xd6,0xc8,
-  0xd6,0x71,0xf9,0xd3,0x22,0x6d,0x73,0xae,0xe5,0xc5,0xba,0x7c,0x9c,0x1d,0x53,0xef,
-  0xd7,0x1f,0x0b,0x15,0xde,0xea,0x9c,0x2f,0xfd,0x0a,0x4a,0xf5,0x60,0x88,0xdd,0x26,
-  0xaf,0xd5,0x8a,0x42,0x4b,0xfa,0x9c,0xaf,0x8c,0xef,0x87,0xf8,0xe4,0xef,0x34,0x1e,
-  0x5a,0xe5,0xd4,0xed,0x0f,0xb2,0x7e,0x38,0x24,0xf8,0xea,0x3c,0xf4,0x7d,0x47,0x84,
-  0xfb,0x74,0x7c,0xa3,0x12,0xa9,0x09,0x7c,0x61,0xfc,0xe2,0x03,0xe3,0xf2,0xb3,0x67,
-  0x51,0x9b,0x36,0x22,0xfb,0x6b,0xe7,0xc6,0xf2,0x71,0x59,0xe4,0xfd,0x4b,0xe6,0xc6,
-  0xcc,0xf5,0xa9,0xa0,0xf5,0x69,0x83,0x11,0xee,0x0f,0x3a,0x62,0x0d,0x67,0xc7,0xe5,
-  0x8f,0xac,0xee,0x10,0x7a,0x74,0x1f,0xd8,0x71,0xd9,0x0b,0x7b,0x60,0x81,0xea,0xe1,
-  0xc5,0x9a,0xd4,0x23,0xf8,0x61,0x19,0xad,0x7f,0x4f,0x8d,0x0f,0x82,0x46,0xfe,0x12,
-  0x69,0x6c,0xff,0xbb,0xb3,0xdc,0xec,0x30,0x68,0xdc,0x16,0x9f,0xe6,0xce,0x8e,0xe8,
-  0xae,0x58,0x5e,0x9c,0xb5,0xc3,0x5b,0x50,0xc6,0xed,0xed,0xce,0x01,0xd8,0x00,0x73,
-  0xf0,0x27,0xd1,0x36,0xbe,0x1f,0xdc,0xd2,0x72,0x78,0xc0,0x70,0x1b,0xb2,0x37,0x7b,
-  0x19,0x0e,0x34,0xa3,0xd0,0x9b,0x6d,0x17,0x1a,0xe0,0x8e,0x64,0x8e,0x9f,0xbd,0xce,
-  0x1b,0xb8,0x66,0xc8,0x0b,0x99,0x0d,0xc6,0xbe,0x2f,0x57,0x6f,0xd7,0xd6,0xd7,0x14,
-  0x73,0xb9,0x36,0x32,0x1d,0x1e,0x5a,0x54,0xd4,0x65,0xeb,0x63,0x0f,0x66,0x3d,0x28,
-  0xff,0xa0,0x4f,0xfe,0x51,0xe0,0x0f,0xb0,0x5e,0x2f,0x32,0x6c,0xf7,0x32,0xf7,0xf8,
-  0xfd,0xa3,0xd1,0xbb,0xe1,0x51,0xbe,0x2f,0xec,0x3e,0x2e,0xfa,0xe0,0x5f,0xf9,0xb3,
-  0x49,0x7b,0x6d,0xb1,0x1f,0x5e,0xe5,0x73,0xe3,0xa5,0xb5,0xe2,0x59,0x76,0x94,0xef,
-  0x0e,0xdb,0x87,0x95,0x39,0xe3,0xf2,0x47,0x16,0xe2,0x70,0x16,0x2a,0xbb,0x70,0x59,
-  0x92,0xf2,0x1f,0x45,0xbf,0x71,0x35,0xad,0xcf,0x39,0xf8,0x47,0x83,0xce,0x23,0xfc,
-  0x11,0x45,0x8d,0x23,0x31,0xe9,0xe0,0xb8,0xfc,0x61,0xd2,0x01,0xf8,0x38,0x72,0x43,
-  0xbf,0xd4,0x59,0xfd,0x89,0xfe,0x36,0x9f,0xbf,0x33,0x6f,0x78,0xda,0x01,0xfd,0x52,
-  0x6c,0x41,0xd8,0x3e,0xc2,0x66,0x49,0x1f,0xf3,0xf2,0xa4,0xbd,0x47,0x80,0xf1,0xf5,
-  0x6f,0x97,0xf7,0x7b,0x51,0xda,0xb4,0xd9,0x07,0x50,0x7e,0xf6,0x6d,0xb9,0x76,0x20,
-  0xf7,0x6b,0xe2,0x62,0xf8,0x82,0x2f,0x4c,0xda,0xce,0xb2,0xe7,0x60,0x3d,0xec,0x30,
-  0x6c,0x06,0x7b,0x7a,0xfc,0xfb,0x02,0xdf,0x0e,0x8f,0xab,0xee,0xa0,0xad,0xce,0x95,
-  0xe0,0x8d,0x50,0xbc,0xf6,0x91,0x24,0xdb,0x6e,0xec,0x2d,0x12,0x20,0xe7,0x2e,0x36,
-  0x1d,0x1a,0x51,0x82,0xc9,0xb5,0x0c,0xc6,0xe5,0x8f,0x26,0x6d,0x84,0x86,0x90,0xd6,
-  0x93,0x33,0x2f,0x82,0x9b,0x09,0x66,0x19,0x7f,0x53,0xc0,0x6a,0x50,0xec,0xbb,0x0d,
-  0x25,0x11,0x30,0x7f,0x1a,0xb2,0x69,0x2c,0x3a,0x2e,0x1f,0xda,0xa7,0xdc,0x01,0xef,
-  0x43,0x45,0x5f,0xde,0x7e,0xb6,0x13,0x8e,0x40,0xc7,0xe2,0xbc,0xfd,0x62,0x3b,0x29,
-  0x1a,0x03,0xb7,0x8d,0x87,0x35,0x1b,0xad,0x6d,0x72,0x42,0x9c,0x33,0xbe,0x1f,0xb8,
-  0xb0,0x13,0x57,0xc3,0xdf,0x98,0x17,0x47,0x7d,0x74,0xce,0xe6,0x37,0x36,0xed,0x12,
-  0x07,0x85,0x01,0x5c,0x96,0xbc,0x98,0x38,0x28,0xe3,0x4f,0xdd,0xa8,0x98,0x92,0xe3,
-  0xf7,0x2f,0x52,0x13,0xd2,0x3b,0xf2,0x97,0x17,0xdd,0xdf,0xc7,0xf6,0xf3,0x7f,0xd0,
-  0xa6,0xe9,0xf6,0x81,0xc7,0x2a,0xe0,0xb5,0x82,0x2f,0x73,0xb1,0x4b,0x5c,0x08,0x07,
-  0xe5,0x0e,0x70,0x0c,0x31,0x43,0x1f,0x9b,0xbf,0x43,0x0a,0x4b,0x1b,0xd8,0xf7,0x0d,
-  0x5b,0x8c,0xfd,0x32,0xf6,0x4c,0x72,0x4e,0xbf,0x6d,0xa1,0x78,0x27,0x34,0x81,0xcb,
-  0x58,0xca,0xf1,0xb3,0xfe,0x1e,0x35,0xa0,0x92,0x60,0xc9,0x71,0xf9,0xc3,0xb3,0xec,
-  0xf0,0xb0,0xe0,0x36,0xa2,0xa4,0xad,0x9a,0x81,0xc1,0x92,0x0e,0x9b,0x1c,0x6f,0x26,
-  0x35,0x97,0x60,0x28,0x88,0x98,0x2b,0xa6,0x70,0x96,0x94,0xc6,0xf6,0x83,0x2c,0xa1,
-  0x5a,0xc7,0xb3,0x6a,0x2b,0x89,0x6c,0x84,0xe2,0x25,0x6e,0x54,0xeb,0xb6,0x65,0x77,
-  0xb6,0x16,0xc6,0x7b,0xa6,0x79,0x6d,0x12,0x0a,0x6a,0x30,0x14,0x60,0x69,0xf9,0x03,
-  0xff,0xf3,0x0e,0xf8,0x35,0x3c,0x1d,0xb4,0x93,0xb6,0x7d,0x1f,0x7c,0x33,0xe6,0xc4,
-  0x99,0x9b,0xbf,0xa4,0x79,0xed,0x8e,0x0e,0xd1,0x13,0xed,0x01,0x1f,0xe0,0xc6,0x30,
-  0xc6,0xe5,0x4f,0xfc,0xaa,0xf3,0xd2,0x25,0x5a,0x84,0xa1,0x49,0x6f,0xeb,0xff,0xac,
-  0x55,0x19,0x93,0xea,0x84,0x41,0xfe,0xb7,0xda,0x75,0xbd,0x8e,0x5d,0xe2,0x79,0xfd,
-  0x12,0xdc,0x60,0x38,0x92,0xe2,0xc0,0xb8,0xfc,0x31,0xb2,0x2e,0xc2,0xbf,0xf1,0xf2,
-  0x6e,0x14,0xf2,0xff,0x02,0xbf,0xa5,0xdd,0x32,0x54,0x7c,0x2b,0xbc,0xce,0x6f,0x30,
-  0xec,0x9d,0xb8,0x63,0x7b,0x63,0xe5,0x25,0xf6,0xe3,0xe2,0xd0,0xb8,0xfc,0xe1,0xea,
-  0x27,0xea,0x61,0xee,0xea,0x91,0x13,0xec,0x46,0x68,0xe2,0x0b,0x92,0x79,0x9f,0xa3,
-  0x60,0x7c,0xcc,0x5d,0x74,0x50,0x4e,0x1c,0x04,0xad,0xa9,0xc8,0x25,0x07,0x63,0xf8,
-  0xbe,0xe3,0xf2,0x3f,0xab,0x47,0x6e,0x90,0x4a,0x0c,0x54,0x3a,0x5f,0x6d,0xdc,0x85,
-  0xdb,0x20,0xc7,0xeb,0xd2,0xa1,0x41,0x73,0x77,0x23,0xfe,0x01,0x88,0xe0,0xc6,0x91,
-  0x55,0x7c,0xdf,0xf1,0xe7,0xf9,0xda,0xd3,0xb0,0x21,0x34,0xcb,0x70,0x27,0x10,0x3f,
-  0x3c,0xa5,0x9a,0xb0,0xa7,0x18,0x1e,0xc3,0xf5,0x77,0x7b,0xf1,0x3f,0xa4,0x80,0x0b,
-  0xe4,0x58,0x64,0x28,0xbd,0x3f,0x0b,0x7e,0x2e,0x1f,0x81,0x05,0x5d,0xf6,0xc7,0x1b,
-  0xee,0x80,0xd3,0x7c,0xa1,0x91,0x9b,0x10,0x57,0xb1,0x23,0x50,0x61,0xd8,0xf7,0x89,
-  0xb3,0x24,0x03,0x37,0x12,0x4a,0xa4,0xbe,0xf1,0xfd,0x7f,0x82,0xef,0x67,0x17,0xe1,
-  0x79,0xc3,0xd1,0x29,0x0e,0xc2,0x1f,0x1a,0xaf,0xc3,0xd3,0x84,0x82,0xfa,0x12,0xdc,
-  0x68,0xcc,0x1d,0x52,0xce,0x04,0x2e,0x40,0x55,0x17,0x8a,0xee,0x61,0x0b,0xfe,0x79,
-  0x0a,0x7e,0xaf,0x57,0x18,0x79,0xad,0xb8,0xdf,0x0e,0x49,0xbe,0x83,0x79,0x5e,0x31,
-  0xa9,0xff,0x11,0x6f,0x8b,0x5f,0x64,0x16,0x3f,0x0c,0xbe,0x13,0x8e,0xed,0x88,0x0f,
-  0xc7,0xf6,0x7f,0x8f,0xc4,0x60,0xab,0x56,0x6c,0xc8,0xcf,0xb9,0x2a,0xd5,0x37,0xb9,
-  0xeb,0xb8,0x72,0x9e,0x3d,0x01,0xcd,0xec,0xcb,0x86,0x9c,0x08,0x3c,0x09,0xcd,0xdc,
-  0xd5,0x9f,0x17,0x63,0x9f,0x8d,0xcb,0x87,0x64,0x56,0x10,0x3a,0xcc,0xfd,0x36,0x75,
-  0x27,0xdb,0xb1,0x04,0xfa,0x96,0xf8,0x59,0x1c,0xdf,0x57,0xa3,0xf7,0x7d,0x8a,0xc5,
-  0xe3,0x2e,0x50,0x5c,0x6c,0x78,0x5c,0xfe,0x84,0x85,0xa9,0xfc,0x40,0x7d,0x51,0x52,
-  0x26,0xb4,0xf3,0xd3,0x96,0x1d,0x49,0xe5,0xc7,0x91,0xbd,0xb0,0x9e,0x7f,0xaf,0x1f,
-  0xaf,0x3c,0x02,0x8f,0xf3,0x22,0xcd,0x56,0xcb,0x8e,0x5b,0xf0,0x8f,0xac,0x7d,0x06,
-  0x0b,0x0d,0x7c,0xec,0x4d,0xb1,0x2e,0xf0,0xd2,0x80,0xab,0x8f,0x81,0x77,0xc0,0xfe,
-  0x82,0x28,0xc3,0x47,0xb2,0x57,0x76,0xb8,0xc4,0x37,0xd2,0xf8,0xe7,0xaa,0x4e,0xfe,
-  0xb6,0x89,0x06,0xc5,0x0b,0x7c,0x04,0xe6,0xd2,0x60,0x27,0xae,0x8f,0xff,0x8d,0xcd,
-  0x43,0xe2,0xb0,0xfe,0x2e,0x54,0x81,0x63,0x40,0x4c,0xe3,0x9f,0xf6,0xac,0x1e,0x78,
-  0x8b,0x2f,0x30,0x72,0xbd,0xb4,0x3e,0xb8,0xec,0x8e,0xe7,0x50,0x3f,0xfe,0x1e,0x07,
-  0x65,0x88,0x3f,0x01,0xf7,0xa7,0x21,0xb7,0x8b,0x16,0xfc,0x33,0xb9,0x45,0x5d,0x07,
-  0xf3,0x7a,0x7a,0xea,0x58,0x25,0x7f,0x1c,0xae,0x35,0x1c,0x9f,0xb3,0x02,0xb6,0x1e,
-  0xb4,0x1e,0x19,0xf1,0x0f,0x5b,0x8b,0x40,0x28,0x03,0xff,0x18,0xf0,0x08,0xca,0xcf,
-  0x92,0xc1,0xd9,0xc3,0x91,0x47,0x7b,0xee,0x8f,0xce,0x46,0xd8,0x63,0xbb,0x15,0xdf,
-  0x77,0xf6,0x80,0x6d,0x8d,0xf3,0x1d,0xd8,0x84,0x40,0xa8,0x73,0x20,0xe0,0x1d,0x97,
-  0x3f,0xc1,0x82,0xa0,0x1e,0x51,0x35,0xdc,0x66,0xd9,0x1e,0xf9,0x31,0x84,0x3d,0x36,
-  0x6f,0xf6,0x1d,0xb8,0x6d,0x50,0x8c,0x17,0xb2,0x8f,0x79,0x33,0xb4,0x19,0x99,0xf8,
-  0x67,0x4a,0x0b,0xbc,0xc3,0x17,0xf0,0xdc,0x01,0xb1,0x9d,0x1d,0xe6,0x0b,0xb9,0x12,
-  0x17,0x7f,0x0c,0x87,0xa1,0x82,0xe7,0x3d,0x2d,0x9e,0x92,0x0e,0xc3,0x82,0xd8,0xb2,
-  0xb8,0x62,0xc1,0x3f,0x70,0x02,0x95,0x7e,0x05,0xe4,0x71,0x05,0xb5,0xbf,0x8e,0xb0,
-  0x07,0xc4,0x1d,0xda,0x00,0x02,0x37,0x07,0x77,0x26,0x25,0xfc,0x29,0xdb,0xd1,0x6d,
-  0xc5,0x3f,0xa1,0x7e,0xf9,0x4d,0x5e,0xa9,0xdb,0xaf,0x24,0xd8,0xa3,0x2f,0x08,0x67,
-  0xc7,0xc4,0x6b,0x18,0x6a,0x7c,0xdd,0x1e,0x13,0x3f,0x84,0x9b,0xb9,0x33,0xbc,0x6c,
-  0xab,0x78,0x30,0x8d,0x7f,0xa4,0xef,0x40,0x53,0x5f,0x99,0x8e,0x9b,0xbc,0x04,0x7e,
-  0xad,0x31,0x5d,0xde,0x86,0xfb,0x07,0xe5,0x0f,0xea,0x47,0xc4,0x3f,0x4d,0xdc,0xf5,
-  0x35,0x39,0x66,0x91,0x3f,0x85,0x50,0xa6,0x35,0xe9,0xdf,0xd5,0x6d,0xb1,0x40,0x09,
-  0x4e,0x9b,0x15,0xb4,0x6d,0x63,0x25,0x45,0x4f,0x81,0xa6,0xe3,0x31,0xec,0x87,0x9f,
-  0x87,0x9f,0xaa,0x91,0xfb,0x58,0x1a,0xff,0xc8,0x52,0x1b,0xab,0x07,0x4f,0xc8,0x56,
-  0xc0,0xb2,0xa4,0xc9,0xf8,0xbd,0x71,0xb0,0x96,0xd5,0x23,0x10,0xb2,0x15,0x04,0xfe,
-  0x0d,0x9e,0xd5,0xbf,0x57,0xe7,0xbe,0xcd,0x22,0x7f,0x3a,0x73,0xc2,0xf8,0x11,0x17,
-  0xd0,0xfb,0x6a,0x6a,0x54,0xa2,0x81,0x08,0x72,0x92,0xa1,0xda,0xe5,0xa2,0x81,0x86,
-  0xc2,0x42,0x40,0xd1,0xf1,0x89,0x38,0x36,0xbf,0xe5,0xaa,0x33,0x70,0x12,0xfc,0xa1,
-  0xd2,0x63,0xf9,0x27,0xe1,0x73,0x84,0x3d,0x68,0x38,0x9c,0x41,0x79,0x7e,0x20,0xe4,
-  0xe8,0x43,0x8d,0xdf,0x05,0x0b,0x74,0x87,0x2a,0x7e,0x20,0x8e,0xe3,0x8d,0xac,0x33,
-  0x88,0x97,0x7c,0x21,0xc7,0xaf,0x9b,0x57,0x27,0x5f,0x83,0x72,0xdd,0xde,0xd7,0x30,
-  0x9f,0xbd,0xa9,0xfa,0x96,0xcc,0xd8,0xa6,0xcc,0xd7,0x2f,0x98,0x57,0xc4,0x59,0x69,
-  0xfc,0xa3,0xc6,0x01,0xed,0x2f,0xb5,0x39,0x22,0x16,0xf1,0x1e,0xe6,0x82,0x5c,0x54,
-  0xce,0xd1,0xa8,0xc6,0x54,0x39,0x92,0x1f,0x86,0x4e,0xc9,0x27,0xcb,0x11,0xb6,0x69,
-  0x7c,0x3d,0x41,0xea,0x87,0x2d,0xa0,0xad,0x50,0x54,0x54,0x43,0xf5,0xb8,0x2c,0x4b,
-  0xd5,0x88,0xa4,0xd5,0x33,0x6d,0x89,0x2d,0xe6,0x94,0xea,0x77,0xc9,0x5a,0x40,0x56,
-  0x5b,0xd9,0xb8,0xfc,0x29,0x9c,0xdc,0xc6,0x9b,0x54,0x97,0xbe,0x34,0xc6,0x4a,0xd4,
-  0x87,0x11,0x7f,0xe2,0x3f,0x94,0xf4,0xa6,0x6c,0x97,0x1e,0xdd,0xca,0x56,0xc3,0xbe,
-  0x7a,0xad,0xab,0xd0,0xeb,0x5b,0x97,0xc6,0x3f,0xdb,0xd6,0x6a,0xbf,0xe6,0x1d,0xba,
-  0xa3,0x05,0x61,0x6a,0x3d,0x7e,0x56,0x47,0x0a,0xdf,0x76,0xe8,0xb6,0x14,0x90,0xdb,
-  0xaa,0xa3,0xfc,0x71,0x8f,0x3f,0x4f,0x3b,0xb4,0xa5,0xd0,0xe0,0x23,0x62,0x3f,0x3b,
-  0x65,0xf8,0x09,0x0f,0xf7,0x6b,0x23,0x50,0x69,0xe2,0x1f,0x1c,0x3c,0x1f,0x40,0xfc,
-  0xf3,0xd1,0xf8,0x7e,0x76,0xab,0x04,0xb3,0x7d,0x82,0xa3,0xfe,0x81,0x38,0x8a,0x81,
-  0x05,0x8c,0x80,0x90,0xf9,0x45,0xec,0xbc,0x18,0xf1,0x0f,0xf8,0x09,0x7f,0x1e,0x4e,
-  0xe3,0x1f,0xa9,0x02,0x0e,0x44,0x5d,0x5c,0x19,0x08,0xb8,0xd5,0xa3,0x6a,0x51,0xbb,
-  0x2d,0x89,0xd6,0xd3,0x5b,0xe0,0xe2,0xc1,0x78,0x60,0x04,0x36,0x79,0xe7,0x46,0x82,
-  0xc9,0xc8,0xe1,0xb1,0xd5,0x41,0xbc,0xb4,0x44,0xde,0x0d,0x71,0x63,0xda,0x4e,0xd4,
-  0xbf,0x3b,0xf4,0xd5,0x61,0x44,0x3b,0xb9,0x68,0xaf,0xa1,0xc5,0xea,0x65,0xaf,0xc3,
-  0x23,0xdc,0x73,0x3a,0x47,0x46,0x44,0x35,0x26,0x7f,0x8a,0x84,0xc2,0x92,0x17,0xa1,
-  0xa8,0xdb,0xb4,0xce,0x1a,0xe5,0x22,0xb0,0xfd,0x28,0xa0,0xba,0x1f,0xd2,0x8a,0xba,
-  0xe5,0xba,0xc0,0xbf,0x4d,0x7e,0x48,0x28,0xd5,0x73,0xc2,0xac,0x27,0x8d,0xaf,0xe4,
-  0x2b,0xe0,0xcf,0x7c,0xde,0x80,0xb2,0x26,0xff,0xd1,0x48,0x3f,0xbf,0x36,0x6c,0x5f,
-  0xa3,0x5c,0x01,0xaf,0x0f,0xcd,0x3f,0xf5,0xd5,0x7b,0x10,0xff,0xfc,0x1b,0xaf,0x8a,
-  0xe7,0x06,0xc5,0xc3,0x69,0xfc,0x93,0xbb,0x13,0xfe,0x04,0xfe,0x13,0xcb,0x51,0x7a,
-  0xe8,0x43,0xac,0x52,0x40,0xf9,0x7c,0x92,0x9f,0xab,0xf1,0xf7,0xcd,0x7d,0x0e,0x25,
-  0x3c,0xe1,0x1f,0x54,0xfd,0x69,0xfc,0xa3,0x4f,0x39,0x8b,0x68,0xea,0xba,0x24,0xca,
-  0x73,0x3f,0x1c,0xe5,0xbf,0x92,0x51,0x5b,0x55,0xa1,0xfe,0xaa,0x1a,0xb2,0x0f,0x37,
-  0x5c,0x84,0xfb,0xb7,0x56,0x21,0xfe,0xb1,0xc8,0xff,0xf6,0xc9,0x0f,0xc3,0x7a,0xb9,
-  0xc8,0xc8,0x1b,0x5e,0x62,0xc7,0x4f,0x71,0xed,0xf4,0xdc,0xd3,0xac,0x00,0x9e,0x84,
-  0xb2,0xee,0x39,0x75,0xac,0x8f,0xad,0x0f,0x95,0x72,0x79,0x25,0xfb,0x68,0xfc,0xfe,
-  0x31,0xd8,0x8e,0xa0,0x68,0x26,0x5a,0x67,0xb6,0x65,0xfa,0x4e,0x98,0x2d,0x21,0x6c,
-  0xbe,0x0a,0x1e,0x82,0x52,0x43,0xbe,0x8b,0xf5,0xe9,0x0f,0xdd,0x56,0xca,0x6d,0x35,
-  0xac,0x9b,0x8f,0xad,0x7f,0x58,0xea,0x85,0x86,0xe4,0x2c,0x63,0x89,0x8f,0x2d,0x83,
-  0x38,0x94,0x00,0x1a,0xfe,0x25,0xb0,0x1b,0x3c,0x86,0x6d,0x1e,0x1e,0xdb,0x07,0x10,
-  0x88,0xa2,0x46,0x7b,0x6b,0x5c,0x3e,0x68,0x59,0x4f,0xbb,0x8e,0x18,0xa8,0x86,0x3c,
-  0xec,0x5e,0x48,0xf2,0x39,0x60,0x4f,0x28,0x73,0xe1,0x5d,0xb8,0xda,0xb0,0x0f,0x8b,
-  0x83,0xec,0x37,0xf8,0xbe,0x65,0x2d,0xe2,0xd1,0xf1,0xfd,0xd6,0x08,0xa7,0x10,0xff,
-  0xa0,0x98,0x6d,0x51,0x36,0x42,0x27,0xaf,0x50,0x1d,0xfd,0x62,0x3f,0xea,0xa3,0x4a,
-  0x63,0x6e,0x42,0xfc,0x18,0x4e,0xe9,0x7e,0xfd,0xa6,0x67,0xcb,0xd3,0xf8,0xa7,0x1e,
-  0x86,0x85,0x8b,0xac,0xca,0x98,0x3e,0x24,0x56,0x42,0xaf,0x74,0x1d,0x2c,0x4b,0x2a,
-  0xf3,0xe1,0x75,0xa1,0xca,0xb0,0x0f,0x89,0x17,0xe1,0xb5,0x83,0xe5,0x35,0xb8,0x62,
-  0x5a,0xcd,0xd8,0xfc,0xae,0xc6,0xef,0x85,0x9e,0xd7,0xcb,0x0c,0xb9,0x13,0xf5,0xef,
-  0x71,0xc3,0x1d,0xcf,0x8d,0xe3,0xf3,0xff,0x1e,0xee,0x44,0xfd,0xc5,0x3e,0x85,0x26,
-  0xc3,0xa5,0xcb,0xbf,0x2a,0x0e,0xeb,0xe3,0xf8,0x47,0x75,0xab,0x2f,0x14,0x7e,0xd7,
-  0x9c,0x5f,0x10,0xdd,0x38,0x4b,0x6e,0xda,0xc6,0x3c,0xda,0x33,0x52,0x19,0xe9,0xbb,
-  0x13,0xb1,0x26,0x89,0xf4,0x35,0x2a,0xee,0xb1,0xfd,0x23,0x4b,0x32,0xae,0xc6,0x1d,
-  0x74,0x37,0xbb,0x9e,0x00,0x37,0xe4,0x68,0xac,0x44,0x20,0xfb,0x54,0xf6,0x32,0x03,
-  0x9a,0x70,0x23,0xbb,0x55,0x16,0x18,0xdf,0x9f,0x3c,0xa7,0x16,0x9e,0x87,0x05,0x38,
-  0x5f,0x2c,0x55,0x7b,0x24,0xd3,0xfe,0x9a,0x0e,0x9f,0xc2,0xdc,0x6e,0xfb,0xe9,0x6a,
-  0x03,0x0f,0x9a,0x17,0xec,0x71,0x11,0x8f,0xff,0xd8,0x79,0xcc,0x3d,0x0e,0xe7,0xc1,
-  0x61,0x38,0x4e,0x2b,0xe7,0xe1,0x18,0xfb,0x57,0x70,0x24,0x95,0x33,0x26,0xbf,0x31,
-  0x77,0x48,0x1c,0xca,0xbe,0x40,0xfa,0x6b,0x28,0x03,0xff,0x74,0xc0,0x6b,0xc6,0x3c,
-  0xcd,0xbe,0x0b,0xf1,0xd5,0x05,0xee,0x13,0xf2,0x7a,0x44,0x1f,0x9a,0xf9,0x15,0xfd,
-  0xf6,0x37,0x71,0x61,0x5f,0x8f,0x95,0x87,0xed,0x67,0xaa,0xd3,0xf8,0xc7,0x50,0xdf,
-  0x43,0xfc,0x86,0x2f,0xb5,0x07,0xf5,0xd7,0xf3,0x91,0x39,0xf1,0xab,0xa3,0xe2,0xea,
-  0xc6,0x23,0x1a,0x22,0xa2,0xad,0x2c,0xc9,0x9b,0x71,0x00,0x09,0x2b,0xff,0x23,0x25,
-  0xa1,0x49,0x43,0x23,0x14,0x4f,0x6e,0x78,0x17,0x19,0x26,0xc0,0x34,0xe9,0x31,0x09,
-  0x2d,0x0e,0x92,0x48,0x0d,0xa0,0x1d,0x44,0x20,0x64,0xe1,0x7f,0xa6,0xc4,0x39,0x2e,
-  0x5a,0xdc,0x9d,0x08,0x10,0x5b,0x32,0x27,0xa2,0x44,0xd9,0x77,0xa0,0xc1,0x05,0x86,
-  0xbc,0x85,0x7d,0x40,0xf8,0x87,0x96,0x2e,0x8d,0x7f,0xf4,0x29,0x47,0xd8,0x91,0x70,
-  0xc2,0x65,0x27,0xbc,0x34,0x22,0x7b,0x1f,0xb7,0xc9,0x0d,0x1a,0xfc,0xdf,0x06,0xe2,
-  0x9f,0xd8,0xa4,0x4f,0x49,0xd1,0x24,0x4b,0x12,0x96,0xfd,0x1f,0x17,0x9e,0x87,0x4b,
-  0x71,0x73,0x11,0xce,0xc3,0x25,0xf5,0x27,0x7c,0xb9,0x31,0xf7,0x40,0xcd,0xa7,0x50,
-  0xd5,0x37,0xb7,0x2f,0xff,0xbc,0x7a,0x29,0xf6,0x62,0xff,0xf2,0x11,0x54,0xdc,0x63,
-  0xf7,0xef,0x53,0x7f,0x2e,0x9d,0x83,0x8e,0x38,0xe1,0x4f,0x15,0x05,0xd7,0x36,0x7b,
-  0x63,0xf9,0x4a,0xe9,0xf7,0xba,0xaf,0x2b,0x37,0x96,0x5f,0x86,0x40,0x0b,0xed,0x91,
-  0x5d,0x0d,0x16,0xfc,0x93,0x55,0x06,0xbb,0x50,0xda,0xc8,0x78,0x76,0x61,0x77,0xbc,
-  0x2c,0x91,0xcb,0x6d,0xf7,0xeb,0xcd,0xb0,0xe0,0x18,0x6e,0x83,0xb9,0xf6,0x73,0xbc,
-  0x2c,0xa9,0xec,0x67,0x5f,0x8c,0xcb,0x87,0x81,0xac,0x1a,0x7d,0x37,0x68,0x4e,0x39,
-  0x61,0xb3,0xc3,0x2e,0x41,0x3e,0x58,0x58,0x88,0xb2,0x60,0x37,0x0b,0x1b,0x57,0xaa,
-  0x28,0x91,0x9e,0xa9,0xbf,0x33,0x89,0x12,0x38,0x8d,0x7f,0x86,0x84,0x19,0xf0,0x1c,
-  0x9f,0xa9,0xb9,0xef,0x41,0xfc,0xb3,0xf7,0xf1,0xd2,0x53,0x57,0xde,0xec,0xdc,0xba,
-  0xf6,0x17,0xb1,0x1f,0xf4,0x07,0xbf,0xb9,0xf8,0xc5,0xc8,0xde,0x68,0xe9,0x7b,0xca,
-  0x0a,0x76,0xde,0x82,0x7f,0x88,0x8f,0xf2,0xc6,0xed,0x9d,0xb6,0x3c,0xe3,0x74,0xeb,
-  0xbd,0xed,0x32,0x3c,0xb0,0x2a,0xf6,0xa7,0xa4,0x6f,0x30,0xf7,0xf9,0x9c,0x4d,0xfc,
-  0x7d,0x3c,0x38,0x93,0xd4,0x0c,0xfc,0xb3,0x1f,0x2e,0xc0,0x0d,0x7c,0x52,0x82,0xd1,
-  0xfa,0x54,0x36,0x2e,0xd7,0xab,0x87,0xf4,0xdf,0x00,0x9e,0xd0,0xd3,0xe2,0xed,0xf0,
-  0xae,0x7a,0x1d,0x42,0x6b,0xb1,0x8f,0x8d,0xad,0x4f,0x7b,0x56,0x92,0x9f,0x83,0x05,
-  0x82,0x7d,0x44,0xf4,0x20,0x5e,0x5a,0xc8,0xf3,0x62,0xc5,0x71,0x78,0x89,0xf0,0x21,
-  0xda,0x23,0x70,0x84,0xfb,0x92,0xf6,0x44,0xfe,0x47,0x16,0xfc,0x53,0xd8,0xfb,0x22,
-  0x14,0x83,0x7b,0xc8,0x76,0x55,0xdf,0x4f,0xa5,0x22,0x2e,0xeb,0x01,0x15,0x25,0x0c,
-  0x9a,0x51,0x21,0xf6,0x36,0x0d,0x8c,0x68,0x1d,0xfb,0x6c,0xfc,0xfb,0x72,0x78,0xd0,
-  0x78,0x96,0xcf,0x4c,0xd8,0xe8,0x7d,0x7f,0xc5,0x67,0xc7,0x6d,0x03,0xce,0x07,0xa4,
-  0xcd,0xf5,0x28,0xfb,0x57,0xb0,0x6f,0xc1,0x66,0x6e,0x42,0xc1,0xa4,0x05,0xff,0xbc,
-  0x06,0xbb,0x54,0x97,0xb6,0xc4,0x8b,0xfb,0xe1,0x01,0xd0,0x12,0x32,0xe0,0x61,0x6a,
-  0x86,0x78,0x52,0x2e,0x74,0xbd,0x6e,0x34,0x70,0xe8,0x46,0x09,0xff,0x86,0x05,0xff,
-  0x3c,0xa3,0x5d,0x5c,0x7b,0x1d,0x47,0xa1,0xea,0x86,0x2f,0xd4,0xeb,0x77,0xae,0x4b,
-  0x8a,0xcf,0xc3,0x51,0xc3,0xd7,0x6e,0x8f,0x37,0xbc,0x09,0x87,0xe3,0x1d,0x71,0x4f,
-  0x5c,0x3c,0x6b,0xc5,0x3f,0xda,0x30,0xf8,0xe5,0x2c,0x93,0xfd,0x98,0xec,0x9f,0xec,
-  0xa8,0x17,0x4f,0xd8,0x86,0xbd,0x7e,0x98,0x8b,0x57,0xd8,0x30,0x1a,0xe6,0x78,0xe5,
-  0x8d,0x71,0x7c,0x22,0xab,0x64,0xe6,0x33,0x52,0x82,0xfd,0xf2,0x21,0xee,0xd3,0xf3,
-  0x5a,0xc4,0x59,0x3a,0x0d,0x36,0x91,0xa2,0x7c,0x13,0x55,0xe1,0xa4,0x47,0x32,0xf0,
-  0xcf,0x9d,0xc4,0x1f,0x86,0x64,0x42,0x2f,0x4f,0x6d,0x99,0xb3,0xe2,0xe9,0x29,0xec,
-  0x1a,0xd6,0xd4,0xe7,0xd2,0xdd,0x31,0x36,0x13,0x9a,0xf4,0xb2,0x90,0x92,0x81,0x7f,
-  0xb2,0x3c,0xf1,0x5d,0x30,0x27,0x50,0x1b,0x73,0xf6,0x13,0x4c,0xaa,0x51,0xb6,0x31,
-  0x49,0x7b,0x4a,0x6f,0x0f,0xc9,0x05,0xac,0x14,0x1e,0x36,0xe7,0x67,0x5b,0xf1,0x8f,
-  0x04,0xbb,0x6a,0xdc,0xf4,0xeb,0xcb,0xd2,0x53,0x59,0x73,0x50,0xbf,0x4f,0xcd,0x42,
-  0xc5,0x47,0x57,0x6c,0x33,0xa1,0x5e,0xf7,0x84,0x94,0x02,0x0b,0xff,0xb3,0x30,0x37,
-  0x4c,0x34,0xd7,0x98,0xb6,0xf5,0xe1,0x8a,0x57,0x13,0x6b,0x56,0x81,0x57,0xf2,0x01,
-  0x8e,0x43,0x25,0x11,0x5f,0x47,0xd3,0xfc,0xcf,0x55,0xfd,0x70,0x41,0x78,0x68,0x91,
-  0x63,0x5b,0xf9,0x49,0xf8,0x33,0x54,0x85,0xf2,0x42,0xd5,0x88,0x70,0x16,0x5d,0xab,
-  0xe7,0xf6,0x89,0x17,0xe0,0x73,0xa9,0x4a,0x47,0xfb,0xe2,0x03,0x2b,0xff,0x03,0x23,
-  0x6a,0x15,0xa1,0xc1,0xfe,0x38,0x4a,0xa7,0xea,0xbc,0xbe,0xea,0x12,0xfd,0x90,0xea,
-  0x23,0x98,0x44,0x40,0xc2,0x5b,0x63,0xdf,0xda,0x60,0xe1,0x7f,0x20,0x09,0x9d,0x50,
-  0x26,0xcb,0xdc,0xd9,0xc5,0x71,0xa0,0xca,0xf4,0x21,0xa2,0xa1,0x56,0x19,0xcd,0xcc,
-  0xa2,0x00,0x87,0x56,0x70,0xbf,0x62,0xe5,0x7f,0xa6,0xbc,0x02,0xbb,0x8a,0xec,0x81,
-  0x60,0x41,0xa4,0x5b,0xdb,0x05,0x1e,0x7d,0x6a,0x2c,0x30,0xbf,0x71,0x6d,0x51,0x51,
-  0x60,0xe9,0xad,0x1b,0x0a,0xe2,0x6b,0xdd,0x45,0x41,0x39,0x14,0x79,0x23,0x8d,0x7f,
-  0xa6,0xb4,0xc1,0xbe,0x50,0xd9,0x6d,0x72,0xec,0xd6,0x7e,0xfc,0x10,0x65,0x7a,0x34,
-  0x66,0xeb,0x87,0xb5,0x35,0xc5,0xba,0x72,0x2b,0x2a,0xca,0xb5,0xb4,0x51,0x11,0x4f,
-  0xa6,0xf1,0xcf,0x14,0x7c,0x7e,0xbd,0xf2,0xae,0x65,0xb1,0x62,0x1c,0xc4,0xfc,0xdf,
-  0xcd,0x53,0x1f,0x90,0x48,0xec,0x84,0x11,0xcf,0xcc,0x14,0xe8,0x43,0xdb,0x5b,0x2c,
-  0xfc,0xcf,0x80,0x60,0x92,0x3c,0xe1,0x14,0xed,0x83,0x03,0xc7,0x56,0xb1,0x5f,0x1d,
-  0xd1,0x88,0xf6,0xa1,0x2b,0x9a,0x7f,0xb5,0xe3,0x61,0x0b,0xff,0x93,0xc2,0x3f,0x1d,
-  0x2a,0x82,0x1c,0x8d,0xf5,0xe8,0x65,0x62,0x2e,0x02,0x51,0x66,0x9a,0xbd,0x3c,0x5f,
-  0x2b,0xa0,0x81,0xdd,0x10,0x6d,0x16,0xfe,0x67,0x36,0x7e,0xad,0xe2,0x98,0x8c,0x66,
-  0x32,0x6c,0xa8,0x2f,0x4d,0x6c,0x4c,0xb2,0x39,0xb0,0x41,0x42,0x41,0x1a,0x8f,0xe0,
-  0x15,0x12,0x4d,0x71,0x66,0xe1,0x7f,0xb2,0xbe,0xca,0x51,0xfe,0x0c,0xcb,0x5e,0xc4,
-  0x03,0x08,0x8c,0xe3,0x39,0xf3,0x22,0x76,0xf5,0x01,0xa8,0x25,0xbe,0x34,0x8f,0xe4,
-  0x73,0x26,0xff,0x13,0x17,0xa6,0xc3,0xde,0xf8,0x6c,0x55,0xbe,0x27,0x7b,0x86,0xb1,
-  0x56,0x2f,0x8d,0x04,0xeb,0x58,0x61,0xc9,0x03,0x30,0x9b,0x2b,0x78,0xa2,0xe5,0xf5,
-  0x80,0xa6,0x9f,0x95,0xff,0x69,0x87,0x19,0xda,0x8b,0xd1,0xf2,0xb8,0xe7,0xa2,0x38,
-  0x23,0xfe,0x32,0xbf,0x31,0x9e,0xbb,0xe6,0x1a,0xbf,0xf4,0x3b,0xfe,0xe3,0xa4,0x63,
-  0x8d,0x58,0xc1,0x16,0xd7,0xcf,0x8b,0x7b,0x32,0xf8,0x9f,0x29,0x8f,0xc3,0x39,0xef,
-  0x02,0x98,0x8b,0xf6,0x29,0x7f,0x33,0xbb,0x92,0x2f,0xf7,0x8a,0x83,0xd2,0x47,0x26,
-  0xed,0x23,0x0e,0xaa,0x67,0xe1,0x00,0x47,0x68,0x94,0xc6,0x3f,0x20,0x9c,0xd5,0x2f,
-  0xf1,0xf2,0x01,0x94,0x3f,0x17,0xa1,0x2b,0x76,0x43,0x9b,0xfd,0xc7,0xe2,0x13,0xf0,
-  0x13,0xee,0x4f,0x3a,0x86,0xc5,0x33,0x1c,0x81,0x50,0xd2,0xd1,0x83,0xe8,0xdc,0x82,
-  0x7f,0xf4,0x3f,0x17,0xb6,0x46,0xe5,0x7b,0x5c,0x6f,0xeb,0xbf,0x8e,0x17,0xb5,0xe7,
-  0xfe,0x93,0x2b,0xc2,0x1f,0xe0,0xa5,0x6d,0x79,0xf3,0x48,0xfe,0xa8,0xa5,0x86,0x12,
-  0x60,0x4f,0x8f,0xaf,0x3f,0xe8,0xdb,0xd5,0x17,0xf5,0xa2,0x5e,0xb8,0x0b,0x7f,0xbd,
-  0x5f,0x9b,0xcd,0x51,0x3a,0x6d,0x0f,0x3f,0x07,0xa5,0x2f,0x29,0x88,0x97,0x60,0x1d,
-  0x94,0x72,0xa5,0x96,0xc1,0xf8,0xfa,0x6b,0x05,0xdd,0xb0,0x9b,0xbb,0x78,0xa7,0x97,
-  0xf5,0x12,0xf0,0x36,0x72,0xe6,0x3b,0x37,0xc2,0x23,0x06,0x19,0xf2,0x81,0xd7,0x70,
-  0xfd,0xcb,0x1a,0x95,0xa7,0x58,0x34,0x8d,0x87,0xa7,0xa0,0x75,0xc9,0x7d,0x7d,0x76,
-  0xd2,0x47,0xcd,0x75,0x6e,0x52,0x34,0xbf,0x94,0x46,0x10,0x18,0xe3,0xb1,0xea,0x85,
-  0x43,0xf5,0xb8,0x43,0x12,0xe2,0x1c,0x8b,0x3c,0xfc,0x94,0x40,0xa0,0x86,0x17,0x7b,
-  0x09,0x48,0xaf,0x5d,0xde,0xd9,0x30,0xa0,0xbd,0x89,0xf2,0xc7,0xd1,0x88,0xf2,0xf6,
-  0x5c,0xc8,0xdf,0x97,0xc1,0xff,0x08,0xea,0x30,0x5a,0xaf,0xd7,0x1d,0xb4,0xd7,0x55,
-  0x7b,0x9c,0xaf,0xa9,0xfe,0x7a,0xfb,0x50,0xf5,0x7e,0xb8,0x54,0x50,0x5e,0x13,0xed,
-  0x13,0xdd,0xda,0x6b,0x2a,0xe2,0x9f,0x84,0x08,0x35,0x69,0xf9,0x13,0x86,0x3f,0xb2,
-  0x32,0x30,0xf9,0x87,0x26,0x28,0x6b,0xb1,0xed,0x67,0x83,0xf0,0x33,0x1d,0x61,0xcf,
-  0xff,0x24,0x8f,0x8c,0x66,0x52,0x1f,0x9a,0x85,0xff,0x41,0xfc,0x03,0x84,0x76,0x98,
-  0x47,0xc2,0xf9,0x5a,0x4e,0xa7,0x0b,0x0f,0x8e,0x8c,0x6a,0x3a,0xbe,0xb5,0x84,0xa1,
-  0x28,0xd3,0x65,0xee,0xd2,0xd2,0xf2,0xa7,0x46,0x46,0xeb,0xde,0x13,0x47,0xa5,0x6f,
-  0xaf,0xa9,0x5f,0xed,0x89,0xd8,0xbc,0x01,0x43,0xdf,0x72,0x65,0x7b,0xcb,0x9c,0x12,
-  0x28,0x65,0x0f,0x20,0x14,0x77,0x03,0x63,0x69,0xfe,0x27,0xb7,0x96,0xac,0xef,0x63,
-  0xcb,0x9e,0x45,0xfc,0x76,0xa8,0xd6,0xbf,0xd1,0x6e,0x12,0x5f,0x9a,0xef,0x2d,0xfb,
-  0x1e,0xa5,0x08,0xe5,0x27,0x9e,0xaf,0xb8,0x02,0x42,0x9a,0xff,0x19,0x22,0xb1,0xc3,
-  0x1d,0xcf,0x29,0xe7,0xf9,0xff,0xa5,0xdd,0x19,0x75,0x18,0x68,0xc8,0x9f,0x2b,0xba,
-  0xce,0xc8,0xc5,0x15,0xe6,0x9f,0x92,0x69,0x9f,0xb4,0x9c,0x47,0x23,0xeb,0x1d,0xf8,
-  0x80,0xcf,0x8b,0x3b,0xea,0x94,0x1b,0xe3,0xef,0x42,0x79,0xd2,0x31,0x82,0x40,0xfa,
-  0x53,0x5e,0x75,0xc2,0x7e,0x73,0x7e,0x07,0x9c,0xe7,0xa2,0x6c,0x3f,0xd8,0x90,0xc1,
-  0xff,0xc8,0xcd,0xf5,0xbe,0x1d,0xca,0x79,0x76,0x95,0xfc,0xcb,0xf0,0x82,0xa4,0xd2,
-  0x81,0xab,0xd5,0xcc,0xcb,0x0e,0xf7,0x74,0x90,0x7f,0x87,0xbb,0xa6,0x06,0x9f,0x88,
-  0x58,0xf9,0x9f,0x5e,0x82,0xc1,0x5c,0x99,0x1f,0x58,0xd6,0xf8,0xc0,0x32,0x0d,0x8f,
-  0x95,0x2b,0x8f,0x56,0xc0,0x88,0xaa,0xb6,0x8d,0x71,0x3c,0x7a,0x8d,0xb2,0x1a,0xb0,
-  0xf0,0x3f,0x53,0x7e,0x01,0xcd,0x51,0x57,0x83,0x92,0x90,0x97,0xa1,0x61,0xe2,0x32,
-  0x94,0x04,0xdd,0x9f,0x56,0xb8,0x33,0x52,0xa2,0xbd,0x00,0xae,0x56,0x84,0x9a,0x56,
-  0xfc,0xf3,0x31,0xff,0xa8,0x71,0x01,0x38,0x12,0xf9,0x77,0xc8,0xbf,0x37,0xe7,0x8b,
-  0x65,0xb4,0x43,0xfa,0x3d,0x85,0xf9,0xb8,0x50,0xd1,0x8e,0xba,0x92,0x8d,0x16,0xfc,
-  0x93,0x14,0x3a,0x55,0x44,0x83,0x92,0x63,0xa8,0x61,0x3f,0x6e,0xa5,0x17,0x4d,0xb7,
-  0x0e,0xae,0xf0,0x4f,0x92,0x9b,0x87,0xc4,0x0b,0xea,0x85,0xd8,0x8d,0xc6,0xd5,0xf1,
-  0x0c,0xfe,0xe7,0x17,0xf0,0x51,0xa8,0x82,0xa1,0x12,0xf7,0x20,0xda,0x79,0xde,0x3c,
-  0x86,0x1a,0x99,0x21,0xf6,0xed,0xe2,0x6c,0x1d,0x0f,0x66,0xdf,0xf2,0xc4,0xb7,0xbd,
-  0x16,0xfc,0x83,0x42,0x83,0xbb,0x20,0xba,0x26,0x52,0x09,0x9b,0x89,0x36,0x4c,0xb0,
-  0x6e,0x04,0x72,0x79,0x84,0x90,0xe7,0xea,0x0d,0xbc,0x2c,0xae,0x74,0xa2,0xf5,0x3c,
-  0xb6,0x1f,0x92,0x59,0xcb,0xe0,0xb1,0x55,0xee,0x3d,0xf2,0x7c,0xb6,0x11,0xa5,0x0d,
-  0xd1,0xa4,0x78,0x70,0x1e,0xa3,0xf7,0xf5,0xb2,0x4d,0xf2,0x63,0x3d,0x9e,0xa8,0xe2,
-  0x62,0x0b,0x2d,0xfc,0x8f,0x1f,0xd6,0xf3,0xe2,0x38,0x2a,0xfd,0x77,0xf0,0x6e,0x45,
-  0xc9,0x69,0x3f,0x66,0xef,0xc0,0x5e,0x5e,0xda,0x2f,0xaf,0xb1,0x3d,0x02,0xeb,0x78,
-  0xa9,0x4b,0xa9,0x8d,0x14,0x5a,0xf0,0x8f,0x1d,0xde,0x47,0x58,0x62,0x5f,0x98,0xbf,
-  0x91,0xbd,0x04,0x0b,0x0d,0xc7,0x3c,0x3c,0x38,0xef,0xd3,0xf3,0x7b,0xc5,0x9d,0xfc,
-  0x84,0x5c,0xc9,0x1d,0x05,0x8a,0x33,0x03,0xff,0x5c,0x42,0xfc,0xbc,0xfc,0x74,0xb3,
-  0x07,0x2e,0xe9,0x7e,0x63,0xf3,0x69,0x93,0x36,0xf4,0x13,0x7e,0xbe,0x03,0x11,0x51,
-  0x95,0x89,0x7f,0x2c,0xfc,0x4f,0x37,0xfc,0x51,0xf2,0x69,0xf6,0xe7,0x10,0x1f,0x1e,
-  0xb9,0xad,0xc3,0x30,0xdd,0x82,0xe7,0x70,0xbe,0x9c,0x50,0xda,0xe0,0x08,0xbe,0x08,
-  0xee,0x4f,0x2b,0xff,0xb3,0x5d,0x5d,0x0f,0x3b,0x20,0xea,0x3b,0xfc,0x3f,0x0f,0xbd,
-  0x6a,0xba,0xbd,0x6c,0x28,0x51,0xc9,0x9e,0xaa,0x63,0xd3,0x11,0xff,0x98,0x03,0x2b,
-  0xff,0xf3,0x28,0x3c,0x19,0x9d,0xd9,0x2a,0xaf,0x71,0xe5,0xb1,0x86,0x78,0x51,0x52,
-  0x59,0xe3,0x42,0xe0,0xc7,0xe7,0x22,0xec,0x09,0x3c,0x8a,0x4b,0xe1,0x49,0xca,0x6e,
-  0x66,0xe5,0x7f,0x5e,0xe7,0x0d,0x50,0x12,0x96,0xbd,0xce,0x9d,0xa6,0xf4,0x56,0x12,
-  0xb7,0xda,0x10,0x61,0x96,0xd5,0xc8,0xf3,0x37,0x68,0x9c,0xeb,0x65,0xc7,0xe4,0x7d,
-  0x11,0xa7,0x05,0xff,0x3c,0xaf,0x7d,0x12,0xb9,0x8e,0xdb,0x35,0xc5,0x0d,0x87,0xc1,
-  0x47,0x6e,0xaf,0x85,0x70,0x16,0xfc,0x71,0xfb,0xea,0xfc,0x67,0x5c,0x87,0x79,0x55,
-  0x9b,0x27,0xc3,0xff,0x45,0xfc,0x0f,0x7b,0x5e,0x9d,0xdb,0x88,0x42,0x66,0x00,0xad,
-  0x6f,0x14,0x53,0xef,0xa1,0x86,0x42,0xfc,0xd3,0xa8,0x9c,0x90,0x08,0x08,0xa1,0x62,
-  0x7a,0x23,0xcd,0xff,0x20,0xfe,0x39,0x15,0xef,0x08,0x3b,0xb6,0x0b,0x25,0xac,0xcb,
-  0x74,0x73,0x7c,0xb9,0xc4,0x64,0x00,0x50,0x2d,0xce,0xe2,0x87,0xb8,0xbf,0x56,0x6e,
-  0x11,0x2d,0xfe,0x2f,0x69,0x31,0xaa,0x21,0xd7,0xbd,0xca,0x83,0x68,0x76,0xbd,0x29,
-  0xba,0x74,0x44,0x3b,0x33,0x75,0x52,0xc4,0xf2,0xa3,0xec,0x1a,0xa9,0xa9,0xb0,0xac,
-  0xd6,0xbd,0x2d,0x90,0x96,0x3f,0x85,0x42,0x89,0xfe,0x14,0xac,0xa2,0x69,0x6d,0x6a,
-  0x13,0xcc,0xa1,0x41,0x89,0xa9,0xb8,0xdd,0x5b,0xd8,0xb5,0xec,0x7e,0x1c,0xd8,0xb6,
-  0xb0,0x6c,0x0b,0xfe,0xf1,0xe0,0xb4,0xb0,0xbe,0x54,0x65,0x6b,0xd5,0x2d,0xba,0xa6,
-  0x2b,0x05,0xf8,0x2b,0x02,0x83,0x90,0xbc,0x8d,0x4d,0x41,0xfd,0x4e,0xd4,0x90,0x8d,
-  0x65,0xe0,0x9f,0x01,0x53,0xdb,0x8a,0x71,0x54,0xbb,0x26,0xdf,0xa5,0x99,0xef,0x6b,
-  0x12,0x11,0xbd,0xb8,0x1d,0x11,0x3a,0xe6,0x59,0xf0,0xcf,0x19,0xf8,0x1f,0x70,0xa3,
-  0xbe,0x7c,0x9b,0xf2,0x1d,0x04,0x06,0x7e,0x7d,0x79,0x2c,0x9f,0xdc,0xca,0x37,0xea,
-  0x8e,0x90,0xd2,0x2d,0x8f,0x20,0x22,0xca,0x3d,0x56,0x6d,0xc5,0x3f,0x67,0x20,0x45,
-  0xfb,0x10,0x3e,0xd4,0x4c,0xfe,0xe4,0x8c,0xb9,0x3e,0x1b,0x8f,0x89,0x7b,0xf4,0xd7,
-  0xa0,0x6a,0x89,0xbd,0xaf,0x21,0x5b,0x18,0x5b,0xff,0x85,0x6a,0x92,0xf8,0x1f,0x90,
-  0xd7,0xb2,0x13,0x46,0x54,0x73,0x81,0x12,0x71,0x12,0x22,0xf2,0x80,0x1c,0xb1,0x69,
-  0xa4,0x5f,0x26,0xcb,0xad,0xb6,0x3c,0x8b,0xfc,0xe9,0x87,0x7a,0xc9,0xad,0xa3,0xb5,
-  0xd5,0x5d,0x52,0xbf,0x0c,0xdf,0x57,0x8d,0x74,0xd3,0xfb,0x2e,0x91,0x63,0x53,0x1b,
-  0x79,0x83,0xe0,0x09,0xc8,0x6a,0x84,0x09,0x63,0xf3,0x0b,0x51,0xff,0x36,0x31,0x57,
-  0x8f,0x3b,0x86,0x62,0x1c,0x3f,0x84,0xde,0x1c,0x43,0xb3,0x6b,0x1f,0xf3,0x20,0xfe,
-  0x6c,0x9d,0xa9,0x37,0x69,0x65,0x06,0xc4,0x58,0xb6,0x05,0xff,0xbc,0x4c,0xb4,0x67,
-  0xc0,0x8e,0xf8,0x93,0x11,0xed,0x93,0x82,0x31,0xf4,0x7d,0x55,0x71,0x2d,0x3b,0x64,
-  0xf8,0x97,0xb9,0x1f,0x16,0xdd,0x69,0xfe,0x41,0x78,0x22,0x32,0x62,0x1c,0x58,0xe4,
-  0x88,0x7d,0xad,0x3b,0xed,0x16,0xc4,0x41,0x4d,0x6a,0xc0,0x50,0xdf,0xb5,0xbc,0xf4,
-  0x91,0x15,0xff,0xe8,0x3d,0x5a,0x05,0xc1,0x6c,0x82,0x3d,0xe6,0xee,0x7a,0x7f,0x6c,
-  0xfd,0x8b,0x4a,0x86,0x83,0xe6,0xc0,0x8a,0x7f,0xae,0x97,0xd6,0x19,0x45,0x9d,0x4a,
-  0xd2,0xe5,0x66,0xb8,0x1a,0x5c,0x21,0xda,0xe8,0x79,0x1c,0xe4,0x7e,0x60,0x5b,0x28,
-  0x1d,0xd0,0xe7,0x36,0xca,0xc9,0x0c,0xfc,0x73,0xb3,0xd6,0x10,0x73,0x07,0x15,0x1f,
-  0x5b,0xa6,0x92,0x58,0x9e,0xe6,0x45,0x79,0x45,0x7c,0x85,0x3c,0x95,0xe5,0xc9,0x1d,
-  0x50,0x36,0x64,0xdb,0xef,0xb4,0xe2,0x9f,0x85,0x12,0x39,0x7d,0x50,0xe9,0xe3,0x69,
-  0xf5,0x96,0x1a,0xcd,0x77,0xbb,0x7e,0x9b,0x3a,0xbf,0x21,0x56,0xa0,0x3d,0x0b,0xa5,
-  0x31,0xdb,0x8f,0xac,0xf8,0x07,0x6f,0xf3,0x2a,0xbf,0x5e,0x5b,0xbe,0x50,0xb9,0x85,
-  0x3f,0x19,0xbb,0x31,0x79,0xf5,0x7d,0x0d,0x6f,0xc1,0x9f,0xf9,0x8d,0x49,0x79,0x58,
-  0x9c,0xa1,0xfe,0x19,0xf1,0x49,0x59,0x06,0xfe,0xb9,0x2a,0x2a,0x7d,0x46,0x68,0x27,
-  0x9e,0x3f,0x18,0x3a,0x17,0xc6,0xc1,0x1e,0x71,0x00,0xce,0x31,0xff,0xc1,0x5f,0x26,
-  0x8a,0x07,0x49,0xb0,0xf0,0x5c,0x2b,0xff,0x03,0x53,0xde,0x81,0x57,0x13,0xe5,0x61,
-  0x44,0x3b,0x3f,0xd1,0x5f,0xe7,0xbb,0x09,0xf6,0x5c,0xa1,0x22,0xec,0x79,0x0f,0xcf,
-  0xd7,0x01,0xfd,0x52,0xa4,0x2a,0x69,0x1f,0xc8,0xc0,0x3f,0xdb,0x02,0xeb,0x43,0x45,
-  0x7a,0x9e,0x77,0xce,0x01,0xc9,0x74,0xbb,0xdf,0xc5,0xc8,0xfe,0x2a,0x4d,0x96,0xae,
-  0x69,0x2d,0x08,0x3e,0x2b,0x97,0xd6,0xa0,0x45,0x96,0xc6,0x1b,0x80,0x7b,0x6b,0xbd,
-  0xeb,0x29,0x9a,0x76,0x7b,0xfd,0x03,0x29,0x37,0xbd,0xd7,0x14,0x53,0xb6,0x24,0xdb,
-  0xae,0xed,0x45,0x04,0x98,0x53,0x97,0xe1,0xff,0xba,0x39,0xd2,0x20,0xbb,0xbf,0x6e,
-  0x53,0x51,0x9e,0x37,0x33,0xd2,0x77,0x78,0x98,0x1a,0x50,0x0c,0x2a,0xdc,0xe6,0x40,
-  0x68,0xe4,0x89,0xcf,0x76,0x31,0x39,0x8d,0x7f,0xb2,0x36,0x68,0x2f,0x45,0x16,0xea,
-  0x8e,0x84,0x72,0x2f,0x7b,0x17,0xcd,0x46,0xd4,0x47,0x93,0x8c,0x23,0x30,0xd7,0xc8,
-  0xdb,0x33,0xf9,0x97,0xf4,0xbe,0x43,0xb9,0x7b,0x32,0xf0,0xcf,0x00,0x3b,0xf7,0xf5,
-  0x05,0x75,0x8e,0x02,0x44,0x83,0xe7,0x52,0xb0,0x90,0xfc,0x83,0xfe,0xe4,0xcd,0x89,
-  0x86,0x93,0xda,0x8f,0xc1,0xdf,0x93,0xb7,0x23,0xdf,0x82,0x7f,0x70,0xaf,0xbc,0x1e,
-  0xbf,0xe1,0xe5,0x65,0x09,0xa5,0x12,0x5e,0x87,0x72,0xe2,0xf3,0x87,0x70,0x50,0xd5,
-  0x65,0xef,0x2b,0xbe,0x1d,0x07,0x7e,0x9e,0x93,0x10,0x8d,0x71,0xfc,0x53,0x5f,0xf0,
-  0x7d,0x68,0x26,0x92,0x27,0x4a,0x68,0xc7,0xd4,0xa7,0xce,0xf7,0xe0,0x19,0x7c,0x7e,
-  0x77,0x0b,0x9b,0xab,0xa2,0xa2,0xd7,0x94,0x0d,0x81,0x64,0x9a,0xff,0xc9,0x22,0xed,
-  0x3c,0x47,0xc7,0x4d,0x62,0x1f,0x9d,0x8f,0xe7,0x25,0xa5,0xaf,0xd9,0x77,0xbd,0x4d,
-  0xdd,0x68,0xef,0x77,0xa2,0xbd,0x36,0xb6,0x1f,0x50,0xfe,0x48,0x0d,0x78,0xac,0x6c,
-  0x93,0x9d,0xf6,0x48,0x03,0x70,0x5a,0x9f,0x24,0xe1,0x81,0x1e,0xd9,0x1b,0x29,0x91,
-  0x11,0x81,0xeb,0xd3,0x32,0xfc,0x5f,0xf6,0x5a,0x38,0x92,0x6d,0x7a,0x13,0x2a,0xe3,
-  0xaf,0x03,0xea,0x97,0x3a,0x14,0xbc,0x47,0xe0,0xc6,0xc3,0xf6,0x88,0xb8,0x1a,0x8f,
-  0x1e,0xee,0x87,0x84,0xd5,0xff,0x95,0xdb,0x09,0x55,0x50,0xa5,0x7f,0xf5,0x8d,0xfc,
-  0x41,0x81,0x68,0x9f,0xe5,0xf4,0xbe,0x97,0x18,0x2e,0x94,0x2e,0x0e,0x31,0x93,0xff,
-  0x31,0xaa,0xad,0xfc,0xcf,0x79,0x5a,0x16,0xee,0x31,0xc4,0xf9,0xd0,0x83,0xbb,0x31,
-  0x77,0x58,0xb8,0x05,0xaf,0x54,0x24,0xed,0xc3,0x08,0x84,0xde,0xe5,0xf3,0xc8,0x35,
-  0x60,0xc5,0x3f,0x67,0xa4,0x0d,0x9c,0xc5,0x64,0x10,0x4b,0x5c,0x51,0x5e,0x96,0x94,
-  0x5b,0xd8,0x13,0xf2,0xef,0xdd,0xad,0x07,0x1d,0x3e,0x66,0xc6,0xb7,0x90,0x7d,0x61,
-  0xc5,0x3f,0xdd,0xb8,0x1a,0x5a,0x63,0x14,0xd8,0x32,0xce,0xe1,0x4e,0xfd,0x4a,0x2f,
-  0x5b,0x26,0x37,0xc0,0x1c,0x7a,0x5f,0x3b,0x1e,0x34,0x8d,0xe7,0x68,0x56,0xff,0x17,
-  0xe2,0xe1,0x66,0x1e,0x89,0xc9,0xd1,0x00,0xe2,0xcf,0xee,0xb2,0x9e,0xc2,0x4e,0xb6,
-  0x33,0xe7,0x81,0xd4,0xc2,0xd2,0xfd,0x5b,0xe3,0x72,0x1c,0x2c,0xfe,0xaf,0x29,0x77,
-  0xc0,0x91,0x23,0x5e,0x6e,0x6f,0xff,0xd2,0xdf,0x97,0xf4,0xd4,0x57,0x26,0xbf,0xda,
-  0x29,0xde,0xa9,0x1f,0x41,0x45,0x6f,0x7a,0x0c,0xff,0x19,0x7c,0x1d,0x78,0x5e,0x8c,
-  0xb4,0xff,0x0b,0xda,0x84,0xb3,0xcc,0xdf,0xe6,0x08,0x3b,0x5e,0xd1,0xcf,0xcb,0xa6,
-  0xa3,0xe7,0x3c,0xee,0x9f,0x2a,0xc4,0x87,0x26,0x10,0xba,0x91,0x23,0x3e,0xb4,0xe2,
-  0x9f,0x46,0x38,0xe2,0xad,0x20,0xd8,0x59,0x22,0x0d,0x04,0x16,0xf4,0xe4,0x76,0x8a,
-  0x1e,0xf9,0x08,0x6d,0xd4,0x51,0x45,0xcf,0xed,0xad,0xa2,0x05,0xff,0x48,0x1e,0xd4,
-  0xbf,0xae,0x44,0xf4,0x57,0x6c,0xa7,0xdc,0x74,0x10,0xb7,0x8d,0x9b,0xe5,0x85,0x7f,
-  0x09,0xad,0xf8,0xfc,0x36,0x7a,0xfe,0xb2,0x6d,0x72,0xfb,0xc1,0x0c,0xfc,0xa3,0x36,
-  0x18,0x5a,0x22,0x68,0x47,0x23,0x82,0x1b,0xf6,0x3e,0xb7,0x77,0x43,0x2e,0x11,0x17,
-  0xc6,0x91,0x84,0xcb,0x8e,0x1b,0xcf,0xc3,0x65,0x8d,0x75,0xa6,0xf1,0x8f,0xfe,0x0d,
-  0x78,0x88,0xef,0x68,0x8b,0x06,0x0f,0x6e,0x85,0x46,0x3e,0xb7,0x5f,0x1e,0x61,0x33,
-  0x8c,0xbd,0x5b,0x11,0x18,0xfc,0x98,0x99,0xc0,0x20,0x2e,0x0f,0x64,0xb7,0x64,0xf0,
-  0x3f,0x2f,0x69,0x5e,0xee,0xb1,0x8b,0x76,0x7e,0x30,0x3a,0x3f,0x99,0x3b,0x4f,0xcc,
-  0x83,0xdf,0x70,0xef,0x20,0x02,0x21,0x3b,0xfc,0x09,0x2a,0xb9,0x27,0x23,0xfe,0xe7,
-  0xaa,0x03,0x08,0x0b,0xaf,0x83,0xb9,0xf5,0xe2,0x60,0xf6,0x45,0x56,0xd9,0x9d,0x77,
-  0x17,0x43,0xd8,0xac,0xe2,0x46,0x3a,0xad,0x0c,0xea,0x88,0x7f,0x1a,0x1d,0x61,0x25,
-  0x64,0xc1,0x3f,0x1f,0xf3,0x97,0xc0,0x4b,0x42,0xa9,0x5b,0xee,0x81,0x4a,0x5c,0xf6,
-  0xc9,0x65,0xf2,0x33,0xb8,0x51,0x27,0xe1,0xfa,0xc8,0xe7,0xb8,0xcf,0xc0,0x9f,0xac,
-  0xfc,0x4f,0xa3,0x8e,0x62,0x87,0xcb,0x61,0x76,0x0c,0x1a,0x51,0x8c,0xe4,0x12,0xfe,
-  0x59,0x0f,0xb3,0x0d,0x65,0x88,0x11,0x10,0x2a,0xe2,0x73,0xc2,0x16,0xfe,0xc7,0x80,
-  0x07,0xe1,0x7e,0x5e,0x9c,0x54,0x82,0xec,0x00,0x3c,0xc8,0x7f,0x30,0xd4,0x33,0xcc,
-  0xee,0x93,0x8b,0xeb,0x67,0x8e,0x01,0x21,0x6d,0x28,0xa7,0x96,0x0d,0x59,0xf0,0x4f,
-  0xaf,0x80,0xf8,0x33,0xae,0xc4,0x9d,0xbd,0x2c,0xc6,0x3d,0xed,0x39,0x2e,0x96,0xa7,
-  0xd3,0x79,0x54,0xbc,0x36,0x73,0xbf,0x15,0xda,0xb4,0x0c,0xfe,0xa7,0x1d,0x5e,0x81,
-  0xf2,0x4e,0xc7,0x47,0xe2,0xf3,0xf2,0x3b,0x68,0x9f,0x6e,0x1c,0x78,0x75,0x0e,0x7c,
-  0x04,0x0b,0x08,0x08,0xb9,0x73,0xce,0x42,0x79,0xa2,0x34,0x99,0xc1,0xff,0x18,0x6c,
-  0x38,0x74,0x80,0xc9,0x8d,0x0d,0xc9,0xf0,0x80,0xea,0x87,0x5f,0x36,0x4e,0x4a,0x9a,
-  0x0c,0xc9,0x68,0x3c,0x0c,0x39,0xc2,0x44,0x2b,0xfe,0xf9,0x90,0x1d,0x72,0x2e,0xd0,
-  0xa5,0x58,0xb5,0x04,0x87,0x1a,0xc9,0xdf,0x31,0x6d,0x56,0x6c,0x04,0xcd,0x96,0x65,
-  0xb1,0xfc,0x36,0x18,0x11,0xfc,0x44,0x0d,0x59,0xf1,0xcf,0x77,0xa1,0x49,0x46,0xf9,
-  0xf0,0x53,0x5b,0x49,0x76,0x13,0x2f,0xfb,0x9a,0x2d,0x9f,0x5d,0x03,0xa7,0x48,0x62,
-  0xc4,0x5c,0x33,0x61,0x9f,0x8e,0xc0,0x46,0xb5,0x59,0xf0,0x8f,0x44,0x6e,0xaf,0xd6,
-  0x25,0xe4,0xff,0x62,0x4d,0xea,0x2d,0x07,0x73,0x10,0xff,0x68,0xa6,0xd9,0xa5,0xda,
-  0x66,0xca,0xfb,0x28,0x34,0x28,0x96,0x81,0x7f,0x24,0xbd,0x09,0xb4,0xd0,0x37,0xe7,
-  0xbb,0xb2,0xa0,0x5e,0xb0,0xeb,0x1b,0x62,0x4c,0x82,0x1d,0x7a,0xdc,0xf4,0x88,0xc1,
-  0x2e,0xdd,0x04,0x42,0x16,0xfc,0x23,0x9f,0x68,0x27,0x92,0xc1,0xc6,0x8b,0x35,0xe8,
-  0x61,0x7e,0xc8,0xc5,0x81,0x3c,0x8c,0x57,0x7a,0x69,0x30,0x94,0x52,0xc4,0x65,0x16,
-  0xfc,0xb3,0x27,0x7a,0x41,0xaf,0xfa,0xda,0xdc,0x63,0x5f,0xfe,0x1c,0x50,0xda,0xe8,
-  0xeb,0x43,0xe2,0x31,0xf5,0xd4,0xa2,0x2a,0x04,0x42,0x53,0x29,0xde,0xa9,0x2a,0xe4,
-  0xe8,0xcb,0xe0,0x7f,0x3e,0x87,0xd7,0xdc,0xe5,0x01,0x04,0x39,0x25,0xda,0x6f,0x71,
-  0x3e,0xf4,0x89,0x05,0x70,0x88,0x11,0x10,0x62,0x27,0x51,0xbe,0xf9,0x10,0x5a,0x88,
-  0x1f,0x58,0xf1,0x8f,0x14,0xd5,0x5d,0xaa,0x0c,0xac,0x08,0x81,0x10,0xaa,0x75,0xce,
-  0x34,0xb9,0x4f,0x5b,0x20,0x2b,0x11,0x66,0xb0,0x28,0xb4,0x16,0xca,0x07,0x2d,0xfc,
-  0x0f,0x64,0xbd,0x8c,0x66,0xa9,0xeb,0x88,0x5b,0x8d,0xac,0xd6,0xb6,0x90,0x58,0xc6,
-  0xf7,0x55,0xeb,0x65,0x2d,0xb0,0x54,0x7d,0xb0,0x1b,0x7e,0xea,0x2e,0x0e,0xc8,0xa1,
-  0xc8,0xc1,0x34,0xfe,0xf9,0xab,0x36,0xb9,0x49,0x6d,0xd5,0xe5,0xc9,0xb6,0xd5,0xfc,
-  0x61,0xbd,0xcc,0xc8,0xd9,0x66,0x2b,0x91,0x1e,0x86,0x59,0x04,0x2c,0xbb,0xe5,0xb5,
-  0x50,0xac,0xbb,0xfb,0x02,0x16,0xfe,0x67,0xdb,0x13,0x0c,0x61,0xdb,0x3f,0x2d,0xdb,
-  0x5a,0xbc,0x5a,0x7b,0x13,0x2a,0x43,0xa8,0x76,0x25,0x18,0x07,0x42,0x87,0xc0,0x8b,
-  0xeb,0x3f,0x29,0x6d,0x6f,0xb6,0xc3,0x7a,0x79,0x44,0xf6,0x87,0x5f,0xc7,0xaf,0x2f,
-  0x9f,0x72,0xf9,0xeb,0x1c,0xdb,0x94,0x0f,0x16,0x9d,0x4e,0xc5,0xff,0x98,0x40,0x68,
-  0x35,0x0e,0x32,0xf0,0x0f,0x9e,0x19,0x9f,0x37,0x17,0xd1,0x8e,0x74,0x3c,0x60,0xd2,
-  0x3e,0x61,0xb9,0x87,0x2d,0x48,0xed,0xb7,0x1e,0x61,0x22,0xff,0x23,0xb9,0xd5,0x75,
-  0x3a,0x9e,0xaf,0x53,0x1b,0xdc,0xb6,0x4d,0xa1,0x62,0x2e,0xaf,0x12,0xcf,0xd6,0x50,
-  0xd8,0xcf,0xb4,0x38,0x1b,0xf8,0x4b,0xfc,0xcf,0x2d,0xce,0x06,0x5d,0x33,0x72,0xdc,
-  0xcc,0x93,0x55,0x6f,0x68,0x5b,0x15,0x99,0xdd,0xa2,0x37,0xb0,0x54,0xbc,0x1c,0x34,
-  0xd4,0x97,0x24,0xdd,0x56,0xfe,0xa7,0x48,0xb8,0x0a,0xcd,0xba,0xc7,0x78,0x50,0x77,
-  0xdd,0xbe,0x68,0x9d,0xb1,0x92,0xe7,0x90,0xdb,0x7a,0x3d,0x7c,0xaf,0x7b,0xda,0xdd,
-  0xec,0xed,0xec,0xf5,0xfa,0xcc,0x58,0x06,0xff,0xe3,0x96,0xfd,0x88,0x7f,0x8a,0x92,
-  0xb9,0x37,0xe7,0xfb,0xe1,0x65,0xbe,0x2b,0xbe,0x3c,0x58,0xfe,0x2d,0xf9,0xd5,0xf6,
-  0x6b,0x07,0x95,0x9f,0x88,0x6f,0xc1,0x51,0xbe,0x37,0x99,0xc9,0xff,0x5c,0xd5,0x46,
-  0x42,0xc9,0xc0,0xb7,0xfb,0x79,0x7c,0x80,0x55,0xd6,0xe7,0x81,0x82,0xb0,0x47,0xba,
-  0xef,0xb8,0xa3,0xa3,0x78,0x00,0x0d,0x93,0x0a,0xee,0xb0,0xf2,0x3f,0x7a,0xd6,0x17,
-  0xf0,0x2a,0x9f,0xdf,0xe6,0x18,0x98,0xe4,0x97,0x8c,0xd8,0x0d,0x61,0x7b,0x50,0x2c,
-  0x0b,0x1e,0x69,0x9a,0x96,0x5c,0x86,0xfa,0xcb,0xb8,0xc0,0xab,0xc2,0xf6,0xe3,0x62,
-  0x9f,0x15,0xff,0x10,0xc9,0xdc,0x29,0x7f,0xb9,0xe3,0x5b,0xd0,0x68,0x68,0x5a,0xee,
-  0x6d,0xca,0x37,0xf8,0xef,0x5b,0x8b,0x92,0xf2,0x90,0xf8,0x77,0xfc,0x59,0xbd,0x34,
-  0x3b,0x37,0xc4,0x3e,0xb2,0xe0,0x8d,0x6d,0x28,0xaf,0x8a,0xb9,0xa2,0xb3,0xdb,0xdb,
-  0x1b,0xdd,0x73,0x41,0x5e,0xc4,0x2a,0x73,0x1e,0xf2,0xce,0x36,0x0a,0xeb,0xd8,0xf1,
-  0xd8,0x1e,0x75,0xae,0x2e,0xaf,0x40,0xc4,0x38,0xb6,0xfe,0xe1,0x82,0xa3,0xb7,0xd6,
-  0xeb,0xad,0xb1,0x42,0xd9,0x76,0x0b,0xf0,0xe8,0x6a,0xc8,0xc9,0x65,0xcb,0x74,0x94,
-  0xe7,0x5d,0x72,0x62,0x49,0x0f,0x24,0xc0,0xe3,0xc5,0x13,0xfa,0xd6,0xf8,0xfe,0x74,
-  0x4f,0xf1,0xc0,0x21,0xdd,0x17,0x5e,0x1e,0x17,0x67,0xc0,0xe1,0x7a,0xbf,0x60,0x87,
-  0x62,0x99,0xbd,0xcb,0x6e,0x30,0x76,0x0e,0xa5,0xe2,0x79,0x92,0x9e,0xb8,0x78,0xd8,
-  0xf2,0x3c,0xbd,0x30,0xb2,0xa2,0xa2,0x7b,0x6e,0x5b,0xc3,0x4e,0xe1,0xac,0x5e,0x31,
-  0xc9,0xb1,0x4e,0xfc,0x78,0x14,0x08,0x09,0xa5,0x70,0x4e,0xf7,0xf3,0xbc,0x36,0xdc,
-  0x48,0x69,0xfe,0x67,0x10,0x5e,0x66,0xe2,0x62,0x3c,0xb6,0x95,0xd0,0x5b,0x3f,0x89,
-  0x76,0x8b,0x3f,0xfa,0x6f,0x02,0x01,0x21,0xbc,0xf2,0x62,0xd7,0x8d,0x07,0xf3,0x92,
-  0xa2,0x36,0xfe,0x3c,0x5d,0xd2,0x6a,0x68,0xe2,0xad,0xba,0x6d,0x23,0xf3,0xa0,0x3e,
-  0xd2,0xbc,0xf6,0xa8,0xf3,0x97,0x7c,0x14,0xd8,0x94,0xc2,0x0b,0x7a,0x59,0xbd,0x3b,
-  0xce,0x34,0x0b,0xfe,0xc1,0xf9,0xc6,0xd3,0x46,0xce,0xc2,0xad,0x1e,0x68,0xd7,0xee,
-  0xd4,0xe4,0x28,0xa9,0x39,0x96,0xd6,0x77,0xba,0xad,0x91,0x69,0x56,0xf9,0xc3,0x38,
-  0xd4,0xf6,0xd8,0x8a,0x98,0x27,0x12,0xd5,0xe6,0x38,0x11,0x18,0x6c,0xf4,0xa2,0xa1,
-  0xda,0xd3,0xec,0x75,0xda,0xf9,0x6e,0x32,0x64,0x00,0x2c,0xfc,0x8f,0x4c,0xf2,0xad,
-  0xe2,0x70,0xee,0x2b,0xe2,0x74,0xde,0xb3,0xd2,0x5f,0xe8,0xe1,0x62,0xa9,0x71,0xe9,
-  0xd6,0x79,0xa4,0xb8,0x4d,0xfd,0xab,0x93,0x6b,0xde,0x1a,0xff,0x83,0x62,0x67,0xaf,
-  0x81,0xf6,0xc2,0xc7,0x70,0x7e,0xe1,0x7c,0x39,0xcf,0x10,0xdf,0xe6,0x97,0x54,0xff,
-  0x1b,0x08,0x84,0x3e,0x26,0xfd,0x8e,0xf8,0xa7,0xd8,0x82,0x7f,0xa6,0x7c,0x01,0x1f,
-  0xf3,0xf2,0x95,0x8e,0x1e,0x34,0x63,0x5f,0x75,0x55,0x25,0x1d,0xe4,0x28,0x7c,0x9d,
-  0xf8,0xc3,0x83,0xe2,0x37,0xc8,0x34,0x4b,0x4e,0x32,0xbe,0xee,0xb5,0xf8,0xbf,0x3e,
-  0xa1,0x20,0x04,0x5d,0xe1,0xac,0x84,0xff,0x12,0xca,0x92,0x79,0x43,0x4e,0xbf,0x74,
-  0x84,0x97,0x9d,0xc0,0x2b,0xfd,0x24,0xba,0x93,0x4b,0x7f,0xca,0xbc,0xd9,0xe9,0xf8,
-  0xe7,0x41,0x61,0x07,0xa0,0xd9,0x05,0xac,0x46,0x6b,0x50,0x3d,0x86,0xe9,0x38,0x26,
-  0x43,0x43,0x29,0x61,0xfd,0x42,0x33,0x59,0xe8,0x5a,0x76,0x47,0x06,0xff,0x83,0xf7,
-  0x37,0xa6,0x45,0x61,0x96,0x09,0x3b,0x6d,0x29,0xd8,0x83,0xfa,0xab,0x9d,0xf5,0xf3,
-  0x26,0x37,0x7e,0x88,0x4e,0x96,0x48,0xe3,0x93,0xac,0x0f,0xe5,0x01,0xee,0xab,0x55,
-  0xb6,0x97,0xaf,0xd2,0x4c,0x6f,0x54,0x42,0xf1,0x30,0x33,0x4c,0x6e,0xa7,0x58,0xc3,
-  0x7a,0x74,0x04,0x2a,0x1b,0x95,0x6d,0x16,0xff,0xd7,0x7e,0x17,0x8a,0xe5,0x5a,0x14,
-  0xc2,0x3f,0x72,0x5e,0x82,0xab,0x69,0x19,0x07,0x61,0x39,0xd1,0x62,0x9c,0x5d,0x84,
-  0x8b,0x34,0xf0,0x8a,0xb5,0xe9,0xfb,0xc3,0xcf,0x65,0xb4,0xef,0xbc,0x79,0x31,0x5c,
-  0xbd,0x3f,0xaa,0x88,0x3f,0xbd,0xf9,0xbd,0x81,0x23,0x70,0x9f,0xe1,0x78,0x5c,0x29,
-  0x81,0xc3,0xaa,0x1f,0xf5,0x7b,0x71,0x1a,0xff,0x1c,0xbf,0x29,0x97,0xc2,0x00,0xc2,
-  0x39,0xff,0xca,0x4e,0xea,0xc4,0xff,0xa0,0x5a,0xbf,0x68,0xe2,0x61,0xe5,0xe7,0xce,
-  0x52,0x3d,0x02,0x65,0x5d,0x4a,0x87,0x90,0x8e,0x7f,0x1e,0x10,0x96,0xb1,0x2d,0x59,
-  0x25,0x7f,0x63,0x6b,0x67,0xef,0xc9,0x8f,0x85,0x35,0x63,0xa9,0xd7,0x85,0x62,0x87,
-  0xd6,0x47,0x66,0xb9,0x10,0xd3,0x3c,0x46,0x8e,0x16,0xa9,0x1b,0xd7,0x77,0x43,0xf5,
-  0x7e,0xf6,0x3f,0x1f,0x29,0x0a,0xe7,0xac,0x61,0xbf,0x4b,0xae,0x8f,0x15,0x8d,0x86,
-  0x01,0xf3,0xd2,0x01,0xe5,0xfb,0x28,0x14,0xb7,0xf1,0xd2,0xa4,0xb2,0x82,0x55,0x4a,
-  0x63,0xf3,0x83,0x72,0x2e,0xfc,0x5a,0x7d,0xae,0x26,0x4f,0x13,0x3f,0xe8,0x7e,0xbf,
-  0xc0,0x4b,0x6f,0xd7,0x0b,0x2f,0x81,0x67,0xc0,0xe1,0x17,0xed,0xac,0x0f,0x45,0x4d,
-  0x6e,0x89,0x72,0xeb,0xb8,0xff,0x54,0xbf,0x6a,0x3b,0x9c,0x54,0xab,0xf4,0xbc,0x2d,
-  0xc5,0x67,0xe0,0xd2,0x97,0xd2,0xf8,0xb0,0xdb,0x71,0x3a,0xff,0x8c,0x3e,0x98,0xe2,
-  0x0f,0xfb,0xc6,0xcf,0xe3,0xd3,0x59,0x83,0x88,0x29,0x51,0x5b,0xc5,0x45,0x8d,0x88,
-  0x20,0xe3,0x5b,0x1d,0xc5,0x73,0xb9,0xf9,0x21,0xe2,0xb8,0x3f,0x3f,0x02,0x27,0x0d,
-  0x58,0x1a,0xff,0x6c,0xd9,0x4e,0x41,0x3e,0xba,0x12,0x72,0x2e,0x44,0x55,0x30,0xdb,
-  0xc8,0xfb,0x1f,0x2c,0xd7,0xb5,0x5e,0xc8,0x45,0xc3,0x2a,0x30,0x1d,0x7e,0x97,0xb2,
-  0xb0,0x76,0x8f,0xcb,0x37,0x8e,0xc8,0xe2,0x71,0x5e,0x54,0xd7,0x7c,0x07,0xfb,0x96,
-  0xda,0xf0,0x6c,0xd1,0x89,0xa9,0x15,0xae,0x19,0xdb,0xd6,0xf3,0x1f,0x24,0x71,0x05,
-  0x66,0x08,0x4f,0x70,0x5a,0x01,0xb5,0xd0,0x8a,0x7f,0xa4,0xc7,0x74,0x57,0x48,0x69,
-  0x09,0xfc,0x20,0x44,0x7c,0xda,0x23,0xb4,0xdf,0xcc,0xf5,0x24,0xfc,0xf3,0x48,0x4f,
-  0xdc,0x50,0xae,0xb5,0xfd,0x6c,0x5c,0x3e,0x0c,0x4c,0xbe,0x12,0x3e,0xe9,0xd9,0x1d,
-  0x53,0x92,0xec,0x9f,0xf1,0x69,0x3b,0x4c,0x47,0x98,0x7c,0x18,0x61,0xad,0x63,0x40,
-  0x9c,0xc3,0x3f,0x49,0xfa,0x68,0x50,0x31,0xbe,0x7f,0x82,0x90,0xd4,0x8e,0x83,0x5f,
-  0xbe,0xba,0xf1,0x67,0x3b,0xd6,0x91,0xf6,0xcf,0x83,0xa5,0x49,0x95,0xec,0x71,0x3c,
-  0x71,0x14,0x11,0xe4,0x87,0xe5,0xbc,0xe1,0x0d,0x4b,0xfc,0xea,0x07,0x70,0x28,0x58,
-  0xa1,0xe7,0xb6,0x14,0x7f,0xb7,0xf1,0x50,0x2a,0x3e,0x64,0x16,0x37,0x0d,0xff,0x82,
-  0x86,0x12,0xd9,0x74,0xf4,0xb4,0x40,0x64,0x7c,0xff,0x10,0xfe,0xa9,0x07,0x57,0xc8,
-  0xfe,0x53,0x76,0x8d,0xd6,0xa4,0x2f,0xd0,0xf3,0x62,0xce,0x59,0xb0,0x0f,0x0d,0x07,
-  0xa5,0xc5,0x96,0xc5,0x4e,0xd1,0xd1,0x9b,0xac,0x58,0xfd,0x5f,0x25,0x01,0xb4,0xbf,
-  0x6a,0xe4,0xc4,0x15,0x28,0x88,0xa2,0x2e,0x7d,0x5a,0xcc,0xd6,0x56,0x60,0xce,0xdf,
-  0xc6,0xae,0x11,0x46,0x19,0xa1,0x4d,0xe3,0xfb,0x0d,0x24,0x09,0xe5,0x89,0xbb,0x6e,
-  0x61,0x2a,0xec,0xa7,0x84,0xe2,0x7f,0x1a,0x89,0x0f,0x21,0x22,0x28,0x0b,0x1e,0xd3,
-  0xdd,0x38,0x70,0x1e,0xce,0x1a,0x9b,0x4e,0xfc,0x4f,0x14,0x2a,0xc8,0xc9,0x1e,0x36,
-  0xfd,0x5f,0x0a,0x17,0xc9,0x23,0x53,0x46,0xfa,0x97,0x02,0x51,0x9e,0xc7,0xf7,0x55,
-  0xd2,0xf1,0xcf,0xc7,0xaf,0x3c,0x26,0x5d,0x80,0xeb,0xf0,0xfb,0x8a,0x3f,0x32,0xf9,
-  0x9f,0xbc,0x6d,0xe2,0x77,0x52,0x44,0xc7,0x6d,0xe2,0x31,0x98,0x89,0x6f,0x84,0x83,
-  0x0f,0xc6,0xd7,0xb3,0x70,0xca,0x31,0xf6,0x72,0x76,0x79,0x4d,0x1e,0xcd,0x7f,0xcd,
-  0x8b,0xab,0xb1,0xb5,0x61,0x3e,0x37,0xe3,0x81,0x7f,0x2d,0x16,0x48,0x7f,0x70,0xfb,
-  0xf4,0x86,0xaf,0x89,0xd9,0xe3,0xfb,0x67,0x8d,0x3a,0x20,0x45,0xc1,0x25,0xcb,0x7c,
-  0xab,0x5b,0x8b,0xc2,0x1c,0x50,0x22,0x36,0x4d,0xef,0xc4,0xe7,0x51,0xea,0x99,0x16,
-  0x8f,0x96,0xb8,0x40,0x69,0x63,0x79,0xd9,0x63,0xeb,0x69,0xf2,0x3f,0xa0,0x05,0x6d,
-  0x5b,0x59,0x8d,0x5a,0xaf,0x6b,0xba,0xcd,0x19,0xa9,0x49,0xbd,0xaf,0x3a,0x55,0x6a,
-  0xa8,0x77,0xa3,0x68,0xca,0x5f,0xec,0x14,0xc6,0xe6,0x17,0x66,0xb5,0xd1,0x32,0x92,
-  0xff,0x11,0xf1,0xa4,0x95,0x4f,0x53,0xb6,0x98,0x57,0x5c,0x34,0xc8,0x1e,0xdf,0x6f,
-  0x71,0x81,0xf8,0x1f,0x5f,0x5d,0x5e,0x8b,0xf8,0x1d,0xfd,0x10,0x38,0xf1,0x7b,0x89,
-  0x29,0x7e,0xcf,0xb1,0xad,0x01,0x81,0x10,0xef,0xd0,0x37,0x6f,0x77,0xb8,0x2d,0xfe,
-  0xaf,0x27,0x29,0x1a,0xea,0x6e,0xc7,0xb6,0x2f,0x7d,0x90,0xc1,0xff,0x90,0xbf,0xaf,
-  0x5f,0x1d,0x89,0xf9,0x17,0xe1,0xe0,0xb3,0x34,0xfe,0x81,0xb8,0x4e,0x61,0xcf,0x9b,
-  0x1a,0xbe,0xb4,0x92,0x19,0x9a,0x2f,0xb5,0xec,0xc3,0x29,0xe2,0x11,0xb7,0xa2,0x8c,
-  0x57,0xd6,0x21,0x7e,0x1e,0x7b,0x1e,0x77,0xd6,0xf5,0x10,0xe1,0x08,0x7b,0xfa,0xc5,
-  0x7b,0x60,0x53,0xd0,0x45,0xfc,0x8f,0x1b,0x3f,0x52,0x05,0x5f,0xfa,0x21,0x1b,0x86,
-  0xa3,0x88,0x7f,0x96,0xbe,0x67,0x8d,0x7f,0x9e,0xb2,0xbc,0xa8,0x01,0x66,0xf5,0xd9,
-  0xb8,0x6b,0x16,0x34,0x70,0x93,0x7f,0xb6,0x9b,0xfc,0x8f,0x32,0x9d,0xbd,0xa6,0x37,
-  0x37,0xa2,0x7c,0x9e,0x6f,0x5b,0x62,0xe5,0x7f,0xc0,0xa1,0x17,0x1d,0x94,0xfb,0x98,
-  0x5a,0x62,0x9a,0x2d,0x75,0xac,0x00,0xcd,0x96,0xef,0x19,0x88,0x10,0x8e,0x0b,0x08,
-  0xbd,0x8c,0x66,0xdd,0xa5,0x8d,0xc7,0xbb,0xb6,0x47,0x67,0x20,0xec,0xb9,0x2e,0x99,
-  0x57,0x6b,0x5b,0x20,0xbd,0xc4,0xf7,0x9d,0x50,0x46,0x44,0x8a,0x08,0x2a,0x4d,0x3a,
-  0x56,0x88,0x6f,0xe5,0xbc,0xce,0x77,0x91,0x23,0x6c,0xd5,0x38,0xfe,0xb1,0x5d,0xd5,
-  0xce,0x50,0xda,0xe8,0x08,0x72,0x06,0xd4,0x73,0xc2,0x02,0xc3,0xb1,0x4b,0x31,0xf9,
-  0x0d,0x03,0x17,0x6a,0x90,0x99,0x03,0x5e,0x7c,0x30,0x6d,0xff,0x0a,0x67,0xe1,0xf5,
-  0xc6,0xeb,0x92,0xcb,0x7b,0xbe,0xfd,0x05,0xaa,0xad,0xf2,0x7e,0xc7,0x30,0x02,0x89,
-  0xd7,0xf9,0x0d,0x49,0xc7,0x71,0xb8,0xa8,0x7f,0x4a,0x57,0x06,0xd4,0x34,0x3f,0xf3,
-  0xf4,0xe4,0x96,0x9a,0xf5,0x6a,0x11,0x28,0xf7,0xb0,0x21,0x1b,0x3e,0x7f,0x37,0x3d,
-  0xbf,0x4e,0x7c,0x8e,0x22,0xb0,0xe3,0x03,0x8d,0xda,0xb5,0xdd,0x8a,0xc1,0x9e,0x1e,
-  0xdf,0x3f,0x14,0x01,0xb4,0x99,0x9c,0x5c,0x2b,0xd1,0x5e,0xa3,0xe8,0xc4,0x66,0x7a,
-  0x5f,0x73,0x7e,0x5d,0xe4,0x6d,0x78,0x42,0x5e,0x69,0xfc,0x2c,0x6c,0xe5,0x7f,0x0a,
-  0x0c,0x68,0xe8,0x77,0x57,0x2a,0x4f,0x45,0x5e,0x82,0x66,0xc9,0x4d,0x62,0x47,0x4a,
-  0xc9,0x9f,0xc6,0xad,0x03,0xc0,0x79,0x89,0x31,0xcd,0x9e,0x11,0xff,0xfc,0x0b,0x7e,
-  0x24,0xec,0xaf,0x53,0x5a,0xf2,0x4f,0x1a,0xa6,0x59,0x3d,0x84,0xfb,0xc7,0x94,0x9f,
-  0x7b,0xc4,0x4f,0xe0,0x8f,0x9c,0x0c,0xed,0x86,0x0c,0xfe,0x47,0x3b,0x47,0x41,0x74,
-  0x09,0xf1,0x04,0xa1,0x9d,0x71,0xfe,0xc7,0x58,0x6e,0x12,0x65,0xf4,0x0f,0x23,0x19,
-  0xfe,0xaf,0xf3,0x0c,0x57,0x43,0xc7,0xdb,0x26,0xd0,0x6c,0x37,0xf9,0x9f,0x2b,0x88,
-  0xff,0x31,0x1c,0x23,0xa2,0x17,0x8e,0x70,0x92,0xf0,0x20,0xa7,0xf9,0x1f,0x29,0x08,
-  0xbf,0x99,0xec,0x0a,0xe7,0x24,0x5c,0x0a,0x43,0xd8,0x4c,0x30,0x66,0x96,0xa9,0xbf,
-  0x96,0xee,0x67,0x4f,0x96,0x3c,0xd5,0x83,0x8a,0xcc,0xcd,0xda,0x2d,0xf8,0xc7,0x4d,
-  0xfc,0x8f,0xa6,0x44,0xd9,0x13,0xda,0x86,0xb0,0x8b,0xf4,0x7b,0x09,0x37,0xf5,0xdd,
-  0x1e,0xe6,0x52,0x37,0x68,0xa6,0xe2,0x8e,0x8f,0xef,0x37,0x9b,0xe4,0x86,0x69,0xa0,
-  0x15,0xe5,0xcc,0xc1,0x6d,0x19,0x21,0x7f,0x87,0x97,0x51,0xd8,0xb3,0x87,0xc2,0x9e,
-  0x1b,0xa5,0x56,0xf0,0x74,0xe1,0x20,0x32,0x2e,0x7f,0x00,0xe5,0xcf,0x11,0x94,0x3f,
-  0x9b,0xe3,0x0d,0x3b,0x88,0x9f,0x27,0xfe,0x07,0xd7,0x47,0xba,0xaf,0xdb,0x91,0xc8,
-  0xd7,0xf0,0x0a,0xed,0x07,0x91,0x17,0x8f,0xed,0xcf,0x1d,0x57,0xf5,0xa9,0x1f,0x42,
-  0x15,0x08,0xf1,0xfc,0xe1,0xf8,0xc5,0x54,0x20,0xeb,0x19,0xb4,0xe8,0xab,0x7a,0x1c,
-  0xc9,0x86,0x63,0xb0,0x9f,0xae,0x18,0xf9,0x56,0xff,0xd7,0x7e,0x78,0x97,0xa3,0x11,
-  0x17,0x12,0x2b,0x50,0xd0,0x95,0x6b,0xd3,0x7b,0x10,0x0f,0x0c,0xeb,0xe5,0x86,0x87,
-  0xe2,0xa3,0x5e,0xe5,0xe5,0xc4,0x28,0x5a,0xf9,0x9f,0x0b,0xd0,0xdc,0x58,0xa6,0xc9,
-  0x09,0xa7,0x5b,0x40,0x41,0x54,0x24,0xb7,0xb0,0x0b,0xf2,0x3e,0x98,0x53,0x2d,0x7f,
-  0x11,0xe8,0xed,0x40,0xa0,0x68,0xf2,0x5d,0x69,0xfe,0x47,0x7a,0x8d,0xbe,0x3e,0xc8,
-  0x9a,0x4d,0x86,0xad,0xee,0x39,0xf8,0xdf,0xc8,0xee,0xd5,0x3b,0x34,0xad,0x37,0x38,
-  0x6f,0x2b,0x29,0xfa,0x38,0xad,0xc0,0x04,0xfe,0x47,0x28,0xf3,0xca,0x94,0xb6,0xd0,
-  0x0c,0xad,0xa0,0xc7,0x22,0x83,0xf0,0xbc,0xf0,0xb4,0x2e,0x53,0xfe,0x17,0x01,0xd1,
-  0xe6,0x8c,0xf8,0x9f,0xc9,0xdf,0xc5,0xf5,0xa9,0xd4,0xec,0x7b,0x44,0x8d,0x1d,0x87,
-  0x8a,0x02,0xe0,0xf8,0xfc,0x9d,0x92,0x57,0xa7,0xfc,0xaf,0xe0,0x4b,0xe6,0xfe,0xc9,
-  0xf0,0x7f,0x3d,0x11,0xb8,0x04,0x7e,0xe6,0xa8,0xab,0xfe,0x17,0x38,0x0f,0x55,0xda,
-  0xe6,0x33,0x38,0x3f,0x95,0xff,0x85,0xef,0x7b,0x29,0x66,0x0e,0xac,0xfc,0x0f,0x39,
-  0x71,0xee,0x03,0xcf,0x2e,0x51,0xd3,0x51,0xec,0x44,0x73,0x1b,0x1b,0x06,0xa1,0x4b,
-  0xf3,0x05,0x97,0x23,0xd0,0x82,0x23,0x2a,0xdd,0xbf,0xda,0x1a,0xff,0x53,0x42,0xbb,
-  0x25,0x21,0x77,0x8a,0x77,0x42,0x27,0x1a,0xda,0xc1,0xfd,0xe2,0x7e,0x15,0x5f,0xa4,
-  0x4f,0x19,0x8e,0x78,0xa0,0x99,0x13,0x30,0xce,0x88,0x7f,0x5e,0x2d,0xe3,0xfa,0x14,
-  0x44,0x0b,0x99,0x96,0xd3,0x09,0xee,0xc9,0x4a,0x29,0xeb,0x15,0xe2,0x8b,0xb4,0x3e,
-  0x65,0x21,0x1b,0xf5,0xe0,0x78,0x33,0xe2,0x9f,0xaf,0x20,0xb4,0xa3,0xc9,0x3f,0x66,
-  0xb7,0x42,0xe5,0xd6,0xa2,0x12,0x5b,0x90,0x3d,0x5a,0xff,0xf8,0x36,0xa1,0x16,0xe7,
-  0xcf,0xe0,0xa3,0x88,0xc8,0x1a,0xff,0x2c,0x31,0x44,0x3b,0x9a,0xc7,0x2f,0xda,0xd4,
-  0xcf,0x76,0x54,0x2e,0xbc,0xba,0xe8,0xdb,0x47,0x5b,0x0f,0xc7,0xbc,0x03,0x8e,0x79,
-  0x62,0x5e,0xe4,0x25,0x35,0xd1,0x8d,0x88,0xc8,0x12,0xff,0x93,0xfb,0x9c,0x7e,0x29,
-  0x15,0x24,0x36,0x8c,0x86,0xd8,0x8d,0xd0,0xd4,0x9d,0x3f,0xb8,0xec,0x1d,0xcd,0x5f,
-  0xf3,0xd5,0xa1,0x6a,0x8a,0x08,0x32,0xd7,0xc7,0xe2,0xff,0x9a,0x32,0x88,0xb0,0xb3,
-  0x8a,0xdc,0xd6,0x1a,0xf4,0x83,0x5f,0xcb,0xa6,0xc0,0xc5,0x1e,0x09,0xc5,0xfe,0x5e,
-  0x94,0x57,0xa3,0x44,0x99,0x85,0xff,0x11,0x36,0xc2,0x7a,0xa9,0x94,0xcb,0x5e,0x33,
-  0x7b,0xe2,0x5a,0x90,0x7f,0x24,0x6e,0xef,0x5e,0xcf,0x08,0xf6,0x44,0xce,0xc3,0x7a,
-  0xe1,0x5a,0x92,0xa8,0x9f,0x59,0xd6,0x7f,0x06,0xbd,0x6f,0xdc,0xbd,0x86,0x6d,0x85,
-  0xfd,0x7c,0x66,0xd1,0xd4,0x7b,0xb2,0xdf,0x91,0xd6,0x46,0x57,0x86,0x95,0x35,0x40,
-  0xc0,0xcf,0x4c,0x04,0x1b,0x1a,0xcf,0x7f,0x0c,0x4a,0x47,0xf5,0x06,0xc1,0x73,0xcc,
-  0x96,0x98,0xb3,0x49,0x8b,0x39,0x4b,0x3c,0x2b,0xe6,0xb3,0x9d,0x6a,0x33,0xd3,0x92,
-  0xb8,0xec,0xaf,0x04,0x9b,0x54,0xd3,0xb0,0xb5,0xf0,0x3f,0x59,0xed,0xec,0x30,0x3d,
-  0x7f,0x52,0x6c,0xd1,0xf0,0xbc,0x70,0xdb,0xd3,0xd5,0x03,0x68,0x96,0xfa,0xda,0x29,
-  0xdf,0x84,0x6d,0xe0,0x26,0x11,0x94,0xc1,0xff,0x90,0xf6,0x61,0xb9,0x51,0x16,0x86,
-  0x01,0xd9,0x54,0x43,0x27,0xb2,0x87,0x39,0xf9,0xdf,0xab,0x29,0xfe,0xf9,0xf9,0x09,
-  0xfc,0x0f,0x90,0x5b,0xc4,0x1f,0x74,0x3c,0x8c,0xc7,0xf6,0xd7,0xe0,0x5c,0x8d,0x6a,
-  0x11,0x11,0x91,0xe4,0x1a,0x0d,0x94,0xe5,0x26,0x22,0xb2,0xc6,0xff,0xac,0x26,0xb7,
-  0x7b,0x18,0xf1,0xdb,0x4c,0x15,0xb5,0x6d,0x48,0x49,0x54,0x3f,0xa9,0x3e,0x45,0xb0,
-  0x67,0x9b,0xad,0x0d,0x9e,0x32,0x5a,0xf5,0xcc,0xf8,0x9f,0x29,0x64,0x1f,0xa1,0x76,
-  0x8e,0xd9,0x66,0xc9,0x0f,0x8b,0x4f,0x2f,0x22,0x47,0x98,0xfe,0x94,0x36,0x27,0xb0,
-  0x74,0x1b,0x25,0x82,0x39,0x4d,0x0f,0x5a,0x46,0xfc,0x8f,0x5e,0x9f,0x42,0x3b,0x14,
-  0xed,0xe3,0x0e,0x2b,0x6a,0xf6,0x5a,0xd8,0x51,0xe3,0xa6,0x44,0x30,0x1c,0x18,0xe4,
-  0x21,0xb2,0xf0,0xcf,0x0b,0xb3,0x56,0xc6,0x7b,0x4c,0xb4,0xa3,0xb8,0xb3,0x8f,0x33,
-  0x33,0xcd,0x2d,0x6a,0xc6,0xff,0x28,0x5c,0xd0,0x46,0x23,0x82,0xc4,0xa3,0xe3,0xf3,
-  0x5b,0xa6,0x9c,0xe1,0x23,0xec,0xc6,0xaf,0x39,0x8e,0x29,0xc7,0xe0,0x92,0x7e,0x2d,
-  0xbd,0xdd,0xe3,0xf0,0xb9,0xbe,0x37,0xe4,0xd8,0x96,0x7f,0xc6,0xf6,0x79,0x4a,0xe3,
-  0x7f,0x90,0x65,0x89,0xff,0xe1,0x6f,0x4a,0x57,0x05,0xa5,0xa1,0x07,0xe6,0xcb,0x6f,
-  0xea,0xe5,0xfa,0x8c,0x98,0x78,0x86,0xbf,0x06,0xc5,0xba,0xfd,0xd7,0xa2,0x04,0x7f,
-  0x40,0x44,0x81,0xf3,0xd7,0x59,0xe2,0x9f,0x93,0x71,0xc4,0x63,0xb8,0x83,0x98,0xe6,
-  0xe3,0x5e,0xd4,0xef,0x9c,0x25,0x75,0x19,0x5a,0x59,0x69,0xfd,0x12,0xad,0x35,0xaa,
-  0xb5,0x42,0x0e,0xb7,0xf0,0x3f,0x72,0x56,0xb7,0x41,0xef,0x9b,0xa3,0x6e,0x58,0xcd,
-  0x1e,0x86,0x12,0xbd,0x50,0xcd,0xae,0x81,0xfa,0x1c,0xad,0x26,0x47,0x75,0x49,0x8d,
-  0x26,0xfe,0xb1,0xe6,0x5f,0x50,0xfc,0x0f,0xae,0x67,0x68,0xf6,0x14,0xc4,0x03,0x4d,
-  0x30,0xab,0x06,0x57,0x6f,0xd0,0xd9,0x14,0x0d,0xe8,0x68,0xb6,0x4b,0x05,0x84,0x7f,
-  0x72,0x62,0xd9,0xd6,0xfc,0x2f,0x22,0x79,0xfc,0x75,0xb9,0xdb,0xc4,0x12,0xe9,0x4d,
-  0x63,0x41,0xc8,0x1e,0x23,0x5a,0xfe,0x26,0xdf,0xa2,0x5c,0x04,0xba,0xc1,0x2e,0xf0,
-  0x2d,0x5a,0x1e,0xfb,0x7a,0xbb,0xc5,0xff,0xd5,0x98,0x87,0xe8,0xae,0xce,0xd1,0xf2,
-  0x33,0x44,0x3b,0x46,0x85,0xbe,0x99,0x02,0xc3,0x4e,0xcb,0x95,0x66,0x58,0x38,0x05,
-  0x02,0x51,0x44,0xf4,0x47,0x13,0xe2,0x7f,0xfc,0x85,0xf6,0xc6,0x49,0x9a,0xda,0xb3,
-  0xc8,0xc7,0x96,0xf3,0xea,0xa4,0xd0,0xa3,0x7f,0x26,0x99,0x78,0x9b,0xf8,0x1f,0x47,
-  0x46,0xfc,0x73,0x16,0xa1,0x9d,0xd2,0x84,0xdc,0x9f,0xbf,0x02,0x36,0x08,0xc5,0x89,
-  0x4d,0x4f,0x3b,0x87,0x43,0x9b,0xf4,0xeb,0x78,0xd3,0x49,0xd7,0x00,0x6c,0x42,0xfc,
-  0x83,0x08,0x7f,0x83,0x85,0xff,0x59,0x26,0x10,0xda,0x71,0x5f,0x3f,0x4b,0x46,0x20,
-  0x8d,0xc7,0xa4,0x82,0x7d,0x4c,0x12,0x3b,0xa9,0x54,0x12,0xff,0xc3,0x4d,0xf9,0x73,
-  0xd8,0x1a,0xff,0xb3,0x68,0x2f,0x94,0x46,0xe4,0xd0,0x2c,0x15,0xd6,0xc7,0x8b,0x0e,
-  0xe2,0x69,0xfd,0x2d,0x44,0x84,0xd9,0x3c,0x27,0xe4,0x3a,0x5f,0xbf,0x96,0xf2,0xbf,
-  0xea,0x50,0x74,0x8f,0xdd,0xbf,0x5d,0x9e,0xc1,0xf7,0xf2,0x1b,0xc3,0xf6,0x85,0xb6,
-  0x0a,0x78,0x35,0x38,0x2f,0xfc,0xaf,0x3f,0x46,0x31,0xbb,0x76,0x5d,0x69,0xdc,0x51,
-  0x2b,0xbe,0x63,0x8c,0xe2,0x9f,0x8f,0xac,0xf1,0xcf,0x93,0xcf,0x11,0xba,0x7b,0xf0,
-  0x81,0xa4,0xd3,0xb4,0xee,0x51,0x9e,0x5c,0x31,0x4c,0x7c,0x2c,0x0a,0xf6,0x97,0x48,
-  0xbf,0x6f,0xce,0x88,0xff,0xc9,0xba,0x48,0xd1,0xce,0x71,0xc7,0x3e,0x04,0x8d,0xaf,
-  0x6f,0x73,0xad,0x74,0x1c,0x17,0x2f,0xca,0xdf,0xdc,0x52,0x15,0x46,0x8b,0xfe,0xa2,
-  0xfa,0x3a,0x37,0x23,0x3a,0x0c,0x0b,0xff,0xb3,0x9d,0xd0,0x8e,0xac,0x5c,0xf9,0x2a,
-  0xe7,0xff,0xc6,0xe7,0xd7,0xe5,0x84,0xd9,0xef,0xfa,0x3e,0xd8,0xe3,0xd1,0x94,0xd5,
-  0xa8,0x5f,0xee,0x57,0x4d,0xfb,0xeb,0x23,0x8b,0xff,0x6b,0x23,0xc3,0xf9,0xd0,0x72,
-  0x37,0x5b,0xa3,0x3d,0x94,0x3d,0x9b,0xde,0xae,0x8f,0x37,0xd6,0xce,0x84,0xe6,0x10,
-  0x7b,0x5b,0x5f,0x2b,0x53,0x68,0x74,0xc0,0xb0,0xe0,0x1f,0xd3,0x7a,0x55,0x71,0xdb,
-  0x9c,0xe0,0x0f,0xac,0xf4,0x24,0x1f,0x76,0x33,0x43,0x88,0xf3,0xb2,0x22,0xc5,0xeb,
-  0xec,0x45,0xd3,0xde,0x94,0x3f,0x3d,0x96,0xf8,0x9f,0xfd,0x84,0x76,0xce,0xe0,0xb6,
-  0xf9,0x81,0xfa,0x6f,0x7a,0xc5,0x8f,0xf2,0x3a,0xab,0x07,0x9c,0x3d,0x70,0x5f,0x12,
-  0xc5,0xce,0x45,0x7e,0x84,0xcf,0x32,0xe5,0xa7,0x05,0xff,0x98,0x4e,0xc0,0x46,0x47,
-  0x2c,0xff,0x71,0x15,0x81,0x50,0x81,0x63,0x97,0xd8,0x45,0x3b,0xe4,0x18,0xc5,0xff,
-  0x08,0xe7,0xf4,0x0a,0x63,0x42,0xfc,0x0f,0x39,0x35,0xaa,0x74,0xcf,0x69,0xe5,0x1e,
-  0xfc,0x0f,0x7d,0x49,0xff,0x6a,0xdf,0x03,0xfb,0x89,0xf1,0x8e,0x4f,0x4f,0x8a,0x95,
-  0xd2,0xc5,0x14,0x22,0xb2,0xf8,0xbf,0xa4,0x3b,0xe0,0x05,0xc1,0xa3,0x45,0xb7,0x6d,
-  0x28,0x42,0x45,0x36,0x7f,0x65,0x54,0xad,0x2e,0x55,0x37,0x00,0x8b,0x39,0x24,0xdb,
-  0x4e,0x78,0xc4,0x30,0x89,0x20,0xab,0xff,0xcb,0x64,0x27,0x34,0x39,0x6e,0x2b,0xe5,
-  0xcd,0xac,0x6c,0xe5,0xb4,0x16,0xd6,0x2e,0x35,0x85,0x5d,0xc7,0x65,0xce,0x3c,0xb0,
-  0x6f,0x74,0xbe,0x45,0xfe,0x98,0xe8,0x1a,0x0a,0xd9,0x54,0x09,0x9a,0xbd,0x9e,0x9a,
-  0x47,0xe2,0x0c,0x62,0x5c,0x8e,0xf7,0xda,0x34,0xe7,0x46,0x69,0x4b,0x4a,0xdf,0x1d,
-  0x1c,0x5f,0x7d,0xc8,0xbd,0x03,0xdf,0xb7,0x8c,0x92,0x2c,0xdc,0xb0,0x59,0x23,0xe9,
-  0x91,0x5f,0xcf,0x8e,0xdc,0xed,0xe3,0x32,0x17,0x6f,0x44,0x8d,0x6c,0xea,0x17,0x43,
-  0x1c,0x8f,0x7f,0xbe,0xd2,0x7c,0x5f,0xe6,0xe8,0xae,0xef,0x6b,0x3b,0xe7,0xfd,0xd2,
-  0xb2,0x5c,0x43,0xdc,0x11,0xbf,0xa8,0xf9,0x37,0xa2,0xd9,0x7e,0x2f,0x2e,0x86,0xa9,
-  0xbf,0x06,0x26,0xa5,0xf1,0xcf,0x67,0xf0,0xf9,0xda,0x72,0xcd,0xe1,0x5e,0x5a,0xd9,
-  0xfd,0x7a,0xb8,0x5c,0xfb,0xea,0x70,0xf1,0xe9,0x48,0xaf,0x56,0x25,0x2f,0x7f,0x49,
-  0xf4,0x43,0xaf,0xaf,0xbc,0x2f,0x37,0x13,0xff,0x7c,0x64,0xdf,0x67,0xfa,0x17,0x0e,
-  0x56,0xf6,0x6c,0x56,0xe7,0x04,0xe5,0xce,0xc0,0x09,0x1e,0x35,0xca,0xbe,0xa3,0xac,
-  0x63,0xf6,0xc4,0x06,0x3d,0xbc,0x6d,0x4e,0x67,0x66,0xfe,0x17,0x5a,0x4f,0x6e,0xae,
-  0x74,0x38,0x7b,0xeb,0x77,0xbb,0x5c,0x2c,0xc7,0xcb,0xba,0x24,0x50,0x3d,0xa0,0x88,
-  0x6c,0x23,0x34,0x19,0x5a,0xce,0xec,0x0c,0xfc,0x33,0xb9,0x1d,0xf6,0xf1,0x39,0x04,
-  0x1a,0x7b,0x29,0xfe,0x39,0x89,0xb0,0xe7,0x43,0x78,0x2a,0x5a,0x96,0x40,0x84,0xb9,
-  0x91,0xf2,0xa7,0x6a,0x6c,0x99,0xf1,0xcf,0x27,0xf9,0xe9,0xfe,0x0a,0xd9,0xe1,0xa6,
-  0xe8,0x2f,0xc1,0x27,0xe7,0x26,0xc4,0xf7,0xe0,0x50,0xc4,0xaf,0x39,0x5a,0x1e,0xdb,
-  0x89,0xf8,0xb6,0x75,0x5e,0x6e,0x26,0xfe,0xf9,0x95,0x8c,0xf6,0xe9,0xe3,0xb8,0x1a,
-  0x14,0x9f,0x53,0x45,0xc0,0x78,0x00,0xde,0x62,0x7e,0x62,0x30,0xee,0x75,0x5e,0x82,
-  0x17,0x61,0x6e,0x26,0xfe,0x79,0x86,0x1f,0x41,0xb4,0x33,0xbd,0x4d,0xf4,0xc8,0x2f,
-  0x51,0xb4,0x21,0xe2,0x6d,0xca,0xd8,0x0d,0xd9,0x23,0xe2,0x4e,0xfd,0x88,0xea,0xed,
-  0xc6,0x13,0x6a,0xc5,0x3f,0x1e,0xe2,0xaf,0xfa,0xe4,0x38,0x90,0xbf,0x55,0xd3,0x73,
-  0x13,0xec,0x64,0x0d,0x89,0x4d,0xb9,0x91,0xe2,0x7f,0x42,0x66,0xfc,0xb6,0x15,0xff,
-  0xdc,0x0c,0xdc,0xe0,0x71,0x41,0x63,0xcb,0xa4,0x07,0x28,0x1b,0xce,0x8b,0xc7,0x30,
-  0x02,0x1a,0x97,0x77,0x10,0x71,0x21,0x69,0x5d,0xb6,0x4c,0xfc,0x53,0x01,0x8d,0xd1,
-  0x95,0x49,0x79,0x20,0xef,0x5b,0xb0,0x3e,0x56,0x1c,0xce,0x59,0xe3,0x7c,0x43,0x6a,
-  0xe4,0x45,0x71,0xf9,0x6f,0xd8,0xa3,0x6c,0x34,0x1e,0x38,0x23,0xff,0x8b,0x35,0x68,
-  0xde,0x88,0xdd,0x5d,0x7d,0x87,0xf4,0x7b,0x48,0x80,0xdd,0x2b,0x76,0x43,0x17,0x11,
-  0xb1,0x93,0x45,0x3b,0x25,0x12,0xf6,0xcd,0xca,0xc0,0x3f,0x57,0xb5,0xe0,0xfe,0xa9,
-  0xec,0x56,0x92,0xe2,0x7e,0x33,0x2d,0xce,0x31,0x94,0x7f,0x86,0x1c,0x19,0xdc,0xb1,
-  0x85,0xdd,0x4b,0xa1,0x65,0xc6,0xd5,0x99,0xf1,0x3f,0x83,0x70,0x1a,0x37,0xe1,0xf2,
-  0x78,0xf1,0xc7,0xfc,0x85,0xf0,0x7c,0x5a,0x1f,0x32,0x33,0xab,0xc2,0x76,0xe2,0x27,
-  0x29,0x10,0x3a,0x37,0x51,0x6d,0xf5,0x7f,0x6d,0xa7,0xb4,0x77,0xb2,0x16,0xdf,0x6e,
-  0xdb,0x5d,0x5b,0xa4,0xa3,0x3c,0x19,0x86,0x75,0x62,0xa9,0xee,0x1e,0x62,0xd3,0xd9,
-  0x7a,0xa1,0xc8,0x98,0x5a,0x97,0xe1,0xff,0x7a,0x14,0xf6,0xf2,0xd9,0x43,0x4a,0x6d,
-  0xe4,0x1d,0x7d,0xef,0x8e,0x6b,0x34,0x79,0x4d,0xe0,0x77,0x90,0xc5,0x3d,0x61,0x79,
-  0x05,0x9b,0x21,0x6f,0x36,0x34,0x22,0x82,0xac,0xfe,0xaf,0xd7,0x26,0xef,0x56,0xdd,
-  0xc7,0xa7,0x95,0xa0,0xb4,0xd9,0x8d,0xd2,0x1e,0x57,0xaf,0x9b,0xd5,0xb7,0x78,0xea,
-  0xe4,0x82,0x25,0x77,0xe0,0xfe,0x71,0x1b,0x73,0x32,0xf0,0xcf,0x94,0xce,0x9a,0x2f,
-  0xf4,0x17,0x12,0x8e,0x01,0x36,0xa0,0x9e,0x85,0xeb,0x5a,0xec,0x71,0x76,0x8e,0x1f,
-  0x0d,0x54,0x71,0xfb,0x27,0xa2,0x5b,0x3e,0x1a,0x78,0xac,0x33,0x37,0x13,0xff,0x24,
-  0xe5,0x61,0x2d,0x5b,0x5d,0xce,0x1f,0x48,0x9a,0x40,0x68,0x39,0x99,0xe1,0x38,0xc8,
-  0x76,0x44,0xaa,0xe3,0x05,0xc3,0xfa,0x02,0x79,0x82,0xff,0xab,0x5f,0x1f,0x51,0x7d,
-  0x37,0xa3,0x12,0x97,0xd8,0x09,0xa8,0x20,0x6f,0xd7,0x2b,0xbc,0x8b,0x88,0xa0,0x42,
-  0xb1,0x4d,0x1a,0x91,0x3b,0x6a,0xca,0x32,0xf1,0xcf,0x77,0xd0,0x9a,0x70,0xd5,0xa2,
-  0x52,0x26,0x60,0xb3,0x40,0x97,0x63,0xae,0x0f,0xcd,0xfc,0x2f,0x65,0xbb,0x6d,0x16,
-  0x6b,0x8a,0xb4,0x92,0x63,0xc8,0xca,0xff,0x90,0x53,0x8c,0xb2,0x4d,0x6d,0x25,0xf0,
-  0x14,0xcc,0x21,0x6f,0x57,0xbf,0x66,0x12,0x17,0x5b,0xd6,0x95,0x2c,0xde,0xc7,0x35,
-  0xfd,0xe9,0x09,0xf8,0x07,0xcf,0x63,0x5c,0x9f,0xb6,0x8d,0x65,0x21,0xfe,0x29,0x09,
-  0xc9,0x2a,0x7b,0x99,0xd5,0x43,0x7b,0x8a,0xff,0x11,0x16,0xc5,0x43,0x88,0x88,0x26,
-  0xc4,0x3f,0x9b,0x4a,0xf6,0x2b,0x1a,0x0c,0x10,0x11,0x64,0xc6,0x1b,0x23,0x10,0x5a,
-  0xce,0xf3,0xc1,0x7e,0x16,0x4f,0xc4,0xa6,0x8c,0xf8,0xe7,0x2b,0xcf,0x9b,0x6e,0xaf,
-  0xe5,0x7d,0xec,0x24,0x8c,0xe8,0x78,0xbe,0x62,0x93,0x3e,0x87,0x0b,0xfa,0x75,0xa1,
-  0xaf,0x9c,0x11,0xfb,0xd5,0x0b,0xfa,0x8b,0x21,0xc2,0x3f,0x16,0xff,0xd7,0x36,0x30,
-  0x93,0xbc,0xb6,0x88,0xab,0x5f,0x79,0xb3,0xa6,0x23,0x84,0xeb,0xf3,0x39,0x1c,0xca,
-  0xf1,0xeb,0xcb,0x8e,0x35,0xfc,0x0f,0x78,0xad,0xf6,0x87,0x84,0x28,0x5e,0xb1,0xe2,
-  0x1f,0xe8,0x64,0x2e,0xca,0xc7,0x2f,0x32,0xa2,0xba,0x0b,0xe6,0x70,0x76,0x82,0xc9,
-  0x28,0x21,0xe5,0x46,0x1b,0xc8,0x78,0x45,0x98,0x9b,0x81,0x7f,0xa4,0xee,0xc9,0xa6,
-  0x37,0xd0,0xc9,0xba,0xd5,0x5d,0x61,0x2d,0x48,0xef,0xcb,0xb7,0x50,0xbc,0x93,0x8a,
-  0x86,0x67,0xbd,0x14,0x0f,0x65,0xe4,0x9f,0x16,0x4e,0x6e,0x13,0xf6,0x45,0x5a,0x43,
-  0xf2,0x16,0xd6,0x2d,0x3c,0x05,0xae,0xa0,0x8d,0xdc,0x70,0x4d,0x7a,0x59,0x90,0x1c,
-  0x67,0xd9,0x4d,0x42,0x0a,0x4f,0x66,0xc6,0x3f,0x97,0x78,0xc3,0xf6,0xed,0xef,0xe3,
-  0x40,0x70,0xd5,0x52,0x20,0x37,0x85,0xb5,0xdf,0x6d,0xdf,0x46,0xf8,0x56,0x6e,0x5d,
-  0x61,0x8f,0x15,0x5b,0xfc,0x5f,0x42,0x9b,0x4e,0xd1,0x3e,0x73,0x63,0xf9,0x84,0x87,
-  0xef,0x0b,0x4f,0x8a,0x89,0xaf,0x22,0xec,0xa9,0xd4,0xe7,0x3a,0x4d,0x22,0x68,0x7f,
-  0x68,0x6e,0x26,0xfe,0x69,0x85,0x9e,0xa0,0x7f,0xb2,0x19,0x7f,0x35,0x0c,0x15,0xaa,
-  0x9d,0x2f,0x4a,0xd6,0x1f,0x07,0x9f,0xea,0x88,0x90,0x47,0xb2,0xd1,0x47,0x19,0x79,
-  0x56,0xfc,0xb3,0x90,0xaf,0xd3,0xe7,0xee,0x51,0xe2,0x40,0x62,0xcd,0xf4,0x76,0x8d,
-  0x98,0x6e,0x2f,0x65,0xd0,0xb6,0x90,0x6f,0x92,0x5b,0x79,0x6e,0x1c,0xf1,0x8c,0x3e,
-  0x3e,0xff,0x16,0x78,0x60,0xf2,0x1d,0xc7,0x9a,0x13,0x4e,0x3b,0x2b,0x86,0xa7,0x8d,
-  0x42,0x2f,0x7b,0xd5,0xcc,0x3f,0x55,0xae,0x62,0x79,0x5a,0x33,0xe2,0x1f,0x5b,0x26,
-  0xfe,0x59,0x60,0xfb,0x29,0xb1,0x1f,0x77,0xb3,0xb7,0x8d,0x07,0xa0,0xa8,0xa7,0xb0,
-  0x8e,0xfd,0x01,0x61,0x12,0xc1,0x86,0xc5,0xd3,0xcd,0x44,0x86,0x9c,0x3a,0x36,0x60,
-  0xc1,0x3f,0x4e,0xf8,0x2d,0xbf,0x91,0x40,0x8e,0xdf,0xfb,0x21,0xbf,0x61,0xc0,0xb3,
-  0x46,0xfc,0x8c,0x3d,0x89,0xb0,0x67,0x79,0x8f,0x38,0x43,0xe8,0x45,0x7c,0x72,0xcb,
-  0x9a,0x6a,0x0b,0xfe,0xb9,0x8a,0x1e,0x9c,0x68,0x8d,0xe2,0x41,0x7e,0x4e,0xf5,0x27,
-  0x1d,0x24,0x4f,0x4c,0x3e,0xdf,0x10,0x06,0xf1,0x55,0x0e,0xf4,0x39,0x32,0xf1,0xcf,
-  0xef,0xe0,0xe4,0x36,0x8a,0xff,0x69,0x28,0x8b,0xbe,0xcb,0xcb,0xdf,0xb3,0x0f,0x8b,
-  0x5f,0xc0,0x25,0x0a,0x7b,0x7e,0x4b,0xbc,0xd8,0x87,0xf6,0xfb,0xe9,0xfb,0x87,0x33,
-  0xf0,0x4f,0x0c,0xd6,0x16,0x16,0x19,0x7f,0x3b,0xc4,0x66,0x1c,0x5c,0xaf,0x15,0x77,
-  0xcb,0x75,0xec,0x18,0xec,0x75,0x96,0xbe,0xa2,0xdc,0x1b,0x39,0x1e,0x58,0x0b,0x4f,
-  0xd5,0xc8,0x77,0x65,0xe0,0x9f,0x2d,0xf0,0x73,0xf5,0x7b,0x44,0x13,0xd9,0x51,0x3e,
-  0x9f,0xa0,0xe8,0xc4,0x3e,0x33,0xde,0x49,0xd1,0x9d,0x6f,0x47,0xef,0xc7,0x5b,0xe1,
-  0xfb,0x5a,0xf1,0x8f,0x11,0xe4,0xdc,0xfd,0x9e,0xd2,0x91,0x6d,0xa7,0xf8,0x9f,0x3e,
-  0x94,0xe7,0x87,0x4b,0x76,0x77,0x78,0x0c,0x45,0x73,0x11,0xff,0x43,0xa5,0x06,0x32,
-  0xf0,0x4f,0x1c,0x4e,0xc0,0xc2,0x55,0x8e,0x33,0x4b,0x2a,0xd9,0xbb,0x50,0xfe,0x8a,
-  0x27,0x91,0x7f,0x52,0x3b,0x67,0x94,0x25,0xc5,0x87,0x51,0xa3,0x1d,0xe6,0xf1,0x5f,
-  0xe7,0x66,0xe2,0x9f,0x24,0x1e,0xab,0x07,0x43,0x08,0x7b,0x06,0xd9,0x39,0xc1,0xe4,
-  0x7f,0x3e,0x26,0x44,0x74,0xd0,0xb1,0x87,0x22,0xf0,0x75,0x34,0xb5,0x32,0xf1,0xcf,
-  0x10,0x5c,0xe0,0x78,0xbe,0x86,0xd8,0x7e,0xf6,0xa9,0x50,0x4e,0x69,0x5f,0x89,0x94,
-  0xbd,0x6f,0x88,0x5f,0x34,0x76,0x83,0xaf,0xcb,0x93,0x89,0x7f,0xbe,0x0d,0x9d,0x7a,
-  0x6b,0xd8,0x8c,0x67,0x26,0xef,0x8c,0x3b,0xc1,0x3e,0xe0,0x2f,0x08,0x65,0x5d,0xca,
-  0x46,0xf6,0x01,0x7b,0xca,0x30,0xf5,0x97,0x15,0xff,0x14,0x43,0x67,0xc8,0x55,0x57,
-  0x9b,0x20,0xed,0x9c,0xca,0x4e,0xfa,0x20,0xe5,0xaf,0x69,0x21,0xbe,0xc2,0x68,0xed,
-  0x92,0x33,0xf1,0x0f,0x45,0x54,0xe1,0x79,0x9c,0x3f,0x75,0x23,0x05,0x8a,0x74,0x99,
-  0x69,0x5f,0x84,0xc0,0xff,0x96,0xb1,0x1e,0x16,0x47,0x8d,0x29,0x7b,0xad,0xf1,0x3f,
-  0x66,0xfe,0x85,0x4f,0xb7,0xef,0xf9,0xca,0x7e,0x18,0x4d,0xbb,0x8e,0x9b,0x34,0xd7,
-  0xd5,0x5b,0xc5,0x6e,0xe9,0x10,0xfc,0x90,0xae,0x58,0xf3,0xdf,0x87,0xe0,0x3c,0xab,
-  0x82,0xe5,0x9f,0xe5,0xff,0xcb,0x68,0x59,0x1b,0x8a,0xff,0xc1,0x81,0x52,0x8f,0x6a,
-  0xfa,0xbc,0x19,0xf1,0x6b,0xcd,0xff,0x12,0xce,0x83,0x19,0x24,0x6f,0x20,0xda,0x79,
-  0x19,0x7c,0x45,0x8e,0x21,0xe7,0x79,0xe9,0x9c,0x86,0xb0,0xf9,0x4f,0xf9,0x3e,0xd8,
-  0xc9,0xe7,0x6a,0x76,0x44,0x64,0xd6,0xf8,0x67,0x8a,0x76,0x36,0x94,0x9e,0x00,0xda,
-  0x47,0x7d,0x15,0x5a,0xde,0x05,0x86,0xa0,0x61,0xe1,0x82,0xa4,0xf2,0x1c,0x45,0x4c,
-  0x51,0x44,0x50,0x94,0x69,0x19,0xf8,0x07,0xf1,0xf0,0x61,0x05,0x28,0x9e,0x9c,0x69,
-  0x5c,0xf1,0x06,0x7a,0xf5,0xdd,0xcc,0x6d,0x28,0xe5,0x4c,0x92,0xcc,0x40,0x68,0x8a,
-  0xf7,0x4e,0xf3,0x3f,0x44,0xfb,0xe0,0x6a,0xf3,0x08,0xde,0xbf,0xa4,0x2c,0xa2,0x24,
-  0xb2,0x07,0xd5,0xdd,0x30,0x8b,0x88,0xb8,0x32,0xd8,0xa0,0x95,0xf5,0xe0,0x89,0xf6,
-  0x5a,0xf0,0xcf,0x27,0x66,0x90,0xad,0xe3,0x71,0xb1,0x2c,0x7a,0x18,0x5c,0x12,0xc5,
-  0x27,0x4b,0xe7,0xe0,0x1e,0xda,0x18,0xd9,0xf0,0xc7,0xa0,0x7f,0xc8,0xb3,0x35,0x47,
-  0xb5,0xe0,0x9f,0x5f,0x04,0xcc,0x65,0xe9,0x54,0xce,0xc0,0x45,0x7e,0x83,0x76,0x8b,
-  0x99,0x08,0x46,0x57,0x12,0xe2,0x79,0xf5,0x12,0x99,0x12,0xf3,0x32,0xf0,0xcf,0xc6,
-  0x14,0x1b,0x59,0x22,0x96,0xd1,0xb2,0x77,0xe5,0x51,0xd8,0xcf,0x1f,0x53,0xb0,0x73,
-  0x16,0xbc,0xa9,0x76,0xd4,0x38,0xb6,0x59,0xe3,0x7f,0xb2,0x3c,0x29,0x6f,0x17,0xbf,
-  0x75,0x92,0xfe,0x02,0x7c,0xd6,0xaf,0x5c,0x60,0x95,0xf2,0x8b,0xe0,0x1a,0x50,0x86,
-  0xc4,0x3b,0xa1,0xb9,0xde,0x24,0x22,0x32,0xe3,0x9f,0x89,0x1d,0x9d,0x06,0xb6,0xaf,
-  0x22,0xf0,0x73,0x87,0x6d,0x0b,0x5d,0xb7,0xa0,0xfc,0x29,0xc1,0x69,0xd9,0x76,0xe1,
-  0x01,0x8e,0xf3,0x33,0xe2,0x7f,0x04,0x93,0x0f,0x49,0x36,0x07,0xd9,0x0c,0xf5,0x57,
-  0x9f,0xcd,0x5c,0xa5,0xac,0x89,0x7c,0x2b,0xbe,0x37,0xb6,0xf2,0x94,0xb2,0x86,0xfd,
-  0xe4,0xb6,0xb5,0x7d,0x45,0x61,0xa5,0x36,0x23,0xfe,0x07,0xd8,0x4b,0xe4,0x4f,0x07,
-  0xd1,0x0e,0xa7,0xdb,0xdd,0x5a,0x9e,0x57,0xbc,0xc5,0xf8,0x63,0xc2,0x3b,0xe0,0xa0,
-  0xfa,0x3f,0xbf,0x01,0x6f,0xa3,0x43,0x53,0xac,0xf1,0x3f,0x09,0x33,0xda,0xd9,0xd1,
-  0x25,0x9e,0xd7,0x47,0x42,0x37,0x48,0x4a,0x1d,0x85,0x91,0x2f,0xa2,0x6d,0x93,0xff,
-  0x36,0xfc,0x59,0xc2,0x85,0xea,0x13,0x43,0x19,0xf8,0xc7,0x5c,0x1f,0x6d,0xa9,0x5d,
-  0x0e,0xae,0xf6,0xbd,0x21,0x3e,0x9b,0xef,0x59,0x7d,0xee,0x56,0x9f,0xb1,0x79,0x57,
-  0xb1,0x07,0xce,0xd6,0xe3,0x42,0x79,0x33,0xe3,0x9f,0x53,0xec,0xf1,0x4a,0x36,0x1d,
-  0xd6,0xb1,0xd9,0x87,0x94,0xbb,0x1b,0x6e,0xe7,0x2f,0x6a,0xd7,0x92,0x44,0x9d,0xae,
-  0x12,0xfe,0x41,0x68,0x64,0x8d,0x7f,0x5e,0x67,0xbe,0xaf,0x52,0xcb,0x66,0xc0,0xfd,
-  0x46,0xd1,0x07,0x44,0x73,0xc9,0x7b,0xc9,0xed,0x75,0x8f,0xee,0x97,0x9e,0x31,0xfd,
-  0x5f,0x96,0x9a,0x5d,0xc1,0x82,0x97,0x53,0x6c,0xb3,0x9b,0x21,0xf0,0x03,0x14,0x44,
-  0x5e,0xb6,0x0c,0xf7,0x4f,0x89,0xe9,0xbf,0xe6,0x1c,0xe2,0x4e,0x65,0x06,0xb3,0xc6,
-  0x3f,0x77,0x32,0xd3,0xdb,0xd5,0x2f,0x16,0xc2,0x06,0xc3,0xc7,0x37,0x53,0x22,0xd8,
-  0x59,0xe8,0x20,0xda,0xe7,0x7a,0xf8,0x48,0xf3,0x6d,0x75,0xf4,0x37,0x58,0xe3,0x9f,
-  0x0d,0xcd,0xf4,0x3e,0x08,0xe2,0xfb,0xea,0xf0,0x2a,0x3f,0x2c,0x07,0x72,0x7b,0x09,
-  0x44,0x8c,0x28,0x27,0x60,0xc0,0xc0,0x9f,0x60,0x52,0x06,0xfe,0x21,0xfe,0x07,0x61,
-  0xc0,0x03,0xab,0xd5,0x53,0xf1,0x05,0x14,0xdd,0x21,0xa9,0x87,0x60,0x01,0xe5,0xfb,
-  0xcc,0x82,0x43,0x2a,0xfd,0xc4,0xd8,0x44,0xfe,0x07,0x95,0xac,0x73,0x26,0xaf,0x07,
-  0x57,0x72,0x69,0xcc,0x56,0xa2,0x9b,0xf8,0x27,0xc6,0x4a,0x78,0x53,0x23,0xfd,0x64,
-  0xc9,0xbf,0x28,0xcc,0x4a,0xf1,0x3f,0x14,0xf6,0x83,0xf8,0xc7,0x0c,0x53,0x29,0x11,
-  0xea,0x05,0x9a,0xbf,0xc4,0xa3,0xdf,0x0f,0x73,0x7b,0xf0,0xca,0xba,0x0c,0xfc,0x43,
-  0xf9,0xef,0x94,0xd6,0x2d,0x51,0x3e,0xb8,0xa2,0x3a,0xf1,0x8a,0xae,0x85,0x97,0x16,
-  0x38,0xb3,0xe8,0xd3,0x10,0x1f,0x12,0xb1,0xe2,0x9f,0x38,0x85,0xdd,0x9a,0x65,0x7f,
-  0x3e,0x81,0x05,0x66,0xda,0x91,0xdc,0x03,0xcf,0xa5,0x02,0xa1,0x7b,0x88,0x2a,0xb4,
-  0xfa,0xbf,0x28,0xfe,0x99,0xbc,0x39,0xca,0x31,0x3c,0x5f,0x7f,0xd6,0xc9,0x0d,0x94,
-  0x7f,0x92,0x8d,0x98,0x03,0xf1,0x6d,0x66,0x3a,0x7a,0x8e,0x15,0x7f,0xd7,0x9a,0xff,
-  0x95,0xf2,0x06,0xf6,0x35,0xcc,0x97,0x9e,0xd5,0x7c,0xfa,0xc6,0x5b,0xc5,0x33,0xfc,
-  0xcd,0xc0,0x5c,0x42,0x44,0x05,0xf0,0x1a,0x59,0x28,0x6f,0x64,0xc4,0x3f,0x9f,0xa2,
-  0xfc,0x2f,0x58,0xca,0xab,0xdd,0x30,0xa0,0xb7,0xd6,0xdb,0x38,0x4a,0xd7,0xe3,0x3f,
-  0x2a,0x43,0x1b,0x4b,0x0c,0xc7,0xa3,0x42,0x19,0x28,0x8d,0x19,0xf1,0xcf,0x2f,0x9b,
-  0xd1,0xce,0x8a,0x6a,0xab,0x81,0x5d,0x7a,0xab,0x4e,0x89,0x6f,0xb0,0xc5,0xe5,0xd1,
-  0x65,0xd5,0x55,0xb2,0xae,0x9e,0xb6,0x4a,0x21,0xb3,0xc6,0x3f,0xb7,0xa5,0xbc,0x5d,
-  0x54,0x7f,0x80,0xf0,0xcf,0xd2,0x18,0x1b,0x54,0x9b,0x28,0xff,0x57,0xb5,0xdd,0xa1,
-  0x36,0x19,0x65,0x61,0xf2,0x7f,0x59,0xf0,0xcf,0x87,0x29,0xef,0x55,0x0b,0xa2,0x9d,
-  0xd3,0xba,0x57,0x1f,0xc3,0x3f,0x34,0x90,0xe0,0x90,0x6e,0x26,0x76,0x59,0xe3,0x9f,
-  0xdb,0x46,0xbd,0x9f,0x94,0xf6,0x2e,0xfb,0xf5,0x5b,0x62,0x62,0xb7,0x48,0x61,0x60,
-  0xe4,0x08,0x93,0x47,0x24,0xd3,0x11,0x66,0xc5,0x3f,0x3b,0x44,0x5a,0xff,0x8d,0x88,
-  0x7f,0x16,0x75,0x2e,0x5e,0xa0,0x39,0xa2,0xf9,0x5a,0xc9,0x30,0x74,0x10,0xed,0x53,
-  0x04,0x3d,0x86,0xc9,0x40,0xda,0x32,0xf8,0x9f,0x0d,0x52,0x19,0xc2,0x1e,0xe7,0xb0,
-  0x7a,0x80,0xbb,0xea,0xf3,0x06,0xd8,0xf5,0xfc,0x23,0x98,0xcd,0xff,0x2e,0xce,0x16,
-  0xae,0xda,0x04,0x65,0xf5,0x4b,0x33,0xe3,0x9f,0x53,0xf2,0x07,0x95,0xce,0xcd,0xd0,
-  0x61,0x94,0x24,0xa7,0x2d,0x74,0xde,0x22,0xed,0x16,0xb4,0x38,0x1e,0x9c,0x5c,0x35,
-  0xc2,0x3d,0x3a,0xca,0x1f,0x6b,0xfc,0xf3,0x0c,0x33,0x5a,0x98,0xaa,0x55,0xc0,0x73,
-  0x7a,0x51,0x9f,0xb2,0xe6,0xe0,0xed,0xc2,0xde,0x78,0x69,0xc4,0x76,0xf7,0x92,0x4a,
-  0x58,0x6f,0xc7,0xa3,0x1d,0xce,0x88,0x7f,0xce,0x83,0xf5,0xf5,0x55,0xc9,0xe8,0x1a,
-  0x91,0xaa,0x93,0x5d,0x9b,0x5c,0xbe,0x46,0xf9,0x16,0xfc,0xa9,0x67,0x5e,0x52,0x39,
-  0x87,0x57,0x5e,0x25,0x68,0xe4,0xce,0x88,0xff,0xd9,0xa9,0xa6,0x8a,0xd8,0x4c,0x1a,
-  0x94,0xce,0x52,0xb6,0x7b,0x42,0xdc,0x29,0xfc,0xb1,0x04,0xc5,0xc8,0xee,0x31,0xff,
-  0x57,0x7c,0x02,0xff,0x83,0x42,0xbb,0xdf,0x71,0x7d,0xfe,0x2f,0xe0,0x16,0xbe,0x60,
-  0xc8,0x71,0x4a,0x9c,0xa1,0x7e,0xba,0xf5,0x4b,0x71,0xc7,0xb0,0x38,0x4b,0x7e,0xad,
-  0xb1,0xaa,0x7f,0xf9,0x80,0x62,0x8d,0x7f,0xde,0x4e,0xe8,0x05,0x85,0x46,0xf5,0x8c,
-  0xd0,0x1b,0xc6,0xb5,0xee,0xe6,0x6a,0x96,0xa7,0xaf,0xe7,0x1a,0x77,0xdc,0xc5,0xae,
-  0x30,0xd6,0xaa,0xe6,0xf3,0x5b,0xe3,0x9f,0xcd,0xf9,0xdd,0xca,0x67,0xda,0x7e,0xa1,
-  0x55,0x2e,0xea,0xa9,0x0e,0x07,0x6e,0x0f,0xed,0xf5,0x16,0x21,0x22,0xb2,0x55,0xf2,
-  0x27,0x51,0x94,0x35,0x67,0xfa,0xbf,0x7a,0x4d,0x3e,0x4d,0xa9,0x64,0x0e,0x78,0x80,
-  0xb7,0x01,0x2a,0xbe,0x65,0x2a,0xc5,0x73,0x4e,0x45,0xf9,0xc3,0x1a,0x74,0xfc,0x69,
-  0xa6,0x35,0xfe,0x79,0xca,0x4e,0x33,0xfa,0x74,0xe9,0xaf,0x1e,0xfb,0xa5,0xf6,0x9e,
-  0xe9,0x1f,0x57,0xc2,0x85,0x97,0x70,0x30,0x6d,0x48,0x9c,0x0b,0x7f,0xd4,0xcd,0x40,
-  0x0e,0xab,0xff,0xcb,0x0c,0x7b,0xee,0x42,0xed,0xf3,0x38,0x9c,0xd5,0xef,0x43,0xc1,
-  0x9b,0xdf,0x04,0x7f,0x64,0x1d,0x7d,0x57,0x27,0xc4,0x0f,0xf9,0x08,0x05,0xae,0x68,
-  0x97,0xf3,0x3f,0x46,0x5e,0x5d,0x71,0xa5,0x76,0x14,0xca,0xbb,0x50,0xda,0xac,0x81,
-  0x23,0x02,0x05,0x06,0xbb,0xd0,0x42,0x97,0xab,0x0e,0x3a,0x92,0x0d,0x90,0xc9,0xff,
-  0xa0,0xfe,0x6a,0x4e,0x4c,0x9d,0xa4,0x3d,0x6d,0xcc,0x49,0x36,0xb7,0xb1,0x67,0x48,
-  0xa3,0x0d,0x29,0x09,0xf1,0xef,0xe1,0x4d,0x52,0xfd,0x99,0xf1,0x3f,0xa9,0xe8,0x94,
-  0x69,0x94,0xa6,0xf4,0x08,0x5f,0x75,0x93,0xd2,0xb2,0xf5,0x17,0x34,0x3f,0xb9,0x21,
-  0x41,0x85,0x3b,0x28,0xdf,0x39,0x9e,0x11,0xff,0x63,0xf2,0x3f,0x07,0x97,0xfa,0x6c,
-  0x76,0xad,0x55,0xae,0x95,0x70,0x7d,0x36,0x46,0x1a,0xbc,0x1e,0x43,0xf4,0x3a,0xbb,
-  0xb5,0x2d,0xfc,0x0e,0x04,0x8a,0x96,0xfc,0x0b,0xb0,0x13,0xff,0xe3,0xef,0x71,0x24,
-  0xaa,0x3d,0x70,0x38,0xe4,0x32,0x94,0x58,0xfe,0xcf,0x93,0xaf,0xbb,0xfd,0xc6,0xf2,
-  0xba,0xe2,0x9d,0x30,0x1a,0x68,0x01,0x96,0xf8,0xe7,0xfd,0xf0,0x2e,0x5e,0xfc,0xbb,
-  0xd3,0xe2,0xdb,0x28,0xc6,0xab,0xec,0x08,0x6c,0x10,0x48,0x6b,0x55,0x87,0x37,0x0f,
-  0xe1,0xa4,0x0b,0xa4,0xe8,0xc3,0x19,0xf8,0xe7,0x22,0x9c,0xaf,0x2f,0xd7,0x1c,0x2f,
-  0x55,0x9f,0x25,0xef,0xc6,0x90,0xdd,0x68,0xf8,0x4c,0x38,0xaf,0x95,0x7b,0xed,0x51,
-  0xd1,0xdb,0xd8,0xcb,0xca,0x01,0x11,0x75,0xba,0xfe,0x21,0xe5,0x7f,0xed,0xe3,0xae,
-  0x22,0x65,0x7d,0xf1,0x2f,0xe0,0x85,0x50,0x99,0x91,0xbb,0x2e,0xf2,0x11,0x74,0xde,
-  0x81,0x16,0x59,0x94,0x15,0xb5,0xa1,0xfd,0x35,0x24,0x67,0xf2,0x3f,0xbd,0x28,0xaf,
-  0xdc,0xb4,0x0d,0xcc,0x8d,0xd1,0x83,0xd6,0x96,0x41,0x65,0xfd,0xa2,0x72,0xd4,0x05,
-  0x7a,0xbc,0xd2,0x25,0xb9,0xbd,0xab,0xac,0xfc,0xcf,0x4e,0xb4,0x67,0xe7,0x30,0x25,
-  0xca,0xda,0x71,0x61,0x3d,0xc6,0x95,0xed,0xae,0x7e,0x69,0x5f,0xa3,0xc6,0xdd,0x11,
-  0x36,0x0b,0x5a,0xf9,0x1c,0x21,0x9a,0xb0,0xd4,0x3f,0xd4,0xa7,0x10,0xff,0x80,0xda,
-  0x67,0x83,0xf8,0x51,0x90,0x4e,0x87,0x7d,0x23,0xca,0x9f,0x4e,0xa3,0x03,0xec,0xa0,
-  0xcc,0x8a,0x9c,0x32,0x4c,0xc6,0x26,0x1d,0xff,0x96,0x14,0xf6,0xc3,0x85,0x2d,0xd7,
-  0xa9,0x9b,0x93,0xa3,0x61,0xcf,0x28,0xcf,0xcd,0x1d,0x52,0xe3,0x18,0xae,0x1e,0x86,
-  0xe3,0xf0,0xdc,0x44,0xff,0xd7,0x4e,0x18,0x09,0xfb,0x9c,0xf6,0x06,0xd1,0xf4,0x76,
-  0xe9,0x8e,0x46,0xc5,0xad,0x0f,0x17,0xa2,0xc6,0xac,0x2f,0x3e,0x29,0x1d,0xd7,0x3b,
-  0x54,0x7b,0xa2,0x3a,0xcd,0x3f,0x10,0xfe,0xb9,0x5e,0x77,0x69,0xf2,0x4e,0xe6,0x96,
-  0x5f,0xe7,0x0b,0x16,0x2b,0x9b,0x71,0x63,0xec,0x23,0x44,0xd4,0xc9,0x3e,0xe8,0xe9,
-  0x4c,0xba,0x61,0x02,0xff,0xb3,0x0c,0x76,0xa9,0xba,0x16,0x2c,0x09,0x08,0xae,0x07,
-  0x24,0xa9,0x0b,0x15,0x77,0x44,0x7e,0xc1,0x40,0xb1,0xb3,0x90,0xfd,0x11,0x3a,0xde,
-  0x73,0xeb,0x6e,0x2f,0x1b,0x96,0xac,0xf8,0xe7,0x59,0xfe,0x6d,0xad,0xb0,0x96,0xf9,
-  0xa5,0xf5,0x8d,0x33,0x29,0xec,0x79,0x1a,0x5e,0x29,0x0d,0x2b,0x44,0x04,0xed,0xe5,
-  0xb3,0xcf,0x4c,0xe0,0x7f,0x10,0xf6,0x80,0x97,0xd9,0xe3,0x26,0xda,0x99,0x6f,0xa0,
-  0xe0,0x05,0x79,0x08,0x2a,0xd7,0x38,0x6e,0x10,0xbb,0xf9,0xaf,0xc3,0xde,0xc9,0xf6,
-  0x79,0x13,0xf2,0xdf,0x3f,0x57,0x7f,0xd5,0xed,0x38,0xa1,0x1c,0xd7,0x2f,0xc9,0x55,
-  0x06,0x6e,0x9b,0x33,0xfa,0x05,0xd5,0x7f,0xdb,0xa4,0x21,0xb3,0x50,0xd2,0x75,0xe0,
-  0xb8,0x9c,0xff,0xb9,0x07,0x96,0xa3,0x3e,0x92,0xce,0xf1,0x0a,0x23,0xb7,0x4f,0x6c,
-  0xe3,0x17,0xc1,0xdf,0x6e,0x5f,0x87,0xcb,0xf8,0x1a,0x74,0x90,0x23,0x32,0x93,0xff,
-  0xd9,0x2b,0x99,0x24,0xf3,0x74,0x69,0xaf,0xb6,0xc3,0x50,0x42,0x6c,0xba,0xbe,0x57,
-  0x9a,0x6b,0x44,0xef,0x8e,0x0c,0x17,0xac,0x85,0xa2,0x01,0xf7,0xe5,0xfc,0x4f,0x91,
-  0xd6,0xbc,0x82,0x5d,0x0d,0xbb,0x79,0xd1,0x4a,0x65,0x7a,0x60,0xaa,0xbe,0x87,0x97,
-  0xc6,0x73,0x6e,0x66,0xbf,0x63,0x6b,0x0d,0xcd,0x23,0x67,0xf2,0x3f,0x44,0xfb,0x68,
-  0x9f,0x29,0xd7,0x31,0x2a,0x34,0xe1,0x0a,0xa3,0xf6,0xcf,0xc3,0xf5,0xf7,0x74,0xdf,
-  0xec,0x8d,0x74,0x43,0xfd,0x61,0x93,0x61,0xcb,0x8c,0x7f,0xbe,0x98,0x2c,0x8f,0x38,
-  0x06,0xc5,0x0a,0x38,0x2b,0xf9,0xe2,0x5f,0x1d,0x10,0x9e,0xe6,0x17,0xe3,0xfe,0x44,
-  0xd6,0x4e,0xf1,0xac,0x71,0x14,0xff,0x9b,0x1b,0x27,0xf0,0x3f,0xd0,0x19,0x3c,0xa0,
-  0x6e,0x6e,0x54,0x4e,0xc8,0xc3,0xfa,0x15,0x52,0x6e,0xe3,0x91,0xf7,0x70,0xe0,0x97,
-  0xf3,0xcc,0xf8,0x1f,0xf0,0xab,0x97,0xf3,0x3f,0x02,0x65,0x73,0xe7,0xf7,0xcb,0x08,
-  0x84,0x6a,0xed,0x8f,0x88,0x25,0xf6,0x91,0x76,0x9f,0x51,0x1f,0x23,0xfb,0x25,0xe6,
-  0x0d,0xdb,0x33,0xf9,0x9f,0xef,0xc2,0xae,0xa0,0x2b,0x88,0xfa,0x37,0x0b,0x9a,0xc2,
-  0x65,0x21,0xdb,0x36,0x9b,0x49,0x23,0xeb,0x39,0x09,0xe7,0x87,0x52,0x93,0x5e,0xb5,
-  0x26,0xb3,0xfe,0x4f,0x16,0x45,0xa7,0xb4,0x2e,0x42,0xbc,0xb4,0x1a,0x9e,0x72,0x96,
-  0x05,0x60,0x1b,0x2b,0x99,0xfe,0x02,0xcc,0xd1,0x73,0xb6,0xb1,0xfe,0x70,0xbd,0xcd,
-  0x75,0x53,0x4f,0x2c,0x30,0x21,0xff,0x1d,0xb4,0x45,0x4a,0x01,0xf3,0xb0,0x1d,0x01,
-  0x4f,0x68,0x6a,0x01,0x93,0x60,0xb7,0xee,0x0e,0x5d,0x69,0x12,0x41,0x8b,0xec,0xba,
-  0x9c,0xe1,0xff,0x4a,0xd9,0x5f,0x04,0xf3,0xc2,0xd2,0x80,0x19,0xed,0x0c,0x9a,0x19,
-  0xef,0x8d,0x88,0x28,0x29,0x19,0xb0,0x15,0x3c,0xbc,0x7a,0x42,0xfe,0x3b,0xbc,0xa8,
-  0x2f,0x3f,0x56,0x7d,0x06,0xde,0xac,0x31,0xb3,0xdd,0xf1,0xca,0xa2,0x05,0x44,0x5c,
-  0x7f,0x2e,0x5d,0xd2,0xab,0x26,0xf2,0x3f,0xc4,0x2e,0xce,0xd3,0x97,0xbf,0xd1,0x70,
-  0x46,0xba,0x20,0x54,0xd5,0x6c,0xee,0x6b,0x28,0x81,0xd7,0xe4,0x54,0x22,0x58,0xcd,
-  0x21,0x67,0xb9,0x7e,0x39,0xff,0x83,0x62,0xa0,0x79,0x1d,0x2e,0x42,0x67,0x88,0xd0,
-  0x0e,0x4a,0xd7,0xa8,0x6e,0xe6,0xbf,0x9f,0x08,0xf0,0xaf,0x11,0x35,0xe4,0xcc,0xf0,
-  0x7f,0xe1,0xfa,0x68,0x7a,0xb3,0x99,0xf6,0xe5,0xf6,0x04,0x15,0x27,0x02,0x9b,0xfa,
-  0xd9,0x5a,0x00,0x61,0x5e,0x37,0xaf,0xd7,0xe2,0xba,0x3c,0xd1,0xff,0xb5,0x2f,0xf2,
-  0x74,0xb0,0x39,0x86,0xab,0xb7,0x4f,0x2a,0xc3,0x0f,0xb1,0xa1,0x84,0x35,0x69,0x54,
-  0x11,0xc8,0xf5,0x71,0x14,0x07,0xc7,0x0b,0x2f,0xe3,0x7f,0xa8,0x7e,0xd1,0x56,0x7c,
-  0xcd,0x1f,0x53,0xf6,0xd6,0x36,0x71,0x12,0x3f,0x24,0x9b,0xf9,0xef,0x1f,0xc0,0x21,
-  0xee,0xd5,0x3d,0xb1,0xea,0x0c,0xfe,0x07,0xe7,0x2f,0xc0,0x5f,0x1f,0xe8,0x97,0x10,
-  0x08,0x05,0x1c,0x0f,0x8b,0x1f,0xf0,0xd3,0xe4,0x21,0x8d,0x55,0x77,0xab,0x7f,0xa2,
-  0x2b,0x97,0xf9,0xbf,0x64,0x9f,0x6a,0xe7,0xe2,0x7b,0xfa,0xb0,0xe0,0x13,0x96,0xaf,
-  0x43,0xd8,0x33,0x5c,0xe2,0x03,0x47,0xb4,0x28,0x69,0xf4,0x70,0x27,0x31,0x72,0x99,
-  0xfe,0xaf,0xe7,0xe2,0x62,0x54,0xee,0x67,0x14,0x8b,0xff,0xe5,0x98,0xd2,0xcf,0xbe,
-  0xcc,0x0f,0x10,0xff,0x13,0x6f,0x25,0x22,0xc8,0x4c,0x8d,0x3f,0x9c,0x81,0x7f,0xf0,
-  0xbc,0x1c,0x0c,0x5e,0x1f,0x38,0x4c,0x83,0x3e,0x34,0xdb,0x1d,0x7c,0x97,0x61,0xba,
-  0x21,0xba,0x59,0x83,0xa4,0xf5,0xe5,0x4c,0xf0,0x7f,0xc1,0xb3,0xf0,0x98,0x46,0xf8,
-  0x87,0xa4,0x8d,0xa1,0xac,0x66,0x85,0xf0,0x6c,0x4e,0x51,0x8f,0x52,0xe7,0x7c,0x5b,
-  0x5a,0x07,0x45,0x7c,0x02,0xff,0x63,0xd6,0xff,0x49,0xda,0x6b,0xc5,0x77,0xe0,0x3c,
-  0x9f,0xb7,0xd2,0x71,0x5c,0x99,0xa1,0x5e,0x20,0xb7,0x57,0x6d,0x03,0x85,0x2e,0xef,
-  0xd2,0x4a,0x33,0xfc,0x5f,0x57,0xb5,0xa1,0x3c,0xf1,0xc3,0x5c,0xaa,0x1e,0x86,0xa7,
-  0x89,0x2f,0x4f,0x8a,0x03,0xfc,0x02,0xf9,0x77,0xda,0x50,0xfe,0x0c,0xd7,0x54,0x42,
-  0x5e,0x26,0xff,0xf3,0x0e,0xbc,0xcc,0xe7,0x85,0xed,0x2d,0x78,0xff,0xd7,0x79,0x79,
-  0xdc,0x7e,0x5c,0xbc,0x24,0x5f,0xe4,0xf3,0xce,0xe0,0xe0,0x0b,0xb8,0x64,0xcc,0xdb,
-  0x61,0xcf,0xe4,0x7f,0xb6,0xc3,0x5a,0xad,0x48,0x76,0xff,0x03,0x7b,0x5b,0xfb,0x37,
-  0xb8,0xb6,0x3b,0x18,0x60,0xbf,0xad,0x79,0x8e,0xd2,0xfc,0x43,0xec,0x6d,0xf9,0x39,
-  0xa1,0x88,0x4f,0xe0,0x7f,0xb6,0xc1,0xfd,0xc2,0x6c,0x08,0xea,0xd9,0x6f,0x43,0x23,
-  0x14,0x03,0x4e,0xfb,0x03,0xec,0x81,0x62,0x23,0x5a,0xc3,0x8e,0x69,0x7b,0x43,0xc5,
-  0x60,0xcb,0xe4,0x7f,0x50,0xc8,0x44,0xdd,0x93,0x65,0x2d,0x72,0x54,0x8b,0x49,0x25,
-  0x5c,0x2e,0x65,0xaf,0x20,0xb0,0x0c,0xf7,0xcd,0x96,0xd9,0x11,0x29,0xe1,0xd4,0xdc,
-  0x73,0x32,0xf9,0x9f,0x36,0x38,0x14,0x7e,0x5e,0xb7,0x3f,0x2f,0x7e,0x0c,0x47,0xcc,
-  0xb2,0x21,0x45,0xfd,0x7c,0x5f,0x74,0x5e,0x9f,0xbd,0x33,0xf2,0x3e,0x6a,0xa8,0x8e,
-  0x58,0x5e,0x26,0xff,0x43,0x24,0xcf,0x2c,0x97,0x99,0xed,0x3e,0xb2,0x08,0xd1,0x72,
-  0xab,0x78,0x02,0x46,0xe4,0x03,0x46,0xde,0x36,0x71,0x40,0xc3,0x1d,0xd5,0x98,0x9b,
-  0xc9,0xff,0x9c,0x81,0xf3,0x70,0x83,0xee,0x18,0x20,0x33,0x9f,0xa3,0x9a,0x0b,0x89,
-  0x0b,0x70,0x85,0xcb,0x0f,0xda,0x47,0x50,0x2d,0x52,0xea,0xd3,0x04,0xff,0x17,0xca,
-  0x1f,0xee,0xd2,0x96,0x46,0xd9,0x27,0xb0,0xaf,0xb0,0x4c,0x53,0x36,0xe2,0xf9,0xea,
-  0x34,0x5c,0x86,0x7b,0x3b,0x7b,0x0f,0x25,0xd2,0x82,0x1d,0x13,0xfc,0x5f,0x25,0xfa,
-  0xbe,0x28,0x8a,0xd9,0xad,0x29,0xda,0x87,0x2b,0x2d,0x11,0x37,0x7f,0x9e,0x68,0xa2,
-  0x78,0xe4,0x3d,0x68,0xd0,0x5c,0xf1,0x09,0xfe,0x2f,0x53,0xfe,0x20,0x1e,0x68,0x7d,
-  0x85,0x0c,0x93,0x45,0x68,0x98,0x00,0x0e,0x5a,0x8d,0x1e,0x60,0x06,0xab,0xa7,0x54,
-  0xf1,0x4c,0xfe,0x67,0x35,0x55,0x07,0x45,0x90,0x5f,0xdc,0x4f,0x85,0xa1,0x70,0xc0,
-  0xdc,0x59,0xc3,0x50,0x7e,0x6c,0x19,0x85,0x79,0xbf,0x44,0x19,0xbb,0x99,0xfc,0xcf,
-  0x19,0x19,0xe5,0x8f,0x80,0xb0,0x07,0x05,0x8b,0x40,0xd1,0xce,0xe2,0x10,0x9c,0x47,
-  0xbc,0xe7,0xa0,0x34,0xf6,0xf3,0xac,0x8a,0x67,0xf2,0x3f,0x93,0x2f,0xa6,0xd8,0xc2,
-  0x16,0xf8,0x48,0x7a,0x27,0xb2,0x80,0xf8,0xb1,0x4a,0xe3,0x6a,0xad,0xdc,0xb0,0xf7,
-  0x20,0x70,0xea,0x85,0x72,0x58,0xd6,0x97,0x6f,0xe1,0x7f,0xd0,0x08,0x7c,0x81,0x40,
-  0x5d,0xcc,0xf5,0x09,0x3c,0xcf,0xff,0xe1,0x95,0xe8,0xe9,0xc8,0xf4,0x45,0x9b,0xbd,
-  0xd7,0xf5,0x6f,0x68,0x59,0x75,0x29,0x14,0xc5,0xa5,0x93,0x5b,0xd0,0x1e,0x1f,0x8f,
-  0x6f,0xcf,0xea,0x4d,0x45,0xd3,0xa9,0xac,0xc7,0x0c,0x73,0xca,0xf1,0x31,0x7b,0xfd,
-  0x03,0xb2,0x66,0xd8,0x80,0xfc,0xcb,0x29,0x8f,0x8f,0x2f,0x8d,0x7f,0xb2,0x76,0xa6,
-  0xd8,0xb3,0x58,0xe4,0x63,0xfd,0x05,0xd9,0xd3,0x85,0xa7,0xcf,0x23,0x35,0x0b,0xb3,
-  0x0c,0x1b,0x77,0x0e,0xb2,0x66,0xcd,0xa5,0x22,0x7e,0x48,0xf3,0x3f,0x20,0xd1,0x7c,
-  0x04,0x81,0x0f,0xe3,0x26,0x39,0x8e,0xff,0x30,0x27,0xb1,0xc8,0x03,0x7f,0x2b,0xde,
-  0x6d,0xe4,0xb5,0x51,0xfd,0xbd,0x1e,0x5f,0x9d,0xbd,0x65,0x92,0x3a,0xfe,0xfc,0x3b,
-  0x60,0x7f,0x8a,0xed,0xe9,0x13,0xcf,0x52,0xfc,0x8f,0x91,0x37,0x24,0xbe,0xed,0xbc,
-  0x94,0x7d,0xa3,0xf1,0x0f,0xc7,0xe8,0xc4,0x35,0xfa,0x57,0x3b,0xde,0x16,0x07,0x2c,
-  0xfa,0x77,0x67,0x2a,0xa8,0x6c,0x8f,0xd8,0x1e,0x3a,0x0b,0x0b,0x0c,0x0f,0xf1,0x3f,
-  0xbf,0xc7,0xc1,0xf2,0xb8,0x30,0x88,0xeb,0xef,0x0d,0xd9,0x77,0x65,0xd4,0x3f,0x4c,
-  0xe1,0xe1,0xa5,0x09,0x14,0x02,0xcf,0x53,0x19,0x49,0x2a,0x04,0xf4,0x7a,0xe1,0x33,
-  0x5d,0x28,0x9f,0xdf,0x56,0x37,0x10,0x43,0x78,0xa5,0xa5,0xfe,0x8f,0x51,0x60,0x1f,
-  0x5b,0x9f,0x28,0x74,0x70,0xd3,0x10,0xdb,0x08,0xcf,0x1c,0xd4,0xba,0x14,0x08,0xf4,
-  0x0a,0x9c,0x1c,0x61,0x05,0xa8,0xdf,0xc7,0xfe,0xc2,0x30,0x03,0x1e,0xe2,0xa5,0x03,
-  0xd3,0xbe,0xc9,0xde,0xe2,0xcf,0xb5,0x7b,0x06,0x72,0xd6,0xb0,0x47,0x59,0x43,0x22,
-  0x15,0x08,0x2d,0x98,0x8e,0xb0,0x15,0xec,0xe2,0xf8,0xfc,0x60,0x21,0xdd,0xbf,0x32,
-  0xa9,0xd8,0xc4,0x0d,0x8d,0x7f,0x6a,0x9c,0x3f,0x80,0x68,0x64,0x13,0xbc,0x9f,0x98,
-  0x6f,0x6c,0x2e,0x10,0x8f,0x32,0x4a,0xdd,0xb2,0x7b,0xc5,0x37,0xb2,0xc7,0xe6,0xeb,
-  0xf6,0xfd,0x63,0xec,0x28,0xa2,0x1d,0xb9,0x02,0xd7,0x87,0xdd,0x2b,0x9d,0x0b,0x55,
-  0xf5,0x39,0xce,0x34,0x9c,0x5f,0x84,0x1a,0x2a,0x95,0xff,0x3e,0xf6,0xbe,0x72,0xee,
-  0xa0,0xc9,0x4e,0x2b,0xaa,0xe8,0x86,0x91,0xa0,0xff,0x95,0xc6,0xdd,0x4a,0x69,0xe3,
-  0x91,0xc0,0xdd,0x7d,0xf6,0x36,0x34,0x9c,0x7b,0x52,0x85,0x80,0x0e,0x8e,0xaf,0xff,
-  0x80,0xb0,0x3d,0xc5,0x1e,0x87,0xc4,0x15,0xf2,0xb3,0xda,0x3f,0xf7,0xc8,0x77,0x47,
-  0x6e,0xd4,0xff,0x4d,0x08,0x1b,0x1b,0xee,0x56,0xdf,0x36,0xd6,0xc3,0x0e,0x2e,0x5b,
-  0xe3,0x7f,0xc0,0xc4,0x3f,0x68,0xaf,0x1d,0x67,0x53,0x61,0x6f,0xc3,0x5c,0xa3,0x70,
-  0x21,0x9b,0x01,0x0f,0xec,0x29,0x3a,0xe9,0xc6,0xf7,0x0d,0x3e,0xc9,0xb5,0xb0,0x89,
-  0xf7,0xc6,0x9e,0x27,0x85,0x7f,0x70,0x3d,0xb7,0x65,0xdf,0x0c,0xbb,0x55,0xb7,0x59,
-  0x68,0xcb,0xf6,0x40,0x96,0x49,0xe3,0xf7,0xc2,0x63,0x5c,0x3b,0x2e,0x2f,0xb4,0xe4,
-  0x5f,0x0c,0x48,0xed,0x68,0x26,0x94,0x71,0xc7,0x07,0xe2,0xf5,0x70,0xb6,0xab,0x8c,
-  0x47,0x89,0xff,0x39,0x4c,0xcb,0xf2,0xb4,0x38,0x00,0x9f,0x24,0xcb,0x5b,0xa8,0xfe,
-  0x4f,0xfa,0xfe,0xa9,0x78,0x8c,0xd1,0x6c,0xaf,0xe0,0x7d,0x40,0xfe,0x2f,0x61,0x34,
-  0xed,0xcb,0x60,0x2b,0xe4,0x4a,0xb3,0xfe,0xcf,0xf8,0x7e,0xa0,0xfa,0xd8,0x64,0xef,
-  0x5f,0x15,0x6b,0x28,0x29,0x19,0x69,0xf3,0x2e,0xb2,0x53,0xd8,0x4f,0x17,0xf8,0x4c,
-  0x47,0x89,0x4c,0x8e,0x30,0xbb,0x6a,0x89,0x5f,0xe5,0x12,0xea,0x5f,0x56,0x96,0x0a,
-  0xbb,0xdd,0xad,0x31,0xdd,0x1d,0x73,0xd1,0x1d,0x5c,0x75,0x08,0xfb,0xcd,0x0a,0x3f,
-  0x21,0xb3,0x9e,0xd8,0xd8,0x1f,0xe5,0x7f,0xed,0x33,0xf9,0x1f,0x67,0x89,0xb4,0x0f,
-  0x61,0x4f,0x34,0x96,0x2a,0xbb,0xaa,0x47,0x1f,0xa4,0x7c,0x01,0x9a,0xdf,0x62,0xcd,
-  0xff,0x02,0xc9,0x8c,0xfe,0x9d,0x46,0xb0,0x67,0x9f,0x90,0xa4,0x42,0x40,0x6b,0x61,
-  0x8b,0xae,0x2d,0x92,0x55,0x17,0x8a,0x6e,0x20,0x3c,0x60,0xcd,0x7f,0x87,0xb0,0xf9,
-  0xbe,0x37,0x73,0x05,0x61,0x0f,0x1e,0xd4,0xe9,0x66,0xd8,0x33,0xf3,0x71,0x3b,0xcf,
-  0x4f,0x9a,0x85,0x68,0x3c,0x5c,0x2c,0x1b,0xf7,0xa7,0x77,0x4e,0x19,0x8d,0xe6,0xed,
-  0x2b,0x36,0x89,0xa0,0x90,0x63,0xdb,0xaa,0x93,0xd9,0x23,0xfa,0x01,0x72,0xeb,0xbc,
-  0x0c,0x9f,0xeb,0x66,0x69,0xe8,0x4f,0xd8,0x38,0x9e,0x99,0xd2,0x36,0x16,0x06,0xbc,
-  0x1f,0x0e,0x49,0xfe,0x25,0xf6,0xad,0x91,0x93,0x8d,0x1f,0xeb,0x37,0xe8,0xcb,0x55,
-  0xb1,0x9f,0x8f,0xb8,0x7d,0x78,0xa5,0xa1,0x2c,0x8d,0x4f,0x4c,0xfc,0x53,0x06,0x4b,
-  0x23,0x04,0x7b,0xa0,0xac,0xf0,0xff,0xca,0x46,0xed,0x13,0xad,0x6b,0x55,0x97,0x12,
-  0x11,0xd4,0xa9,0xbb,0x54,0x77,0x37,0xbe,0xef,0xd8,0xf7,0xd5,0xa5,0xd1,0xe8,0xee,
-  0x58,0xa4,0x8d,0x88,0xaf,0x40,0x8e,0x1a,0x79,0x59,0xdc,0xa1,0x69,0xa1,0xa5,0x2a,
-  0xfb,0x2d,0x3c,0x2b,0x14,0x85,0x51,0xa3,0x39,0xc7,0xf9,0xa5,0x42,0x18,0xe3,0x7f,
-  0x5a,0x67,0x42,0x93,0xe6,0x21,0x62,0xad,0xbb,0x90,0xea,0xd9,0xe6,0x6c,0x43,0xd5,
-  0xf3,0x2b,0xad,0x58,0x97,0x3f,0xf3,0x65,0x8f,0x7f,0xaf,0xb8,0x34,0xfa,0xfc,0x3f,
-  0x65,0x4f,0xd8,0x9b,0xa2,0x7e,0xfd,0x10,0xf1,0x3f,0xa7,0x44,0x9f,0xbe,0x1c,0x11,
-  0x94,0xf0,0x63,0xad,0xb5,0x6e,0x59,0x4c,0x71,0x8f,0x7f,0xaf,0x81,0xb1,0xfa,0x87,
-  0x2d,0xe2,0x07,0x4b,0x52,0x2f,0x5e,0x4d,0x15,0xa2,0xfc,0x8b,0x88,0xff,0x91,0x4e,
-  0x43,0xe5,0x6a,0x87,0x8a,0x78,0x7b,0xec,0xfe,0x6e,0x88,0xcb,0xe6,0x7e,0x6b,0x14,
-  0x4f,0x48,0xc3,0x8b,0x46,0xcb,0x0e,0xf4,0x08,0x3e,0xb6,0x7c,0xa3,0x4d,0x93,0x86,
-  0x03,0x66,0xfe,0x57,0x1a,0xff,0xc8,0xdd,0x6e,0x33,0xdb,0x5d,0xd1,0x9c,0x3d,0xea,
-  0x61,0x5e,0xc6,0xa7,0xc7,0x57,0xb5,0xc3,0xa6,0x40,0x71,0xcc,0x11,0x67,0x6e,0xe9,
-  0xf9,0x54,0x21,0xc4,0x74,0x7c,0x85,0x3c,0x65,0x59,0xea,0xbc,0x78,0xb3,0xf1,0xe0,
-  0x48,0x9e,0xae,0x2f,0x53,0xbe,0xc0,0x23,0x81,0x12,0x8a,0x3f,0xdc,0x88,0x3f,0x95,
-  0x24,0x65,0x8d,0x1d,0x4c,0xe7,0x7f,0x4d,0xa6,0x24,0xcd,0x1f,0x98,0xfe,0x2f,0xca,
-  0xfe,0x36,0xe4,0x35,0xd9,0xdb,0x0f,0x3e,0x08,0x27,0xfb,0x6c,0xc3,0x11,0x3a,0xda,
-  0x45,0x7d,0x72,0x66,0xfd,0x43,0x3a,0xbf,0xe4,0xff,0x9a,0xf4,0x0e,0xec,0xdd,0x54,
-  0x35,0xe0,0xb8,0x27,0x7f,0x46,0xcd,0x1b,0xfc,0x5a,0xb4,0xd7,0xc4,0x07,0xe1,0x4f,
-  0x7c,0x4f,0xdc,0x13,0x14,0x0f,0x67,0xa7,0x9f,0x67,0x54,0xde,0x8e,0x54,0x0f,0x4a,
-  0x87,0x74,0x7f,0x9f,0xe3,0xd9,0xe2,0x8f,0xf9,0x47,0x14,0x0f,0xdf,0xf1,0xf5,0xd5,
-  0x12,0xe5,0xdb,0xe2,0x41,0x4b,0xe3,0x9f,0xb0,0x74,0x80,0x48,0xfb,0x24,0x85,0x55,
-  0xeb,0x7f,0xe4,0x55,0x67,0x73,0xcf,0x8b,0xbf,0x80,0xd7,0xe3,0xfe,0x64,0xde,0xa0,
-  0x78,0x51,0xff,0x73,0xac,0x3c,0x8c,0xaa,0x3f,0x9d,0x1f,0xd1,0x6e,0xf2,0x39,0x9e,
-  0x6e,0x47,0x5d,0xfe,0xed,0xb5,0xbf,0x49,0xa0,0x60,0xa9,0x43,0xfb,0x28,0x42,0xf9,
-  0x23,0x61,0xf6,0x36,0xec,0xf5,0x16,0x05,0x95,0x95,0x6c,0xce,0xf8,0x7c,0x0e,0xa3,
-  0xf2,0x6a,0xc8,0x79,0x1b,0xac,0x9f,0x57,0x4a,0xb0,0x70,0x3b,0x3c,0x24,0x95,0xda,
-  0xd1,0x70,0x3b,0x26,0xef,0xcd,0x29,0x02,0x25,0x18,0x91,0xc6,0xeb,0x1f,0xea,0x05,
-  0x1b,0xcd,0xf5,0x5c,0xe2,0x65,0x5f,0x85,0xc9,0x66,0xda,0x29,0xb3,0x0b,0x4e,0xf0,
-  0x08,0x4b,0xaf,0xa4,0xc2,0x02,0x5c,0x53,0x15,0x99,0x39,0x2d,0x78,0x35,0xf5,0xbe,
-  0x4a,0x9d,0xf8,0x0f,0x70,0x0a,0xcd,0x40,0x65,0x08,0x0f,0x82,0xc9,0x48,0xc7,0x50,
-  0xfe,0x0c,0x1b,0xbe,0x21,0x47,0xa7,0x22,0x8f,0xcb,0xc3,0xb8,0x7a,0x07,0x8c,0xa6,
-  0xbd,0x0f,0xd2,0x46,0xea,0x72,0x0c,0xe5,0xf7,0xb2,0x01,0x1d,0xe7,0x23,0xfe,0x81,
-  0xa1,0xd5,0x07,0x92,0x54,0x31,0x60,0x3c,0xff,0x65,0x8c,0xff,0xa1,0xb4,0x26,0xed,
-  0x68,0xac,0xca,0x58,0x36,0xc4,0xce,0x67,0xbf,0x03,0xf9,0x7c,0xc9,0x40,0x43,0x1d,
-  0x9c,0xd7,0xd0,0xf4,0x53,0xad,0xf5,0x0f,0x53,0xfc,0x4f,0x97,0x92,0x70,0x6e,0x0a,
-  0xb6,0x2f,0x29,0x33,0xf2,0x28,0xec,0xb6,0x4f,0x8f,0xb7,0xc9,0x4f,0xb0,0x13,0xbc,
-  0xb3,0x07,0x81,0xf4,0x36,0x97,0x85,0xff,0x91,0xc6,0xf8,0x9f,0x6c,0x0f,0x34,0x0b,
-  0x73,0xba,0xe4,0x44,0x60,0x50,0xd8,0x30,0x65,0x4e,0x28,0x1a,0xb9,0x62,0x40,0x26,
-  0x57,0xd7,0xd2,0x44,0x46,0xfd,0xc3,0x51,0x7d,0xb7,0x2b,0x7b,0x27,0x3c,0x96,0xe3,
-  0x39,0x48,0x69,0x86,0x8d,0x31,0xd9,0x1d,0xb0,0x81,0x93,0xf2,0xe3,0xe2,0xba,0xe2,
-  0xb5,0x8d,0xc3,0x61,0x3c,0x90,0xf4,0x3c,0xfe,0x63,0x0a,0xaa,0x5d,0x7d,0x49,0x98,
-  0x9e,0x3f,0xff,0x6d,0xed,0x2d,0xa1,0x82,0xea,0x9f,0x87,0x75,0xd3,0x34,0x8b,0x15,
-  0x6b,0xd9,0xe3,0xf1,0x3f,0xb9,0xa3,0xfa,0xeb,0xee,0xe2,0xf3,0xfc,0xfc,0x9c,0xfb,
-  0x0e,0xce,0x18,0xca,0x3f,0xaf,0x0d,0xdb,0xae,0x83,0x5c,0xa3,0x7a,0x88,0xa3,0xc6,
-  0x87,0xe5,0x7d,0xe2,0x40,0x24,0x8d,0x37,0x0e,0x20,0xfe,0xb9,0x41,0x71,0xfc,0x29,
-  0x7f,0x0d,0xbc,0x5e,0x5c,0x4e,0x69,0xef,0xa7,0xa1,0x57,0x2f,0xb7,0xd9,0xf5,0x06,
-  0x3f,0xbc,0x13,0x41,0xfb,0xeb,0xd6,0xfc,0xba,0x09,0xf8,0xc7,0xb5,0x42,0xe9,0x60,
-  0xa7,0xc2,0x9b,0xfb,0x5c,0x49,0x5b,0x27,0x2e,0x4b,0xbb,0xce,0xe4,0xe0,0x46,0x36,
-  0x47,0x6e,0x96,0xe7,0xac,0x76,0x3f,0x28,0x0e,0x8d,0xe7,0x7f,0xc9,0x12,0xe9,0x23,
-  0x37,0x53,0x04,0x36,0xa0,0x92,0x5b,0x19,0xd1,0x6f,0x17,0x70,0xaf,0x66,0x8b,0x02,
-  0xab,0x81,0x9f,0x91,0xa3,0x79,0x72,0xe4,0xee,0x8c,0xf8,0x67,0xb4,0x5e,0x57,0x4d,
-  0x8b,0xb1,0x41,0x8d,0xfc,0x89,0x36,0x2a,0x3b,0xf9,0x34,0x77,0x25,0xa3,0xed,0x54,
-  0xd1,0x8b,0x22,0xd2,0x5b,0x02,0x69,0xfe,0x07,0xb2,0x06,0x11,0x16,0x56,0x68,0x8e,
-  0xce,0xea,0xef,0xb1,0xf7,0x51,0xdb,0x4a,0x89,0x49,0xef,0xc3,0xa1,0x36,0x67,0x9d,
-  0x7d,0xa3,0x98,0xa7,0xbd,0x51,0xef,0xab,0x71,0x2c,0xac,0xd6,0xd3,0xf9,0x5f,0x93,
-  0x69,0x7d,0xae,0xd3,0x1d,0x23,0xc2,0xc5,0x9a,0x54,0xda,0xbb,0xd8,0x87,0xfa,0x13,
-  0x25,0x0c,0xd5,0x67,0xbb,0x14,0xab,0xd4,0x97,0x0d,0x41,0x66,0xff,0x8b,0x73,0xb0,
-  0x20,0xe4,0x68,0x10,0x4f,0x99,0x65,0x28,0x10,0x3f,0x7c,0x47,0x1b,0x96,0xef,0xd1,
-  0xf3,0x62,0xc5,0x6d,0xfc,0x10,0x74,0x34,0xe2,0x95,0x44,0x86,0xff,0xeb,0x85,0x18,
-  0xbb,0x4d,0xdc,0xce,0x8e,0xf2,0xaa,0xba,0x78,0x5f,0x6e,0x82,0x7d,0xa8,0x75,0x26,
-  0x57,0xad,0x92,0xa7,0x98,0x15,0x35,0x17,0x70,0xf6,0xac,0xf8,0x8f,0x96,0xfe,0x17,
-  0xb8,0x1f,0xb8,0x64,0xa0,0xb4,0xd1,0x11,0x6b,0x6a,0x7d,0x36,0x6f,0xa0,0x17,0xc5,
-  0xd4,0xaa,0xe8,0xc2,0x85,0xec,0x7e,0x3c,0x98,0xf1,0xa4,0x0c,0x88,0x27,0xc7,0xbe,
-  0x2f,0xe1,0x9f,0xbd,0x51,0xf2,0xfe,0x04,0xde,0x82,0xbd,0x26,0xec,0x51,0xdf,0x80,
-  0xbd,0x91,0x95,0x25,0x72,0x90,0xcd,0x10,0x1e,0xea,0x99,0x99,0xb4,0xad,0x60,0xf7,
-  0xa5,0xf3,0xbf,0x4c,0xfc,0x33,0xbf,0xc7,0x31,0x5b,0xac,0x81,0x3f,0x69,0xf3,0x4d,
-  0x18,0x20,0x9f,0xc6,0x65,0xb7,0x6b,0x0d,0x1b,0x23,0x47,0x20,0x61,0xd8,0x7d,0xe2,
-  0xd6,0x74,0xfe,0xd7,0xf4,0xfd,0xf0,0x67,0xf8,0x57,0xc3,0xf1,0x19,0x95,0xfd,0x29,
-  0xaa,0x34,0xcb,0x46,0xc9,0x97,0x10,0xef,0x39,0x92,0xf9,0xbd,0x70,0xa7,0x4a,0x8c,
-  0x50,0x7e,0x3a,0xff,0x4b,0x9e,0x42,0xf1,0x78,0x3e,0xfd,0xf5,0xce,0xe2,0x4a,0xf6,
-  0x52,0xca,0x2d,0x38,0x44,0x19,0x85,0x14,0x51,0xef,0x11,0x10,0x48,0x20,0x02,0x9c,
-  0x14,0x48,0xf3,0x3f,0x39,0xa6,0x90,0xd4,0x95,0xba,0x40,0x25,0xac,0xf7,0x9a,0x44,
-  0x50,0x1f,0xfc,0x0a,0xbe,0x8d,0x86,0x95,0x6d,0xba,0x6d,0x33,0x14,0x19,0xc1,0xf3,
-  0x57,0xf8,0xc6,0xe5,0x9b,0x96,0x8a,0xff,0x49,0x4e,0xab,0xcd,0x7e,0x14,0x28,0xba,
-  0x7b,0xda,0x1a,0xf6,0x3b,0x78,0xbc,0x7e,0x66,0xb8,0x76,0x05,0xf3,0x0b,0xeb,0x23,
-  0x54,0x0a,0xc9,0xd6,0x62,0xe9,0x7f,0x61,0xee,0xb7,0x61,0x3c,0x56,0xf7,0x8f,0x45,
-  0x8f,0x7f,0x68,0xec,0xd2,0xe3,0xb7,0xca,0x05,0xce,0x5c,0x78,0x84,0xf0,0xe4,0x02,
-  0x84,0x52,0xe3,0xf8,0xa7,0xa0,0xbd,0xe0,0x33,0xb8,0x21,0xe1,0x48,0x2a,0x9d,0x28,
-  0x76,0x4c,0xb7,0xd7,0x30,0x7c,0xe2,0xbd,0x2e,0x6a,0x7f,0x4f,0x5c,0x08,0x47,0xe3,
-  0xbb,0x63,0xcb,0x3e,0x50,0xce,0x5a,0xf2,0xbf,0x08,0xff,0x3c,0x51,0xe0,0xe0,0x10,
-  0xe6,0x43,0xcc,0xaf,0x2e,0x4f,0xa5,0xbd,0xa7,0x34,0x54,0xe3,0x00,0xf3,0xb3,0xb9,
-  0x3c,0xc7,0x9a,0xff,0x45,0xfa,0xce,0x77,0x33,0x4a,0xa7,0xfe,0xb1,0x68,0x67,0x1c,
-  0x68,0xf7,0xea,0xf6,0x58,0xc3,0x2c,0xe9,0x54,0xdc,0x1b,0xb6,0x6f,0x15,0xad,0xf9,
-  0x5f,0x84,0x67,0x5c,0x3a,0xda,0x53,0xfd,0x94,0x88,0x4a,0xd5,0x0e,0x3f,0x54,0x9b,
-  0x16,0xdd,0x17,0x96,0x9d,0x62,0x0d,0x6f,0x62,0x73,0x74,0x39,0xf4,0xa5,0x70,0x06,
-  0xff,0x73,0x3d,0x98,0xf5,0x8a,0xbb,0xf5,0x26,0xd5,0x15,0xf8,0x59,0x8c,0x60,0x4f,
-  0x5e,0x59,0x37,0x02,0xbf,0x92,0xfa,0xa7,0x74,0x57,0x4d,0x30,0xc1,0x8e,0x4e,0xb4,
-  0xbf,0xcc,0x6e,0x17,0x0c,0xd7,0x47,0xff,0x5b,0x95,0xbd,0xc6,0xa8,0xec,0xa1,0x5b,
-  0x65,0xab,0xa1,0xfe,0x26,0x37,0x79,0x88,0x96,0xa4,0xf3,0xbf,0xae,0x32,0xf9,0x1f,
-  0xee,0x00,0xc4,0xf3,0x3d,0xe0,0x1a,0x4d,0xbb,0x96,0xca,0x08,0xff,0x68,0xc2,0x40,
-  0x0a,0xff,0xfc,0x62,0xdc,0xfe,0xea,0xbc,0xaa,0x1f,0xad,0xcb,0x17,0x09,0xe4,0x7c,
-  0x2e,0x9b,0x6e,0x2f,0x8a,0xe7,0xb9,0xa0,0xdf,0x40,0x57,0x8e,0x09,0xbf,0x82,0xaa,
-  0xd0,0xf2,0x63,0xe2,0x13,0x52,0x1a,0xff,0x10,0x5f,0xd4,0x51,0x63,0x7f,0xe3,0xaf,
-  0x2b,0xe3,0x7f,0x00,0x93,0xed,0x39,0x63,0x5c,0xd0,0x7f,0x78,0x2b,0x9e,0xc7,0xf9,
-  0xa9,0xd2,0x40,0x21,0xf6,0xdd,0xf1,0xfd,0x53,0x88,0xeb,0x8f,0x42,0x55,0x92,0x23,
-  0x0f,0x84,0x79,0x54,0x9d,0x03,0x6e,0x84,0x3d,0x06,0xaa,0x75,0xd5,0xa4,0xd9,0x7b,
-  0x64,0xfa,0x69,0xc3,0xa6,0x71,0xf9,0x13,0x34,0xf1,0x8f,0xa6,0xcb,0xf9,0xac,0x26,
-  0xbe,0x85,0xca,0x62,0xab,0xd9,0xdd,0x8d,0xbb,0xaa,0x57,0x53,0xbc,0x53,0x09,0x6c,
-  0x69,0xd4,0x28,0x34,0xe8,0xd6,0xf1,0xfd,0x53,0x58,0xd0,0x66,0xae,0xff,0x1c,0xe2,
-  0xd3,0x9a,0x84,0x54,0x3c,0x15,0xdf,0x07,0xab,0x56,0x10,0x22,0xbd,0x95,0x52,0x5f,
-  0xdb,0xb7,0xb1,0x75,0xe9,0xfc,0xaf,0x02,0xe2,0x2b,0x7c,0xdf,0x5b,0xf6,0x68,0xf1,
-  0x6a,0xfe,0x26,0x6c,0xa5,0xe7,0x3f,0xc9,0x47,0x62,0xcf,0xe9,0x8e,0xed,0x8a,0x44,
-  0xf5,0xd9,0x02,0xf6,0xe9,0x62,0x6d,0x3a,0xff,0xcb,0xc4,0x3f,0xfb,0x7b,0x72,0x9d,
-  0x0d,0xdd,0x78,0x0c,0x53,0xd1,0xe0,0x1a,0x0e,0xc2,0x8e,0xed,0xd5,0xfd,0x14,0xdf,
-  0x52,0xb7,0x79,0x8b,0x35,0xff,0x4b,0x8d,0x0b,0xc3,0xdc,0x57,0x88,0xcb,0x6e,0x7e,
-  0x88,0xac,0xab,0xcd,0xf5,0xd7,0x17,0xc8,0x76,0xde,0xa0,0x69,0x3d,0x1a,0xb5,0xc6,
-  0x50,0xd2,0xf8,0x59,0x96,0xdc,0x88,0xc5,0x5d,0x31,0x61,0x20,0xb2,0x10,0x0e,0xc4,
-  0x77,0xc4,0xf3,0xe2,0xce,0x61,0x69,0x13,0xfc,0xb0,0x5d,0xfe,0x2e,0xbb,0x5e,0x7b,
-  0x07,0xe2,0x71,0xdb,0x80,0xb8,0x24,0xbd,0x1f,0x88,0xff,0x51,0xb5,0x63,0xca,0x7c,
-  0x84,0x3d,0xbb,0xb4,0xf6,0xf7,0x14,0xaf,0xef,0x55,0xa9,0xfe,0xb0,0x3b,0x24,0x7b,
-  0x58,0xae,0xb0,0x21,0x16,0x0f,0xcb,0xee,0x48,0xda,0xff,0xa5,0x09,0xd3,0xe1,0xb9,
-  0x14,0xc9,0x33,0x5d,0x7e,0x0e,0x66,0x53,0xb4,0xde,0xbb,0xb0,0x56,0xff,0x4e,0x52,
-  0xae,0x73,0x15,0x0a,0x0f,0x82,0x76,0xd0,0x56,0x17,0x09,0x8f,0xcb,0x07,0x77,0x21,
-  0x9d,0xdf,0x79,0x45,0x8e,0x01,0x34,0x5b,0x3e,0xe3,0xd7,0xa3,0xbc,0x12,0xbf,0x40,
-  0xd1,0xf8,0x4c,0xd8,0xb3,0x46,0x99,0x91,0x73,0x94,0xef,0x4a,0xda,0x6b,0x15,0x97,
-  0xd5,0xff,0x05,0x9f,0xc1,0x81,0x42,0x25,0xfe,0xe5,0x36,0x12,0xbc,0xf5,0x14,0x96,
-  0x00,0x17,0xe1,0x9f,0x75,0x33,0x71,0xf5,0x9f,0x49,0x10,0x25,0x26,0xa5,0xf3,0xbf,
-  0x10,0xff,0xc0,0xc5,0x44,0xf9,0x99,0xbc,0xe3,0xcc,0xaf,0x5f,0xe4,0xd7,0x69,0x8e,
-  0x61,0x5c,0xbd,0xd7,0x78,0x95,0x66,0xdf,0x27,0xce,0x50,0xdf,0xa5,0x8e,0x06,0x03,
-  0xa2,0x9a,0x81,0x7f,0xf6,0xa8,0x3b,0x1a,0x83,0x50,0x7d,0x3b,0x09,0x22,0x10,0xeb,
-  0xd8,0xaf,0xe5,0xb5,0x50,0x1a,0x95,0xef,0x61,0xd3,0x6f,0xfa,0x94,0x22,0x1e,0xc3,
-  0x6c,0x8e,0x25,0xff,0x6b,0x3b,0x3c,0xa7,0x7d,0x4f,0x9d,0x36,0x99,0xaa,0xfd,0xc0,
-  0x4c,0x30,0xe5,0xd5,0x36,0x28,0x15,0xa2,0x75,0x68,0xd8,0xae,0x53,0x8b,0x0c,0x59,
-  0x47,0x53,0x62,0x6c,0x3e,0xe1,0x9f,0x04,0xd4,0x42,0x8e,0xc4,0x5e,0xd1,0x3a,0x70,
-  0xb3,0xa2,0xfc,0xf9,0x08,0xb6,0xc6,0x3c,0x31,0xd9,0x3b,0x35,0x0f,0x9e,0x22,0xd5,
-  0x2f,0xa1,0xfc,0x19,0x9b,0x4f,0xf8,0xe7,0x33,0xa8,0x30,0x5e,0xdf,0x23,0xee,0x40,
-  0x43,0xcc,0x4c,0xec,0x3a,0x19,0x79,0x13,0x0d,0x07,0x4f,0x11,0x1a,0x4a,0x87,0x75,
-  0xb4,0x1f,0xdb,0x94,0xbc,0x34,0xdf,0xa8,0x12,0x2d,0x36,0x8b,0xe7,0x6d,0x63,0x61,
-  0xf8,0x93,0xee,0x57,0xcd,0xf8,0x9f,0x53,0x2b,0xfd,0xdd,0x8e,0x5d,0xc5,0x49,0xfd,
-  0x8f,0xab,0xcc,0xd0,0xa9,0x4c,0xff,0xd7,0x45,0xb8,0xe1,0x71,0xc7,0xe1,0x86,0x8b,
-  0xd2,0xb9,0xc6,0x62,0xdd,0x3e,0x24,0xf6,0x6b,0xaf,0x30,0x5f,0xc0,0xb1,0x4b,0xa9,
-  0x5c,0x35,0x08,0xde,0x9e,0x65,0xf1,0xe6,0x74,0x7d,0xf2,0x7a,0xe9,0x0e,0xa9,0xb3,
-  0x87,0xf1,0xa5,0x8d,0xa8,0xb6,0x9e,0xd7,0xe7,0x4b,0x28,0x46,0xde,0x87,0x28,0x77,
-  0x2d,0x54,0x3a,0xc5,0x5b,0xa0,0xe9,0x25,0x97,0xd1,0xe3,0x9d,0x63,0xcd,0xff,0xba,
-  0x03,0xcd,0xfc,0x56,0xd6,0x1c,0x8f,0x24,0xf9,0x0b,0xa1,0x39,0x93,0x71,0xfe,0x7b,
-  0x42,0x93,0xe1,0xd2,0xf0,0xbc,0x78,0xe0,0xe9,0x28,0x11,0x41,0x56,0xff,0x17,0xd8,
-  0x81,0xba,0x45,0x4d,0x03,0x34,0x5b,0x3a,0xc0,0x03,0xb5,0x14,0xff,0xc3,0x4d,0xd8,
-  0x13,0xb9,0xc3,0x94,0xd8,0x6e,0xcd,0x9a,0xff,0x85,0xf8,0xe7,0x2c,0x5a,0x61,0x8e,
-  0xfa,0xfc,0x41,0x1c,0xcc,0x31,0xe3,0x6f,0x29,0xe3,0x12,0xf0,0xe0,0x78,0xa4,0x01,
-  0xe8,0x30,0x96,0x65,0xe4,0xbf,0x5f,0x79,0x1e,0xce,0x90,0x53,0xfe,0x60,0xda,0x5b,
-  0x31,0x04,0xe7,0xa5,0xab,0x61,0xd2,0x50,0xfe,0xbd,0x29,0xff,0x97,0x21,0x0e,0x34,
-  0xd6,0x8d,0xff,0x07,0x58,0x23,0xec,0x00,0xb7,0x6e,0x53,0xff,0x83,0x01,0x58,0xff,
-  0x24,0x40,0xeb,0x90,0x9a,0x8c,0xfd,0x07,0x03,0xeb,0x5f,0x23,0xee,0x32,0xdc,0x23,
-  0xea,0x7f,0x34,0xf8,0xdf,0xb9,0x3f,0x11,0xf2,0x88,0x11,0xfe,0xc3,0x81,0xe5,0xef,
-  0x3f,0x9e,0x98,0x1a,0xfc,0xef,0xdc,0xff,0xbf,0xfa,0xf7,0xdf,0x6c,0xfd,0x55,0xea,
-  0xe5,0xd7,0x0b,0x3f,0x84,0xe9,0xc6,0x7f,0x30,0x90,0xfe,0x1f,0xdf,0xff,0xff,0xe5,
-  0xf5,0x97,0x54,0xfe,0x9f,0x58,0x73,0x61,0x5c,0x5f,0xfc,0x57,0xff,0x2a,0x2b,0xff,
-  0x33,0xb3,0x1c,0x8e,0xff,0x87,0xb7,0xff,0xff,0xc2,0x5f,0xd5,0xa5,0x4b,0x97,0x8c,
-  0xff,0xc5,0xe0,0xff,0x9f,0xe7,0xff,0x37,0x3b,0x8f,0xff,0x47,0x1e,0xfe,0x1f,0x79,
-  0xf8,0xbf,0xb1,0xfe,0xff,0x47,0x1e,0xfe,0xaf,0xfe,0xfe,0xbb,0xc9,0x9f,0xff,0x5e,
-  0xf3,0xcd,0xfa,0x90,0xbc,0x9c,0xba,0x3f,0xfc,0x23,0xbc,0x15,0xbb,0x41,0x5b,0x3e,
-  0x54,0xfc,0x1e,0x9c,0xe1,0x7e,0xcd,0x51,0x2b,0x56,0x4a,0x97,0x62,0x55,0x13,0xeb,
-  0x03,0xf4,0x6b,0xbf,0xe7,0xad,0xb2,0x92,0x60,0x83,0xea,0xf3,0x25,0xae,0xf0,0xd2,
-  0xd3,0xd9,0xef,0xc9,0x9d,0x91,0x32,0x4d,0x69,0x77,0x56,0xc1,0x0b,0x1a,0xd5,0xc3,
-  0x84,0x21,0x4b,0x7e,0xf4,0x4e,0x1d,0x41,0x2f,0x53,0x7c,0x81,0x6e,0x78,0x1e,0xdc,
-  0x30,0x0d,0xf1,0xb0,0x9c,0x80,0x12,0x68,0x8a,0xb3,0x5c,0xd8,0xad,0x99,0x15,0x93,
-  0x3e,0x1b,0xe7,0xe7,0x8d,0x29,0xab,0xe1,0x67,0xe4,0xcd,0x27,0x5a,0xf2,0x85,0x7a,
-  0x17,0x6f,0x26,0x47,0xdb,0x42,0xad,0xac,0x47,0xa1,0x8e,0x2d,0x37,0x10,0xe3,0x9a,
-  0x08,0x0c,0x8d,0xe7,0x17,0x0b,0x05,0xad,0x3c,0x95,0x84,0x5e,0xfe,0x1d,0xef,0x67,
-  0x91,0x8a,0xe9,0xeb,0x69,0xfe,0x8f,0xd1,0x30,0xff,0xea,0xf6,0x62,0xaa,0x0f,0x69,
-  0x52,0xa9,0x7d,0x16,0xff,0xe0,0x13,0x7a,0x8a,0x2f,0x45,0x18,0x7d,0x31,0x55,0x88,
-  0x83,0x32,0x08,0xaa,0xc2,0x8e,0xbe,0xaf,0x8f,0x53,0xa9,0x16,0xff,0xa0,0x59,0x1f,
-  0xc0,0xec,0x36,0xfb,0x73,0xaa,0x86,0x24,0x38,0x12,0xf9,0x78,0x5b,0xc1,0x27,0x2f,
-  0xdf,0xe6,0xf0,0xc8,0xa3,0x54,0xed,0xff,0x48,0xf3,0x63,0x90,0xa5,0x37,0x68,0x65,
-  0x46,0xee,0x10,0x3e,0xed,0x33,0x50,0x16,0xcf,0xa3,0xc1,0x0b,0x71,0x97,0x81,0xf6,
-  0x78,0x65,0xca,0xf5,0x99,0x60,0x77,0x5b,0xe2,0xa3,0x6a,0xcc,0xf8,0x4c,0x9b,0x37,
-  0x5b,0x82,0x08,0x78,0x28,0x2c,0x73,0x6d,0x49,0x07,0x68,0x31,0xb1,0x8c,0xd9,0xa5,
-  0xdd,0x40,0xd1,0xf9,0x56,0xff,0xa0,0x19,0x1f,0x3e,0x57,0x53,0xd6,0x2c,0x9e,0xaa,
-  0x3f,0xd1,0x9a,0x9b,0xb4,0xad,0x61,0x0f,0xc2,0x8b,0x6d,0x42,0xbb,0xf2,0xbd,0xc8,
-  0x8c,0x94,0x2b,0x6d,0x0d,0x3b,0x3f,0x3e,0x9f,0xea,0x03,0x34,0x40,0x25,0xe4,0x75,
-  0x28,0x6d,0x70,0x90,0x4f,0xbf,0xd3,0xe1,0x53,0xd6,0xe9,0x9f,0x0d,0x25,0x4a,0xbf,
-  0x52,0xe4,0xb2,0xa7,0x4a,0xb1,0x65,0xf8,0x07,0xaf,0xda,0xaf,0x53,0x91,0xcc,0x5c,
-  0x32,0x4b,0x2f,0x31,0x7f,0x1f,0xae,0xc6,0xbd,0xe1,0x4b,0x05,0x55,0x07,0x1d,0x27,
-  0xa8,0x90,0x02,0x33,0xd7,0x27,0x34,0xee,0xa1,0x72,0x4b,0x3b,0x81,0x8a,0x30,0x78,
-  0x3a,0xc9,0x9a,0x03,0xff,0xc6,0xbc,0x03,0x0f,0xcc,0xe6,0x6b,0xa0,0xe2,0x8d,0xe5,
-  0x0b,0x99,0x87,0xa7,0xfa,0x39,0x5a,0xfc,0x83,0x3d,0x2a,0xc5,0x87,0x17,0x1b,0xf2,
-  0x3f,0x32,0x2a,0xcc,0x53,0xda,0xa3,0x0c,0x15,0x87,0x8c,0x67,0x61,0x66,0x0f,0x45,
-  0x4c,0xc5,0x1f,0x32,0x0b,0x8f,0x04,0xac,0xfe,0xc1,0xcd,0xf8,0xbe,0x45,0xc9,0x1c,
-  0x72,0x0b,0x3e,0xc8,0x4b,0xc3,0x53,0x7f,0x9c,0x7d,0x75,0xc1,0x73,0x5d,0xa5,0xb8,
-  0x02,0x5b,0x67,0xe8,0x4f,0xf2,0x1f,0x24,0x97,0xae,0x09,0x58,0xfd,0x83,0x3f,0x2f,
-  0x68,0x80,0xf8,0x50,0x8e,0x97,0xd9,0xf5,0x9f,0xc1,0x1d,0xb4,0x7a,0x5f,0x85,0xdd,
-  0x36,0x4f,0x9f,0x42,0xf5,0x48,0xcd,0x42,0x1c,0x5e,0xab,0x7f,0x70,0xca,0xf3,0x6c,
-  0x09,0x94,0x3f,0x97,0x1b,0x57,0x6e,0x80,0x77,0x72,0xfc,0x3c,0x2f,0xce,0x66,0xeb,
-  0x17,0x5f,0xbe,0x27,0xe6,0xe8,0x57,0xdc,0xf0,0x11,0x11,0xf5,0x19,0xfe,0x41,0x30,
-  0xb3,0xe1,0x28,0x29,0x29,0xa9,0x0d,0xe8,0xf7,0x81,0xc3,0xac,0x0f,0x59,0xb3,0x80,
-  0x11,0x71,0x54,0x70,0x3c,0xe5,0x3a,0xb4,0xfa,0x07,0x3f,0x88,0x1c,0x8a,0x99,0xdd,
-  0xaf,0x4a,0x38,0xb5,0x8d,0x58,0x1e,0x2b,0xee,0x97,0xa8,0x3f,0xac,0x3d,0x26,0x76,
-  0xa3,0xa1,0xf7,0x8f,0xa9,0xfa,0x00,0x63,0xf3,0xb9,0xf4,0x5d,0xf6,0x94,0x4e,0xfd,
-  0xd1,0xd8,0x2b,0xd0,0xc4,0xe7,0x0c,0x29,0x2d,0xe2,0xe6,0xd5,0x4d,0xba,0xc7,0x70,
-  0xc7,0x52,0xfe,0xc1,0x54,0x7d,0x80,0xb1,0xbf,0x42,0x69,0x26,0x34,0x2d,0x32,0xe3,
-  0xc3,0xfb,0x59,0x53,0xd8,0x15,0xfc,0xdb,0x2d,0xce,0x41,0x68,0xd2,0xe7,0x84,0x83,
-  0xe4,0x4f,0xac,0x97,0x66,0x65,0xd6,0x07,0x00,0x29,0xcb,0xec,0x8f,0x16,0x2c,0x60,
-  0x27,0xa1,0x5e,0xaf,0x35,0xa6,0x15,0x04,0xfa,0xf1,0x4a,0x99,0x1e,0x54,0x9d,0xdd,
-  0xd4,0x28,0x2d,0xb3,0x3e,0xc0,0x1a,0xb3,0xdb,0x95,0x59,0x0d,0xa9,0x9d,0xaa,0x01,
-  0x08,0x9b,0xe3,0xc4,0xcf,0xc0,0x7d,0x66,0xa2,0x9c,0x64,0x06,0x8a,0x73,0xf1,0x93,
-  0x49,0xe3,0xf1,0x51,0xb9,0x9f,0x33,0x2a,0x82,0xed,0xd8,0x26,0x1e,0x43,0x6b,0xd4,
-  0x0c,0x0b,0x6f,0x93,0x2e,0xc0,0x0c,0xdd,0xd1,0x27,0x9e,0x14,0x46,0x5d,0x81,0x9f,
-  0x58,0xe2,0xa3,0x7e,0xe7,0x7e,0x0d,0xfc,0x37,0x2d,0x8f,0x95,0xef,0x81,0x0b,0x05,
-  0x7e,0x3d,0xef,0x37,0xb8,0x91,0x2e,0x80,0x4f,0x57,0xfa,0xc6,0x0a,0x0d,0xe1,0x7c,
-  0x4b,0x7c,0xd4,0xfb,0x2c,0x2a,0x94,0x5d,0x65,0x86,0x45,0x75,0x4a,0x65,0x5c,0x59,
-  0x2f,0x86,0xa1,0x53,0x58,0x00,0x0a,0xcf,0x3f,0xa1,0x0f,0xcb,0x65,0xf8,0x69,0xf0,
-  0x7d,0xc7,0xfd,0x83,0x59,0xdd,0xc5,0x0d,0xc2,0x1d,0x41,0x65,0x72,0x64,0x63,0x7c,
-  0x97,0xcb,0x6e,0xc6,0xc3,0xab,0xfb,0x10,0x65,0x2c,0x8d,0xb9,0xa4,0xd1,0x42,0x49,
-  0x6c,0xeb,0xf8,0xf7,0x6d,0x99,0x92,0x95,0x43,0xf5,0x01,0x94,0x98,0xb3,0x04,0xf6,
-  0x09,0x65,0x35,0xd3,0x54,0xf6,0x1d,0xd8,0xc7,0x7f,0x11,0x9a,0x16,0x63,0xab,0x27,
-  0x93,0xeb,0x70,0x49,0xcc,0xf7,0x4a,0xda,0x3f,0x38,0xb9,0x5f,0x3c,0x44,0xec,0x56,
-  0xec,0xdb,0x4f,0xf0,0x91,0xb8,0x7f,0xd1,0x37,0x62,0xd5,0xd7,0x48,0x23,0xe2,0xf7,
-  0xc3,0x8e,0x82,0xd6,0x12,0x33,0xde,0x5b,0x21,0x47,0xcf,0xd8,0xfc,0x8f,0x84,0x36,
-  0x66,0xba,0x4d,0x63,0xf9,0x1f,0xf0,0x91,0x36,0xaa,0x1f,0x4e,0x6e,0x50,0xc1,0x57,
-  0xe7,0x88,0x35,0xf4,0xc3,0x29,0xca,0x88,0x8f,0x59,0xfd,0x83,0x6a,0x9c,0xf5,0x70,
-  0x8a,0x06,0x57,0x5c,0x70,0x3c,0xd8,0x01,0xcb,0xb9,0xad,0x08,0x86,0x65,0xbf,0x77,
-  0x79,0x63,0x7e,0x5c,0x1a,0x30,0xd7,0x3f,0xdf,0x1a,0x1f,0x75,0x3d,0x7c,0x62,0x46,
-  0x43,0x89,0x0b,0xd5,0x4d,0x51,0x57,0x8b,0xf8,0x1e,0x9b,0x5d,0xf2,0x5c,0x4f,0x59,
-  0x54,0xf9,0x88,0x22,0x16,0x60,0x15,0xfe,0xe4,0x4c,0xfb,0x07,0xdd,0x8d,0x76,0xed,
-  0x81,0x54,0xf6,0xc4,0x32,0x88,0xd5,0x6b,0x6f,0x30,0x5f,0xb6,0x9d,0xef,0x36,0xa8,
-  0x8d,0x96,0x59,0xa8,0xbf,0x24,0x95,0xaf,0x3d,0xee,0x1f,0x84,0xe9,0xec,0x49,0x3e,
-  0xf3,0x90,0xe2,0x73,0xfa,0xa5,0x8d,0x5c,0x30,0x03,0x1d,0xe5,0xbd,0xf0,0x83,0xae,
-  0x94,0x7f,0x2d,0x61,0x32,0xde,0x16,0xff,0x60,0xf4,0x0a,0xed,0x55,0x7e,0x6d,0xd2,
-  0x71,0xef,0x97,0x66,0x48,0xc7,0xea,0xe7,0x25,0x1d,0x0b,0xc5,0x19,0xfa,0x9f,0xeb,
-  0xff,0xa5,0x7f,0xf9,0x9a,0xe2,0x77,0xe0,0xd3,0xd8,0xb5,0x94,0x3a,0x77,0x38,0x1d,
-  0x6f,0x50,0x18,0x27,0x7f,0x47,0xd2,0x91,0x98,0xd4,0x0b,0x67,0xb2,0xfc,0x6f,0x39,
-  0x12,0x5f,0x1f,0x2d,0xfb,0x13,0x37,0x0b,0xb9,0x4c,0xe8,0x0f,0x1b,0x98,0x72,0x11,
-  0x5e,0x8f,0xf8,0xde,0x73,0x0c,0x5f,0x73,0x5f,0xa0,0x27,0x76,0x43,0x32,0x77,0x58,
-  0x71,0xe9,0x43,0x5b,0x6e,0xd0,0x26,0x1d,0x67,0x17,0x43,0x3f,0xe1,0xa6,0xfe,0x4a,
-  0xcb,0x87,0x76,0x61,0x7b,0x78,0xbd,0x5a,0x34,0x80,0xf2,0xb3,0x0a,0x36,0x72,0x6d,
-  0xb5,0xed,0x47,0x2c,0x3f,0xde,0xc1,0x8b,0x40,0xf9,0x1a,0x7b,0x27,0x6a,0x86,0x82,
-  0xd7,0xb1,0x74,0x7f,0x3a,0x1e,0x7b,0x90,0x92,0xfe,0x8e,0x2a,0x75,0x2e,0xb5,0x65,
-  0xbd,0xf6,0x0f,0xeb,0x10,0xde,0xdd,0x1e,0xdd,0x53,0xb7,0x43,0x52,0x42,0xec,0x6d,
-  0x6e,0xba,0x0e,0xeb,0xac,0xfd,0xd1,0x0a,0xba,0x38,0xca,0x9f,0x3e,0x2a,0x8b,0xcd,
-  0xeb,0xf5,0x12,0x95,0x71,0xe7,0x12,0x40,0x79,0xae,0xe1,0x36,0x33,0x3d,0xb0,0xb4,
-  0x9e,0x7d,0x96,0x7a,0x9e,0x4f,0xa0,0xd8,0x2c,0x3f,0xa6,0x0c,0x7d,0x79,0x91,0x14,
-  0xd5,0xca,0x6a,0x64,0xce,0x6a,0xa5,0x17,0x04,0x57,0xef,0xbf,0xee,0xf9,0xca,0xd8,
-  0xfb,0x8a,0x87,0xd3,0xfd,0x61,0xd5,0xc7,0xd9,0x59,0xb3,0x2c,0xd2,0xb4,0xf7,0xe4,
-  0x61,0xad,0x42,0xdf,0xd4,0x28,0xb6,0xdb,0x47,0xf4,0xec,0x98,0xa3,0xb1,0xa1,0x77,
-  0x6c,0xfe,0xe0,0xb8,0x7c,0x13,0xd4,0x4d,0xfa,0x51,0xa3,0x9c,0x2e,0xee,0xcf,0x7e,
-  0x1b,0x6e,0x48,0x3a,0x8c,0xe2,0xeb,0xd4,0x8b,0xf1,0xf2,0xda,0xab,0xcf,0x14,0x9f,
-  0x4f,0x15,0x4a,0x1a,0x12,0xfb,0x2d,0xfe,0xc1,0x39,0x10,0x31,0x9e,0xee,0x52,0xc8,
-  0x2d,0xc5,0xa3,0xae,0xa4,0x12,0xc5,0xfd,0x96,0x24,0x8d,0xdf,0x68,0xd6,0xe7,0x21,
-  0xfd,0xe5,0xb2,0xc6,0x47,0xcd,0x84,0xa8,0x9e,0x2a,0x02,0xc0,0x5b,0x78,0xd9,0xcb,
-  0x4d,0xbb,0x16,0x6b,0xb0,0x2f,0x80,0x57,0xe2,0x91,0xb1,0xf9,0x28,0xaf,0xd2,0xfe,
-  0x41,0x89,0x50,0x6c,0x8f,0xe2,0xbd,0x35,0xa9,0x71,0x6f,0xbc,0x06,0xf1,0x00,0xc4,
-  0x77,0xc8,0x5a,0xbd,0x02,0x30,0x5a,0x18,0x30,0x23,0x3e,0x2a,0xeb,0x5e,0x6a,0xbb,
-  0x6c,0x28,0x1d,0xc5,0x49,0xe9,0xf8,0x32,0x94,0xc6,0x20,0x96,0xe8,0xc3,0xaa,0xef,
-  0xb6,0xa5,0xf1,0xfc,0x41,0xf6,0x7a,0xea,0x7d,0x93,0xd9,0xe3,0xfc,0xd8,0x94,0xf3,
-  0xec,0xcf,0x50,0xd5,0xe7,0xd8,0x55,0x94,0xcc,0x3a,0x2f,0x55,0xda,0x1d,0x46,0xf9,
-  0x10,0x1f,0x84,0x9f,0xc0,0x72,0x43,0x1c,0xd4,0xc7,0xf4,0x7b,0xc3,0x98,0x3c,0xe9,
-  0xca,0xba,0x08,0xef,0xf2,0x2a,0xaf,0xa3,0x87,0xba,0xc1,0xf2,0xf2,0x64,0xde,0x2b,
-  0xe2,0x69,0xde,0x8b,0xf8,0x67,0xd9,0x4b,0xa2,0x17,0xce,0xc3,0xd5,0x61,0xfb,0xf0,
-  0xd7,0x2d,0xfd,0xd1,0x64,0x33,0x3f,0x4e,0x5e,0x4a,0xf5,0x61,0xa2,0x9a,0xab,0x47,
-  0x59,0xc7,0x4e,0xf0,0x26,0x5e,0x16,0x77,0xd7,0x07,0x8a,0xf5,0x7d,0xbe,0xb2,0xb0,
-  0xdc,0xb9,0x2a,0x8d,0x7f,0x7a,0x60,0x23,0x29,0x1d,0x59,0x89,0x33,0x1d,0xb8,0xac,
-  0x1d,0xb4,0x15,0x90,0x7f,0x90,0xf2,0x79,0x99,0x93,0xcb,0x09,0xb9,0x4c,0x9f,0xba,
-  0xd0,0xd2,0x1f,0x2d,0x89,0xfa,0xb4,0x99,0x95,0xd5,0x28,0x51,0xb6,0x0a,0xa2,0x54,
-  0x5d,0x21,0xca,0x3e,0x60,0x4d,0x52,0x59,0x12,0x41,0xd6,0x13,0xf0,0x82,0x51,0x16,
-  0x9a,0xda,0x61,0xa9,0x0f,0x50,0x94,0x35,0x08,0xbf,0x67,0x7e,0xd5,0xe1,0x2a,0x9e,
-  0x15,0xe9,0x31,0x7c,0x46,0xde,0x46,0xf1,0x83,0xc6,0xc3,0x1d,0x95,0x4e,0x7b,0x34,
-  0xff,0x09,0x3e,0xcc,0x2b,0x43,0x65,0x89,0xea,0x34,0xfe,0x49,0x98,0xfe,0xc1,0xb9,
-  0x54,0x04,0x7b,0xbf,0x6c,0x56,0x4b,0xe0,0xc2,0x30,0x5c,0x10,0xab,0xc0,0xa1,0xdb,
-  0xee,0x85,0x61,0x56,0xb5,0x3a,0x77,0xd8,0x82,0x7f,0xfa,0xd4,0x9d,0x04,0x72,0xbc,
-  0x8e,0x36,0xb1,0x84,0x7d,0xd4,0x83,0x40,0xab,0x8d,0xca,0x42,0x4a,0x7e,0xe2,0x27,
-  0x8b,0x60,0x44,0xf7,0xf5,0x4d,0xa8,0x0f,0x60,0x37,0xeb,0x45,0xe0,0xfb,0x96,0x99,
-  0xcf,0x9f,0xc7,0x23,0xb3,0xc2,0x4d,0x42,0xaa,0xbe,0x9c,0xb4,0xef,0x6f,0xcc,0x0c,
-  0x4a,0x4b,0x7c,0x94,0x64,0x2a,0xe5,0x1e,0x3c,0x1d,0x2e,0x1e,0xd5,0x35,0x43,0x29,
-  0x89,0xb8,0x19,0x07,0xcf,0x8a,0xa5,0xf3,0x64,0x19,0x3a,0xf4,0x12,0xca,0x4f,0x49,
-  0xe3,0x9f,0x21,0x75,0x14,0xe4,0x0c,0xdb,0x9c,0xda,0xfd,0x08,0x0c,0x6c,0x2b,0xd8,
-  0x54,0x7d,0x1d,0x2f,0x8d,0x2b,0x4b,0xd9,0x15,0xf0,0x5c,0xe3,0x35,0xe1,0x9c,0x5a,
-  0x4b,0x7c,0x54,0x2d,0xf9,0x07,0xd5,0xca,0x10,0x82,0x9c,0x12,0x9e,0xf4,0x7a,0x0d,
-  0xc7,0x7c,0x8a,0xcf,0x51,0x2b,0xc3,0xcb,0xf7,0x89,0xa0,0x9f,0x86,0xf9,0xba,0x63,
-  0x5e,0xb5,0x05,0xff,0x14,0x98,0xfe,0x65,0x62,0xe3,0xcf,0x48,0x9f,0x53,0x37,0x90,
-  0x5f,0x4f,0x3a,0xa3,0x9e,0xcb,0xc2,0x85,0xfa,0xac,0xfa,0x0c,0x5c,0x52,0xaf,0xd7,
-  0xf3,0x4e,0x5b,0xe2,0xc3,0x09,0xff,0x9c,0x83,0xfb,0xb8,0x43,0x13,0x53,0xd5,0xba,
-  0x72,0xfb,0xc4,0x84,0x74,0x38,0xe0,0x7f,0xc3,0x61,0x88,0x0b,0x71,0xff,0x38,0x61,
-  0xf9,0x9e,0xc7,0x0e,0x8e,0xfb,0x47,0x7a,0x65,0x33,0xde,0x80,0x9b,0x65,0xf6,0xd7,
-  0xa2,0xf4,0x70,0x84,0x58,0x21,0xac,0x93,0xf1,0x8a,0xe1,0x9c,0x6e,0xdf,0x8f,0x00,
-  0xb5,0x39,0xc4,0x3e,0x63,0xe1,0xf1,0x37,0x30,0xe3,0xa3,0xb4,0xe6,0x61,0xf6,0x0d,
-  0x78,0xc2,0xf8,0x01,0x95,0x6d,0x59,0x07,0xeb,0x13,0xa5,0x83,0xcd,0x2b,0xb2,0xdf,
-  0x90,0x9e,0x35,0x56,0x6a,0x4a,0x2d,0x4b,0xfb,0x07,0x97,0x49,0x66,0x7c,0x82,0x57,
-  0x99,0x3f,0x67,0x71,0x60,0x07,0x2f,0x33,0x6c,0xdb,0xb2,0x67,0xe9,0x0d,0xf5,0x9e,
-  0xa4,0x72,0x15,0x7b,0x55,0xde,0x65,0x68,0xf3,0xa7,0x49,0x81,0x74,0x7f,0xc6,0x54,
-  0x7c,0x54,0x55,0x27,0xa2,0xfd,0x1f,0xc3,0x07,0x88,0x76,0x9a,0x3e,0x16,0x3b,0x61,
-  0x43,0xdc,0x1f,0x5d,0x3e,0xa8,0x9c,0x35,0x2e,0x42,0x79,0x9b,0xe3,0x29,0x8b,0x3e,
-  0x1a,0x8d,0x8f,0x62,0x8e,0x06,0x31,0xae,0xb5,0xe0,0x36,0xfe,0x2a,0xa7,0xb6,0x68,
-  0x88,0x07,0x1c,0x11,0x41,0x93,0x86,0xed,0x7e,0x58,0x5a,0x9f,0xd1,0x1f,0x64,0x3c,
-  0xfe,0x67,0xb5,0x7e,0x48,0xef,0xd0,0xed,0x2d,0xc5,0xdf,0x8d,0x1f,0x82,0x19,0xa1,
-  0x49,0x57,0x8a,0x12,0x98,0x85,0x02,0x12,0xdf,0xb6,0xe2,0x9f,0xd5,0x14,0x1f,0x55,
-  0xa7,0xc4,0x5c,0xd9,0xd2,0x53,0x9a,0x4b,0xcf,0xdd,0x1e,0xb9,0x86,0x3f,0xa3,0x97,
-  0x0d,0x91,0x7f,0x2a,0xa7,0x49,0xa7,0x0a,0x90,0x81,0xa4,0x30,0x26,0x7f,0x16,0x66,
-  0xe1,0xa6,0x12,0xca,0xee,0xc2,0x5f,0x57,0x6b,0x66,0x19,0x8a,0x2d,0x6c,0x35,0x3c,
-  0xcc,0xcb,0x70,0x1a,0x55,0x18,0x28,0xa4,0xc2,0xda,0x16,0xfc,0xa3,0x15,0x98,0x4a,
-  0x9f,0x8a,0x00,0x64,0xc1,0x53,0x35,0x5a,0x28,0xc7,0x2c,0x0b,0x49,0x62,0x67,0x7e,
-  0x1e,0x25,0xca,0xc5,0x17,0x65,0xe2,0x9f,0xab,0x10,0x5d,0xa4,0x40,0x1d,0xd5,0x87,
-  0xec,0x40,0x19,0x21,0x86,0x47,0x1b,0x55,0x88,0xd4,0xe8,0xdb,0xcc,0x4f,0x4f,0xe3,
-  0x9f,0x54,0x7c,0x14,0xee,0x9f,0x3e,0x1f,0xc5,0x7b,0xfb,0xf5,0xcd,0xc7,0xc4,0xcf,
-  0xe1,0xf7,0x66,0x5a,0x9c,0xf8,0xb9,0xfd,0x82,0x5e,0xb5,0x28,0x03,0xff,0x2c,0x9c,
-  0x7c,0x06,0xde,0xc4,0xf9,0xb9,0x7d,0xc2,0xb5,0xf0,0x1a,0xf8,0x6a,0x1c,0x7d,0xec,
-  0x8c,0x31,0x92,0x65,0x66,0xcc,0x95,0x64,0xbf,0x66,0x16,0xca,0x16,0xef,0xb4,0xf8,
-  0x07,0xa9,0x3a,0x41,0x99,0xac,0x70,0x9b,0x06,0xc7,0xa9,0x3f,0x48,0x2b,0x4a,0xd7,
-  0x85,0x14,0xe1,0xd6,0x18,0x28,0xaa,0x89,0xba,0x5d,0x54,0x1f,0x29,0xdb,0x82,0x57,
-  0x1b,0x61,0x0b,0x78,0x02,0xf8,0xbe,0x8d,0xf0,0x94,0x5c,0x1b,0x54,0x0a,0x22,0x2f,
-  0x37,0xce,0x43,0xd8,0xb3,0xd4,0xb9,0xce,0x4c,0x0c,0x44,0x7c,0xe2,0xba,0x55,0x18,
-  0x9b,0xdf,0x52,0x90,0xaa,0x8f,0xa4,0xc4,0xbe,0xdb,0x96,0xb5,0x4f,0x9b,0xa3,0x37,
-  0x6f,0x65,0x27,0xb3,0xf6,0x89,0x78,0x7e,0xb7,0x39,0x67,0xea,0xb8,0xfe,0x35,0x39,
-  0xdb,0x58,0x66,0x7c,0x14,0x79,0x73,0x1c,0x0f,0x88,0x92,0xf6,0x54,0xe3,0x1c,0xfd,
-  0xd5,0x6d,0xf9,0x54,0xf8,0xb1,0x4c,0xff,0xbb,0x16,0xe5,0x1a,0xe9,0x90,0xd3,0x47,
-  0x08,0xb0,0x36,0x9d,0x3f,0xa2,0xb6,0x49,0x08,0x72,0xea,0x1c,0x2d,0xf9,0xab,0xd5,
-  0x37,0xeb,0x9f,0xd3,0x1d,0x2d,0x0d,0xa9,0x0c,0xc1,0x3c,0x67,0xf5,0x2b,0x70,0x9a,
-  0x1f,0xa0,0xf7,0x3d,0x6b,0xc1,0xcf,0xe6,0x7e,0xbb,0x82,0x60,0x36,0xef,0x89,0x3d,
-  0x27,0x28,0x8d,0x14,0x1f,0x6e,0xf8,0xb5,0xe5,0x51,0xca,0x8f,0x4b,0x55,0x8c,0xb4,
-  0x59,0xfc,0x83,0x32,0x82,0x9c,0xb9,0xd4,0x44,0xed,0x2c,0x64,0x83,0x8f,0x2b,0x1f,
-  0xd8,0x16,0xd6,0x55,0x34,0x56,0x70,0x25,0xc9,0xdc,0xb0,0x89,0xbb,0xf8,0x52,0x8d,
-  0xa5,0x19,0x14,0x59,0x32,0xe3,0xa3,0x42,0x8a,0x17,0x8e,0xc8,0x0f,0x70,0x99,0x02,
-  0x35,0xb3,0x53,0x6a,0x7a,0xb2,0x6b,0x19,0xab,0x37,0x4a,0x0c,0x91,0xe2,0x55,0xc6,
-  0xbe,0x2f,0xa8,0xe4,0x56,0x2b,0xd5,0xa7,0xd5,0x05,0x8e,0x6b,0x9b,0x48,0xfb,0xd7,
-  0xe2,0xf9,0xdd,0x6b,0x2b,0x3d,0xa8,0xe8,0x88,0xa0,0xd6,0x53,0xbd,0xa0,0x21,0x26,
-  0xa7,0xfd,0x41,0x2d,0xdf,0xca,0xf9,0xb3,0x19,0x1f,0x95,0x7d,0x96,0xfd,0x8e,0x5f,
-  0x3f,0xe0,0x38,0x2e,0x5e,0x01,0xff,0x14,0xbd,0x11,0x11,0x8b,0xf2,0x2d,0x78,0x8d,
-  0x3f,0x9b,0xdc,0xbc,0x46,0xb4,0x5d,0x1e,0x1f,0x95,0x40,0xd0,0xf8,0x3e,0xf8,0x92,
-  0x66,0x7c,0xef,0x39,0xa9,0x82,0xe3,0x60,0x27,0x5c,0x12,0x2a,0xba,0x50,0x34,0x59,
-  0xe2,0xa3,0x0a,0x0e,0xe8,0xef,0x92,0xf5,0x3a,0x82,0x46,0x0a,0xea,0xaf,0xf7,0xf0,
-  0xfe,0x0b,0xe0,0xf5,0xad,0xe5,0x9a,0x78,0x5c,0xbc,0x08,0xe7,0xa9,0x3e,0xe4,0x1a,
-  0x71,0xc5,0xf8,0xfa,0x3f,0x4d,0xf1,0x4e,0x0c,0x1f,0x7b,0x4d,0xf5,0x76,0xbe,0x56,
-  0xbd,0x96,0xb2,0xe1,0x0a,0x61,0xfd,0xe4,0xa2,0x2c,0x25,0x3b,0xf0,0xb6,0xbc,0x7f,
-  0xba,0x89,0xdf,0xd2,0xf1,0x51,0x00,0xdb,0x55,0x7a,0x5f,0xe5,0x87,0x91,0xe1,0x79,
-  0xf7,0x43,0x91,0x91,0x13,0x62,0x05,0xb0,0x31,0xb8,0x92,0xca,0x02,0xbc,0x1d,0xde,
-  0x86,0x57,0xa6,0x0d,0xb1,0x9a,0x09,0xf1,0x51,0x65,0x7d,0x28,0xa6,0x0e,0xb3,0x08,
-  0xae,0x1e,0x2a,0x02,0x9b,0xce,0x79,0x1c,0x0d,0xdb,0xc8,0xeb,0x28,0xcf,0x29,0x62,
-  0x21,0x60,0x89,0x8f,0x9a,0x32,0x28,0x9d,0xa3,0xb4,0x82,0x4e,0xb1,0x17,0x0e,0x26,
-  0xcb,0xa9,0xf1,0x6b,0x89,0xad,0x87,0xfb,0x5e,0x41,0x3c,0xfc,0x31,0x02,0x6f,0xb3,
-  0xe3,0xd2,0x2d,0xe9,0xf8,0x28,0xc1,0x5c,0x9f,0xdb,0x1c,0x09,0x78,0x4a,0xfd,0x3d,
-  0x2d,0xd4,0xe3,0x0d,0xa7,0x4a,0x86,0x69,0xd0,0x48,0x89,0x60,0x66,0xbf,0x4e,0xd4,
-  0x5f,0x63,0xf2,0xa7,0x48,0x35,0xe5,0x79,0xc0,0x3e,0xd4,0xf0,0x3c,0x7f,0x5d,0x2e,
-  0xa7,0x32,0x9b,0x12,0xbc,0xa6,0xcd,0xad,0x33,0x0b,0xff,0x5e,0x90,0xa9,0x42,0x32,
-  0x8b,0x8f,0xe3,0x9f,0x1d,0xa9,0xf8,0xa8,0xb0,0x3b,0xc1,0x4e,0xc1,0xc6,0x46,0xd4,
-  0xbf,0xdb,0x6d,0xd7,0x48,0x4d,0x3d,0xb3,0x34,0x25,0x8a,0x86,0x55,0xa7,0x41,0xa1,
-  0x53,0xb3,0x92,0x19,0xfe,0x41,0x9c,0xbf,0x0a,0x95,0xda,0x49,0xea,0x1e,0x6b,0x28,
-  0x2d,0x91,0x27,0xb4,0x0d,0x54,0xaf,0x95,0xea,0x03,0xe0,0x7c,0xea,0x30,0x12,0x4f,
-  0xe3,0x1f,0xd5,0x8c,0x8f,0x12,0xa2,0xbe,0x40,0x3f,0x44,0xa9,0x31,0x31,0x30,0xce,
-  0x22,0x50,0x22,0x29,0x12,0xe2,0xc3,0xc4,0x28,0xfe,0x19,0x5f,0x7d,0xf2,0x0f,0x52,
-  0xbd,0x2c,0x7b,0x47,0x43,0xdc,0xec,0x36,0x4e,0x85,0x32,0xa8,0x2d,0x72,0x88,0xde,
-  0x57,0x1e,0x49,0x6d,0x95,0xf8,0x78,0x7c,0xd4,0x8e,0x29,0x26,0x89,0x01,0x78,0xf1,
-  0x38,0x7c,0x9e,0xf2,0x06,0xd6,0x8d,0x7a,0x0c,0xab,0xcf,0x43,0xaa,0x3e,0x52,0xf5,
-  0xc0,0x3a,0x2b,0xfe,0xb9,0x44,0xdb,0xec,0xb8,0x78,0xaf,0x71,0x84,0x5f,0x67,0x6c,
-  0xff,0x2c,0x7f,0x67,0xf0,0x10,0x75,0x8c,0xed,0x11,0x2b,0x93,0xaf,0x4f,0xac,0x0f,
-  0x69,0x14,0x7e,0x02,0x7f,0xac,0x43,0x58,0xb8,0x35,0xf2,0x2f,0xd1,0x66,0x10,0x8f,
-  0x5f,0xf5,0xa7,0x0d,0xbf,0xa2,0x8a,0xbe,0x71,0x39,0xea,0xfa,0x15,0x7f,0x5f,0x9b,
-  0x50,0x1f,0x12,0xf1,0x8f,0x9c,0xb0,0xe3,0x47,0x57,0x6d,0xf6,0x50,0x33,0x94,0xbc,
-  0x22,0x7b,0x9d,0xf7,0x4b,0xf5,0x2e,0xb3,0xc2,0x89,0x1d,0x1a,0xe4,0x38,0x55,0x84,
-  0x3e,0x38,0xbe,0xdf,0x0c,0x69,0xa7,0xfa,0x14,0x75,0xd3,0xa0,0xfe,0x20,0xcd,0x86,
-  0xab,0xeb,0xe9,0x84,0x73,0x23,0x4a,0xa4,0x55,0x71,0x79,0x47,0x64,0x23,0x0a,0x6a,
-  0x13,0x6a,0xa6,0xf3,0xf5,0x16,0x4d,0x1e,0x84,0x91,0x28,0x2e,0xcb,0x76,0xf1,0x0e,
-  0x38,0x52,0x4f,0x8d,0x74,0xa9,0x31,0x07,0x78,0xef,0x92,0x64,0xca,0x68,0x4b,0x45,
-  0xec,0xf4,0xd5,0x8c,0xc7,0x47,0x09,0xfb,0xe1,0x64,0xcc,0x8c,0x0f,0x47,0x74,0x2d,
-  0x55,0x19,0x39,0x09,0x84,0x91,0x17,0x85,0x2a,0x63,0x73,0x1f,0xee,0x87,0x4f,0x47,
-  0xf1,0xa1,0x35,0x3e,0x0a,0x17,0xd9,0x47,0xdb,0xc6,0x0e,0x47,0x74,0xb3,0x11,0xbc,
-  0x87,0x1d,0x82,0x8a,0xb0,0x9d,0xbf,0x64,0x86,0x06,0x99,0x11,0x41,0xe9,0xfa,0xd8,
-  0x59,0x1e,0xd8,0x17,0xc7,0xe7,0x8f,0x89,0xf7,0xe2,0xb2,0x14,0x53,0x7c,0xf8,0x7e,
-  0xd8,0xc0,0x5c,0x67,0xe4,0xfd,0xec,0x3c,0xf5,0x4f,0xc9,0xac,0x0f,0xd9,0x83,0xf2,
-  0x67,0x17,0x85,0xf1,0xc4,0xb2,0xa9,0xfe,0x86,0xcb,0x68,0xa2,0xf8,0x4c,0xea,0xe0,
-  0xb0,0xe4,0xda,0x00,0xd9,0x0b,0x13,0xea,0x43,0x0e,0xa9,0xdf,0x82,0x5f,0xc5,0xd0,
-  0x7e,0x79,0x2b,0xfb,0x5b,0xc6,0x43,0x3b,0x8a,0x06,0x29,0x3e,0x1c,0xd6,0xc6,0x4e,
-  0x52,0xbd,0xa0,0x77,0xf8,0xde,0x88,0x30,0xb1,0x3e,0xe4,0x32,0x7d,0xb7,0xea,0x1d,
-  0x70,0x54,0x88,0x79,0xfc,0xf7,0xf5,0xbe,0x13,0xb9,0xde,0xfc,0x3c,0xe8,0xda,0xe1,
-  0xbd,0xad,0xcc,0x27,0x1e,0x95,0xfe,0x04,0x31,0xea,0x98,0x66,0xc9,0x8f,0x9b,0xb2,
-  0x1f,0xfe,0x4c,0x45,0x20,0xef,0x62,0x1f,0x87,0xe6,0x20,0xde,0xa4,0xfa,0x6c,0xd2,
-  0x85,0xa2,0x8a,0x97,0x1d,0x89,0xfc,0x8f,0xb5,0x51,0xfc,0x9c,0xc6,0x3f,0xb2,0x89,
-  0x7f,0xcc,0xf5,0x19,0xa4,0xb2,0xd8,0x3d,0x5f,0x7d,0xa1,0xd8,0x43,0x11,0x41,0xba,
-  0x63,0x47,0xc3,0xa7,0x63,0xeb,0x7f,0x38,0x2d,0xff,0x0b,0xcd,0xf8,0x28,0x43,0x09,
-  0x05,0xde,0x96,0xd6,0x4b,0x73,0xdf,0x92,0x87,0x0e,0x5f,0x15,0x7a,0x8e,0xae,0xdc,
-  0xca,0xde,0x8e,0x8e,0x56,0xdc,0xfd,0x2c,0xdd,0x6f,0x11,0xf1,0xcf,0xee,0xa8,0x19,
-  0xfd,0xfe,0x68,0x80,0x0a,0x05,0xf4,0xdc,0x93,0xfd,0x2d,0xfe,0xab,0x75,0x54,0x06,
-  0xc1,0x79,0xd4,0xf9,0x50,0xaa,0x3e,0x40,0x3a,0x3f,0xa5,0x56,0xda,0xa8,0xee,0x4e,
-  0x65,0xf7,0xf4,0xca,0x11,0x33,0xf1,0x79,0xd5,0x1d,0xd2,0xf3,0x49,0xbc,0xe2,0x73,
-  0xf5,0x22,0xd4,0x74,0xa7,0xea,0x43,0x8e,0xcd,0x1f,0x98,0x32,0x00,0x17,0x43,0x1d,
-  0x54,0x1f,0xa0,0x1d,0x8e,0xc2,0x0c,0x2e,0xc5,0x51,0x5b,0x5d,0x0c,0xee,0x6e,0xa2,
-  0xfa,0x90,0xf0,0x56,0xaa,0x63,0x9a,0x25,0x3f,0x4e,0x18,0x8d,0x0f,0x8f,0x98,0x61,
-  0x51,0x95,0x6a,0x59,0xaa,0x5e,0xb4,0x9f,0xca,0x22,0x25,0xb3,0x07,0x2e,0xef,0x0f,
-  0xd2,0x96,0x5a,0x0d,0x2a,0x1b,0x68,0x76,0x33,0xa4,0x30,0xe0,0x43,0x70,0x77,0x70,
-  0xb9,0x19,0x18,0x0c,0x7f,0xa1,0x3e,0xe4,0x3e,0x68,0xa5,0xb6,0x5c,0x25,0x72,0x13,
-  0x73,0x2d,0x92,0x11,0xd8,0x50,0x59,0xe6,0x50,0x0e,0xf1,0x39,0xf4,0x13,0x6e,0xad,
-  0x74,0x7e,0x1c,0xe2,0x1f,0xea,0x47,0xac,0x9b,0x65,0x66,0xb7,0x10,0xfe,0x89,0x39,
-  0xfb,0xa5,0x26,0x81,0x32,0xe6,0x58,0xbf,0xb0,0x8b,0x4d,0xa8,0x0f,0x69,0xe2,0x1f,
-  0x3d,0x4e,0x45,0xb0,0xa9,0x3e,0x92,0x16,0xea,0x2c,0xc8,0x7e,0xd9,0x84,0x01,0x39,
-  0x2a,0x7b,0x19,0x7f,0x32,0xf9,0x1f,0x23,0x8d,0x7f,0x46,0xf3,0xe3,0x1c,0x5c,0xa1,
-  0x6e,0xb0,0x1d,0x7c,0x23,0xcf,0x27,0xda,0xc7,0xc5,0xcd,0x40,0xa9,0x21,0x66,0xd6,
-  0x87,0x7c,0x27,0x9d,0x1f,0x47,0xf1,0x4e,0x14,0x16,0xd5,0x27,0x9e,0x24,0xfe,0x87,
-  0x88,0xa0,0xef,0xc0,0xe7,0x42,0x95,0x9e,0x13,0xc3,0x2b,0x6f,0xa6,0xa0,0xe0,0x13,
-  0x19,0xfd,0x61,0x2f,0xa4,0xc2,0xc6,0x4a,0xa4,0x73,0x05,0x37,0xdc,0x9c,0xbb,0xb5,
-  0xa1,0xc4,0x18,0x59,0x74,0x83,0xb9,0x50,0xfa,0xa1,0x02,0xf3,0x27,0x4b,0x7e,0x5c,
-  0x61,0x12,0x12,0xc3,0x2e,0xb3,0x2c,0xb6,0xd6,0x09,0x2e,0x5b,0x4e,0x64,0x52,0xb2,
-  0x9b,0x22,0xc6,0x65,0xee,0x3c,0xa1,0x73,0xed,0x39,0x50,0xac,0xf5,0x91,0x10,0xff,
-  0x48,0xf3,0x04,0x02,0x39,0x5b,0xa5,0xe0,0x3e,0xd0,0x96,0x29,0xce,0x88,0xd4,0xb8,
-  0xab,0x84,0xea,0x03,0x04,0xba,0x79,0xaa,0x42,0x02,0x4b,0xf7,0x87,0x6d,0xa1,0xf8,
-  0x7c,0x84,0x9d,0xcd,0x5b,0xa8,0x2c,0x76,0x08,0x57,0x4f,0x5d,0xd2,0x26,0x5d,0x2f,
-  0x95,0xe9,0xee,0x58,0x80,0xf8,0x37,0x93,0x4f,0xfb,0x20,0x33,0x3f,0x2e,0x48,0x20,
-  0xa7,0x81,0xd8,0xaa,0x0a,0xfd,0x75,0x82,0x9d,0x23,0x30,0xa3,0xc6,0xde,0x22,0x52,
-  0x69,0x08,0xf3,0xf9,0xd3,0xf9,0x71,0x3d,0x66,0x7e,0x1c,0xf5,0x47,0xa3,0x6a,0x36,
-  0xd2,0x01,0xfd,0xab,0x66,0x7d,0x6c,0x89,0x1a,0xc5,0x16,0xf7,0xcb,0xa3,0x50,0xf9,
-  0xac,0x25,0xbe,0x8e,0x76,0x17,0x85,0xa5,0x39,0x34,0x59,0xd6,0x7d,0xa2,0x19,0x1f,
-  0x7e,0x5c,0xf0,0xa3,0x0d,0x21,0x1a,0x90,0x6a,0x14,0x9b,0x91,0x1f,0xd7,0x0e,0x14,
-  0x04,0x8e,0xf8,0xc7,0x2d,0x45,0xa0,0x38,0xea,0x8e,0xdb,0x28,0xac,0xf4,0xfa,0xad,
-  0x72,0x7b,0x64,0x40,0xdd,0x00,0xad,0x54,0x31,0xdb,0x92,0x1f,0x87,0xf2,0xe7,0x85,
-  0x54,0x11,0xc8,0x65,0x14,0x2f,0x17,0x93,0xbd,0xdf,0xa0,0xc6,0x94,0x9e,0x15,0xb2,
-  0xd7,0xd5,0xcb,0x9a,0x21,0x9c,0xaa,0x0f,0x39,0xae,0xef,0x10,0xff,0x3c,0xab,0xe3,
-  0x69,0xfd,0x8c,0x7d,0x0b,0xfe,0x15,0xb4,0x78,0xb4,0x8e,0xda,0x12,0x69,0x73,0x0d,
-  0xb9,0x2e,0xfb,0x6d,0x3e,0xa9,0x68,0x25,0x9d,0xdf,0x81,0xf1,0xf9,0xd1,0xe8,0xb7,
-  0xe0,0xcf,0x94,0x0d,0x77,0x6f,0xe4,0xbe,0xee,0x57,0x63,0x5b,0xe2,0xf6,0xe1,0x86,
-  0xfb,0x74,0x44,0x44,0xe1,0xdc,0x1f,0x8b,0xaf,0x6b,0xaf,0xee,0xba,0x8b,0xf0,0xcf,
-  0x47,0xae,0xb1,0xf9,0x88,0x7f,0xd4,0x11,0xe2,0x37,0xbc,0x5f,0xaa,0x34,0x5e,0xf2,
-  0xa1,0xbd,0xbf,0x57,0xfc,0x58,0x3f,0x12,0x5a,0x48,0x69,0x50,0x83,0xa3,0x7c,0xfb,
-  0x97,0x2c,0xf9,0x71,0xb8,0x84,0x17,0x0c,0x53,0x49,0xdd,0x07,0xaf,0xf3,0x8a,0xfe,
-  0xcd,0xc3,0xc2,0x01,0x38,0x62,0x54,0x51,0xc7,0x34,0x54,0x6d,0x51,0xf3,0xa7,0x74,
-  0x7e,0xdc,0xd3,0x85,0xdb,0xf5,0xbd,0x54,0x04,0x12,0xc5,0x6c,0xe3,0xfa,0x84,0x76,
-  0x4a,0xa9,0x73,0xbe,0xc3,0x9f,0x6c,0x29,0x1d,0x56,0x42,0xac,0x57,0xfa,0x54,0x4b,
-  0xd5,0x87,0xe4,0xe3,0xf7,0x87,0xed,0xa1,0x67,0xa9,0xfa,0xd3,0x69,0x36,0x5d,0xda,
-  0x5c,0x32,0xbb,0x1e,0x7f,0xed,0xd5,0xd7,0x4f,0x2e,0x8d,0x36,0x53,0xc7,0xd8,0xbd,
-  0x70,0x82,0xe6,0x5b,0xf2,0xe3,0xd0,0xfe,0x7a,0xc1,0x04,0x39,0x36,0x0f,0x6b,0x48,
-  0x6a,0x5c,0xf4,0x06,0x88,0x46,0xf3,0x70,0xa5,0x80,0x0d,0x9a,0x11,0xc2,0x13,0xea,
-  0x43,0x0e,0xc2,0x0b,0x21,0x04,0x39,0x3f,0xa2,0x7a,0x7d,0x41,0x84,0xa9,0x43,0xc5,
-  0xe7,0xe1,0x2b,0x07,0xfd,0x49,0x65,0xdb,0x03,0xe7,0x85,0x4b,0xa3,0xf5,0x75,0xd3,
-  0xf9,0xe9,0x88,0x7f,0x4c,0xa5,0xdf,0x21,0x9a,0x40,0x88,0x96,0xe5,0xbc,0x7c,0x4e,
-  0xbb,0x2f,0xe9,0x78,0x22,0xd5,0x3f,0x2e,0x55,0x1f,0x72,0xec,0xf9,0x09,0xff,0x7c,
-  0x0a,0xbb,0x49,0x68,0xdf,0x01,0xef,0x52,0x21,0xdc,0x3a,0xea,0x7f,0x21,0x5d,0xc7,
-  0xf1,0x84,0x9e,0x97,0x3f,0x1d,0xab,0x0f,0x39,0xf6,0xfc,0x88,0x7f,0xe4,0x7d,0x92,
-  0x59,0x84,0x99,0xfc,0x17,0x0b,0x3b,0xdc,0x89,0x00,0x55,0x6c,0xfe,0x7e,0x42,0x79,
-  0xca,0xe4,0x73,0xe6,0x5c,0x56,0x1f,0x52,0xde,0x67,0x76,0xbf,0xca,0xf6,0xc0,0xcf,
-  0xa0,0x4c,0x46,0x31,0x65,0x77,0x3e,0x43,0x65,0xa2,0x63,0x6c,0x50,0x1a,0xd5,0xd7,
-  0x13,0xeb,0x43,0x6a,0xbf,0xfe,0xd9,0x9e,0x5b,0x51,0xfb,0x6b,0x6e,0x7b,0x8b,0x37,
-  0x7b,0x23,0x7f,0x46,0x73,0xf7,0x34,0xa7,0xf8,0x9f,0xf6,0x09,0xfc,0x4f,0xee,0x1d,
-  0xf0,0xb9,0xe4,0xeb,0x73,0x9c,0x51,0x6e,0x84,0x77,0x6f,0xf5,0xb3,0xe9,0x43,0x62,
-  0x25,0xff,0x14,0x16,0x44,0x97,0xc7,0xc4,0x0b,0xf8,0x6a,0xa9,0xfa,0x90,0xe3,0xf6,
-  0x57,0xfc,0x61,0x5a,0xb4,0x17,0x8d,0xcd,0x75,0xe5,0xe7,0xdb,0xfe,0xa4,0x7f,0x59,
-  0xde,0x3c,0xa4,0x0c,0x86,0xdf,0xbd,0xd2,0xbf,0x05,0x81,0xd0,0xf9,0xf8,0x25,0x6a,
-  0x74,0x9e,0x91,0x1f,0x67,0xe2,0x9f,0xab,0x57,0xdb,0x11,0x9f,0x6a,0xa8,0x1f,0x4e,
-  0xe0,0x6e,0xb9,0x6b,0xe3,0x79,0xa9,0x4a,0xce,0x3d,0xd8,0x30,0xd4,0x7d,0x9e,0x57,
-  0x2d,0x5d,0x16,0xac,0xce,0xe8,0x0f,0x4b,0x24,0x8c,0x8e,0xf8,0xb0,0x48,0x8d,0x86,
-  0x7d,0xc9,0xbc,0x4e,0xe7,0x09,0xde,0x59,0x5b,0x56,0x22,0x6f,0x64,0x27,0x62,0x8f,
-  0xf0,0xb2,0x3a,0xb9,0x65,0x42,0x7d,0x80,0xdd,0x6a,0x99,0x2e,0xb3,0x88,0x1c,0x8f,
-  0x16,0x9a,0x5f,0x7f,0x91,0xb0,0x4b,0xf5,0x00,0xca,0x5b,0x43,0x4f,0x34,0x7a,0xb8,
-  0x0c,0x2c,0xb3,0x3e,0xc0,0x0b,0xd4,0xcd,0x73,0x72,0x44,0xe2,0x1b,0x5c,0x54,0x16,
-  0x89,0x7d,0x64,0xef,0x5c,0x57,0xa6,0x01,0x65,0x2c,0xa2,0xc5,0x1d,0x91,0xb7,0x33,
-  0x6b,0x7f,0x34,0x22,0x09,0x2b,0x75,0x7b,0x8f,0xb2,0x40,0xeb,0x95,0xcd,0xd5,0xf8,
-  0x7b,0x18,0xde,0xe0,0xf7,0xe6,0x6e,0xcc,0x7f,0xdf,0xdc,0x2a,0xf6,0x68,0x46,0x7d,
-  0x48,0x13,0x0f,0x77,0x51,0xf7,0x64,0xc2,0x23,0x46,0xde,0x50,0x71,0x12,0xce,0xda,
-  0xa8,0x3e,0x24,0xbe,0xe6,0x8b,0xd9,0x95,0xfd,0x13,0xfa,0xa3,0x99,0xdb,0x4c,0x5f,
-  0xd6,0x58,0x1c,0xe7,0x87,0xc3,0xe6,0xfd,0x4f,0xb8,0x7a,0x6a,0xd8,0x31,0x7b,0xa3,
-  0x32,0x93,0xfc,0x23,0x43,0xf6,0xc6,0x09,0xf5,0x91,0x5e,0xa4,0x6e,0x9e,0x09,0x56,
-  0xc2,0xdf,0x30,0xbf,0x3e,0xbc,0xa7,0x45,0x0d,0x2d,0x8c,0x78,0x6f,0x26,0xd8,0x20,
-  0xaf,0x4b,0xde,0x91,0xd9,0x1f,0x8d,0xf0,0x30,0x15,0xc5,0xaa,0x87,0xc8,0xad,0xe6,
-  0xfa,0x1c,0x81,0xad,0x6a,0x3c,0x69,0xd3,0x98,0x5d,0xe3,0x60,0x37,0x64,0xbb,0xcb,
-  0xda,0x1f,0x96,0xf8,0x9f,0x1f,0x50,0x52,0xd8,0x0c,0x7d,0x9b,0x59,0x0d,0xdb,0xf9,
-  0x8e,0xfe,0xd3,0xad,0x45,0x9a,0x6d,0x0d,0x9b,0xaa,0xad,0x6b,0x2c,0xed,0x97,0x07,
-  0x58,0x66,0x7f,0xd8,0x3f,0xe1,0x22,0x78,0x5a,0xc4,0x76,0xfd,0xb0,0xea,0x25,0xb4,
-  0xf3,0x32,0xfc,0x1a,0xbc,0x6a,0xd9,0x14,0xb1,0x04,0x4e,0xc0,0x74,0xc3,0x0e,0xe2,
-  0xc4,0xfe,0xb0,0x7e,0xc2,0x87,0xe7,0xf5,0x54,0x35,0x6c,0x84,0xcd,0x1f,0xb3,0xb9,
-  0x90,0xbb,0x45,0x3c,0x4f,0xfd,0xf5,0xba,0xa8,0x3f,0x48,0x46,0x7d,0x00,0x5a,0x1f,
-  0x34,0xca,0xdc,0x94,0x36,0x45,0xeb,0xf3,0x05,0xa3,0x46,0x84,0x93,0xfa,0x10,0x36,
-  0x8f,0x84,0xfd,0xc6,0xb2,0x68,0x75,0x66,0x7d,0xa4,0x14,0x69,0x6c,0x9b,0xce,0x1a,
-  0x53,0x68,0xe7,0x8c,0x59,0x56,0x8e,0x02,0x2f,0xd5,0xbd,0xb2,0xc7,0x08,0x4e,0xec,
-  0x0f,0x9b,0xe2,0xbb,0xd8,0x06,0x58,0x9f,0x02,0x42,0xbf,0xd3,0xea,0x11,0xf6,0x2c,
-  0x5d,0xc1,0x7e,0x07,0x7b,0x63,0xa5,0x49,0xb9,0xd7,0x66,0xed,0x0f,0x4b,0xf1,0xe1,
-  0x65,0xfd,0xb8,0x8c,0x3f,0x0f,0x98,0xfd,0x0e,0xa8,0xde,0x5d,0x13,0xc4,0xeb,0x94,
-  0xe9,0xec,0xa4,0xbe,0xbb,0xc7,0x63,0xb8,0xbd,0x19,0xf5,0x91,0x88,0xff,0x41,0x31,
-  0xf2,0x7d,0xb1,0x13,0x8e,0x1a,0x26,0xda,0x39,0x07,0x47,0x63,0xe5,0xed,0x88,0x88,
-  0x46,0xe0,0x6c,0xb2,0x8a,0xdb,0x07,0x32,0xfa,0xc3,0xa6,0xa2,0xc1,0x97,0x73,0x16,
-  0xe6,0xd4,0x9d,0x93,0x60,0x40,0xe3,0x70,0xc8,0xcf,0xc4,0xf5,0x62,0xb2,0x64,0x58,
-  0xaf,0xa4,0x0a,0x36,0x99,0xfd,0x61,0xcd,0x6e,0xa1,0x31,0xdc,0x2d,0x87,0xe2,0xe3,
-  0xfd,0x43,0xbd,0xba,0x7d,0xcb,0xb7,0x3f,0xd0,0x0f,0xa5,0xfc,0x1d,0x13,0xf1,0x4f,
-  0x99,0x5e,0x1b,0xc3,0xdd,0xd2,0x74,0xd0,0x44,0x2f,0x27,0x8d,0x7d,0x86,0x2b,0x2c,
-  0x3f,0xc2,0x3e,0x94,0x9b,0x4d,0xd7,0xd8,0xc1,0x89,0xf5,0x01,0x4c,0x7f,0x59,0x89,
-  0x56,0xaf,0x9b,0xf3,0xfb,0x49,0x83,0xd7,0xe0,0x95,0x8f,0x81,0xea,0xf9,0xd8,0x5a,
-  0xd8,0xc4,0xfa,0x00,0xb3,0xa8,0x09,0x5a,0x16,0x8c,0x7a,0xbb,0x5e,0x86,0xdd,0xba,
-  0x99,0x26,0x4f,0x85,0x22,0x3d,0x7f,0xa9,0x3e,0x00,0xa5,0x65,0xe5,0x6b,0x66,0x44,
-  0xe7,0x68,0x1b,0x38,0x33,0x2c,0x9c,0x1c,0x61,0x7e,0xaa,0x0f,0xf9,0x49,0x46,0x7d,
-  0x00,0x2a,0x0b,0xd9,0x7c,0xac,0xf8,0x42,0xf6,0xa5,0x54,0x7c,0xf8,0x05,0x44,0x44,
-  0x66,0x5a,0xdc,0xe7,0x44,0x0d,0x7d,0xcd,0x11,0xb2,0xd6,0x07,0x10,0xcc,0x36,0xf1,
-  0x54,0x16,0x66,0xbe,0xf6,0xda,0x77,0x53,0x65,0x01,0xf4,0x8f,0xdd,0xe5,0x01,0x47,
-  0x8c,0xcf,0xc7,0xf5,0x29,0x37,0xec,0x7d,0xe2,0xac,0xcc,0xfa,0x00,0x54,0x16,0x60,
-  0xbd,0xa2,0xa9,0x51,0x6d,0x0e,0xa1,0x9d,0x13,0xfa,0x86,0x70,0xab,0xda,0xdc,0xc8,
-  0x8a,0x74,0x6a,0x1d,0x9b,0xcb,0x99,0xb5,0x3e,0x92,0xd9,0x0d,0x36,0xa0,0xa8,0x91,
-  0x1a,0xf7,0x96,0xb0,0xf9,0xbe,0x08,0x7b,0x64,0x73,0x20,0x71,0x32,0x34,0x70,0xa1,
-  0xd2,0xf5,0xd9,0x46,0xeb,0x23,0x2d,0x52,0x5a,0x6c,0x12,0x3c,0xcc,0xa9,0x3f,0x88,
-  0x13,0x61,0x8f,0x48,0x11,0xfb,0x7c,0x26,0x01,0xd1,0x6a,0x94,0xf0,0x96,0xfa,0x48,
-  0x05,0xe3,0xfc,0xde,0xdf,0xb3,0x37,0x53,0x6d,0xd1,0x3e,0xa4,0x8e,0x57,0x2b,0xd0,
-  0x90,0x9f,0x55,0xd3,0x95,0xec,0xa0,0xfc,0x47,0xf7,0xb8,0x7c,0x68,0x4f,0xe5,0xc7,
-  0xd5,0x50,0x35,0x6c,0x7e,0x4a,0x36,0xff,0xe1,0x2b,0x81,0x91,0xa0,0xff,0x7b,0x78,
-  0x82,0xba,0xb5,0x91,0x38,0xf5,0x47,0x9b,0x96,0xf6,0xbf,0xa4,0xea,0x63,0x9b,0x20,
-  0xa7,0xc8,0xd9,0xa3,0x9b,0xeb,0x7f,0x02,0xf1,0xe7,0x0c,0x75,0x79,0x63,0x43,0x91,
-  0xda,0xa3,0xfb,0x55,0x3b,0xff,0x72,0x46,0x7f,0xb4,0x14,0xfe,0x89,0xb3,0x1b,0x60,
-  0x53,0xdb,0x02,0xb3,0x3f,0xac,0xbe,0xa9,0xb1,0x8c,0x2b,0xed,0x6c,0x21,0x6c,0x48,
-  0x7a,0xe2,0xee,0x81,0x88,0x6d,0xec,0xf3,0x8e,0xd5,0x07,0xc0,0x63,0xe2,0xb4,0x1b,
-  0xcd,0x29,0xc3,0x01,0xcf,0x4b,0x37,0x9a,0xe1,0x0b,0x6d,0xeb,0xa1,0x21,0xe9,0x09,
-  0xcb,0xf3,0x27,0xc4,0x87,0xef,0xe6,0x45,0x3d,0xd3,0x86,0x58,0x01,0x6a,0x2b,0xaa,
-  0x0e,0xcd,0x7e,0x0b,0x6b,0x75,0x4a,0x1c,0x8b,0xfc,0x94,0x4a,0x27,0x1d,0x94,0xc3,
-  0x16,0xfe,0xc7,0x2d,0xcf,0xa0,0xfa,0x00,0xc3,0x8e,0x7f,0x56,0x2a,0xa4,0x97,0x53,
-  0xd5,0xb0,0x2f,0xb2,0x97,0xeb,0x6f,0x0c,0xe3,0xe0,0x00,0x7b,0x25,0x56,0x49,0xa5,
-  0x03,0xd2,0x09,0x51,0x14,0x1f,0x7e,0x0e,0x0e,0x18,0x93,0xae,0x53,0x92,0x30,0x6a,
-  0xdd,0x9f,0x4f,0x39,0x52,0x9f,0x6b,0xb8,0x17,0xce,0xba,0xa8,0x14,0x9b,0xb5,0x3f,
-  0xda,0x94,0xd1,0xfc,0xee,0x61,0xc5,0x0f,0xaf,0x44,0xa8,0x3f,0x2c,0xfb,0x42,0x3f,
-  0xca,0xfd,0x49,0xfb,0x61,0xaa,0x98,0xcd,0xaf,0xee,0xb7,0x9f,0x12,0xd3,0xf9,0xd1,
-  0xed,0x57,0x9a,0xf2,0xe7,0x15,0xa5,0xee,0xe0,0x14,0x75,0x5d,0xaa,0x1b,0xd1,0xb1,
-  0xe4,0x3a,0xe7,0xf5,0x03,0xf2,0x92,0x48,0x1f,0x3d,0x7f,0xaf,0xfc,0xed,0xcb,0xeb,
-  0x23,0x51,0x7f,0xd8,0x42,0xd8,0xa8,0xa7,0xe6,0xab,0xdb,0xa0,0xb4,0x06,0xf1,0x5e,
-  0x9f,0xc9,0x60,0xdf,0xfc,0x23,0x67,0x3a,0x3e,0x3c,0x2c,0x8d,0xe6,0xe7,0x2e,0xdc,
-  0x2a,0x72,0x9e,0x42,0x3b,0x03,0x39,0x8f,0x80,0x3b,0x54,0x58,0xc1,0x8e,0x52,0xa9,
-  0x76,0x23,0x47,0x63,0x85,0x96,0xfe,0x68,0x66,0x7d,0xa4,0xe4,0xf2,0x3a,0x71,0xee,
-  0x58,0x7e,0xcd,0x7b,0xf0,0x26,0xf7,0x7f,0x61,0xdf,0x2f,0x9e,0xc4,0xfd,0xe6,0x37,
-  0x4a,0x25,0xd1,0x36,0xa1,0x3e,0xf6,0x0c,0xaa,0x8f,0xd4,0xbd,0xf8,0x1c,0x4f,0xa1,
-  0x1d,0xd7,0xa9,0x15,0x7e,0xdd,0x6c,0x14,0x32,0x62,0xf8,0x8d,0xbc,0x2d,0xc5,0x27,
-  0x2f,0xab,0x8f,0x84,0xbf,0xba,0xd9,0x6b,0x29,0xb4,0x33,0x40,0x44,0xab,0xe1,0x30,
-  0x26,0xd9,0x11,0x71,0xf8,0x87,0x10,0x18,0xa4,0xf3,0xe3,0x52,0xf5,0x91,0xe6,0x1a,
-  0x4b,0x87,0x98,0x57,0x7a,0xc7,0x04,0x36,0xec,0x7d,0x16,0xed,0x72,0xe9,0x4b,0x1d,
-  0xc5,0xef,0x6b,0x3d,0x94,0x1a,0xbf,0x91,0x69,0xe1,0x71,0xfc,0x23,0xd0,0xfc,0x3b,
-  0x89,0xe4,0xf1,0xe8,0x1b,0x1a,0x4d,0xb4,0xf3,0x3e,0x6c,0x88,0xae,0xea,0xc1,0x83,
-  0xe9,0x82,0x0d,0xe1,0x32,0x23,0xa7,0x9e,0x69,0xc2,0xd8,0x7e,0x90,0xc1,0x6e,0x37,
-  0xd9,0xc5,0x5d,0x4c,0x66,0x2d,0xdc,0xec,0x8e,0x41,0xf1,0xe1,0x61,0x5d,0x61,0x8c,
-  0xb3,0xad,0xb4,0x74,0xdc,0xc2,0x4f,0x82,0x3c,0x9a,0x0f,0x38,0xa4,0x94,0xa0,0x35,
-  0x61,0xf6,0x7f,0xef,0xa7,0xfe,0x89,0xd4,0xcf,0x4b,0xbb,0xb2,0xc7,0xec,0x0f,0xa2,
-  0x68,0xe9,0xfa,0xd8,0x57,0x8d,0xbe,0xef,0x67,0xf9,0x43,0xa3,0x6c,0x8f,0x68,0x0e,
-  0x6a,0x96,0xd7,0xe3,0xc0,0xec,0x6f,0x55,0x37,0x01,0xff,0x98,0x4e,0xd2,0x13,0xe2,
-  0xed,0x70,0x89,0xd8,0x54,0x43,0x9c,0xae,0x76,0x42,0x7e,0xd0,0xbe,0x42,0xf4,0xea,
-  0x97,0x7c,0xe5,0xfd,0xf6,0xcc,0xf8,0x9f,0x5f,0x50,0x7d,0x80,0x83,0xca,0x93,0xec,
-  0x00,0x6a,0x47,0x57,0xd1,0xd2,0x76,0x5b,0x55,0xd6,0x3e,0x3e,0xa7,0x6e,0x6a,0x8b,
-  0xaf,0x84,0xbf,0xe8,0x9d,0xd3,0x63,0xcb,0xec,0x0f,0x62,0xee,0x87,0x1e,0x45,0x0b,
-  0x20,0xf0,0xd3,0xa9,0x30,0x02,0xdb,0x58,0xb3,0x10,0x71,0x32,0x8a,0x59,0xa0,0x54,
-  0xa6,0x1e,0x39,0xb3,0x3f,0xc8,0x68,0x37,0xb4,0x1d,0x01,0x8f,0xfa,0x02,0xb4,0x4e,
-  0x36,0xdb,0xc2,0xee,0x9b,0x32,0x67,0x15,0xc4,0xcc,0x7e,0x73,0x6e,0x23,0xa3,0x3e,
-  0x36,0xf5,0x87,0x35,0xd7,0xe7,0x51,0x9c,0xf6,0x27,0xe6,0xdb,0xb3,0xbc,0x31,0x7f,
-  0xa7,0xfa,0x3c,0xf7,0x85,0xdd,0x2d,0x62,0x71,0xdd,0x39,0xa8,0x30,0xeb,0x67,0x8e,
-  0xd7,0x17,0x1a,0xc5,0x3f,0x44,0x33,0xee,0xa7,0x8d,0x17,0xd8,0x7c,0x2a,0xff,0x3c,
-  0x5c,0x94,0xaa,0xf4,0xe5,0x6f,0xe1,0x79,0xf9,0x33,0xbb,0xac,0x3f,0xc8,0xce,0x02,
-  0xb3,0xec,0x52,0x4c,0xf1,0xf0,0x23,0x82,0xaf,0xde,0x01,0xa2,0x47,0x3c,0xec,0xf5,
-  0x85,0xf2,0xb6,0x8a,0x9a,0x71,0x0e,0x3a,0xe8,0xfe,0x99,0xf5,0xb1,0xe9,0xf9,0xdd,
-  0x31,0x56,0xa9,0x6d,0x8e,0x53,0xe1,0xe2,0x48,0x95,0xb4,0x41,0xf7,0x86,0x6d,0x57,
-  0xb0,0x2f,0xc3,0x8b,0x92,0xab,0x27,0x77,0x62,0x7d,0x24,0x3a,0x2f,0xb6,0x38,0x73,
-  0xc0,0x63,0xef,0x69,0x61,0x65,0x7a,0xc4,0xc1,0xa3,0xbc,0x64,0x00,0xf1,0x41,0x0e,
-  0xfe,0x04,0xb4,0x3e,0xc3,0x13,0xf0,0x4f,0x69,0x72,0x6a,0x2d,0x9b,0x11,0x98,0x14,
-  0x17,0xda,0xa6,0x4d,0x5d,0x32,0x43,0x6b,0xe0,0xf1,0x8f,0x96,0x1c,0x67,0x33,0xf8,
-  0xde,0xfa,0x22,0xaa,0x17,0x7d,0x7c,0x22,0xfe,0xe9,0xce,0x73,0x65,0xe7,0xe9,0xd5,
-  0x11,0xef,0xdf,0x2f,0x2f,0x13,0xf3,0x0c,0x6e,0xcc,0xaf,0xcd,0x9b,0xa6,0x30,0x4e,
-  0xd4,0x8d,0xdd,0x3b,0xa1,0x3e,0xd2,0x4f,0xc8,0x8d,0x95,0x14,0x3f,0x1e,0x3a,0xa7,
-  0x56,0xd5,0x9b,0x89,0xa8,0x08,0x84,0x6a,0xb2,0xd2,0x88,0x68,0x52,0x06,0xfe,0x91,
-  0xce,0x49,0x38,0xff,0xb8,0x78,0x34,0xfa,0x52,0xbb,0xcf,0xf0,0xc4,0x58,0xe9,0x1d,
-  0xfb,0x98,0x2f,0x49,0xfd,0x59,0xe0,0x88,0x86,0x9f,0x66,0xa1,0x68,0xc5,0x3f,0xd3,
-  0x47,0xf1,0x0f,0xbb,0x9d,0xbd,0x8a,0xd6,0x96,0x1c,0x62,0xd3,0xf9,0x5e,0xaa,0x4f,
-  0x82,0x86,0x15,0x3c,0xe9,0x36,0x7f,0xea,0x18,0xff,0xbe,0x5d,0xa3,0xf8,0xe7,0x6f,
-  0xdc,0x81,0x47,0x85,0xf5,0xdb,0x6a,0x93,0x39,0xb5,0xb6,0x19,0xf2,0xae,0xc8,0x4c,
-  0x44,0x80,0xce,0xdf,0x09,0x4f,0xc6,0x4a,0x53,0xf5,0x21,0xc7,0xd6,0x3f,0xb8,0x2d,
-  0x25,0x7f,0x9a,0xbd,0xbe,0x65,0x05,0x0d,0xe0,0x1e,0x16,0x88,0x4f,0xdb,0xdd,0xdd,
-  0x76,0x6b,0x70,0x21,0x1b,0xe4,0x8f,0xa5,0x32,0x76,0xb7,0x5e,0x86,0x7f,0xf0,0x7d,
-  0xdb,0xe1,0x30,0xdc,0x10,0xcb,0x49,0xe6,0xbb,0xe1,0x62,0xfc,0x3a,0xaa,0x0f,0x30,
-  0x32,0x16,0xff,0x73,0x39,0xfe,0x71,0x44,0xc5,0xb8,0x3a,0x00,0x7b,0xa4,0x3c,0x93,
-  0x06,0xd1,0xee,0x81,0xb9,0x5c,0x38,0x01,0x6b,0xfe,0x42,0x7d,0xa4,0x51,0xfd,0x58,
-  0xdd,0x26,0x8d,0xb0,0x05,0x8b,0xb2,0x55,0xb1,0x44,0x1a,0x01,0x9f,0x99,0x0f,0xae,
-  0x9f,0x62,0xfe,0x5a,0xfb,0x5f,0xc2,0x3f,0x29,0x18,0x83,0x03,0x7b,0x8c,0xdc,0xa6,
-  0x26,0xed,0xc3,0x3e,0x84,0x26,0xa1,0x6c,0x55,0xee,0xe5,0xf5,0x91,0xc6,0xe7,0xcf,
-  0x32,0x0b,0x45,0xe2,0xfc,0x55,0xe6,0x15,0xed,0x29,0x18,0x0d,0x25,0x1a,0xdb,0x0f,
-  0x29,0xfc,0xe3,0x09,0x29,0x05,0xd9,0xdd,0x12,0xb9,0x81,0xf6,0x51,0x99,0xe8,0x5d,
-  0xc4,0x90,0xa8,0xd9,0x2f,0x9b,0x89,0x72,0x39,0x56,0xfc,0xd3,0x99,0x3b,0xee,0xff,
-  0x8a,0xe3,0xdb,0x2d,0x48,0x15,0x8a,0xec,0x4c,0xb5,0x05,0x49,0x42,0xaa,0x62,0xd2,
-  0x44,0xfc,0x03,0xe4,0xf6,0x2a,0x36,0xeb,0x63,0x87,0xa6,0xdf,0x36,0xed,0xa4,0x7c,
-  0x41,0xbf,0x3a,0xe4,0xe8,0xab,0xfe,0x5c,0xfa,0x71,0x0a,0x11,0xa5,0xf1,0x4f,0x4b,
-  0x56,0x0a,0x0f,0xe4,0x91,0x58,0xdb,0x07,0xfe,0xa0,0xb4,0xb5,0x9e,0xca,0x4a,0x7b,
-  0xa9,0xbf,0xc6,0xfc,0xe0,0xa1,0x70,0x79,0x08,0xf1,0xcf,0x07,0x13,0xea,0x23,0x95,
-  0xc9,0xee,0xb5,0x0f,0xc4,0xa1,0x53,0xa5,0xb2,0x90,0xb6,0xa2,0x50,0x34,0xd0,0x0a,
-  0x8a,0xe1,0x44,0xfc,0x13,0xa6,0xd6,0x69,0xd6,0xfe,0xb0,0x92,0x89,0x7f,0x82,0xf2,
-  0xd4,0xc5,0xc7,0xf4,0x67,0x49,0x6d,0x91,0xff,0x62,0x6d,0xd6,0xec,0x10,0xda,0xfb,
-  0x12,0xaf,0xd7,0xdd,0x7f,0xa1,0x3e,0x12,0x78,0x16,0xc9,0x5b,0x59,0x1b,0xfc,0x4a,
-  0x9a,0xab,0x4f,0xed,0x0b,0xcc,0x97,0xef,0x87,0x2f,0x87,0x95,0xbe,0xa9,0x25,0x50,
-  0x8f,0x82,0x5a,0xce,0xa8,0x8f,0x34,0x79,0x14,0xdf,0xb6,0x7c,0x9b,0x06,0x95,0xba,
-  0xfc,0x40,0x71,0x09,0x6b,0x62,0x73,0x02,0x88,0x70,0x48,0x62,0x3f,0x42,0x44,0xd6,
-  0xc4,0xfa,0x48,0xd4,0x04,0xa4,0x3a,0xf5,0x0f,0xef,0x2f,0x14,0x29,0xa3,0x70,0x81,
-  0xbe,0x3c,0x96,0xdf,0x6d,0x3a,0xc2,0xe6,0xfe,0x85,0xfe,0x20,0xb4,0xfe,0x5e,0xa0,
-  0x6a,0x2d,0xb9,0x46,0xf1,0x90,0xdc,0x0b,0x55,0xb8,0xc7,0xcd,0xf8,0xab,0x0e,0x96,
-  0xc9,0xff,0xac,0x4d,0xd5,0x07,0x10,0xa9,0xcd,0xdf,0x68,0x37,0xd8,0x1e,0xd8,0x00,
-  0x53,0x69,0x70,0x56,0x3d,0x0c,0xc5,0x4f,0x29,0x97,0xd7,0x47,0xf2,0x18,0xd3,0xbc,
-  0x36,0x7d,0x34,0xbc,0xd8,0x45,0xfa,0xe8,0x0e,0xdc,0xb9,0x38,0x6d,0x34,0x5e,0x2e,
-  0xb3,0x3e,0x12,0x9e,0xdf,0xde,0xe6,0x61,0x46,0x81,0x88,0x74,0x6c,0x03,0xbd,0xea,
-  0x7a,0x98,0x9d,0x94,0xeb,0x9c,0x6f,0x6b,0xeb,0x67,0x95,0xa6,0xf8,0x9f,0xb1,0xfb,
-  0xb7,0x9b,0xf8,0xe7,0xc6,0x01,0xc7,0x1a,0x16,0x00,0x83,0xcf,0xd3,0xdc,0xc1,0xea,
-  0x37,0xa0,0x9b,0xdf,0xa8,0xa1,0x7e,0x39,0xc8,0x7e,0xd3,0x73,0xe3,0x84,0xfe,0x20,
-  0x84,0x7f,0x04,0xff,0x4b,0x8e,0x05,0x8c,0xca,0xfc,0x52,0x3d,0xde,0xea,0x14,0xad,
-  0x31,0x89,0x68,0x8d,0x73,0x2b,0xc9,0x5f,0x6c,0xc1,0x3f,0xa8,0xbf,0x54,0xb3,0x3e,
-  0xe4,0xaf,0x22,0x77,0xeb,0x83,0x31,0x7f,0xc9,0xda,0x60,0xb1,0xaf,0xa7,0xbb,0xfe,
-  0x87,0xda,0xa4,0x37,0x11,0x48,0x5c,0x4a,0x75,0x4c,0xb3,0xf6,0x87,0x35,0xf1,0xcc,
-  0x80,0xf2,0x63,0x96,0x07,0x0d,0xbc,0x74,0x20,0x7a,0x3d,0xcb,0xab,0x59,0xcf,0xe7,
-  0xf7,0x28,0xf3,0xd8,0x51,0xbe,0x57,0x2d,0xea,0x9e,0xd0,0x1f,0x24,0x85,0x7f,0x9a,
-  0xef,0x66,0xaa,0xdc,0xc6,0x3c,0xaa,0xbc,0x68,0x0e,0xdc,0x46,0x71,0xde,0x4b,0xbf,
-  0xe6,0xea,0x8b,0xef,0x4d,0x21,0xa8,0x57,0xd2,0xfc,0xcf,0x68,0x7d,0x92,0xbf,0x45,
-  0xb1,0xa3,0x52,0x34,0x4b,0x94,0xe4,0x8f,0xd8,0x6b,0x86,0x51,0xbd,0x64,0xf6,0x43,
-  0xc7,0xc1,0xf1,0xf1,0xfd,0x59,0x3b,0x5a,0x1f,0xd2,0x71,0x5a,0xa1,0xfa,0xf3,0x95,
-  0x20,0x47,0x23,0x1a,0x8b,0xbe,0xf7,0x99,0x84,0xfa,0xfd,0x8f,0xea,0x25,0xd4,0x2f,
-  0x4a,0x22,0xff,0xf0,0x04,0xfc,0x83,0x42,0xb5,0x53,0x34,0x07,0xc9,0xbc,0x0e,0x73,
-  0x7d,0x2a,0x0c,0x47,0x3c,0xff,0x14,0x1f,0xe5,0x7f,0xd2,0xfd,0x61,0x8d,0x74,0x7d,
-  0x80,0x24,0xc1,0x00,0xb4,0xa7,0x9d,0x09,0x1c,0x5c,0x47,0xfb,0xa7,0x93,0x7e,0x1a,
-  0xc2,0x9f,0xe2,0x52,0x26,0xfe,0x31,0x83,0x76,0x06,0x65,0x53,0x91,0x25,0x02,0x83,
-  0xf2,0x6e,0x86,0x1f,0xfa,0x09,0xf6,0x11,0xbc,0x20,0x94,0x85,0x95,0x44,0xf6,0x65,
-  0xfd,0x41,0x48,0x29,0x53,0xe2,0xea,0x9d,0xe4,0xd6,0x49,0x22,0x7e,0x30,0xfd,0x3b,
-  0x1f,0x69,0xa3,0xa5,0x72,0x2e,0xeb,0x0f,0xd2,0xa3,0xf8,0x9c,0xbd,0xfa,0x6e,0xcd,
-  0xd3,0x2b,0x2f,0x60,0xcb,0x42,0xbb,0x05,0x57,0x9f,0x5c,0xe2,0xec,0xd1,0x68,0xe9,
-  0x7e,0x66,0xe5,0x7f,0xb8,0xd9,0x1f,0xa4,0xaa,0x27,0xef,0xee,0x86,0xb8,0x36,0x5c,
-  0xe0,0x2f,0xb4,0x47,0xc4,0x64,0x6c,0x58,0x7f,0x6e,0x32,0x8a,0x9d,0x01,0xfe,0x67,
-  0x3c,0x2f,0x57,0x27,0x70,0xb3,0x8f,0xef,0x4f,0x13,0xff,0xf8,0xbb,0xcd,0xb6,0xa7,
-  0xe7,0xc2,0x55,0xdd,0x57,0x3f,0x27,0x0e,0xf6,0x9c,0xab,0xa5,0xb6,0x9e,0xc5,0xc3,
-  0xf1,0xd1,0xd6,0x57,0x69,0xfc,0x43,0xfe,0xaf,0x0b,0xbc,0xea,0x70,0xee,0x90,0x58,
-  0x29,0xbf,0xe6,0x2a,0x37,0x64,0x43,0xac,0x8b,0xf5,0x7a,0xcb,0x6d,0xf6,0x83,0xd5,
-  0x17,0x71,0xa1,0xca,0xb5,0xdc,0x6e,0x6b,0x7f,0xd8,0xc2,0x4f,0x60,0x1f,0x9f,0x3b,
-  0x64,0xa7,0x22,0xdc,0x4d,0x5e,0x9b,0x21,0xb7,0xb0,0x6b,0xf4,0xa6,0x3a,0x14,0x3b,
-  0x51,0x76,0x47,0xbc,0x53,0xc6,0x13,0xf4,0x64,0x46,0x7f,0xd8,0x8d,0x24,0x7f,0x8c,
-  0x9c,0xf9,0xec,0x7e,0xa8,0x97,0xdd,0x94,0x2d,0x48,0xe7,0x4b,0xb3,0xd9,0xa4,0xec,
-  0xde,0x2d,0x09,0xd5,0xc5,0x72,0xb4,0xbc,0x8e,0x8c,0xf8,0x1f,0xaa,0xa6,0x28,0x13,
-  0xed,0x56,0xaf,0xce,0x31,0xdc,0x1d,0xbe,0x27,0x21,0xda,0xec,0x0a,0xdb,0xb6,0xb3,
-  0x3b,0xa8,0x34,0x41,0x38,0xda,0x9e,0xdd,0x39,0x2e,0x1f,0x16,0x4d,0x19,0x44,0xfb,
-  0xd1,0x4c,0xf3,0xdf,0xcf,0x5e,0xe3,0xcf,0x1b,0xf6,0x63,0x0d,0xef,0xb3,0x1e,0xc3,
-  0x77,0x77,0x5e,0x0b,0x55,0x90,0xe0,0x5e,0x2d,0xb7,0xb3,0x21,0xa3,0x3f,0x2c,0x5c,
-  0x30,0xaa,0x8c,0x3c,0xaf,0x78,0x2f,0x5c,0x60,0xb8,0x5b,0x5a,0x44,0x9d,0x24,0x4c,
-  0x04,0xe5,0xed,0x79,0xf8,0x1c,0x5e,0x04,0x47,0xe2,0x6f,0x6b,0xad,0xf8,0x47,0x1d,
-  0x81,0x7b,0xc9,0xa9,0xba,0x51,0x47,0xeb,0xcc,0x98,0x9e,0xa8,0x2e,0xa5,0xb4,0xcd,
-  0x9b,0xec,0xd4,0xff,0x74,0xb8,0x10,0xe5,0x7f,0xa2,0x79,0xfe,0xb8,0xfc,0x31,0xc8,
-  0xff,0xb5,0x62,0xee,0x31,0x65,0x98,0xf9,0xf1,0x45,0xe6,0x22,0x7a,0x11,0x56,0x43,
-  0xf4,0x6b,0xae,0x3a,0x1e,0x73,0xcd,0xd5,0x46,0x78,0xd9,0x6d,0xf2,0xf3,0x42,0x9a,
-  0xff,0x31,0xc8,0xff,0xc5,0x3d,0x49,0x65,0xa1,0x6b,0xb3,0xb6,0x2b,0x80,0x2f,0xae,
-  0xa1,0xf5,0xb4,0x61,0xdb,0xaa,0x18,0xd7,0xd8,0x32,0x8d,0x32,0x28,0xe5,0x84,0x2b,
-  0xdd,0x1f,0x76,0x58,0xfd,0xd6,0x58,0x90,0xf3,0x0c,0xe1,0x59,0x1c,0xb8,0xbf,0xe7,
-  0xbc,0x15,0xd6,0xb6,0xae,0xd4,0xe4,0x15,0xec,0x5b,0x74,0xa5,0xc4,0xfd,0xe3,0x8c,
-  0xfe,0xb0,0xcb,0x50,0xba,0x7a,0x0e,0x3a,0x7c,0x5f,0xda,0xd8,0xf8,0x27,0xa8,0xec,
-  0x09,0x16,0x29,0x92,0xd4,0x25,0x69,0xba,0x1d,0x94,0x65,0xea,0x67,0x78,0xe2,0xec,
-  0xf3,0x44,0x4b,0x7f,0xd8,0x29,0x29,0x7c,0x38,0x69,0xe8,0x4b,0x17,0x68,0x70,0xd0,
-  0x71,0x22,0xff,0x0c,0xfb,0x17,0xcd,0xf4,0x68,0xec,0x87,0x4f,0x55,0x04,0x8a,0xa7,
-  0xab,0xd3,0xf5,0x01,0x28,0xfe,0x07,0xa5,0xf7,0x30,0xa2,0x1d,0x7b,0xf4,0x10,0x1d,
-  0xb4,0x61,0x71,0x0d,0x5c,0x92,0xca,0x89,0x36,0xf1,0x08,0xe7,0xb9,0x4f,0xf0,0x24,
-  0x44,0x5b,0x1a,0xff,0x14,0x52,0x7f,0x10,0xed,0x8d,0xdc,0x7f,0x7c,0xec,0x76,0xb2,
-  0xb6,0x7a,0x94,0xb0,0x4d,0xc5,0x2b,0xc5,0xdc,0x1d,0xb2,0x4d,0xcf,0xfa,0x15,0xec,
-  0x00,0x04,0x42,0x1d,0x69,0x7e,0x1b,0xf1,0xcf,0xb3,0xbc,0x28,0x19,0xbd,0x87,0xcd,
-  0xe8,0x35,0x0b,0x65,0x2f,0x64,0xdf,0x9a,0xbe,0x7b,0xdd,0xca,0xb0,0xec,0x46,0x09,
-  0xdc,0xc6,0x8b,0xb4,0xe8,0xc2,0xc5,0x7d,0x56,0xff,0x17,0xae,0x67,0xdc,0xc8,0xf1,
-  0xb2,0x65,0xd4,0x68,0xcf,0x50,0x34,0xa7,0xb4,0x68,0x9f,0xae,0xd5,0xc9,0x57,0xae,
-  0xf2,0x90,0xab,0xc8,0x90,0xe7,0x2f,0xb1,0xc4,0xff,0x4c,0x19,0x80,0xb3,0x71,0x1f,
-  0x69,0x07,0x77,0xaa,0x50,0xf6,0x49,0xe5,0x1e,0xb8,0x98,0xd8,0xfd,0x94,0xfd,0x84,
-  0x88,0x40,0xa8,0xa5,0x3c,0x6a,0xef,0xb7,0xd6,0x07,0x20,0xff,0x97,0x5e,0xa1,0x6e,
-  0x86,0x7c,0x2a,0x8b,0x9d,0xe2,0x7f,0xdc,0xb8,0x7f,0x04,0x32,0xcc,0x53,0x50,0x21,
-  0xc2,0x9c,0x13,0xeb,0x03,0x84,0x1d,0x8f,0xe4,0x97,0xe8,0x87,0xb4,0x0e,0x7d,0x99,
-  0x19,0xf6,0xcc,0xbd,0xdf,0xa7,0xb6,0xef,0xdc,0x2c,0xa4,0x5c,0x60,0xad,0x8f,0x04,
-  0xab,0x61,0x97,0x86,0x68,0x67,0xbb,0xb8,0x18,0xde,0x34,0xfd,0x59,0x66,0xa1,0x80,
-  0xf7,0xc8,0xb1,0x85,0xf6,0xa0,0x56,0xa6,0xb7,0xc7,0xc4,0x74,0x7d,0xec,0x85,0x82,
-  0x59,0x4f,0xa0,0x46,0xd9,0x46,0x7c,0x91,0x3c,0x36,0xbf,0x30,0x35,0x10,0x9a,0x39,
-  0xe1,0x9f,0xec,0xbc,0x0c,0xff,0xd7,0x3e,0x72,0x6a,0x50,0xbd,0xe8,0x2d,0xba,0x46,
-  0xdd,0x31,0xcc,0xb0,0x67,0xb3,0x51,0x88,0x4a,0xf8,0x47,0x2e,0x60,0xb6,0xf1,0xfc,
-  0xdc,0x35,0xa3,0xfd,0x41,0x36,0xf3,0x49,0xa9,0x6e,0x68,0xf6,0x14,0xed,0xe3,0xe2,
-  0x1e,0x94,0x3f,0x42,0x0f,0xed,0x1f,0xae,0xe4,0x65,0xfa,0xbf,0xc0,0x1f,0xba,0xba,
-  0x40,0x7c,0x1c,0x2e,0x2c,0xf2,0x87,0xe6,0x1e,0x33,0xeb,0x03,0x98,0xfc,0x4f,0x3f,
-  0xfc,0x0b,0x75,0x0c,0x39,0x96,0xff,0x84,0x6a,0xf1,0x7f,0x09,0x17,0xa0,0x2a,0x88,
-  0xbb,0x8b,0xa2,0xcb,0xca,0x83,0x8e,0x47,0x1a,0x4a,0xb4,0x0b,0x50,0xbe,0x68,0x59,
-  0xdf,0x4b,0xf3,0x17,0x5d,0x90,0xcb,0x43,0x8e,0x33,0x96,0xfe,0xb0,0xe4,0xff,0x42,
-  0xfc,0x23,0x4d,0x6b,0xcc,0xc6,0x81,0xea,0xb2,0x29,0x8d,0x6c,0x07,0x74,0xd6,0xb5,
-  0x4e,0x5f,0xd2,0x68,0xd3,0xa8,0x3e,0x52,0xb4,0x79,0xad,0x33,0x2f,0x5d,0x1f,0x00,
-  0x1a,0x61,0x87,0xe0,0xd1,0x9b,0x27,0x2f,0xee,0xd5,0x77,0x41,0x7c,0x99,0x62,0xe2,
-  0xbd,0xdc,0xef,0x57,0x53,0x7f,0x10,0xbe,0xc3,0xad,0x05,0x15,0x27,0x7e,0xaf,0xb1,
-  0xf5,0x37,0xfd,0x5f,0x26,0x9e,0x5c,0xdc,0x2f,0xec,0x13,0x66,0xe9,0x4b,0xb7,0xb2,
-  0xc7,0xf1,0xca,0xf7,0xff,0x6a,0xc9,0x56,0x56,0x02,0x2f,0x10,0xc3,0xa6,0x5a,0xfb,
-  0xc3,0x4e,0x4e,0x05,0x2d,0x2b,0xb1,0xec,0xfe,0x42,0xb3,0x10,0x28,0x95,0x3d,0x1f,
-  0xf9,0x4e,0xc5,0x4a,0xbb,0xe9,0x11,0xe3,0xbe,0x10,0x9a,0x5a,0xee,0x09,0xfe,0xaf,
-  0xd1,0xb6,0xb0,0xa7,0xe3,0x15,0x66,0x5b,0xb4,0xd8,0x69,0x6a,0x9b,0x6b,0x5e,0xd1,
-  0x0e,0xd4,0x39,0xb6,0x5a,0xea,0x03,0x98,0xfe,0x2f,0xcd,0xcf,0x10,0x66,0xb7,0xa2,
-  0x29,0xe4,0xa3,0x6e,0xbc,0x9a,0x3c,0x0c,0xbe,0xe9,0xe4,0x08,0x0b,0xf7,0xd4,0xf9,
-  0xbc,0xf8,0x21,0xac,0xfd,0x61,0xdd,0x70,0xc0,0x98,0xdb,0x22,0x9f,0x14,0x17,0x52,
-  0xb4,0x4f,0x84,0xfa,0xc3,0xca,0x07,0xd0,0x42,0x42,0xc1,0x52,0xc1,0x36,0x41,0x71,
-  0x5c,0xfe,0xa8,0x7a,0x43,0x86,0xff,0x2b,0x01,0x9e,0xb8,0xcd,0xcb,0xa2,0xb0,0x3b,
-  0x65,0x8f,0xdb,0x61,0x97,0x2d,0x3b,0x24,0x7b,0x6d,0x93,0x84,0x7a,0x3d,0x9e,0x94,
-  0x17,0xb2,0x74,0x7f,0x58,0xae,0xde,0x2e,0xec,0x91,0x3d,0x54,0x84,0xcd,0x06,0x0f,
-  0xc9,0x45,0xe4,0x78,0x9d,0x0e,0x7b,0x60,0x26,0x31,0xd8,0x57,0x50,0x07,0xd5,0xf7,
-  0x70,0x10,0x1f,0xef,0x0f,0x4b,0xfe,0xaf,0x33,0xfc,0xc6,0x78,0xde,0x42,0xf1,0x11,
-  0x76,0x89,0xcf,0x23,0xb4,0x33,0x03,0x2e,0x44,0xfe,0x3e,0xec,0x59,0x23,0xfa,0x84,
-  0xd7,0x28,0x7f,0x3f,0xa3,0x3f,0x2c,0xe2,0x81,0xe1,0xb1,0xea,0x40,0xff,0x77,0x4a,
-  0xbb,0x0d,0xc2,0x79,0xe1,0x86,0xd1,0x44,0x15,0x53,0xbf,0x57,0x5b,0xfa,0xc3,0x4a,
-  0x54,0xdf,0x66,0x77,0xdc,0x3e,0x22,0xde,0x03,0x7f,0xa0,0x6a,0x48,0xe4,0x08,0x43,
-  0x44,0xd4,0x66,0x27,0xff,0x17,0xc5,0x6f,0xe0,0xc0,0xd2,0x1f,0x16,0xe5,0x0f,0xd5,
-  0x37,0xc8,0xfd,0x3a,0x7b,0x13,0xd6,0x7a,0xf1,0xf9,0xef,0x62,0xd3,0xb5,0xe7,0xe0,
-  0x07,0x76,0x14,0x3b,0x9f,0xe3,0xf3,0x17,0x1f,0x44,0x20,0x37,0xa1,0x3e,0x00,0xcc,
-  0x06,0x39,0xec,0xea,0x81,0x9f,0xc2,0x4a,0xa2,0xa9,0x6f,0x47,0x79,0x55,0xca,0xa3,
-  0x75,0x68,0x66,0x3e,0xa9,0x16,0xf5,0xc9,0x77,0x31,0xc8,0xf0,0x7f,0x75,0x20,0x28,
-  0x97,0xc1,0xd9,0x23,0x45,0x38,0x9a,0x15,0xf3,0x99,0x23,0xda,0x11,0xf3,0x1c,0x94,
-  0xe7,0x3b,0x7b,0xc4,0xa7,0x09,0x31,0xb6,0xa0,0x84,0x1f,0x9b,0x4f,0xfe,0xaf,0x61,
-  0x79,0x21,0x7e,0x1d,0xb1,0x76,0xfa,0x5b,0xf6,0x0e,0x2a,0xc4,0x77,0x27,0x8c,0xf4,
-  0xf9,0xef,0xf6,0xec,0xc7,0xfd,0x30,0x10,0xa4,0x8e,0x18,0xcd,0x96,0xfa,0xd8,0x02,
-  0xae,0x8f,0x3e,0x2b,0x36,0x97,0xbc,0xf3,0x67,0x69,0x23,0x75,0x50,0x59,0x3f,0xea,
-  0x6f,0xb5,0x5b,0x3c,0x09,0x2d,0x45,0xfe,0x98,0xa3,0xcd,0x52,0x1f,0xb2,0x48,0xdd,
-  0x2f,0x9d,0x17,0x7c,0xdc,0x6e,0x88,0x85,0xf0,0x09,0x94,0x1b,0xa2,0x57,0xac,0x4c,
-  0xf1,0x69,0x44,0x8c,0x0c,0x43,0x79,0xff,0xb2,0x3e,0x25,0xdd,0x1f,0x96,0xe2,0x7f,
-  0x12,0x11,0x57,0x02,0xd1,0x4b,0x3b,0x6c,0x16,0xc8,0x7e,0x37,0xdb,0x9c,0x95,0x15,
-  0x29,0xd4,0xa8,0x6b,0x1f,0x37,0x11,0xb5,0x3b,0x03,0xff,0x3c,0x6f,0xb8,0x5a,0xa3,
-  0x54,0x84,0x23,0xae,0x8e,0xce,0x7f,0x21,0x5a,0xd6,0xaa,0x24,0x02,0x54,0x41,0x11,
-  0xd5,0x59,0x67,0xc4,0x52,0x1f,0xa0,0xc0,0x2e,0x25,0xa8,0x48,0x0b,0x55,0xdf,0xe2,
-  0x9c,0xca,0x02,0x30,0xaa,0x18,0xe0,0x01,0x93,0x08,0xa2,0xd2,0x01,0xb8,0x51,0x59,
-  0xba,0x3e,0xc0,0xfd,0x54,0x1f,0x00,0xcd,0x6a,0xaa,0x87,0x4f,0xf5,0xc3,0xcd,0xb6,
-  0xa4,0xa6,0x45,0x90,0x18,0x25,0xa2,0xed,0xaa,0x08,0xe3,0xfd,0x61,0xe3,0x53,0xa8,
-  0x3e,0xc0,0x8b,0x14,0x2d,0x36,0x9c,0xca,0x6f,0xa2,0x30,0xa7,0xf3,0x29,0xd8,0x63,
-  0x12,0x41,0xb0,0x39,0xb3,0x3f,0x2c,0x82,0x1c,0x0d,0xd5,0x56,0x21,0xda,0x17,0xff,
-  0xa2,0xcd,0x4f,0xe6,0xbd,0x27,0x26,0xf4,0xd7,0xc0,0x2f,0x6f,0x6c,0x2b,0x76,0xc1,
-  0x87,0x7c,0x5e,0xdc,0x3e,0x10,0xc8,0xec,0x0f,0xf2,0xbc,0x3e,0xf7,0x15,0xa5,0x85,
-  0x15,0x07,0x5f,0xe8,0x73,0x19,0xf6,0x5d,0x4e,0x4d,0x6d,0x8e,0x95,0xb5,0x11,0x48,
-  0xa4,0xfe,0x65,0x71,0x5b,0xbb,0xcd,0xda,0x1f,0xa4,0x37,0xa7,0xa3,0xd6,0x8c,0xef,
-  0x05,0xb9,0x93,0xea,0x23,0x25,0x58,0x23,0x37,0x2b,0xd2,0x6b,0xb8,0x6d,0x9a,0x69,
-  0x29,0xb4,0x8c,0xfe,0x20,0x3b,0xe1,0xf9,0x08,0xaa,0xad,0x2d,0x28,0xd6,0x5e,0xe0,
-  0x5a,0x32,0xb8,0x96,0x95,0xb0,0x66,0xc8,0x33,0xe4,0x76,0x06,0x2a,0xde,0x3f,0x61,
-  0xcb,0xec,0x0f,0x32,0x48,0xd1,0x80,0x5d,0x9b,0xb7,0x89,0x45,0xf2,0xb9,0x9e,0x0e,
-  0x2a,0x0b,0xd9,0x0e,0x47,0x22,0x95,0xad,0xd2,0xd3,0x62,0x89,0xfa,0x7e,0x97,0x2f,
-  0xee,0x89,0x0b,0xd6,0xfe,0x20,0xfb,0xd1,0xfa,0x36,0xe3,0x7f,0xee,0x42,0xfd,0x7e,
-  0x83,0xb1,0x39,0x2a,0x26,0xf5,0x4b,0xaa,0x7f,0x8b,0x23,0xb9,0xf4,0xb3,0xc0,0x25,
-  0xe1,0x45,0xe3,0x32,0xff,0xd7,0x88,0xde,0x41,0x45,0x0e,0x67,0xb2,0xc3,0x93,0x7d,
-  0xc6,0xc6,0x8e,0x6b,0xec,0x94,0x11,0xd6,0x99,0xd7,0x56,0x9c,0x94,0x8f,0x40,0x45,
-  0x6c,0x59,0x5c,0xc9,0xf4,0x7f,0xed,0x83,0xe2,0x33,0x28,0x5d,0x4b,0xe4,0x86,0x90,
-  0x2b,0x29,0x57,0xba,0x4a,0xa0,0xb9,0x6e,0x56,0x02,0xb7,0x4d,0x12,0x9a,0x4f,0xcf,
-  0xdf,0x96,0xeb,0x9e,0xd0,0x1f,0x24,0x41,0xec,0x87,0xea,0x42,0xf0,0xcd,0xb5,0xcf,
-  0xe6,0x4c,0xc7,0x65,0x89,0xd4,0x78,0xfa,0x6c,0xf5,0xaf,0x18,0xce,0x06,0x70,0x7b,
-  0x83,0xee,0x09,0xfd,0x41,0xf6,0x6e,0x2d,0x7a,0xcf,0x7d,0x9c,0xd9,0x7a,0xee,0x8f,
-  0x17,0x7d,0x34,0x67,0x4d,0x64,0x6a,0x60,0x1d,0x9f,0x99,0x5c,0x12,0xcc,0x7e,0x4b,
-  0x76,0xf0,0x6b,0xb4,0x9c,0xef,0x45,0xac,0xfd,0x41,0xec,0xfa,0x9f,0x74,0x5f,0xbf,
-  0x7d,0x9a,0x98,0xc7,0x5e,0x8a,0x27,0x4e,0xe4,0xc9,0x36,0xc6,0x23,0x7c,0x7a,0x7f,
-  0x9e,0x22,0xbe,0x0f,0x5d,0xb0,0xf0,0xb0,0x5d,0x13,0xb7,0x4e,0xf0,0x7f,0x55,0xbd,
-  0x6a,0x2e,0xc2,0x17,0x6a,0x95,0xf1,0xd5,0x2e,0x71,0xf8,0x56,0x6a,0x34,0x7c,0xbf,
-  0xe1,0x1c,0xa6,0xf8,0x79,0xee,0x08,0x4f,0xe8,0x0f,0xd2,0xc9,0x7d,0x7d,0x8e,0x44,
-  0xfe,0xa9,0xe8,0x11,0x3c,0x0a,0x08,0x23,0x3d,0xd4,0xc8,0x98,0x9b,0xf9,0x1a,0x68,
-  0x8f,0xc4,0x3d,0x9a,0x32,0x91,0xff,0x29,0x3a,0x88,0xd6,0x77,0x4f,0x60,0xbd,0xf4,
-  0x65,0x23,0xa8,0x53,0x99,0x11,0x10,0xb8,0x12,0x76,0xbd,0x4d,0xa1,0x89,0xdc,0x16,
-  0xb6,0xf0,0x3f,0x06,0x3c,0x5a,0xb0,0xdb,0x98,0x99,0x54,0x56,0xb0,0x77,0xd0,0x5e,
-  0x43,0x33,0x33,0xc8,0x66,0x48,0x8c,0xef,0x88,0x2b,0x41,0xf6,0x8e,0xba,0x97,0xcf,
-  0xd5,0xe4,0x01,0x36,0xc1,0xff,0x45,0x4d,0x18,0xe7,0xbb,0x7a,0xf1,0x35,0xdd,0xe1,
-  0x9c,0xca,0x59,0x0e,0xb9,0x41,0xd7,0x1a,0x15,0x37,0x7b,0x9d,0x2a,0x70,0x82,0x4d,
-  0x9b,0xc0,0xff,0x5c,0xec,0x5b,0xc0,0x1d,0xb5,0x8f,0x9d,0x82,0x57,0xf8,0x9c,0xa8,
-  0xe7,0xa3,0xa9,0x0b,0xf5,0x57,0xb4,0x72,0xee,0x78,0x4f,0x7c,0x8b,0x7f,0xc1,0xe7,
-  0xc6,0x77,0x86,0x2f,0xe3,0x7f,0x3a,0x29,0xfe,0xc7,0xd0,0xd1,0x1e,0x81,0x5b,0x1a,
-  0x9b,0x93,0xfa,0xb0,0xec,0x67,0x8e,0xc6,0x86,0x64,0x74,0x38,0xe4,0x9f,0xfe,0x97,
-  0xf8,0x1f,0x2a,0x8b,0xed,0xa1,0x44,0x06,0xf2,0x86,0x94,0xc0,0x53,0x71,0x5f,0xed,
-  0x66,0xaa,0xa8,0x7c,0xa8,0xc7,0x8c,0x8f,0x65,0x13,0xf9,0x9f,0x70,0x7b,0x0b,0x6a,
-  0xdb,0x37,0x09,0x96,0x90,0xda,0x6d,0xe2,0x0b,0x4c,0x3e,0x47,0x6e,0xea,0x71,0x85,
-  0x94,0x98,0x68,0xa9,0x8f,0x24,0x8c,0xfa,0xbf,0xa8,0x3f,0x1a,0xe1,0x1f,0x77,0xcc,
-  0x69,0xa7,0x46,0x45,0xe6,0x7c,0x61,0x74,0x90,0x9d,0xc9,0xff,0xe8,0x77,0x90,0xd3,
-  0x87,0xe2,0x85,0xb4,0xba,0xc2,0x02,0x96,0xe5,0x6c,0x62,0x25,0x54,0x2f,0xe8,0xa4,
-  0xd0,0x44,0x85,0x4a,0x54,0x16,0x98,0xe8,0xff,0xe2,0x76,0x8e,0xa7,0x3b,0x08,0x66,
-  0xd9,0x79,0x4d,0x3a,0x4c,0xf1,0x3f,0x71,0x91,0xea,0x43,0x76,0x50,0x20,0x90,0x05,
-  0xff,0xe4,0x9a,0xf1,0x3f,0xa1,0x49,0x43,0xca,0x49,0xe9,0x82,0xfe,0x13,0x7d,0x39,
-  0x15,0x4a,0xfa,0x03,0xe2,0x9f,0xcd,0xc7,0xa8,0x62,0x2d,0xbb,0x91,0x80,0xb4,0xb5,
-  0x3e,0x76,0x3f,0xfc,0xd8,0x5d,0xb5,0xf8,0xea,0x90,0xd8,0x06,0x87,0x60,0x9e,0xee,
-  0x78,0xe3,0x81,0x92,0xf0,0x05,0x7b,0x95,0xd9,0x1f,0xb6,0xf0,0x42,0xf6,0x2e,0xdd,
-  0xde,0x67,0xc5,0x3f,0xa3,0xfc,0x8f,0x59,0x0d,0x72,0x13,0xe2,0x1f,0x39,0xee,0xd4,
-  0xf8,0x30,0x94,0x71,0x59,0x10,0x6b,0xe3,0x9d,0xc4,0x78,0x4c,0xf4,0x7f,0xed,0xb0,
-  0x79,0x82,0xf8,0x52,0xc7,0xf4,0xfb,0x99,0x76,0xb3,0x4d,0x5d,0x27,0xa1,0xb0,0xf6,
-  0xd4,0xe0,0x89,0x93,0x62,0x4f,0x71,0xea,0xc7,0x64,0xb3,0xf8,0xbf,0x26,0xb7,0xc9,
-  0x28,0xed,0x8d,0x66,0x44,0x9b,0x91,0xfb,0x25,0x57,0x30,0x18,0xb3,0x95,0xb8,0xf7,
-  0xb9,0xcb,0x6a,0xdc,0x5b,0xd8,0x6a,0xe1,0x05,0xe6,0xba,0xb9,0x30,0x66,0xf5,0x7f,
-  0x11,0xfe,0xd1,0x11,0x2f,0xfd,0x54,0x7c,0x02,0x9f,0x3f,0xa1,0x6f,0x6a,0x11,0x67,
-  0x0a,0x23,0x8d,0xd3,0xc3,0x2d,0x2d,0x0d,0x33,0xe1,0x84,0xea,0x0b,0x7b,0x62,0xc5,
-  0xee,0xcb,0xf8,0x1f,0x47,0x0b,0xf1,0x3f,0x31,0xff,0x4a,0xc7,0x23,0x54,0x4f,0x32,
-  0xea,0x0f,0x3b,0x54,0x65,0xcc,0x15,0x78,0x19,0xff,0xe3,0x93,0x37,0x36,0xae,0xd7,
-  0xa5,0xb7,0x71,0xfd,0xf3,0x78,0x7e,0x52,0x1e,0xd6,0xef,0xc1,0x2b,0x8a,0x06,0xc7,
-  0xeb,0x7d,0x85,0x9e,0xcb,0xfb,0xc3,0x16,0xef,0x90,0x3f,0x71,0xd4,0xb2,0x37,0x58,
-  0x31,0x97,0x07,0xd6,0x0d,0xc0,0x81,0xc8,0x3f,0x6d,0x95,0x07,0x99,0x5b,0xdd,0xc4,
-  0xaf,0x45,0x13,0xf5,0xb2,0xfe,0xb0,0xc9,0xa1,0x9b,0x81,0xd9,0xe5,0xad,0x10,0x7e,
-  0x0f,0xe5,0x73,0xaf,0xd4,0x21,0x78,0x04,0xf7,0xfc,0x0d,0xcb,0x50,0x43,0x69,0x90,
-  0xe3,0x75,0x4d,0xe0,0x7f,0xe2,0x45,0x43,0x78,0x0c,0xa7,0xc3,0xa3,0x52,0x51,0x03,
-  0x15,0xca,0xe6,0xbb,0xa3,0x6e,0x34,0x5b,0x22,0xf7,0xf5,0x6d,0xd2,0xaf,0xa1,0xd2,
-  0x49,0x19,0xfd,0x61,0x89,0x84,0x49,0x96,0x06,0x03,0x79,0xec,0xdf,0x10,0xff,0xe4,
-  0xad,0x61,0xef,0x6a,0x7f,0xe6,0xa5,0xda,0xc6,0x15,0x93,0xbe,0x15,0x59,0xcc,0xe7,
-  0x69,0xf7,0x5f,0xc6,0xff,0xd4,0xfa,0xf9,0x66,0x6a,0xf3,0xfd,0xa7,0x14,0xfb,0x4a,
-  0x44,0xd0,0x02,0xc0,0xc1,0x4e,0xd4,0x80,0x07,0x8c,0xbc,0x89,0xfd,0x61,0x2f,0x45,
-  0xcb,0x4f,0xe4,0xbe,0x25,0xbe,0x03,0x87,0xf9,0xee,0xef,0x20,0xda,0xb9,0x53,0xbf,
-  0xc4,0xfd,0x1a,0x0e,0x2e,0xc1,0x17,0x08,0x8d,0x36,0x12,0xfe,0x49,0xaf,0x3f,0xf1,
-  0x39,0x5a,0xb7,0x7c,0x5b,0xa0,0x17,0x22,0xf1,0xe2,0xf9,0x72,0xcc,0x96,0xc7,0x77,
-  0x77,0x96,0xba,0xa9,0x3e,0x36,0xec,0x91,0x8b,0x64,0x1c,0x58,0xfc,0x5f,0x2a,0xce,
-  0x47,0x98,0x27,0xdf,0x7a,0xf0,0x6d,0x6d,0x7d,0xac,0x28,0xa8,0xdc,0x15,0xc1,0x15,
-  0x28,0x29,0x0d,0xca,0x5f,0x63,0x6f,0xeb,0x2f,0x42,0x71,0xac,0x69,0xc8,0x8a,0x7f,
-  0xa8,0x3f,0x88,0xa1,0x11,0x7b,0x66,0x76,0xd7,0x05,0xc5,0xce,0xf2,0xf4,0xdd,0x8d,
-  0x1e,0xca,0xdb,0x7f,0x2d,0xd6,0xa1,0xd3,0x7a,0x4e,0xe8,0x0f,0x72,0xc9,0x40,0xb1,
-  0xb0,0x3f,0x90,0x04,0x2e,0xb7,0x1a,0x73,0xa5,0xea,0x4a,0x69,0x17,0x54,0xc6,0xed,
-  0xfb,0xc5,0x4b,0xfc,0xb3,0x40,0x07,0xcf,0xf5,0x66,0xf6,0x07,0x81,0x73,0x9a,0xdf,
-  0x28,0xdb,0x23,0x26,0x37,0x20,0x30,0x2e,0xb0,0x77,0x88,0x1b,0xe1,0x5c,0xd8,0x9f,
-  0xf8,0xd7,0x67,0x49,0xde,0xca,0x7e,0x5e,0x76,0x79,0x7f,0x58,0xdc,0x54,0x6f,0x36,
-  0x7c,0x26,0x1d,0xe2,0x66,0xd9,0x67,0x8a,0xff,0xf9,0x21,0xb7,0xd7,0x3d,0x73,0x2f,
-  0xf5,0x87,0xe5,0xf6,0x21,0xf1,0xb2,0xfe,0x20,0x09,0x14,0x1a,0x07,0x29,0x0c,0x55,
-  0x0b,0xee,0x6c,0xf5,0x40,0x73,0xcf,0x82,0x76,0x77,0x5b,0x36,0x41,0x9d,0x78,0x5c,
-  0xee,0x14,0xc3,0x97,0xf5,0x87,0x9d,0x16,0x63,0x49,0xbd,0x45,0x9b,0x95,0xcc,0x89,
-  0x4c,0xc5,0xf9,0x8d,0x73,0xe2,0x72,0x7d,0x04,0xe7,0x73,0xd4,0x80,0xbb,0x2e,0xef,
-  0x0f,0xd2,0xd8,0xac,0x3a,0x0f,0x42,0xd4,0x1b,0x97,0xf1,0x34,0xd9,0xb5,0x86,0x55,
-  0xab,0x5b,0x70,0x7d,0xec,0xa1,0x0e,0x0a,0x24,0xf6,0x5a,0xe4,0x0f,0xe0,0xf3,0xfc,
-  0x99,0xd0,0x4e,0xcc,0x95,0xd4,0xdf,0xcc,0x59,0xb0,0xc9,0xde,0x28,0xde,0xa8,0x1f,
-  0xa9,0x75,0xc5,0x36,0x6e,0x11,0xef,0x25,0x68,0xc4,0xed,0x89,0x62,0x4b,0x7f,0x90,
-  0x94,0xfd,0x2e,0x3b,0xfa,0x1a,0x86,0x5a,0x2e,0x68,0x7e,0x98,0x7b,0xf0,0xb1,0xf3,
-  0x91,0x73,0xda,0x8d,0x92,0xe3,0xe0,0xb7,0xcf,0x6f,0x7c,0x07,0x6e,0xe4,0x8e,0xba,
-  0xea,0x4c,0xff,0xd7,0xbb,0xb1,0xaa,0x24,0x22,0x94,0x19,0xf0,0x2e,0x94,0x27,0x1d,
-  0xdd,0xe2,0xe9,0xc6,0x5e,0x54,0x2b,0x9b,0x5f,0x12,0xbd,0xea,0xab,0x14,0xff,0xfc,
-  0x1b,0x31,0x03,0xff,0xa8,0x37,0x40,0x59,0x12,0x41,0x2c,0x29,0x7a,0x57,0x52,0x59,
-  0xcf,0x4e,0x70,0xb9,0xb1,0x2c,0xde,0xbc,0x9e,0x15,0xcb,0xcf,0x34,0x2e,0x48,0x2a,
-  0x0f,0x41,0x06,0xfe,0x81,0x07,0x34,0x44,0x3b,0x31,0xb4,0xc7,0xa9,0x4d,0x8c,0x02,
-  0x2e,0xca,0xff,0xf2,0xe8,0x39,0xc0,0xa8,0x03,0x2f,0x5d,0x99,0x80,0x7f,0x5e,0x30,
-  0xf9,0x1f,0xed,0x0e,0x33,0x5a,0x38,0xa7,0xe5,0xe0,0x47,0x52,0x54,0x35,0xfb,0xcd,
-  0xb9,0xe0,0x99,0xd0,0x2c,0x8a,0x30,0xcf,0xc4,0x3f,0xbf,0x67,0x7e,0xc3,0x1e,0x17,
-  0xef,0x80,0x7f,0xd3,0x7d,0xc4,0xe7,0x7c,0x28,0x1f,0x39,0xe8,0xf7,0x3a,0x5a,0x1a,
-  0x8a,0xe1,0x25,0xe8,0xa0,0xfe,0x32,0x19,0xf8,0x47,0x1d,0xad,0x8f,0xbd,0x1f,0x46,
-  0xe2,0x55,0xc6,0xe6,0xa4,0x68,0xa0,0x61,0x52,0x15,0x73,0x68,0xb8,0xb5,0x2e,0xc8,
-  0x55,0x46,0x8e,0x77,0xda,0x65,0xf1,0x3f,0xa9,0xa4,0xc2,0x23,0x74,0xff,0x6d,0xcd,
-  0x45,0xd5,0x47,0x74,0x34,0xdb,0xb7,0xa2,0x22,0x3b,0xa2,0xfa,0x08,0xb1,0x67,0xe0,
-  0x1f,0xe9,0x86,0x14,0x69,0xfc,0x49,0xac,0x59,0xa3,0xf8,0xf9,0xec,0x62,0xbd,0xb9,
-  0xa4,0xac,0x27,0xf7,0x11,0x56,0xa2,0x36,0x91,0xc7,0xb6,0x83,0x5d,0x16,0xff,0x43,
-  0x8b,0x70,0x94,0x99,0xdd,0xa8,0x4b,0x7c,0x51,0x95,0x27,0x3d,0x0b,0x0b,0xb5,0xc5,
-  0x1e,0xb5,0xc1,0x70,0xd3,0x4f,0x13,0xe3,0x7f,0x4a,0xfb,0x95,0xbf,0x41,0x3c,0xb0,
-  0x6e,0x6d,0x51,0x52,0xb9,0xf9,0xe0,0x83,0xb0,0x16,0xbf,0x57,0x4e,0xf0,0x0a,0x27,
-  0xac,0x6f,0x2c,0xa5,0x8e,0x21,0x13,0xe3,0x7f,0x2a,0x0d,0x34,0x33,0xf1,0x3c,0xea,
-  0x5e,0xc3,0x11,0x63,0xf7,0xeb,0x91,0x90,0x1f,0x61,0x33,0xde,0xf8,0x25,0x61,0x61,
-  0xf7,0xd5,0x45,0xca,0x84,0xf8,0x1f,0xc1,0xe4,0x4b,0xa9,0xb0,0x98,0x19,0x08,0x74,
-  0x2f,0xbb,0x44,0x3b,0xf0,0xd7,0x42,0xd2,0xf4,0x7f,0x65,0xe4,0x7f,0x8d,0xc6,0xff,
-  0x24,0xed,0xee,0xd1,0x68,0xf3,0xe5,0xc9,0xe2,0xf9,0x30,0x5c,0xe4,0x3f,0x86,0x08,
-  0xea,0xbc,0xfc,0x27,0xbc,0xf2,0x77,0x09,0xf1,0xf2,0xf8,0x1f,0x77,0x48,0xbc,0x1d,
-  0x1e,0x23,0xf6,0x38,0x2c,0x16,0xc0,0xb3,0xb5,0xa5,0xbd,0x4a,0xd8,0xf9,0xb6,0xf4,
-  0x1c,0x5c,0x4b,0xf9,0x14,0x97,0xc7,0xff,0x44,0xd7,0x30,0x2a,0x0c,0x8e,0x40,0xa8,
-  0x90,0xd2,0xdc,0xe2,0xa5,0x03,0x0a,0xc5,0xff,0xbc,0x48,0x81,0x40,0xf7,0x4e,0xc4,
-  0x3f,0x84,0xae,0x17,0xe2,0x7e,0x7b,0x06,0x9e,0x30,0x94,0x6d,0xec,0xef,0x61,0xb7,
-  0xe1,0x39,0xa1,0x3c,0xcc,0x5e,0x85,0x8e,0xd3,0x25,0xd4,0xba,0xe8,0xf2,0xf8,0x1f,
-  0xf9,0x23,0xd1,0x0d,0xef,0x50,0x1b,0xee,0x4f,0xc4,0x1b,0xe0,0x6c,0xd2,0x9f,0xc0,
-  0xe7,0x3f,0xcb,0xbf,0x10,0x3a,0xf8,0xe6,0x01,0xe5,0x2f,0xf8,0xbf,0x88,0xed,0x19,
-  0xe0,0x15,0xe0,0x68,0x54,0x76,0xe8,0x28,0x88,0xb2,0x1d,0x8d,0x14,0xff,0x63,0xfe,
-  0xd4,0x30,0x11,0xff,0x98,0xd6,0xfd,0x07,0x66,0x34,0xac,0xfd,0xe1,0x86,0x59,0xda,
-  0x21,0x8e,0xfa,0xae,0xe5,0x25,0x49,0x32,0xe3,0x63,0xd5,0xcb,0xf0,0x0f,0x82,0x96,
-  0xff,0xc9,0xba,0xa3,0x4d,0x8d,0x2e,0x3d,0xf7,0x41,0x36,0x2b,0x70,0x44,0x2d,0xeb,
-  0x6e,0x36,0xf3,0xb9,0x1a,0xe7,0xe8,0xe2,0x36,0x5b,0x66,0x7f,0xb4,0x5d,0x14,0x94,
-  0xbb,0x8d,0xf5,0xeb,0x4d,0xda,0x2a,0xa2,0x7d,0x66,0x4a,0x4d,0xc4,0x60,0x6f,0xc5,
-  0x13,0x9a,0x53,0x88,0xb7,0xfa,0xe9,0x65,0xf8,0x27,0x15,0xf6,0x23,0xd4,0x1b,0xef,
-  0xe9,0x94,0xff,0x25,0xd5,0x53,0x1b,0xac,0xf9,0x36,0x09,0x25,0x9e,0x9b,0x80,0x10,
-  0xb3,0xe2,0x1f,0x7b,0x27,0x6a,0x9f,0xbf,0x4d,0xd1,0x3e,0x66,0x35,0x42,0x4d,0x1a,
-  0xcf,0xff,0xa2,0x8c,0xf8,0x4c,0xfc,0x63,0xfa,0xbf,0xec,0x04,0x72,0xba,0x53,0x81,
-  0xd0,0xc7,0x94,0xcf,0x89,0x21,0x59,0xe4,0x38,0x96,0x7f,0x21,0x65,0x78,0x1e,0x9b,
-  0x80,0x7f,0x46,0xf4,0x72,0xdd,0x11,0x42,0x74,0xf4,0xb1,0xee,0xd3,0x97,0xf6,0x35,
-  0xcc,0xd7,0x4e,0x0b,0x7e,0x7d,0x39,0xe5,0xbf,0x7f,0x4e,0xeb,0x73,0x2c,0x13,0xff,
-  0x98,0xec,0xba,0xc2,0xb3,0x93,0x3c,0x8a,0xa6,0xb9,0x62,0xd2,0x3e,0x88,0x7f,0x10,
-  0x11,0x15,0xe9,0xc4,0xbf,0x29,0x8d,0x97,0xc5,0xff,0xa4,0xc2,0x7e,0xb4,0x2d,0xf8,
-  0xe2,0xcd,0xce,0x88,0x44,0x34,0xbb,0xae,0x5c,0x11,0x21,0x2a,0x4c,0x5b,0xa4,0xcc,
-  0xc8,0xcb,0xc0,0x3f,0xb0,0x4b,0xa2,0x6e,0xbc,0xac,0x5f,0x7a,0xb8,0x68,0xd6,0xa2,
-  0xe6,0x18,0x94,0x68,0xfb,0x4a,0x28,0xff,0x8b,0x8d,0xbb,0x1a,0xad,0xfd,0xd1,0xcc,
-  0xfa,0x96,0x08,0x62,0x59,0x37,0xfc,0x81,0x06,0x8f,0x08,0xb3,0xa4,0x14,0xc3,0xa3,
-  0x5c,0x93,0x8a,0x6f,0xb7,0xf2,0x3f,0xed,0x16,0xfe,0xc7,0x75,0x8a,0xda,0xa2,0x39,
-  0xc5,0xfe,0x96,0xeb,0x29,0x10,0x68,0xeb,0x68,0x22,0x98,0x63,0xeb,0x5f,0xf2,0x7f,
-  0x45,0x44,0xcd,0xcc,0xbf,0x5b,0xde,0x28,0xee,0xd0,0x70,0xd9,0xbd,0x8e,0xc6,0x62,
-  0x0a,0x04,0xea,0x20,0x57,0xac,0x6d,0x02,0xfe,0x99,0x4b,0xd9,0x5e,0x9d,0xf2,0x3b,
-  0x3b,0x5c,0x34,0xb8,0x1e,0xcc,0xb0,0xe7,0xf7,0xd8,0x00,0x1a,0x1a,0x74,0xc5,0x66,
-  0x9b,0xe8,0xff,0xe2,0xca,0x8d,0x4c,0x86,0x9f,0x51,0xb6,0xbb,0x93,0x4d,0x82,0x06,
-  0xa1,0x84,0x0e,0x4e,0x6f,0xaa,0xc2,0xea,0x2e,0x0b,0xff,0x63,0xe2,0x1f,0xed,0x07,
-  0x5c,0x19,0x66,0x2d,0xf0,0x90,0x36,0xd3,0x50,0xd4,0xc8,0xcf,0xd4,0xcd,0x7c,0x66,
-  0x17,0x5a,0x34,0x47,0x61,0x73,0xca,0x1f,0x54,0x9b,0xe9,0xff,0x8a,0xdf,0x18,0x77,
-  0xac,0x99,0xe4,0x87,0xbe,0xf8,0xb3,0xc9,0xcd,0x41,0x65,0x01,0x7b,0x99,0x5f,0x1b,
-  0xfe,0xca,0x8a,0x49,0xef,0xb0,0x57,0x23,0xf3,0x28,0x3e,0xf9,0xfb,0x13,0xe2,0x7f,
-  0x28,0xac,0xf7,0x2b,0x83,0xea,0x59,0xb5,0xa2,0x0b,0x0d,0xf9,0x35,0x70,0x36,0x5c,
-  0xd1,0x33,0xa9,0xef,0x9a,0xf1,0xf8,0xde,0xc8,0x04,0xfc,0x73,0x43,0xdc,0x71,0x5c,
-  0xf4,0xc3,0x68,0xb6,0xce,0x17,0x70,0xd1,0xa8,0x4a,0x38,0x06,0x44,0x3f,0xff,0x33,
-  0x5d,0x19,0x99,0xd8,0x1f,0x6d,0x72,0x11,0x57,0x6e,0x13,0x6f,0xd7,0x37,0x53,0x3c,
-  0x4f,0x88,0xf5,0xe9,0xcf,0x8a,0xd7,0x1b,0x79,0x3a,0x9b,0xae,0xed,0xd5,0x6f,0x34,
-  0x94,0x1f,0x4e,0x8c,0xff,0xe1,0xb3,0xd1,0x3a,0x63,0xd3,0xd9,0x3a,0x99,0xe4,0x15,
-  0x3b,0x06,0x7b,0xf4,0x52,0x09,0x07,0xb7,0xd7,0x9b,0xfe,0xaf,0xf0,0x3a,0x98,0xe0,
-  0xff,0xd2,0xb8,0xe2,0x89,0x2c,0x83,0x0d,0x51,0x5c,0x3d,0x2d,0xf2,0x47,0xb4,0x70,
-  0xdd,0xfd,0xb6,0xf6,0xad,0xcb,0xea,0x77,0xc3,0x4e,0x43,0x89,0x46,0x26,0xf6,0x47,
-  0xab,0xe0,0x8e,0x9d,0xcc,0x23,0x1f,0xe1,0xa6,0xfe,0x3a,0xa9,0x99,0xaf,0xf9,0x88,
-  0xf2,0x0f,0x88,0x67,0x3a,0xc8,0xd5,0x35,0x67,0xa2,0xff,0x8b,0x3b,0x1e,0xcf,0xef,
-  0x87,0x73,0x8b,0x70,0xda,0x16,0xf1,0x14,0xcd,0x07,0x34,0xa3,0x46,0x43,0xa3,0xf7,
-  0x5c,0xde,0x1f,0x8d,0x3b,0x8c,0xe2,0x2f,0xa8,0x11,0x73,0xaa,0xf1,0xc1,0x6b,0x50,
-  0xb5,0xc8,0x1e,0x53,0x2a,0xe1,0x62,0xb4,0x9c,0x32,0xaa,0x32,0xf1,0xcf,0x8b,0x54,
-  0x5f,0xbd,0x49,0xfd,0x9c,0xbf,0x98,0x4d,0xfa,0x2b,0xf2,0x9e,0xb0,0x01,0x3c,0x85,
-  0xee,0x28,0xca,0x93,0xf7,0xd5,0x05,0x86,0x63,0xe3,0xe5,0xfd,0xd1,0xb8,0x12,0x83,
-  0x41,0xdd,0xcc,0xee,0xe9,0x64,0x1f,0x78,0x37,0x08,0x65,0x71,0xb9,0x3d,0xe2,0x49,
-  0xe5,0xfb,0x64,0xf0,0x3f,0x29,0xfc,0xc3,0xe9,0x3c,0xa6,0x02,0xcf,0x00,0xa8,0x2c,
-  0xff,0x9d,0x50,0xa8,0x5e,0x61,0x87,0xa7,0xcc,0x7a,0x0b,0x4e,0x4b,0x7f,0xb4,0x5c,
-  0x13,0xff,0xa0,0x91,0x35,0xa9,0x5f,0xa6,0x68,0x0d,0xd3,0xf0,0x89,0x32,0xd3,0xed,
-  0xee,0x31,0xa9,0x21,0x3c,0x4a,0x30,0xc1,0xff,0x55,0xc5,0x97,0xeb,0xe2,0xb1,0xb1,
-  0x46,0x0f,0x43,0x8c,0x9c,0x55,0x39,0x86,0x78,0x5e,0xa2,0xfc,0xa6,0xbc,0xbe,0x8c,
-  0xf8,0x9f,0xf3,0xe1,0xde,0x79,0xe5,0xf6,0x65,0x2f,0x7d,0x7d,0x98,0x9f,0xf2,0xfe,
-  0x73,0x32,0x77,0x8d,0x30,0x04,0x1f,0x22,0x50,0x94,0x86,0xc5,0x05,0xf0,0xb9,0x51,
-  0xbe,0xc1,0x7e,0xd0,0x82,0x7f,0x0c,0xf5,0x63,0x88,0x96,0xbb,0x36,0xca,0x0d,0x81,
-  0x8f,0xf4,0xa7,0xee,0x72,0x25,0xa7,0x76,0xb2,0xf7,0x03,0xcd,0xfc,0xb1,0x64,0x6e,
-  0x27,0xfb,0x05,0xbd,0xef,0x2e,0x79,0x1f,0xf3,0xa6,0xf3,0xbf,0xb2,0x7a,0xeb,0x23,
-  0x50,0x12,0x95,0x5d,0xcc,0x60,0x3b,0xb8,0xdb,0xb0,0x79,0x7d,0xdd,0xf0,0x0c,0xf9,
-  0x13,0xbd,0xb8,0xe9,0x77,0x69,0x1a,0xc5,0x3f,0xfb,0xac,0xf8,0x87,0x35,0x45,0x66,
-  0x0d,0x21,0xbe,0x7a,0x9f,0xd8,0x36,0xe3,0x9b,0x09,0xd6,0x1f,0xa1,0x42,0xd9,0x39,
-  0x89,0xc0,0xce,0xac,0x17,0x84,0xd6,0x78,0x46,0x7f,0x10,0x03,0xf1,0xcf,0xe1,0x9e,
-  0x05,0xf3,0xec,0x3b,0xf3,0x3f,0x62,0xa7,0xf8,0x1c,0xc3,0x96,0xa8,0xee,0x82,0x6f,
-  0xe3,0x3f,0xb4,0x27,0x84,0x52,0x92,0x3f,0x3e,0xcf,0x16,0x45,0xb5,0xf8,0xbf,0x76,
-  0x4a,0x94,0xa6,0xf1,0x29,0x47,0x3c,0x30,0x88,0x8a,0x3e,0xef,0x4c,0xfe,0x67,0x70,
-  0xa9,0xa8,0xca,0x28,0x1b,0x12,0x4d,0xf9,0x4c,0x15,0xd7,0x33,0xeb,0x63,0x1f,0x06,
-  0x5f,0x81,0x67,0x8f,0xf2,0x65,0xb4,0xef,0x16,0x90,0x36,0x9f,0x49,0x8a,0x3e,0x69,
-  0x4f,0x7c,0x7d,0xb0,0xee,0x90,0xda,0x01,0xcb,0x0a,0x33,0xf8,0x9f,0x4a,0xb4,0xd6,
-  0x5d,0x3f,0x42,0xb3,0x7d,0x0e,0xe1,0xe7,0xae,0xa5,0x09,0xe2,0xaf,0xc2,0x45,0xf8,
-  0xbe,0x81,0x41,0x78,0x93,0x6b,0xdb,0xe4,0x3d,0xa8,0xaf,0xc7,0xf6,0x43,0x32,0xeb,
-  0x0e,0x68,0x51,0x5d,0x9a,0x6c,0x8f,0xc8,0xce,0x87,0x53,0xd5,0x36,0x36,0xc2,0x63,
-  0x1b,0xb4,0x37,0x64,0xea,0x67,0xf1,0x30,0x8f,0xe3,0xfa,0x44,0x2a,0xc6,0xe5,0x4f,
-  0xb2,0x7e,0x06,0x6c,0xfb,0x75,0x51,0x5c,0xfe,0x66,0x60,0x2a,0xac,0x6f,0x45,0xfc,
-  0xf3,0xe3,0xbc,0x47,0xab,0x7f,0x19,0xd3,0x92,0xb0,0x26,0x70,0x51,0x7a,0xc8,0xc0,
-  0x9f,0x16,0xb2,0xca,0x0c,0xfc,0xf3,0x1b,0x48,0x18,0xcb,0x4a,0xf2,0xe5,0xc8,0x9b,
-  0xf1,0xf9,0x78,0x7f,0x71,0xad,0xfe,0x3e,0x95,0xc5,0xf6,0x8a,0xbd,0xfc,0xd7,0xe0,
-  0xe5,0x1e,0x35,0x33,0xfe,0xd9,0xf5,0x29,0x38,0x0c,0xc7,0x67,0xc2,0xb0,0x94,0x8a,
-  0xf6,0x11,0x6f,0xd3,0xff,0x0e,0xb7,0xcd,0x8b,0x43,0xe2,0xdb,0xe6,0xd6,0x9a,0x3b,
-  0x01,0xff,0xa8,0xe7,0xb8,0xe9,0x94,0x0f,0xca,0x54,0x28,0x69,0x79,0x02,0x25,0x7c,
-  0x17,0xf8,0xde,0xcb,0xee,0xac,0xfe,0x25,0xbf,0x99,0x88,0x20,0x6e,0x8d,0x7f,0xde,
-  0xb2,0x9d,0x9b,0x42,0x63,0x88,0x15,0x0a,0xaf,0x0a,0x66,0xb4,0x40,0x01,0xd1,0xce,
-  0x7d,0xf2,0x10,0x9b,0xbe,0xe4,0x7e,0xd8,0xc1,0x95,0x3a,0xf0,0x59,0xce,0xfb,0xa3,
-  0x14,0x6f,0x99,0x54,0xee,0xc5,0x2d,0xbf,0x3e,0x62,0x3a,0xfe,0xd6,0xc1,0x5a,0xa3,
-  0x38,0x69,0x1b,0x0e,0x3c,0x8a,0xc0,0xaf,0x28,0xae,0x14,0xa2,0x06,0x1c,0x5b,0x7f,
-  0x13,0xff,0x18,0xae,0x7e,0x65,0x0f,0xcb,0x55,0x1b,0xc2,0x66,0xf7,0xcf,0x6c,0xb9,
-  0x1e,0xe2,0xb4,0xdf,0xf2,0xea,0xea,0x55,0xad,0x0f,0xaf,0x64,0xe2,0x9f,0x8b,0xbc,
-  0x3c,0xe6,0x38,0x25,0x16,0xb2,0xa3,0x54,0x66,0x3f,0xce,0x5a,0x5c,0x87,0x05,0x17,
-  0xdf,0x14,0xaf,0x7e,0x1a,0x2d,0xca,0x72,0xee,0x48,0x36,0x4f,0xc0,0x3f,0x85,0x07,
-  0x9c,0x0e,0x54,0x23,0xda,0x00,0xf9,0xbf,0xea,0xc7,0xea,0x63,0xf3,0xea,0x13,0x92,
-  0x99,0x1a,0x7f,0x19,0xff,0xa3,0x53,0x90,0x4f,0xfe,0xac,0xc8,0xa1,0x54,0xdb,0xd0,
-  0x12,0xaa,0xef,0x4a,0x69,0x5c,0x83,0xf2,0x88,0x31,0x5f,0x97,0xd5,0x86,0x09,0xf8,
-  0x47,0x2f,0xab,0x73,0xc7,0xd8,0x2c,0xb9,0x49,0x30,0xa3,0x91,0x67,0x52,0x7e,0x25,
-  0xe5,0x73,0x9d,0x74,0xef,0x5a,0xe9,0xd2,0xdd,0x13,0xf1,0xcf,0x3e,0x0a,0x8a,0x36,
-  0x69,0xa2,0xd1,0x40,0xe8,0x32,0xea,0x0f,0x82,0x78,0x69,0x90,0x93,0xbe,0xb6,0xed,
-  0xb1,0xe0,0x1f,0x90,0xb2,0x60,0xd7,0x22,0x4f,0x48,0x9e,0x6f,0x2b,0x81,0x7a,0xdd,
-  0xb3,0x88,0x88,0x4a,0xda,0xa8,0x88,0x10,0x02,0xdd,0x78,0x2b,0xf7,0x22,0x9b,0x9a,
-  0x89,0x7f,0x46,0xf9,0x9f,0x62,0xcd,0x8c,0x76,0xf6,0x98,0xfd,0x29,0x52,0x11,0xb9,
-  0xa9,0x17,0x2f,0xb3,0xe2,0x9f,0xe3,0x57,0x9d,0x4c,0x79,0xbb,0xce,0x54,0x7f,0x0e,
-  0x17,0x6a,0x50,0x9b,0x87,0x10,0xff,0x5c,0x80,0x03,0x54,0xf1,0x06,0x11,0x11,0x5c,
-  0x17,0xfa,0x6a,0x26,0xfe,0x39,0xc9,0x5f,0xd3,0xcb,0x03,0x08,0x72,0xf6,0x6f,0xf8,
-  0xa3,0x5a,0xa5,0x6f,0x56,0x45,0x49,0x23,0x22,0xe8,0x0e,0xea,0x30,0xf2,0x1a,0xf8,
-  0x7a,0x50,0xbe,0xa5,0xf1,0xcf,0x1a,0xf5,0x04,0x8f,0xfe,0xa8,0x15,0xf1,0xcf,0x92,
-  0x22,0x68,0x57,0xcb,0x28,0xfe,0xd9,0x2d,0x6c,0x84,0x56,0x33,0xf0,0x80,0x2a,0x72,
-  0x64,0x29,0x2f,0x4f,0xe8,0x0f,0x5b,0xcf,0xb5,0x00,0x82,0x3a,0x5a,0x46,0xea,0xc7,
-  0x94,0x37,0x1f,0xd6,0xb2,0xf6,0x1a,0x72,0xfc,0x49,0xf5,0xee,0x95,0xba,0xb2,0x62,
-  0xb1,0xd3,0x12,0xff,0xd3,0x08,0x4d,0x92,0xab,0xcb,0xac,0xff,0xf3,0x54,0x0a,0xed,
-  0x90,0xeb,0xde,0x2c,0x94,0x7d,0x92,0x12,0x51,0x03,0x4a,0x5f,0x26,0xfe,0x61,0x87,
-  0x54,0x5f,0xed,0xe6,0xed,0xce,0x59,0xae,0x26,0x82,0x31,0x85,0xc2,0x2c,0x9c,0x56,
-  0x81,0x1f,0xda,0xd9,0xaf,0x76,0x51,0xa0,0xd7,0x76,0x0b,0xfe,0x19,0x48,0xe1,0x9f,
-  0xa0,0xa3,0xe0,0xa5,0xfe,0x48,0x0a,0xed,0xe4,0x7f,0x50,0x33,0x02,0xf3,0xa9,0x2d,
-  0x9a,0x59,0x1f,0x1b,0x11,0x51,0xfe,0xd9,0x4c,0xfc,0xc3,0xfd,0x85,0x68,0xf6,0x9a,
-  0x65,0x07,0x08,0x6d,0x6a,0xd0,0x2b,0x39,0x05,0xf3,0x43,0x0c,0xab,0x3e,0xd5,0x63,
-  0x4c,0xc0,0x3f,0x07,0xa2,0x73,0x5b,0xe4,0x64,0xb6,0x0c,0x1b,0x84,0xb9,0x7c,0x69,
-  0x3c,0xdb,0xc6,0x22,0xfc,0xaf,0x13,0x72,0x3c,0xbf,0x10,0x3f,0x03,0xb9,0x7a,0xc5,
-  0x4c,0xfc,0xf3,0x02,0x78,0x92,0x32,0xd5,0xc7,0x6e,0x60,0x78,0xd3,0x05,0x28,0x76,
-  0xb6,0x82,0x76,0x97,0xec,0xc5,0xb7,0x24,0x2a,0x35,0xe8,0x0e,0x64,0xe0,0x1f,0xbe,
-  0x57,0xc0,0xf9,0x9a,0xd3,0xce,0xd6,0x6b,0xa5,0x1c,0x0f,0xf2,0x1f,0x84,0x75,0xba,
-  0x10,0x2b,0x5c,0xe3,0xba,0x0d,0x4d,0x9b,0xe2,0xb8,0xbc,0x3a,0xa3,0x3f,0xec,0x8c,
-  0x1e,0xca,0x7f,0xf7,0xac,0xc8,0x9e,0xc1,0x5e,0x3d,0x58,0x1a,0xdf,0xbc,0xc6,0xf6,
-  0x16,0xfc,0x8e,0x17,0x85,0x97,0xad,0x51,0xae,0x80,0x4b,0xf5,0xd7,0xa2,0xa9,0xa7,
-  0x64,0xe0,0x1f,0xe3,0x1c,0xcc,0x40,0xa5,0xb6,0xb4,0xad,0x60,0x34,0xbf,0xc9,0xcd,
-  0x3e,0x83,0x03,0xdc,0xe1,0xcd,0xa7,0x8a,0xd9,0xfb,0x79,0x46,0xfc,0x0f,0xac,0xbd,
-  0xa8,0x5e,0x8a,0xf8,0x4f,0x6e,0x1e,0x16,0x67,0xc0,0x11,0x3e,0x2f,0xee,0x19,0x60,
-  0xeb,0x02,0xbd,0x91,0x6b,0xc2,0x1b,0xd7,0x88,0xfe,0x9a,0x4b,0xfc,0x9a,0x13,0xf6,
-  0x1e,0xf1,0xb2,0xfe,0xb0,0x4f,0x28,0x1f,0xb1,0xe9,0x24,0x3f,0x9f,0x92,0x57,0x46,
-  0xae,0x80,0x46,0xbd,0xa8,0x47,0xbe,0x9b,0x5d,0xa5,0xef,0x5d,0x54,0x14,0x95,0x03,
-  0x91,0x4c,0xfc,0x83,0x68,0x27,0xa8,0xdc,0xca,0x6e,0xd4,0xd7,0xbb,0xf0,0xd7,0x30,
-  0x4b,0xf0,0x8d,0xbc,0x48,0xaf,0xad,0x9b,0x83,0x50,0x50,0x9d,0x69,0x04,0x57,0x38,
-  0xf5,0x0c,0xfc,0xe3,0x05,0x0f,0x5b,0xda,0xb2,0x55,0x82,0x06,0x43,0xe3,0x41,0x2d,
-  0x55,0xb7,0x91,0xe4,0x4f,0xae,0xb6,0x5b,0x2d,0xe1,0xf2,0x74,0x16,0xb4,0xe0,0x9f,
-  0xfd,0x29,0x3c,0xfc,0x08,0xae,0xbf,0xa3,0x8d,0x73,0x7b,0xa7,0xb8,0x51,0x7d,0x09,
-  0xe5,0x43,0x30,0x51,0x5d,0x22,0x9c,0xe5,0xf3,0xeb,0x3c,0x71,0xe5,0xfb,0x19,0xfd,
-  0x61,0xcf,0xaa,0xfe,0xbe,0xcd,0x71,0xb1,0xbf,0xe0,0xf7,0xd9,0x7e,0xbe,0x39,0x41,
-  0x6d,0x73,0x6b,0x2a,0xcc,0xb0,0x1f,0x7d,0x44,0xaf,0xd0,0x1c,0x5a,0x43,0x3c,0x03,
-  0xff,0x5c,0x20,0xef,0x4f,0x1f,0xe2,0xc3,0x23,0x72,0x15,0xb1,0x3d,0xc3,0xd4,0x16,
-  0x4d,0x97,0xcd,0x7e,0x97,0x71,0xff,0x2a,0x7b,0x42,0x49,0xe3,0x1f,0x8a,0xfc,0x7a,
-  0x9e,0x97,0x25,0x94,0x16,0xea,0x66,0x2e,0x94,0xd5,0xa3,0xb6,0x1d,0x60,0xcd,0x59,
-  0xda,0xb0,0x4c,0xfe,0xaf,0x53,0xbc,0x4c,0x0b,0x26,0x2c,0xfd,0xa9,0x09,0xff,0xec,
-  0xe3,0x65,0x2b,0x11,0xd4,0x79,0x78,0x33,0xd1,0xb0,0x71,0x33,0x4d,0xd2,0x15,0x56,
-  0x12,0xec,0x13,0x78,0x46,0xba,0x33,0x28,0xf3,0x4c,0xfe,0x07,0x4d,0x4a,0x4f,0x54,
-  0x69,0x65,0x35,0xac,0x21,0xcf,0x13,0x95,0x35,0x34,0x4c,0xea,0x25,0x6d,0xd1,0x1c,
-  0xf2,0x7f,0x3d,0x06,0x65,0x42,0x10,0xb2,0xad,0xf8,0xe7,0xde,0x31,0x7b,0x13,0xed,
-  0x6b,0x94,0xcf,0xee,0xb8,0x98,0xe4,0x87,0x98,0x4f,0xdf,0x4c,0x61,0x4e,0xa7,0x52,
-  0xa9,0x25,0x99,0xf8,0xe7,0x3c,0x5c,0x2d,0xa1,0x58,0x3e,0x2f,0x5c,0x72,0xfb,0x63,
-  0x8e,0xb0,0x38,0x04,0x9f,0x0b,0x37,0xea,0xb9,0xf4,0xbe,0x27,0x85,0x2a,0xf8,0x87,
-  0xbe,0x09,0xfc,0x4f,0xb7,0x56,0x4e,0x24,0xf3,0x15,0x14,0x5f,0xc7,0xed,0xc7,0x15,
-  0x3f,0xf4,0xce,0x2f,0xb7,0xdb,0x7b,0x8a,0x87,0xc0,0xe4,0x7f,0x86,0x32,0xf8,0x9f,
-  0x0f,0xa8,0x5a,0x38,0x65,0x33,0xcd,0x82,0x76,0x62,0x9b,0x3b,0x9d,0x65,0x70,0xdc,
-  0xdb,0x3a,0x5d,0x6e,0x67,0x27,0xdc,0xcd,0xf5,0x73,0xa8,0xff,0xbb,0x95,0xff,0xe9,
-  0x66,0xa8,0x74,0xba,0x65,0xaf,0xab,0x91,0xca,0x80,0x13,0x11,0xe4,0x49,0x05,0xda,
-  0xa9,0xcc,0x30,0x46,0xf3,0x01,0x2d,0xfc,0xcf,0xe4,0x36,0x15,0x57,0xcf,0x70,0xb7,
-  0x04,0xda,0xa0,0x9d,0xbb,0xde,0x93,0x3b,0x98,0x5b,0xff,0x19,0xfe,0x17,0x17,0xd2,
-  0x7a,0x8e,0xe6,0xdf,0xa5,0xf1,0x8f,0x36,0xa5,0x1b,0x8e,0x22,0x90,0xb4,0x9f,0x55,
-  0xda,0xa0,0xd7,0xf0,0x79,0xed,0xd4,0xf6,0xfd,0x90,0xe1,0x5b,0x65,0x6f,0xaa,0x7e,
-  0x5f,0x32,0x1b,0xd9,0x57,0x36,0x14,0x5a,0xf8,0x9f,0x3d,0x70,0x11,0x6e,0x84,0xb9,
-  0x7d,0xe2,0x8f,0xa8,0xff,0x32,0x38,0x86,0x85,0x8b,0x70,0x41,0xf2,0x53,0xfe,0x7b,
-  0x1f,0xbb,0x44,0xaa,0x7f,0x9f,0x62,0xe5,0x7f,0xda,0xf4,0x23,0xcc,0x17,0xb7,0xef,
-  0x16,0x3f,0x81,0x43,0x75,0xbe,0xa0,0x9d,0xea,0xb1,0x0f,0xeb,0x3e,0xe7,0xc6,0xfa,
-  0xea,0xfe,0xf0,0x39,0xad,0x63,0x22,0xff,0x33,0x0b,0x1a,0xe2,0x4f,0x73,0x99,0xac,
-  0xa7,0xdf,0xeb,0x73,0x28,0x1f,0x7f,0x00,0xf6,0xc9,0xae,0xbb,0xdd,0x2d,0xb8,0x7f,
-  0x76,0xa7,0xf2,0x01,0x2d,0xf1,0x3f,0x59,0xb7,0x00,0x4f,0x6a,0xba,0xbc,0x1d,0xba,
-  0xe5,0xa8,0xe1,0xda,0x63,0x12,0xa7,0xcf,0xcb,0xad,0xb1,0x1c,0x60,0x47,0x47,0x53,
-  0x33,0x10,0x2f,0xa5,0xf9,0x9f,0x2f,0x41,0x63,0x62,0x76,0x58,0xfe,0x1b,0xf6,0x05,
-  0x3c,0x18,0x99,0x9d,0x74,0xaf,0x09,0xfc,0x0e,0xf6,0x36,0x14,0x85,0x73,0xee,0x60,
-  0x6f,0xc0,0xde,0x54,0x3e,0x78,0x9a,0xff,0xa9,0x95,0x25,0xe8,0x2a,0xf2,0xf6,0x78,
-  0xbc,0x68,0x8f,0x1b,0x04,0x7b,0x54,0xf1,0x35,0xdc,0x51,0xde,0xac,0xdc,0xc9,0x88,
-  0x00,0xff,0x24,0x7b,0x0d,0x07,0x28,0x53,0x2d,0xf8,0x67,0x1b,0xbb,0xa0,0x95,0xd2,
-  0x47,0x3f,0x93,0x6a,0x9b,0x7b,0xda,0x6c,0xa4,0x7b,0xb5,0x6e,0x1b,0xa2,0xf8,0x67,
-  0x42,0xd4,0x5d,0x19,0xf8,0xa7,0x1b,0xf1,0xe1,0x42,0x2a,0xdb,0xde,0x86,0x1b,0xaf,
-  0x43,0x43,0xfd,0xde,0x6b,0xef,0x25,0xd8,0x10,0xc7,0x8d,0x47,0x19,0x0d,0x78,0x54,
-  0x2d,0xf8,0x47,0xd8,0x06,0x11,0x28,0x12,0xe4,0xba,0x50,0x01,0x5a,0xef,0x66,0xbf,
-  0xc5,0x63,0x70,0x3f,0x25,0x82,0xfd,0x90,0x0d,0x81,0x99,0xff,0x1e,0xce,0xe0,0x7f,
-  0x1e,0x2c,0x58,0x1f,0x99,0x19,0xcf,0x59,0xc3,0xde,0xa5,0x40,0xa0,0xb0,0x7c,0x3b,
-  0xbb,0x08,0x28,0x7f,0xbc,0xca,0x0f,0xd8,0xef,0xcc,0xd2,0x88,0x88,0x67,0xac,0xfc,
-  0x4f,0x37,0x1a,0xad,0x6d,0x3c,0x67,0x21,0x5b,0x26,0xef,0x96,0x35,0xaf,0xbb,0x10,
-  0xd7,0xb3,0x3e,0x3a,0x27,0xac,0x54,0xb2,0x93,0xe1,0x06,0xca,0x7f,0x2f,0x98,0x80,
-  0x7f,0x0e,0xef,0xb8,0x6e,0x4b,0xe9,0x07,0x62,0x8f,0x74,0xb1,0xa7,0xbc,0xcd,0x1e,
-  0x17,0x8f,0xc3,0x51,0x5e,0x1e,0x77,0xec,0xac,0x3e,0xcb,0x0e,0x12,0x7e,0x4b,0x66,
-  0xf2,0x3f,0xd9,0x43,0x70,0xbd,0x9c,0xc7,0x1b,0xcc,0xc6,0x55,0xd2,0xd5,0xbc,0x38,
-  0xc9,0x86,0x27,0xfb,0x55,0xc7,0x3a,0xf1,0x84,0x79,0x54,0xd1,0x7c,0xb6,0xe2,0x9f,
-  0x0f,0x22,0x6f,0x0a,0x3e,0xdd,0xa3,0x9a,0x65,0x97,0x7c,0xfa,0x52,0xb3,0x3f,0x88,
-  0xee,0xff,0xbe,0xbd,0x85,0xfa,0x87,0x9a,0xfc,0x40,0x06,0xff,0xb3,0x18,0xa8,0xc8,
-  0x0f,0xc1,0x18,0x78,0xd3,0x78,0x2e,0xa4,0xc4,0x5c,0xab,0x59,0x53,0xb4,0x2c,0xac,
-  0xed,0x67,0x1f,0xf2,0x26,0x0a,0x84,0xde,0x6e,0x91,0x3f,0x85,0x42,0x09,0x7b,0x58,
-  0xfe,0x76,0xb8,0x36,0x66,0x9b,0x05,0xcf,0xc8,0xae,0x55,0xa6,0x9b,0x0c,0x05,0x91,
-  0x0e,0x5b,0xd8,0xa0,0x6e,0xd6,0x4b,0xcc,0xe4,0x7f,0x4a,0x10,0x6d,0xee,0xd0,0x65,
-  0x62,0x7b,0x76,0xe9,0x6d,0x21,0x34,0xc4,0xfa,0x09,0x08,0xf5,0x51,0xfc,0x0f,0x9a,
-  0x7f,0x08,0x84,0x9c,0x1b,0x2c,0xf8,0x27,0x2b,0x0c,0xc7,0x85,0xf2,0x54,0x5b,0xae,
-  0x24,0x23,0xd8,0x23,0x24,0x59,0x0f,0x02,0x3f,0x7b,0xca,0xff,0x85,0x57,0x22,0xd5,
-  0x65,0x69,0xfe,0xe7,0x6f,0xce,0x48,0x88,0xf7,0x42,0x8e,0xdb,0x70,0xff,0xfc,0x61,
-  0x11,0x02,0x21,0x3c,0x68,0x08,0x84,0xaa,0x42,0xb9,0x89,0xea,0xcf,0x53,0xa2,0xfe,
-  0x8d,0x06,0x2b,0xfe,0x39,0x0f,0x1f,0xc7,0xcb,0xc3,0xf6,0x5f,0x8b,0x67,0xd4,0x0b,
-  0xb5,0xe5,0xcb,0xcc,0x30,0x98,0x8f,0xe5,0xf2,0x20,0x35,0x0a,0x09,0xbf,0x96,0xe2,
-  0x7f,0x32,0xf3,0xbf,0xa2,0xd0,0x2a,0xc8,0x6b,0x59,0x52,0xa6,0x6e,0x68,0x88,0x7f,
-  0x06,0x08,0xf6,0x10,0xfe,0x39,0x21,0x47,0x4d,0x6a,0x28,0x03,0xff,0xf4,0xe3,0xdb,
-  0x6a,0x5f,0x93,0x9d,0xac,0x5b,0xde,0xc5,0xb5,0x15,0xe6,0xfb,0xee,0x90,0xb5,0xaf,
-  0xbb,0xbd,0x6c,0x34,0xff,0xfd,0x8a,0x09,0xf9,0x5f,0xcd,0x35,0xad,0x7a,0x70,0x2b,
-  0xeb,0xe7,0xbb,0x47,0xdd,0x88,0x3a,0xda,0x5f,0xa1,0x9e,0x14,0xfe,0xc1,0x2b,0x0f,
-  0x66,0xe4,0x7f,0x35,0xea,0xa7,0x04,0x5f,0xd8,0xf3,0x86,0xf0,0x01,0x8c,0x48,0xbe,
-  0x5a,0x07,0xc5,0x77,0x9d,0xaa,0xf3,0xe9,0xf6,0x6d,0x02,0x31,0x7e,0x66,0x46,0x98,
-  0x35,0xff,0xeb,0x09,0x38,0x0d,0x07,0x82,0xa9,0xb6,0x68,0x36,0x1a,0x50,0xd8,0x0f,
-  0xdf,0x4f,0x6d,0x73,0x53,0xf1,0xcf,0xb8,0x1f,0x26,0xe4,0x7f,0xc9,0x3e,0xb0,0x37,
-  0x3e,0x60,0x86,0xfd,0x8c,0xc5,0x5f,0xf9,0x9c,0x38,0x38,0xe1,0x35,0xeb,0xff,0x88,
-  0x56,0xfc,0x23,0x55,0xe8,0x07,0x82,0x68,0x54,0x0e,0x20,0x08,0x39,0xa0,0x17,0xb7,
-  0xcb,0x71,0x5c,0x9f,0x5f,0xa4,0xda,0xc2,0xae,0x71,0xad,0x33,0xe6,0x70,0x65,0xd0,
-  0x96,0x99,0xff,0x45,0xdd,0x60,0x65,0x0f,0xdb,0xa8,0xef,0xee,0xd6,0x98,0x9b,0xcc,
-  0xae,0xfa,0xc2,0xb8,0x5e,0x8b,0xeb,0x33,0xd6,0x61,0xc7,0x9a,0xff,0x35,0x85,0xe2,
-  0xf7,0x0c,0xf9,0xcb,0xd4,0x0d,0x4d,0x2f,0xa2,0x46,0xb1,0xe7,0x61,0x07,0x68,0x01,
-  0x2a,0x0c,0x08,0xeb,0xf5,0xd9,0x34,0x3f,0x33,0xff,0xeb,0x34,0x9f,0x97,0xf4,0x7c,
-  0x5f,0x7c,0x94,0x02,0x75,0xc2,0xf6,0x35,0xe2,0x3b,0xf0,0x0a,0x75,0x74,0xfd,0xb1,
-  0xf8,0x19,0xea,0x97,0x79,0x49,0x47,0x66,0xfe,0x97,0x59,0x1f,0x40,0x77,0xc4,0xa7,
-  0x51,0xe0,0x87,0x7f,0x11,0xaa,0xf5,0x5e,0x0a,0xdb,0x58,0xe4,0xe8,0x40,0x79,0xf2,
-  0xa7,0x54,0x21,0x44,0x4b,0xfe,0x17,0xf1,0x3f,0x7c,0x77,0x72,0xd9,0x40,0xb1,0xbf,
-  0xe6,0x02,0x1d,0xdb,0x61,0xbc,0xff,0x6b,0x09,0xa2,0x7d,0xa8,0x10,0x50,0x8a,0x11,
-  0xb2,0xe4,0x7f,0x4d,0xde,0xa6,0x3f,0x4b,0x4d,0x3d,0x4e,0xb0,0xe9,0xe6,0x00,0xed,
-  0xaf,0xb7,0xe1,0xb7,0x53,0x8b,0x82,0x8a,0x2e,0xde,0xce,0xcd,0xe7,0x1f,0xb2,0x65,
-  0xe0,0x1f,0x0d,0xed,0xb5,0x6e,0x77,0x98,0xe6,0xa7,0xd8,0xad,0xf3,0xb0,0xae,0x68,
-  0xa6,0xd1,0xdc,0xe7,0x54,0x85,0xf5,0xe6,0x15,0x5b,0xb6,0x3e,0xb6,0xfe,0xe1,0x02,
-  0x93,0x6f,0xac,0x0d,0x3e,0x45,0x69,0x17,0x5a,0x7c,0x48,0x59,0xc8,0x5e,0xe7,0x8f,
-  0xf0,0x27,0x12,0x4a,0x41,0x64,0xe9,0x22,0x53,0xfe,0x78,0x6d,0x99,0xf9,0x5f,0x68,
-  0xa4,0x1f,0x5f,0xd6,0x46,0x61,0x2d,0xba,0x2f,0x41,0xf1,0x3c,0xfc,0x90,0xb1,0xa0,
-  0xd0,0xf1,0xbc,0x38,0x2b,0x80,0x86,0x76,0x97,0x23,0x61,0xe9,0x0f,0x92,0xea,0x0f,
-  0x5b,0x69,0x38,0xda,0x1a,0x06,0xe1,0xac,0xe1,0xbf,0x3f,0xd5,0x28,0x2d,0x5c,0x41,
-  0xf5,0x37,0xcc,0x8e,0x69,0xc6,0x24,0xef,0x04,0xfe,0xe7,0x65,0x4a,0x72,0x19,0x12,
-  0x7f,0x02,0x9f,0x71,0x33,0xff,0xeb,0x3c,0x3b,0x0c,0x78,0xa2,0x93,0x38,0xed,0x12,
-  0x31,0x42,0x5d,0x19,0xf9,0x5f,0x5f,0xe1,0x4d,0x06,0x33,0xe4,0x8f,0x50,0xbf,0x1f,
-  0x30,0x8a,0xc3,0x66,0x61,0xcc,0xa6,0x46,0x57,0x91,0xfc,0x04,0xea,0xaf,0x13,0x06,
-  0xea,0x5f,0x6e,0xed,0x8f,0x96,0x75,0x27,0x34,0xad,0x6d,0x7d,0x19,0xb5,0xff,0x1d,
-  0xd0,0xa9,0xb9,0xe2,0xd3,0xa8,0x70,0x71,0x13,0x77,0xb5,0x9a,0x78,0xe9,0x05,0xd5,
-  0xd4,0x77,0x96,0xfe,0x68,0xa0,0x49,0x26,0x1a,0x04,0xa7,0xd9,0x28,0xc4,0x98,0xe6,
-  0xc5,0xf9,0x94,0xff,0xe5,0x06,0xa7,0x81,0x66,0x0c,0xad,0xcf,0x1c,0x6b,0xfe,0xd7,
-  0x6a,0x12,0x92,0x86,0x87,0xfc,0x3b,0x54,0x88,0x46,0xa1,0xf7,0x1d,0x0f,0x44,0x1c,
-  0xad,0x3f,0xa3,0x8d,0xc7,0xaf,0xc6,0xaf,0x1a,0x62,0x9f,0x43,0x55,0xd7,0x5c,0xc3,
-  0x6c,0x6b,0x65,0xda,0xef,0xf7,0x52,0x5b,0x58,0x98,0xa4,0xe3,0xfe,0xf9,0x60,0xb4,
-  0xbe,0x4d,0x1a,0xff,0xe4,0x5e,0x84,0x3f,0x73,0x5f,0xd2,0x73,0x5c,0xbc,0x04,0x2f,
-  0xd5,0x97,0x27,0x37,0x77,0x89,0x25,0xac,0x57,0x2f,0xef,0xbd,0x65,0x38,0x7f,0x1b,
-  0x7f,0xd7,0x5b,0xde,0x62,0x3f,0x65,0xad,0xff,0xc3,0x29,0xff,0xcb,0x95,0x44,0x7b,
-  0x73,0x90,0x37,0x47,0x5c,0xc9,0x1c,0x1e,0x98,0xa5,0x46,0x6b,0x16,0xf4,0xca,0x9d,
-  0x68,0x74,0x36,0x79,0x5d,0x74,0xd0,0x2c,0xf5,0x0f,0xa5,0x8d,0xf0,0x3c,0x94,0x74,
-  0x05,0x7d,0x07,0x7b,0xf9,0x33,0x74,0x9a,0x9c,0x8c,0x91,0xc6,0x8f,0xca,0x5e,0x67,
-  0xbb,0xda,0x20,0x68,0x2d,0xb2,0xa6,0xa7,0xeb,0x1f,0x12,0xdf,0xf2,0x42,0xe8,0x09,
-  0x82,0x0d,0x83,0x12,0xd1,0x3e,0xca,0x7e,0xd7,0x2c,0x44,0x5c,0x65,0x61,0x39,0x11,
-  0x70,0x33,0x04,0x05,0x08,0xa2,0x2c,0xf9,0x5f,0x82,0xb4,0x53,0x3a,0xd7,0xbd,0x80,
-  0x92,0xb0,0x7a,0xcd,0xfe,0x68,0x9b,0x37,0x8a,0x73,0xe4,0xc3,0xbc,0xb5,0xa3,0xcc,
-  0x2b,0xae,0x83,0x23,0xc1,0x8e,0x2b,0x3c,0xf1,0xe2,0x74,0xfc,0x7f,0x3d,0xec,0x97,
-  0x2e,0xc1,0x0b,0xe6,0x36,0x90,0xa9,0x50,0x40,0x2e,0xca,0x03,0xb8,0x24,0xf8,0xe8,
-  0xca,0xe7,0x5e,0xb4,0x38,0x34,0x47,0xf2,0x37,0xe9,0xfa,0x87,0x43,0xb0,0x53,0x25,
-  0x92,0xed,0xea,0x5d,0xe2,0x2f,0xe0,0x88,0x80,0xbb,0x71,0x9b,0xe8,0x91,0x0e,0x3b,
-  0xfd,0xba,0x27,0xd1,0xe0,0x81,0x97,0x54,0xfc,0x10,0xd6,0xf8,0x9f,0x01,0xc9,0x43,
-  0x69,0x6e,0x44,0x03,0x0e,0x4a,0xbf,0x1f,0x72,0x19,0x4b,0x3b,0xf0,0x20,0xbc,0x25,
-  0xe4,0x05,0x83,0x7b,0x1a,0xee,0xe0,0xcd,0x06,0x0a,0xea,0xb6,0xe2,0x05,0x19,0xf5,
-  0x0f,0x77,0x6b,0x1a,0xd1,0x14,0xe4,0x9f,0x8a,0x1b,0x4a,0xd4,0x16,0x85,0x0d,0x90,
-  0x77,0x10,0x2d,0xb2,0x5c,0x68,0x4d,0xce,0x31,0xe6,0x68,0xe3,0xdd,0x34,0xa9,0x04,
-  0xcb,0x0c,0xf8,0x15,0x5f,0x39,0xa0,0xdc,0x8e,0x78,0xe0,0xa1,0x78,0xd1,0x29,0xb4,
-  0x9d,0x1e,0xd9,0xf2,0xd3,0xee,0xd2,0x24,0xac,0x61,0xf7,0xa0,0xe2,0x9f,0x9d,0xb4,
-  0x0d,0x44,0xfc,0xe3,0xf3,0x83,0x60,0x27,0x90,0x93,0x54,0x6e,0x10,0x77,0xc2,0x4b,
-  0x71,0x6d,0xc0,0xa1,0x89,0x9b,0xb8,0x01,0x9e,0xb0,0x67,0x61,0xb1,0xcc,0xdf,0x43,
-  0x44,0x94,0xa7,0x29,0xb7,0xa6,0xeb,0x1f,0x4a,0x3b,0x75,0xb3,0x9a,0x56,0x82,0x88,
-  0x56,0x15,0x07,0xad,0xe2,0x1d,0xd2,0xb0,0x60,0x66,0xb8,0x0f,0xd8,0x8e,0xc3,0x82,
-  0xfe,0x5c,0xcd,0xda,0x1f,0x76,0xb4,0xfe,0xcf,0x26,0xda,0x96,0x66,0x3d,0xae,0xbe,
-  0xe2,0xa7,0x11,0x11,0x99,0x69,0x77,0x25,0xf0,0x7b,0xc1,0x97,0x44,0x45,0x99,0x59,
-  0xff,0x99,0xf8,0x1f,0xb1,0x0e,0x8f,0xe1,0xfa,0x14,0xff,0x53,0x88,0x3a,0xa1,0x94,
-  0xf2,0xbf,0xd0,0x22,0x93,0x50,0x34,0x85,0x9d,0x9f,0x59,0xe4,0xcf,0xa3,0x63,0xa0,
-  0xee,0x1d,0xf6,0x50,0x2a,0xfe,0x79,0x13,0xac,0xe3,0x9e,0xf0,0xec,0x35,0x6c,0x06,
-  0x7b,0x68,0x5d,0x51,0x52,0xae,0xcd,0xe8,0x0f,0xbb,0x11,0x3a,0xc8,0x8d,0xb8,0x90,
-  0xed,0x4c,0x55,0x13,0xdd,0xc3,0x1c,0x5a,0x2b,0xf7,0xdc,0xdd,0xe4,0x65,0x0e,0x68,
-  0x88,0xc5,0xa9,0xdf,0x65,0xba,0xfe,0x73,0x8f,0xd4,0x0e,0x17,0x65,0x5f,0xfd,0xf2,
-  0x78,0x80,0xaa,0xfd,0x94,0x71,0x47,0x7f,0x7e,0xa7,0x7b,0xd3,0xc1,0xaa,0x58,0x6e,
-  0x5c,0xcc,0x89,0xbc,0x55,0x73,0x77,0xdc,0x93,0x14,0xcf,0x8e,0xef,0xe7,0x54,0x7f,
-  0xb4,0x03,0xa3,0xb4,0x8f,0x6e,0x7a,0xbb,0x70,0x30,0xdf,0x2f,0xe5,0x35,0x7e,0x39,
-  0x89,0x56,0x52,0x95,0x94,0x59,0xff,0x19,0xda,0xd4,0x11,0x54,0x82,0xf7,0x53,0x98,
-  0xc7,0xa1,0x38,0x69,0xb7,0xfc,0xd5,0xf2,0x88,0x56,0x19,0x94,0x62,0x62,0x1b,0x3b,
-  0xc1,0x7d,0x13,0xea,0x3f,0xd7,0x94,0x50,0x7f,0x6a,0x04,0x39,0x2e,0x34,0xa3,0x28,
-  0xb0,0x64,0x0b,0x15,0x22,0xce,0xaa,0x08,0xc9,0x57,0x45,0x66,0xb1,0xa6,0x54,0x86,
-  0x7b,0xba,0xfe,0xa1,0xd9,0x1f,0x56,0x6d,0xd5,0x73,0x62,0x2e,0xea,0x06,0x9b,0x4d,
-  0xbf,0xa6,0x32,0xc8,0x6c,0x31,0xf6,0x78,0xcd,0xcf,0xa7,0x16,0x53,0xeb,0x34,0x4b,
-  0xfd,0x67,0x30,0x9d,0x3e,0xba,0x32,0x9d,0xfa,0xa3,0x31,0xcf,0x22,0x65,0x1b,0x93,
-  0xd4,0x5d,0x86,0x27,0x84,0xf3,0x25,0x79,0xad,0x5e,0x44,0xad,0xd3,0xd2,0xf9,0x17,
-  0x2b,0xe4,0x54,0x90,0xe1,0x57,0x39,0xe2,0x8d,0x51,0xb7,0x57,0x58,0x20,0x46,0x68,
-  0x13,0x17,0xe3,0xa8,0x9c,0xb7,0x98,0xf5,0x9f,0x33,0xfc,0x5f,0x9f,0xe3,0x6e,0xb9,
-  0xba,0x6f,0x12,0x39,0x86,0xca,0x52,0xf5,0x0f,0x2f,0x04,0x6e,0x08,0xfd,0x3c,0x24,
-  0xfe,0x96,0x3a,0x7a,0x7f,0x0d,0x11,0x91,0xa5,0xfe,0x73,0x6e,0x1b,0x7c,0x8e,0x27,
-  0x06,0x2f,0xee,0x61,0xaf,0x99,0xe8,0xa8,0x79,0xbe,0x76,0x41,0x2e,0xa7,0x2b,0xc7,
-  0x22,0xaf,0xb9,0xfd,0xcb,0xec,0x93,0xc5,0xb2,0x8c,0xfa,0x87,0x29,0xff,0x57,0x04,
-  0x65,0x08,0x95,0x59,0x8b,0x30,0x4d,0xed,0x94,0x5c,0x4c,0x21,0xfe,0xa7,0x5d,0xf3,
-  0xdb,0xe5,0x83,0x96,0xfe,0xb0,0x61,0xa9,0x31,0xf5,0xbe,0x4e,0x67,0x37,0x0a,0x77,
-  0x8f,0xae,0x4c,0x8d,0x20,0xf0,0x93,0x4b,0x6a,0x88,0x81,0xd7,0xb7,0xb8,0x67,0x07,
-  0xa9,0x3f,0xec,0xf8,0xfe,0xe9,0x54,0xdb,0x60,0x1f,0x2e,0xf2,0xd2,0x2d,0x54,0x4f,
-  0x9b,0xf8,0x1f,0x95,0x95,0x68,0xfb,0xc0,0x45,0xfd,0xd1,0xfa,0x5d,0x4f,0xd1,0x46,
-  0xed,0xb3,0xd4,0x3f,0x6c,0x85,0x36,0x38,0xad,0xfb,0x16,0x21,0x68,0xa1,0xb6,0x4d,
-  0x7e,0x0a,0x5c,0x2f,0x81,0x11,0x39,0x55,0xe8,0x80,0xbd,0xc9,0xee,0xd3,0xcd,0xfe,
-  0xb0,0x63,0xf3,0x7b,0xc6,0xfb,0xc3,0x4e,0x22,0xb6,0xc7,0xf4,0x76,0xf5,0xab,0xa7,
-  0x35,0xff,0x2a,0x33,0x71,0x7e,0x04,0x2a,0x02,0x73,0x63,0x0d,0xe9,0xfa,0x87,0x36,
-  0xda,0x6f,0x21,0x1f,0xe4,0xd2,0x36,0xeb,0x91,0xfd,0x88,0xf8,0xc5,0x95,0xa3,0x15,
-  0x09,0xc4,0x2e,0xbc,0x5d,0x05,0x5a,0x6c,0x8a,0xb5,0xfe,0xa1,0xd9,0x1f,0x8d,0x37,
-  0x0f,0x3e,0x39,0x0c,0xef,0xc8,0x65,0x7c,0x53,0xdc,0x89,0x57,0x26,0xff,0x24,0x22,
-  0x53,0x99,0xce,0x0d,0xdc,0x2c,0x0d,0x1d,0x18,0xdf,0x0d,0x29,0x7b,0x3c,0x6c,0xe4,
-  0x78,0x17,0x7f,0x00,0x11,0x6e,0xa6,0xbd,0x2f,0x83,0x8e,0xc9,0x25,0x71,0xd9,0x4f,
-  0x40,0x28,0xe6,0x1e,0x52,0xf6,0xb3,0x74,0xfd,0x43,0x01,0xa6,0xcb,0x2f,0xc2,0x4a,
-  0xaa,0xdf,0xb5,0xcd,0xbd,0x0d,0x4a,0xbb,0x94,0xf9,0x01,0xea,0x98,0xe6,0x46,0x20,
-  0x14,0x39,0xef,0x5c,0xcb,0x8b,0x0e,0x2a,0x43,0x91,0x60,0x1a,0x6f,0xf3,0x47,0xe1,
-  0x39,0x04,0x39,0xb9,0x6b,0xd0,0x6c,0xe9,0xae,0xbf,0x31,0xb9,0x79,0x85,0xf8,0x2d,
-  0xf5,0x0c,0x9f,0x19,0xf7,0x10,0x10,0xea,0xe6,0x3f,0xa6,0x88,0xe8,0x74,0xfd,0xc3,
-  0x39,0x52,0x2a,0xff,0xdd,0x61,0x88,0xfd,0xc4,0xa6,0x1a,0x79,0x67,0xc4,0x41,0x69,
-  0x34,0xde,0x75,0x10,0xa1,0x23,0x89,0x26,0x25,0xed,0xff,0xd2,0xa5,0x03,0xf0,0x45,
-  0xa4,0x9c,0xca,0xb6,0x1c,0xd0,0x07,0x23,0x55,0x49,0xc7,0x79,0xe1,0xbe,0xe0,0xc5,
-  0x58,0x55,0xdc,0x3e,0x8c,0x88,0xeb,0xe3,0x88,0xd9,0x1f,0x2d,0x2d,0x1f,0xcc,0xfa,
-  0x87,0x85,0x3b,0xba,0x94,0x9f,0x4e,0xba,0x8f,0xaf,0x8d,0xe3,0xfb,0xfe,0x1e,0x81,
-  0xcd,0x73,0x85,0x9e,0x80,0x5c,0xc1,0xae,0xe6,0x88,0x67,0xba,0xe5,0x70,0x20,0x8d,
-  0x3f,0xe3,0x2a,0xc5,0x3f,0xcf,0x34,0x14,0x9d,0xed,0xd7,0xdb,0xb4,0xd2,0x6e,0x25,
-  0xc4,0xa6,0x17,0xee,0x51,0x4b,0xb9,0x7c,0x17,0xdb,0xae,0xef,0x91,0x51,0x5e,0x7d,
-  0x0f,0x81,0xe2,0xd8,0xfc,0x54,0xfd,0xc3,0x12,0x0a,0x5a,0xb8,0x83,0xc2,0x3c,0x8c,
-  0x86,0x2b,0x51,0x8c,0x77,0x08,0x9e,0x04,0x8a,0x1d,0x3b,0x1d,0xed,0xa4,0x1c,0x77,
-  0xf5,0x59,0xbe,0x17,0xea,0x2f,0x61,0x01,0x81,0x84,0x36,0xbc,0x89,0xf9,0x76,0xa5,
-  0x70,0x96,0xfb,0x63,0x9e,0x84,0xb8,0x49,0x45,0x44,0xed,0xde,0x19,0x13,0x8f,0xa6,
-  0xeb,0x3f,0xc3,0xa0,0x74,0x4e,0xab,0x30,0x10,0x3f,0xef,0xa0,0x63,0x68,0x2c,0x1f,
-  0x42,0xc1,0x7e,0x56,0x37,0xd7,0xe7,0xd3,0xc6,0x45,0x70,0x40,0x75,0xc4,0xf2,0xd3,
-  0xf5,0x0f,0x05,0xb3,0x1f,0x7a,0x0a,0xf6,0x50,0xb7,0x41,0x43,0x59,0x21,0x56,0xe2,
-  0xf9,0xaa,0x88,0x38,0xce,0xe2,0x95,0xde,0x22,0x5f,0xb6,0xf4,0x6b,0xa6,0xad,0x1e,
-  0x9b,0x4f,0xfd,0x61,0x77,0x27,0x51,0xed,0x6e,0x64,0xa7,0x20,0xfa,0x0d,0x1c,0xec,
-  0x0b,0x78,0xa4,0xce,0xb6,0x32,0xdf,0xd2,0x07,0xd9,0x09,0x1d,0x81,0x8d,0x4a,0xa6,
-  0x59,0x1a,0xff,0xdc,0x74,0x87,0xfa,0x02,0x67,0xc6,0xd2,0x96,0xc0,0xc7,0x7a,0x8b,
-  0x59,0x08,0x3a,0x7b,0x27,0x31,0x48,0x49,0x25,0xe1,0x1c,0xb4,0x11,0x95,0x61,0x8b,
-  0x33,0x4b,0xfd,0x43,0xb0,0xcb,0x78,0x1e,0xbb,0xa8,0x5f,0x7c,0x84,0xa3,0xbe,0x5b,
-  0xea,0xb3,0x6d,0x54,0x3b,0x24,0x4f,0x96,0x82,0xb0,0x23,0x5e,0x2f,0xc6,0x51,0xdf,
-  0xd9,0x22,0x90,0xfe,0xa3,0xfc,0x2f,0xdf,0x6f,0x51,0xed,0x0e,0xc6,0x8f,0x87,0x7d,
-  0xc7,0x50,0x2c,0xa0,0x86,0x12,0x2a,0xf8,0xa4,0x44,0xfe,0x60,0xc4,0x90,0x7c,0x46,
-  0x5e,0x5c,0x8c,0xcf,0x1a,0x7b,0x9e,0x7a,0xb3,0xfe,0xe1,0x8b,0x3d,0x68,0x64,0x0d,
-  0xc0,0x70,0xb8,0xaa,0xc7,0xb1,0x47,0xbc,0xd7,0x6c,0x0b,0xeb,0x98,0x5f,0x9e,0x34,
-  0xfb,0xa3,0xe5,0x26,0xf3,0x6b,0xd3,0xf8,0x07,0x17,0xf1,0x7c,0x6d,0xb9,0x2d,0xcf,
-  0x10,0x87,0x62,0xaf,0x69,0x55,0x44,0x04,0xf9,0xe1,0xbc,0x5a,0xd5,0x66,0x7f,0x05,
-  0x07,0xa9,0xd2,0x0a,0x16,0xfc,0x13,0x57,0xff,0x08,0x9d,0xab,0xd9,0x54,0x79,0x6d,
-  0xe4,0x44,0xa8,0xa9,0xaf,0x4c,0x77,0xb7,0xb0,0x5f,0x40,0xa7,0xab,0xac,0x69,0x43,
-  0x84,0x99,0xa9,0xf1,0x49,0xa5,0xd3,0x69,0xe9,0x7f,0x91,0xf5,0x1a,0x24,0x34,0x4d,
-  0x9e,0x0a,0xcc,0xd0,0x04,0x66,0xf6,0x7f,0x5f,0x06,0x09,0xbd,0xac,0x5e,0x7e,0x90,
-  0x10,0xb2,0x40,0xa9,0x97,0xd6,0xfa,0xcf,0x53,0x76,0xca,0x9d,0xb2,0x8b,0xc9,0xfc,
-  0xa0,0xe1,0x6a,0x92,0x67,0xd5,0xc9,0xb1,0xc5,0x83,0xc4,0xb0,0x71,0x5b,0x34,0xb0,
-  0x93,0xf2,0xef,0xa8,0xff,0xc5,0x70,0x5a,0x3f,0x16,0x74,0xc2,0x45,0x7d,0x77,0xec,
-  0x96,0xfe,0xfc,0x11,0xf5,0x75,0xfd,0xea,0x30,0x02,0xb9,0x3b,0xd4,0x11,0xee,0xe7,
-  0x1b,0x37,0x88,0x9e,0x51,0x7f,0x71,0xf5,0xf1,0xf1,0xe7,0xa7,0x14,0x9d,0x2f,0xc8,
-  0x3f,0x98,0x5c,0xb4,0x06,0x17,0xaa,0xd4,0x70,0xbc,0x29,0x9a,0x89,0xf0,0x5c,0x31,
-  0xd8,0x58,0xaa,0x20,0xb3,0xf6,0xbf,0xd8,0x29,0x3f,0x7f,0x93,0x7f,0x8b,0xbd,0x4d,
-  0x9c,0x0d,0x47,0xf4,0x8a,0x21,0x54,0xeb,0x9e,0x54,0xc7,0xcc,0x56,0x71,0x3c,0x31,
-  0xf3,0x74,0x9a,0xff,0x91,0x4a,0xed,0xcf,0x0b,0x65,0xbc,0x3d,0x6e,0xfb,0x72,0xa0,
-  0x99,0x2f,0x48,0xda,0x54,0x33,0x50,0x6a,0xfe,0x76,0x94,0xcf,0x14,0xc8,0x67,0xa6,
-  0x16,0x5a,0xea,0x3f,0x67,0x2d,0x75,0xef,0xa2,0xfe,0xe6,0xaa,0x96,0xa5,0xf3,0x26,
-  0x6d,0x85,0xb9,0x3e,0x1d,0xf2,0x6a,0xaa,0xd7,0x31,0x5a,0x4a,0xc2,0xda,0xff,0x62,
-  0xa5,0x30,0x35,0xf4,0x2c,0x2f,0x5d,0x2d,0xfc,0x8d,0xf3,0x8a,0x40,0x63,0xcb,0xcc,
-  0xb0,0x6d,0x0d,0xfb,0x16,0x3c,0xdb,0x32,0x33,0x4e,0x11,0xc2,0xea,0x65,0xfd,0x2f,
-  0x6a,0x65,0xbb,0x76,0x17,0xf8,0x6b,0x72,0xb7,0xdc,0x5a,0x12,0x32,0x54,0x9f,0x1e,
-  0xf4,0x2a,0xcb,0x10,0xd5,0x25,0xb8,0xc3,0xdb,0xd0,0x7b,0xf3,0x68,0xff,0x8b,0xb7,
-  0xac,0xfd,0x2f,0xa4,0x1b,0xd5,0xaa,0x9a,0xbc,0x5f,0x2b,0x67,0xf4,0x1f,0xc5,0xae,
-  0x93,0x1c,0x77,0xe1,0xfa,0x5c,0x90,0x6e,0xa0,0x8c,0x8c,0xf3,0x93,0x3f,0x1d,0xab,
-  0x7f,0x38,0xf6,0xbe,0xd1,0xac,0xc3,0x40,0x24,0x1b,0x2d,0x8b,0x74,0x18,0xad,0xf5,
-  0xd2,0x7d,0xb8,0x3e,0x17,0xf9,0x67,0xdc,0x71,0x5c,0xf1,0xa8,0xe7,0xd8,0x68,0xfd,
-  0xf6,0x74,0xfc,0x4f,0x8b,0x69,0x54,0x22,0xfa,0xb5,0x43,0x84,0x1a,0x61,0x20,0xec,
-  0x11,0x10,0x11,0x71,0xa5,0x8f,0x8d,0xa5,0xc6,0x5f,0x91,0xce,0x7f,0xa1,0xf8,0x9f,
-  0x27,0x1b,0x11,0xe4,0x50,0xfc,0xcf,0x3a,0x04,0x42,0x72,0x45,0xf6,0x0c,0x48,0x34,
-  0xcc,0x8c,0x37,0xdf,0xeb,0x9c,0x91,0x33,0xfa,0xbe,0x96,0xfc,0xaf,0x02,0x33,0xec,
-  0x90,0x92,0x56,0xa8,0xed,0x35,0x11,0x8f,0x24,0x76,0xb6,0xb7,0x72,0x65,0x2a,0xb3,
-  0x8f,0xad,0xe7,0x1b,0x19,0xfc,0xcf,0x47,0xad,0x1d,0xed,0x9e,0xa7,0x95,0x39,0x91,
-  0xa3,0xf1,0xdd,0x71,0x4f,0x1c,0xb5,0x15,0x85,0x05,0x6e,0x4e,0x8a,0xee,0x54,0x69,
-  0xa0,0x09,0xfd,0x2f,0x20,0x95,0xed,0x55,0x4c,0xf9,0xa4,0xfe,0xc2,0x5b,0x4c,0x37,
-  0x10,0x65,0x84,0x51,0x3f,0x88,0xe1,0xcb,0xfb,0x5f,0xf4,0xeb,0xa7,0xc1,0x1b,0xb2,
-  0x17,0x88,0x59,0xd0,0xa5,0x7b,0xeb,0xec,0x66,0xfd,0x1f,0x5e,0x61,0xd6,0xc7,0x1b,
-  0x0b,0x05,0xb1,0xd6,0x7f,0xfe,0x7b,0x8a,0xff,0x09,0xc9,0xdb,0xb2,0xc9,0x2d,0xe5,
-  0x5a,0x81,0xda,0xb6,0x1f,0xf6,0xc5,0xcb,0xea,0xf0,0xa0,0x11,0xdf,0x5b,0x76,0x79,
-  0xff,0x8b,0x5f,0x41,0x71,0x48,0x3e,0xe6,0x3c,0x03,0xf7,0x83,0x4b,0x2f,0xa4,0xfc,
-  0xaf,0x17,0xd4,0x3b,0x43,0xf2,0x4f,0x59,0xbf,0x30,0x1a,0xaf,0x62,0xc9,0x7f,0x47,
-  0xfc,0xf3,0x2c,0x82,0x1c,0xf9,0x36,0xf6,0x53,0x58,0x0b,0x5a,0x88,0x23,0x0c,0x50,
-  0xcd,0x88,0xe8,0x02,0xd6,0x2d,0xec,0x48,0xf5,0x83,0xb0,0xe4,0xbf,0xcb,0xe4,0xff,
-  0xea,0x20,0x8f,0x7d,0x9c,0x1d,0x35,0x53,0x5b,0x4c,0xb7,0xd7,0x3d,0x29,0xfb,0x6b,
-  0xf4,0x7d,0x2d,0xfd,0x2f,0xae,0xa2,0xb4,0xf7,0xd1,0xb2,0x87,0x23,0x81,0xd1,0xb4,
-  0xaf,0x4b,0xfa,0x7d,0xba,0xe3,0xcc,0x28,0x5f,0x8d,0xf2,0x39,0x8d,0x7f,0x5a,0xb2,
-  0xbe,0x80,0x43,0xed,0x15,0x77,0xe6,0xb5,0x88,0xb3,0xe0,0xe5,0xf6,0x79,0x35,0xf6,
-  0xbe,0x06,0xea,0x7f,0xf1,0x4f,0xba,0x39,0xf8,0x0b,0xfd,0x2f,0x4e,0xb1,0x68,0x8f,
-  0xcb,0xeb,0xde,0xb4,0x21,0x3f,0x1a,0xd5,0x5d,0xdb,0x6c,0x66,0x23,0x0c,0xe2,0x7f,
-  0xcc,0x01,0x98,0x1e,0xb1,0x74,0xff,0x0b,0xc8,0x7a,0x39,0xa7,0x1e,0x66,0xeb,0xb6,
-  0x6f,0xb0,0x9f,0x3e,0xb1,0x03,0xc2,0x41,0xd9,0xcc,0xff,0x0a,0xc6,0x97,0x04,0x9d,
-  0x07,0xc7,0xfa,0x5f,0x04,0xde,0x18,0xff,0xbe,0xc4,0xff,0xd4,0x43,0x91,0x6e,0x0b,
-  0xb1,0x6d,0x30,0x9b,0xb9,0xc2,0x1b,0x62,0x2c,0xd5,0xb1,0xd7,0xf4,0x30,0x8e,0xad,
-  0x67,0xba,0xfe,0x73,0xc1,0xe3,0x08,0x7b,0x2a,0xa8,0x88,0x53,0x1b,0xbe,0xdd,0xd6,
-  0xd0,0xb2,0x42,0xa5,0xc4,0x8c,0xf8,0xf2,0x6c,0x53,0xc6,0x9f,0x7f,0xc0,0xa2,0x7f,
-  0xc7,0xf3,0xdf,0x57,0xcb,0xbf,0xa6,0x5f,0x1f,0xa6,0x6d,0x40,0x8e,0xc2,0xc2,0xf4,
-  0x7e,0xb0,0xf6,0xbf,0xa8,0x1f,0xab,0xb6,0xed,0x25,0xb3,0x57,0x35,0x89,0xb8,0x61,
-  0xdd,0x07,0xcb,0xd7,0x89,0x9a,0x59,0x7f,0x20,0x33,0xff,0x5d,0xaa,0x40,0xeb,0xa3,
-  0x0c,0xbf,0xd6,0xf4,0x85,0xb0,0x29,0xfc,0x58,0x3c,0x97,0xca,0x3e,0x1f,0xf8,0xf5,
-  0xee,0x76,0x25,0x69,0x4b,0xa5,0xc6,0x37,0xc7,0x2d,0xf5,0x75,0xdd,0x6b,0x97,0x73,
-  0x4a,0x72,0x17,0xbd,0xae,0x20,0x68,0xc1,0xb2,0x78,0x21,0x15,0x2a,0xd9,0x67,0xb8,
-  0x82,0x88,0x90,0xed,0xa9,0xc2,0xe0,0xde,0x6c,0x4b,0xff,0x0b,0xe1,0x2a,0x4a,0xdb,
-  0xec,0x52,0xea,0x7c,0x2b,0xf0,0x55,0x4a,0x0f,0xde,0xac,0x21,0x22,0x7a,0x56,0x9f,
-  0x09,0x4a,0x28,0x32,0x76,0x7e,0x9d,0x96,0xfe,0x17,0x72,0x1e,0x3c,0xc4,0x6f,0xd4,
-  0x96,0xcb,0xd9,0xb7,0x42,0x3f,0xbf,0x91,0xba,0xc1,0xce,0x80,0x0b,0x44,0xfb,0x1c,
-  0xc7,0xc1,0x87,0x66,0x69,0x68,0xf1,0x70,0xba,0xfe,0xf3,0x95,0x3b,0xd5,0x73,0x66,
-  0x5a,0xa5,0x33,0x8e,0x66,0x8d,0x2f,0xd5,0xf6,0xe2,0x02,0xdc,0x20,0x98,0x15,0x6b,
-  0x47,0xe3,0x7f,0x32,0xf9,0x9f,0xd7,0xf9,0x75,0xfd,0xf6,0xe1,0xe2,0x0a,0xf5,0x68,
-  0x3d,0xc2,0x9e,0x81,0x94,0xda,0x5a,0x49,0xf1,0x3f,0xf0,0xe9,0x5f,0xe8,0x7f,0x81,
-  0x46,0x56,0xe9,0xcb,0x3d,0x75,0xae,0x42,0xde,0x48,0x68,0x76,0x55,0x4a,0xec,0x00,
-  0x45,0xf8,0x8c,0x95,0xe6,0x48,0xe3,0x9f,0x18,0x50,0xbf,0x9e,0x52,0x21,0x47,0x67,
-  0x4e,0xa1,0x4d,0xc6,0xf9,0xe1,0xec,0xe9,0x94,0xff,0x45,0x88,0x68,0x3a,0x3c,0x39,
-  0xb1,0xff,0x85,0x29,0x7f,0x28,0xf0,0x8e,0xba,0x94,0xc5,0xa9,0x9a,0xd6,0x6c,0x5c,
-  0xc6,0xe7,0xbd,0x65,0x54,0x91,0xd2,0x22,0x7f,0xc6,0xbf,0xd7,0x14,0x8a,0xaf,0x58,
-  0x60,0x7c,0x35,0x51,0xec,0xa1,0xfc,0xf7,0xad,0x28,0x7f,0x3c,0x94,0xd1,0x43,0xf1,
-  0x63,0x1e,0xf8,0xe3,0xc4,0xfe,0x17,0x31,0x34,0x4b,0xcf,0x0a,0x95,0x68,0x6f,0x4e,
-  0x7b,0x0d,0x62,0x9a,0xff,0xa0,0xb9,0x3e,0xc3,0xd4,0x28,0xf6,0xa7,0xe9,0xfa,0x87,
-  0xe9,0xfe,0x17,0xf5,0xea,0x79,0xf9,0xa8,0x84,0x46,0xba,0x2e,0x96,0x48,0xcb,0x48,
-  0x50,0x6b,0x62,0x25,0x0a,0xae,0x1f,0x1a,0xf6,0x58,0xc3,0x98,0xbe,0xcb,0x4f,0xa6,
-  0xfb,0x5f,0x34,0x2e,0xd7,0x36,0x11,0x2d,0x6f,0xb0,0x6b,0x21,0xda,0x73,0x9d,0x11,
-  0x8d,0xe3,0xdb,0x74,0x1a,0xad,0xab,0xdc,0xd1,0x08,0xdd,0x9f,0xf4,0x57,0xb1,0x25,
-  0xff,0x5d,0x2a,0x93,0x23,0x32,0xb5,0xb4,0x62,0x1e,0xad,0x3d,0x95,0x1d,0xe6,0x81,
-  0xe7,0xa3,0xae,0xb0,0xdc,0xce,0x06,0xd5,0x17,0x2e,0xeb,0x7f,0x01,0x76,0x29,0x62,
-  0x46,0x23,0x4c,0xb5,0xe3,0xfa,0xcc,0x32,0x4c,0x58,0x98,0xc0,0xf7,0x33,0x1d,0x1f,
-  0xbb,0x27,0xd6,0x7f,0x26,0x7f,0xdc,0x61,0x62,0x7b,0x00,0x9f,0x7f,0x00,0x9f,0x5f,
-  0xa6,0xf5,0x19,0x41,0x0b,0xc8,0xce,0xd3,0xfb,0x21,0x39,0x5e,0xff,0x39,0xfe,0x37,
-  0x7d,0xd2,0x45,0xa8,0x12,0x1c,0x46,0xfe,0x19,0xf8,0x03,0x54,0xe9,0xbf,0x4c,0x8e,
-  0xe5,0x7f,0x19,0xe2,0x79,0x81,0xf4,0x17,0x22,0xc6,0xf6,0xf1,0xfa,0xcf,0x7f,0xa1,
-  0x1f,0x9f,0xfd,0xe0,0xff,0x4f,0xf5,0x43,0x94,0x1b,0x7c,0x1a,0x44,0x53,0x05,0x07,
-  0xfe,0xbd,0x81,0xf5,0xef,0xff,0xdd,0x7e,0x7c,0xff,0xf5,0xbf,0xb1,0x45,0x9e,0x7e,
-  0xf9,0xb2,0x8f,0xff,0x64,0xfc,0x85,0xf5,0x29,0xd4,0xff,0x6b,0xeb,0x5f,0xa8,0xff,
-  0xbb,0xeb,0x6f,0x9d,0x3d,0xb1,0x1f,0xa2,0x6e,0x76,0x3f,0xcc,0xec,0x87,0x48,0xff,
-  0xa1,0xcb,0xee,0x3f,0xdd,0xb0,0x0e,0x7a,0xcd,0xc1,0x7a,0x2f,0x5e,0xf9,0x21,0xcb,
-  0x78,0xfe,0xb1,0x65,0x53,0xad,0x83,0xfa,0xd4,0xc0,0xec,0x0d,0xa3,0xcb,0x99,0xcf,
-  0x3f,0xba,0xc8,0xaa,0x75,0x50,0x94,0x1a,0x34,0xd2,0x95,0x8c,0xfd,0x93,0xee,0x87,
-  0x68,0x37,0xac,0x83,0xde,0xf4,0x95,0x72,0xb0,0x77,0xfd,0x9f,0x7e,0x88,0xff,0x4d,
-  0xfa,0x0f,0xfe,0xf7,0x9b,0x4f,0x87,0xce,0xa0,0xd3,0x97,0x71,0x1e,0x7b,0xff,0x43,
-  0x79,0x68,0xd0,0xa1,0xe3,0xff,0xd9,0xf3,0x28,0x9b,0x3d,0xd5,0x55,0xe3,0xdf,0x3b,
-  0x8f,0xae,0x09,0xf7,0xb7,0xd3,0x4d,0x84,0xcc,0xfb,0xf7,0xfe,0xfb,0xf2,0xb0,0x1e,
-  0x85,0x5e,0xa3,0x80,0x82,0xef,0xbf,0x22,0x0f,0x59,0x0e,0x04,0xfe,0x93,0xf2,0xb0,
-  0x1e,0x0f,0x8f,0x2c,0x08,0xc0,0xff,0x73,0xf2,0x30,0xf5,0x70,0x02,0xfd,0xf8,0x9f,
-  0xfa,0x63,0x8d,0xf6,0x1d,0x52,0x09,0x95,0x23,0xbf,0x5c,0x1e,0xf2,0xbf,0x28,0x0f,
-  0x25,0x41,0xbe,0x6c,0x7d,0x52,0x83,0x6c,0xf5,0x2f,0xcb,0x43,0x49,0x0a,0xfc,0x45,
-  0x35,0xb4,0x4e,0xbd,0xbc,0x3f,0xac,0x2a,0xc9,0x42,0x0f,0x2e,0x8e,0xaa,0x4f,0x14,
-  0x83,0x19,0x12,0x72,0xfc,0x4f,0x5b,0xa7,0x15,0x01,0xfc,0xe5,0xfb,0xff,0xc5,0xfe,
-  0xb0,0xb8,0x92,0x72,0x09,0xbe,0x82,0x75,0xfd,0xeb,0x1b,0xff,0xdd,0xf5,0xf7,0xf2,
-  0x12,0x4d,0x92,0x59,0xe6,0xfa,0x17,0x35,0xfe,0x07,0xfd,0x61,0xa5,0x94,0xce,0xb0,
-  0xae,0xbf,0xd0,0x9b,0x71,0x4f,0x6b,0x7f,0x58,0x44,0x42,0x21,0xfd,0x7f,0xf1,0x8d,
-  0xd2,0x7f,0x95,0x95,0xf8,0x1f,0xe0,0x30,0x61,0x89,0x27,0xfe,0x59,0xe5,0xa1,0xd0,
-  0x70,0x70,0x05,0xfd,0xff,0x2b,0xf9,0xbf,0x33,0x79,0xe2,0x9f,0xec,0xfa,0xcf,0xce,
-  0x34,0xff,0x0a,0x64,0xc9,0xed,0xfd,0x5f,0x4f,0x1b,0xff,0xfb,0xef,0x26,0x7f,0xfe,
-  0x9b,0xcd,0x7f,0x79,0x11,0xab,0xd3,0xdf,0x56,0xaf,0x83,0xdc,0x7a,0xd1,0x1c,0x14,
-  0xe4,0xbe,0x3c,0xe9,0xae,0x45,0xb7,0x87,0x52,0x03,0xfd,0xf6,0xd0,0x97,0xa4,0x2c,
-  0x63,0xde,0xf8,0xfc,0x9b,0x6a,0xb2,0xee,0x12,0x6e,0xd7,0xff,0x5a,0x85,0xee,0xac,
-  0xbb,0xb2,0x68,0x30,0xa5,0x7b,0x52,0xea,0xca,0x14,0x43,0x48,0x0d,0xae,0x32,0xe6,
-  0x8d,0xe1,0x61,0xe0,0x4c,0xa0,0x20,0x39,0xa7,0x2c,0x45,0xcc,0x81,0x2a,0x4b,0xeb,
-  0x68,0x10,0x36,0xaf,0x14,0xa5,0x06,0xe3,0xe6,0x85,0x29,0x45,0xc2,0xb0,0x02,0xae,
-  0x80,0x6d,0x5c,0xc0,0x81,0x90,0xad,0x66,0x45,0x84,0x95,0x74,0xa5,0x30,0x8b,0x43,
-  0x58,0x58,0x01,0xdf,0x80,0x2c,0xcb,0xfc,0x97,0x57,0x64,0x2d,0x10,0xbe,0xca,0xbf,
-  0xbe,0x48,0x8a,0x66,0xdd,0x2d,0xdc,0xce,0xff,0x5a,0x9b,0xd2,0x23,0x8c,0x0d,0x46,
-  0xaf,0x14,0x58,0x9e,0xe7,0x65,0x3d,0xac,0x85,0x64,0x89,0xce,0x97,0x1a,0x86,0x42,
-  0xc8,0x96,0x05,0xbc,0x2d,0x0d,0x40,0x68,0x84,0x30,0x2f,0x24,0xa1,0xc2,0xd3,0xef,
-  0xfb,0x72,0x50,0x5a,0x25,0x14,0xf2,0xc5,0x00,0x51,0xc9,0x25,0xc8,0x3c,0xa0,0xa9,
-  0x51,0x28,0xaa,0x97,0xe3,0x01,0xaf,0xba,0x4e,0xd2,0x04,0x59,0x43,0xd1,0x61,0x9d,
-  0xbf,0x24,0xeb,0xd6,0xae,0xdb,0xe2,0x7f,0x25,0x4b,0x72,0x56,0xa0,0x3e,0x34,0x54,
-  0xe3,0x9e,0x62,0x13,0xf4,0xfa,0x50,0xfc,0x36,0xf7,0x14,0x96,0xa5,0xf3,0x90,0x56,
-  0x30,0x3d,0x4b,0xb7,0xac,0xcf,0x74,0xe1,0xaf,0xe1,0xaf,0x8c,0x29,0x21,0x54,0x03,
-  0x34,0x98,0x5c,0x97,0x75,0xbb,0xf0,0x75,0x7e,0x9b,0x91,0xe5,0xc5,0x81,0x08,0xb7,
-  0x19,0x53,0xbc,0xd2,0xb8,0xfb,0x1d,0xe7,0x53,0x9a,0xb6,0x13,0x24,0x0e,0xeb,0x48,
-  0xf2,0x85,0x05,0x92,0x85,0xd5,0x24,0x14,0x0b,0x05,0x09,0x45,0x03,0x8a,0x49,0x55,
-  0x5d,0x64,0x59,0x1f,0xaa,0x56,0x1b,0x01,0x8d,0x74,0x00,0x0d,0x8a,0xb8,0xac,0x8d,
-  0x5e,0x91,0xb5,0xec,0xd1,0xc1,0x22,0xcb,0xfa,0x84,0xb2,0x56,0x0b,0x7f,0x03,0x57,
-  0xe8,0x33,0xf9,0xe8,0xe0,0xaf,0x62,0x59,0x61,0xa1,0x05,0x97,0x7d,0x4a,0x2c,0x4b,
-  0x13,0x8e,0xc3,0x3f,0xc2,0x14,0xeb,0xfb,0xea,0x62,0x18,0x8e,0xc3,0x02,0x10,0xb8,
-  0x39,0xf8,0x47,0xaa,0x20,0xb8,0x0a,0xbf,0xd7,0x02,0xb8,0xca,0x1c,0xf0,0x6f,0x64,
-  0xcc,0xbf,0x29,0x20,0x79,0xeb,0xed,0x5a,0xb5,0x2c,0x47,0x46,0x07,0xea,0xc1,0xf1,
-  0x01,0x8c,0x0e,0x8c,0xc9,0xe3,0xcf,0x03,0x24,0xb1,0xd0,0x3a,0xd2,0x70,0x67,0x98,
-  0x03,0xe2,0xcc,0x46,0x07,0x3d,0xa3,0x3f,0xe9,0x96,0x4d,0xdd,0x18,0x10,0xbc,0x7c,
-  0x99,0x96,0x4f,0xdd,0x11,0x68,0xf0,0x75,0x59,0x3a,0x38,0xd9,0xfb,0x32,0x5e,0x91,
-  0x0b,0x8e,0x08,0xde,0xae,0x65,0xde,0x7c,0x4f,0x81,0xa1,0x59,0x9e,0x27,0x2b,0x5c,
-  0xbf,0x42,0xfb,0x06,0xee,0xc6,0xd1,0xc1,0x14,0x1c,0x74,0xd1,0x20,0xab,0x41,0xd0,
-  0xba,0x56,0x78,0xbf,0x61,0x9f,0x62,0x79,0x9e,0x97,0x03,0xa9,0x92,0x16,0x63,0x4b,
-  0x38,0x3a,0xb0,0xe3,0x40,0x8f,0x48,0x34,0x10,0x65,0x21,0xf3,0x7d,0xc3,0xf5,0x85,
-  0xda,0xe2,0x20,0x6c,0xc5,0xc1,0x95,0xda,0x62,0xaa,0xfc,0xbe,0x1a,0x5f,0x73,0x71,
-  0x50,0xd8,0x2a,0x69,0xf4,0xbe,0xc1,0x8c,0xfd,0x13,0xce,0x5a,0x21,0x7c,0x03,0xfe,
-  0x8a,0x4b,0x61,0x89,0x06,0x53,0xf8,0x14,0xbc,0x22,0x2d,0xc6,0x2b,0x37,0x85,0xb3,
-  0x64,0x58,0x0c,0x5f,0xe3,0x92,0x65,0xff,0x18,0xd9,0xc2,0xd7,0xf8,0x6d,0xe1,0x29,
-  0x2d,0x52,0xb6,0xb0,0x88,0x87,0xc2,0x05,0x85,0x59,0x97,0x0f,0xc6,0xcd,0x7d,0xd4,
-  0x3c,0xa3,0x78,0x40,0xd7,0x9d,0x78,0x04,0x16,0xd1,0x79,0x64,0x82,0xc4,0x75,0x4d,
-  0x0d,0x4a,0x74,0x85,0x06,0x05,0x96,0xf9,0x2f,0x2f,0x66,0x93,0x79,0x63,0xb8,0x48,
-  0x2d,0x5c,0x2c,0x7e,0x8d,0x1f,0x0b,0x5f,0x5b,0x98,0x9b,0x1e,0x4c,0x1a,0x1d,0x58,
-  0x9e,0x27,0x6b,0xb1,0x70,0x57,0xfd,0xed,0xe1,0xbf,0x2e,0xbc,0xea,0x95,0xac,0xbb,
-  0x38,0x0d,0x26,0xbf,0x22,0xdc,0xc5,0xdf,0xc6,0xc1,0x14,0xbc,0x52,0xff,0x76,0xf8,
-  0x9f,0x0a,0x71,0x3d,0xd3,0xeb,0xb3,0x58,0xa4,0x5f,0xaf,0x2b,0xcc,0x7d,0x65,0x74,
-  0x70,0x25,0x0d,0xa6,0xe3,0x20,0xe7,0x95,0x6c,0xba,0xd5,0xa4,0xc2,0xac,0x8c,0xf9,
-  0xa9,0xfb,0xaf,0xb0,0xd3,0xdd,0x6e,0x1f,0xbb,0xad,0xdd,0x1c,0xc0,0x3c,0x1c,0x54,
-  0x17,0x5e,0x95,0xb1,0x7f,0x84,0xd4,0x89,0xc9,0x1a,0x97,0x3f,0x34,0xb8,0xcd,0x94,
-  0x48,0xf8,0xe1,0x6e,0xd7,0xbe,0x84,0xf2,0xc7,0xb2,0xdb,0xb2,0x85,0x95,0x7c,0x45,
-  0x18,0xa5,0xcd,0xba,0xd1,0x81,0x80,0x83,0xfa,0xd4,0x95,0xac,0x22,0x5e,0x18,0xfe,
-  0x06,0x09,0xa2,0xf4,0xf3,0xe8,0x33,0xbd,0xc2,0x32,0xf9,0xeb,0x0c,0x8c,0xac,0x3a,
-  0xe1,0x76,0xf8,0x6b,0x90,0xc6,0x06,0x53,0xf0,0x0c,0x8f,0x0e,0xd2,0xcf,0x73,0x93,
-  0x65,0xff,0xa0,0xb4,0x49,0x1d,0xc1,0xd4,0x40,0xa0,0xe7,0x31,0x07,0xdc,0xf2,0xbe,
-  0xa3,0xfb,0x07,0xa7,0xe1,0x6e,0x41,0x69,0x83,0xd3,0x46,0x07,0x6a,0x04,0x7f,0x32,
-  0x07,0xd6,0xf9,0xd5,0x59,0xa1,0x43,0xb7,0x79,0x51,0xfe,0xa0,0xb4,0xa9,0x0f,0x15,
-  0xdd,0x66,0x9f,0x12,0x90,0xf4,0xc6,0x90,0x76,0x9b,0x3c,0x59,0x14,0x42,0xf5,0x28,
-  0x7f,0xe4,0x2c,0xb0,0xac,0x0f,0x5e,0x34,0x6e,0xf3,0x4e,0x91,0x25,0x73,0xa0,0x4d,
-  0xb1,0x67,0x55,0xa7,0xae,0xd8,0xb3,0x02,0xa3,0x3f,0x65,0xe9,0x96,0xf5,0x01,0x5d,
-  0x47,0xcc,0x24,0x09,0x68,0xcf,0x05,0x52,0xa0,0x98,0xa0,0x0d,0x0e,0x34,0x14,0x44,
-  0xa9,0xc1,0x64,0xcb,0xec,0x9b,0x96,0x00,0xe3,0x3c,0xae,0x2d,0x69,0xa1,0xb8,0x10,
-  0xae,0x69,0x6e,0x79,0x74,0x20,0xcb,0x2c,0x7b,0x74,0x60,0x79,0x9e,0x9b,0xf4,0x2c,
-  0x92,0xff,0xdf,0x80,0x02,0x9e,0x45,0xd2,0xfe,0x0a,0x94,0xf6,0x38,0x38,0x4e,0xf2,
-  0x87,0x9b,0x82,0x88,0xe4,0x4f,0xfa,0xbf,0xb0,0x56,0x17,0x52,0xfa,0x02,0xb8,0x98,
-  0x12,0x44,0xb9,0x3c,0x3f,0x0c,0xb7,0x9b,0x83,0x49,0x9a,0x74,0x3b,0x7c,0x09,0xac,
-  0xdf,0x0b,0x46,0xe5,0x09,0x3e,0x94,0xe4,0x15,0xec,0xb0,0x88,0x62,0x34,0xbc,0x42,
-  0x21,0xc9,0x50,0x83,0x69,0x38,0x58,0x0c,0x85,0x19,0xfb,0x21,0x35,0x9f,0xaa,0x67,
-  0xce,0x23,0x9a,0x49,0x87,0x63,0x30,0x1f,0x72,0xe8,0xca,0x31,0xbd,0x84,0x88,0x30,
-  0x1d,0x25,0x52,0xfa,0x2f,0x4b,0x98,0xa7,0x2f,0x0b,0xe5,0xc7,0x0a,0x5e,0x16,0xe6,
-  0x19,0xcb,0xc2,0xf9,0x05,0x12,0x0e,0x16,0xe1,0x95,0x02,0xe9,0x15,0xa1,0x08,0x07,
-  0x5f,0x57,0x33,0xf6,0x5b,0x71,0x56,0x6d,0xd7,0x37,0xbd,0xdf,0x88,0x4a,0x8f,0xd1,
-  0xa0,0xee,0x1b,0x1b,0xa7,0x3c,0x96,0xba,0xb2,0x71,0xca,0x93,0x63,0x03,0xeb,0x7c,
-  0x7b,0x0a,0xe8,0xeb,0x63,0x56,0x72,0x18,0xb6,0xc1,0xe8,0x63,0xc4,0xc6,0x06,0x19,
-  0xef,0x5b,0x13,0x9e,0x5c,0x28,0x2d,0x16,0x20,0x5a,0x63,0x2a,0x32,0xe1,0x6b,0x1b,
-  0xa5,0x55,0x93,0x0b,0x1b,0x17,0x17,0x4d,0xe6,0x35,0x63,0x03,0xeb,0xfc,0xef,0x84,
-  0x26,0xdf,0x26,0xfd,0x95,0x20,0xe9,0x59,0xa9,0xc1,0x14,0xfd,0xa6,0x10,0x14,0x48,
-  0x7f,0x05,0x53,0xf4,0x45,0x21,0xef,0x6d,0xd2,0x14,0x21,0x63,0x3f,0xc8,0x45,0x24,
-  0xf9,0x54,0x6d,0xad,0x5c,0x14,0x90,0x43,0x91,0x02,0x2d,0x2b,0x28,0xe0,0x80,0xe3,
-  0x40,0x0e,0xdf,0x2a,0x87,0xd6,0x15,0x68,0x6b,0xad,0xb7,0xb7,0x51,0x83,0xea,0xb8,
-  0xee,0x2e,0xb0,0x09,0x8c,0xeb,0x71,0xd5,0x0d,0x38,0x88,0xd2,0x40,0xb2,0x41,0xea,
-  0x4a,0x81,0x75,0xbe,0x3d,0xfb,0xeb,0x42,0xa3,0xb1,0xd2,0x7b,0xe5,0x32,0xf1,0xeb,
-  0x70,0xec,0xe0,0xb5,0x5e,0x30,0x07,0xc6,0xb5,0xde,0xdc,0x65,0xd9,0xf9,0xa9,0x81,
-  0xf5,0x79,0x72,0xb2,0xee,0x5e,0x74,0x7b,0x6c,0x5c,0xfb,0x7f,0x29,0x35,0x78,0xdb,
-  0xc4,0x03,0x37,0xd1,0xe0,0x9f,0x8a,0xa6,0x58,0xbf,0x97,0xf2,0xcd,0xc0,0xef,0x62,
-  0xcf,0xb6,0x95,0xe6,0x7c,0x79,0x09,0x0e,0xf6,0xb4,0x95,0xde,0xac,0xdc,0xba,0xa4,
-  0x6f,0xeb,0xb3,0x25,0x3f,0xcf,0x51,0x02,0x4b,0x8e,0x99,0x03,0xeb,0xf3,0xdc,0x70,
-  0xe9,0x96,0x4b,0xbf,0x79,0xf1,0xcc,0xc7,0x23,0x55,0x3f,0xc1,0xc1,0xde,0x33,0x9f,
-  0x8e,0xdc,0x70,0x71,0xf9,0xbb,0x0f,0x5c,0xea,0xbf,0x30,0x72,0xc3,0x7d,0xcb,0x2f,
-  0x99,0x03,0xf8,0xdf,0xf8,0xf3,0x3f,0x9c,0x33,0x2b,0x70,0x73,0x6c,0xeb,0xea,0x99,
-  0x23,0x8e,0x27,0xaa,0x2f,0xc5,0xb6,0xfe,0x8b,0xff,0x5f,0x6f,0xfe,0xc9,0x1b,0x37,
-  0x9f,0x79,0xe8,0x42,0xd5,0xa5,0x9b,0xaf,0xa1,0x41,0xbf,0x75,0x7e,0xd5,0x7d,0xb7,
-  0xbc,0xfb,0xc0,0xde,0xfe,0x8f,0xc7,0x1e,0xe3,0xe3,0x0b,0x63,0x0f,0x86,0xf3,0x6f,
-  0x79,0xd7,0x7c,0x42,0xeb,0xfc,0xe2,0xfb,0x82,0xef,0x6e,0xbd,0xae,0x7f,0xe3,0xca,
-  0x1b,0xe8,0x1f,0xee,0xea,0xbf,0x1f,0x1f,0xfb,0x96,0x77,0xf2,0xe9,0x0e,0xc5,0x85,
-  0x34,0x68,0x1c,0x5c,0x69,0x9d,0x2f,0x04,0xea,0xf4,0xed,0xea,0x35,0xce,0x1c,0xc3,
-  0x65,0x0e,0x0a,0x72,0x5e,0x66,0x75,0x06,0x0e,0xec,0x38,0xb8,0x8b,0xae,0x4c,0xcf,
-  0xb1,0xae,0xa7,0x64,0xc1,0x87,0x29,0x58,0x38,0x61,0x50,0xad,0x66,0xac,0xbf,0x38,
-  0x8a,0x0f,0xc1,0x94,0xcf,0xde,0x31,0x58,0x48,0xf2,0xd9,0x04,0x8a,0x13,0xe5,0x33,
-  0xa4,0xd0,0x9a,0xb3,0x7e,0x14,0xb6,0xa1,0x7c,0x86,0x70,0xca,0x16,0xe4,0xb0,0x92,
-  0x17,0x32,0x73,0x90,0xfe,0x93,0x6b,0xee,0x16,0xec,0xbc,0x9a,0xf6,0xbf,0x4f,0x98,
-  0xde,0xf8,0x15,0x6d,0x72,0x8f,0xe4,0x13,0x0a,0x38,0x0e,0x0e,0x4b,0x77,0x0b,0xd3,
-  0x69,0x60,0x64,0xdc,0x7f,0xd5,0x0a,0xb9,0x91,0xe5,0x52,0xf7,0x08,0x28,0x54,0x11,
-  0x16,0x72,0x1a,0x10,0x3e,0x1c,0x07,0x8a,0x19,0xf7,0x97,0x4c,0xa1,0x11,0x46,0x7c,
-  0xb8,0x8a,0xf0,0x61,0x58,0x6d,0x91,0xbe,0x3b,0x36,0x98,0x25,0xe4,0xd0,0xc0,0x3a,
-  0x7f,0xae,0xb4,0xa4,0xeb,0x8a,0xf8,0x4d,0x6d,0x93,0x67,0x4b,0xdf,0xac,0x77,0xc6,
-  0x6b,0xda,0x27,0xcf,0x91,0xbe,0xd9,0x85,0x83,0xce,0xc9,0x65,0xd2,0x92,0x7a,0x73,
-  0x60,0xb9,0xbb,0x91,0x0b,0xf9,0x50,0xd0,0x97,0xd5,0x02,0xb7,0x20,0xe4,0x29,0xe8,
-  0x03,0xd4,0x36,0xf0,0x75,0x52,0x32,0x0b,0xcd,0xc1,0x15,0xa4,0x64,0xf4,0xf4,0x3f,
-  0x30,0xb2,0x71,0x2d,0x50,0x3e,0xdf,0x0a,0xb4,0x6a,0xaa,0xc9,0x2c,0x40,0x0d,0x1a,
-  0x88,0x52,0x48,0x70,0xe2,0x60,0x32,0x20,0xac,0x48,0xbb,0x8f,0x64,0x43,0x67,0x4e,
-  0xe0,0x31,0x0d,0x52,0x4c,0x81,0x3a,0x6a,0x60,0x36,0x66,0x9a,0xfc,0xd6,0xf9,0x52,
-  0xd8,0x14,0x92,0xa6,0xc4,0x2f,0x44,0x89,0x3f,0x99,0x8f,0x5e,0xb1,0x0c,0xc6,0xe7,
-  0xab,0x82,0x8e,0x12,0xaa,0x05,0x66,0x91,0xcc,0x4a,0x0d,0x72,0xd2,0x83,0x6c,0x5a,
-  0xcf,0x6b,0x40,0x48,0xc7,0x03,0xe8,0x63,0xf8,0x70,0x19,0x34,0x58,0xf0,0xe1,0xda,
-  0xd4,0x20,0xdb,0x8b,0xf8,0x6a,0xb1,0xcc,0xd3,0xfa,0x94,0xde,0x7c,0x14,0x0d,0x5e,
-  0x8e,0x0f,0x71,0x80,0x12,0x9e,0x81,0x45,0x3e,0xeb,0xf8,0x3f,0xe9,0x26,0xa2,0x1d,
-  0x5e,0x4a,0x0d,0x64,0x38,0x78,0xd9,0xc0,0x50,0xad,0xcf,0x93,0xd2,0xbf,0x42,0x64,
-  0x74,0x30,0x79,0xe2,0x00,0xdf,0x37,0xfd,0x3c,0xc2,0x5f,0xc6,0x87,0x99,0x83,0xf4,
-  0x7e,0x08,0x09,0xa3,0xf7,0xb7,0xc3,0xbf,0x7b,0x7f,0xd9,0x22,0x9f,0xf5,0x9b,0x74,
-  0xfc,0x90,0xd3,0xe1,0x26,0x42,0xfc,0x21,0xa1,0x00,0x07,0x93,0xf5,0xf1,0x01,0x8c,
-  0x0e,0x02,0xe3,0xcf,0x13,0xc4,0xed,0xba,0x88,0x17,0x20,0x88,0x12,0xb2,0x11,0x39,
-  0xaa,0x61,0x29,0x63,0xb0,0x28,0x35,0x48,0x6f,0x9f,0x20,0xbe,0x81,0xf9,0xcd,0xcd,
-  0x3f,0x8e,0x16,0x86,0x69,0x2b,0x35,0xea,0x29,0xa0,0x88,0x57,0xbc,0x38,0x00,0xcb,
-  0xf3,0x7c,0x03,0xd1,0x20,0xe2,0xc3,0x10,0x7c,0x03,0x81,0xe2,0x6f,0xc3,0xf3,0x10,
-  0x16,0x32,0x0b,0x50,0xbc,0x4d,0xbf,0xb6,0x30,0x4b,0x4f,0xeb,0x77,0x61,0xb1,0x74,
-  0x57,0xfd,0xf4,0xf0,0x57,0x10,0x16,0x9a,0x83,0x2b,0x70,0x90,0x95,0x71,0xe5,0x2b,
-  0x2b,0xae,0xb7,0x7c,0x2f,0x61,0x31,0xbb,0x8b,0x6f,0x0f,0x5f,0x53,0x28,0x10,0x2c,
-  0x3c,0x8e,0x83,0x9c,0x57,0x18,0x01,0xc5,0xd1,0x01,0xfd,0x64,0x91,0x3f,0xa1,0x9b,
-  0x16,0x8f,0xc2,0x42,0x78,0x25,0x6b,0x5e,0xfd,0xb2,0x31,0x7c,0x38,0x3e,0x20,0xe8,
-  0x38,0xe5,0xa0,0x65,0xff,0x38,0x05,0x13,0x1f,0xd6,0x40,0x4c,0x08,0xf3,0x9b,0x49,
-  0xec,0x70,0xa1,0x84,0xaf,0xd0,0x9c,0x41,0x69,0x6b,0x4a,0x34,0x05,0x25,0xcb,0xfa,
-  0xe3,0xbe,0x45,0x21,0x13,0xce,0x6e,0x51,0x9f,0xc0,0xc1,0xd4,0xb0,0x29,0x7f,0xcc,
-  0x2b,0x96,0x01,0x4f,0xc7,0xe3,0xdd,0x14,0x96,0xd6,0x08,0x79,0x50,0x8d,0x18,0x48,
-  0x5a,0x28,0xcc,0xa0,0x15,0x4f,0x9a,0x83,0xaf,0xf0,0xc9,0xe3,0x03,0xcb,0x7e,0x16,
-  0x6e,0x45,0x34,0x88,0x9b,0x24,0x48,0x49,0x7a,0xfc,0x4a,0xf2,0x1e,0x45,0xa0,0x84,
-  0x60,0x61,0x50,0x78,0x20,0x85,0x0f,0x83,0x02,0x4f,0xef,0x4f,0xdc,0x3f,0x5a,0x0a,
-  0x1f,0x6e,0x20,0x34,0x18,0x1f,0xdd,0x36,0x13,0xf0,0xa1,0xe5,0x7b,0x21,0x1a,0xec,
-  0x2a,0xf0,0xdd,0x24,0x0b,0x4c,0x0a,0xd5,0xab,0xda,0x4d,0xf2,0xe4,0x6a,0x29,0xb4,
-  0x56,0xd5,0x6a,0xe4,0xc9,0xa9,0x2b,0x38,0x00,0xcb,0xfa,0xa0,0x49,0xd9,0x53,0xe0,
-  0x45,0xcb,0xc3,0xa6,0x69,0x46,0x41,0x5c,0xb0,0x0b,0xd5,0x80,0xda,0xdd,0x9b,0x65,
-  0x0e,0x0c,0x73,0xa0,0xa7,0xef,0x4f,0xc2,0x22,0x85,0x0f,0x41,0xc7,0x7f,0x0a,0xa6,
-  0x7d,0x3a,0x01,0x1f,0x5a,0xf6,0x1b,0x3e,0x8f,0xcb,0x49,0xf8,0x30,0x87,0xca,0xdf,
-  0x70,0xee,0x2a,0x72,0xcb,0x36,0xc4,0x87,0x51,0x82,0x85,0xb6,0x51,0xa0,0x18,0xb5,
-  0x3c,0x8f,0x30,0x26,0x7f,0x0a,0x53,0xf2,0x67,0xf1,0x5f,0x94,0x3f,0x96,0xfd,0xa3,
-  0x53,0xbf,0x68,0x98,0x45,0x19,0x27,0x61,0x1c,0x7c,0x57,0xcf,0x89,0x65,0x8f,0xca,
-  0x9f,0xd8,0xb8,0x20,0xb2,0x3c,0x4f,0x18,0x3f,0x0a,0x7e,0xaf,0xb5,0xe6,0xf7,0xca,
-  0x93,0xaa,0xf1,0x7b,0x65,0x9b,0x57,0x52,0x1f,0x0e,0x07,0xf5,0x16,0xfb,0x34,0x04,
-  0x82,0x76,0xbd,0x9e,0x17,0x12,0x7f,0x0a,0x4f,0x6a,0x5e,0xaa,0xfe,0x26,0xc1,0x09,
-  0x18,0x1d,0x74,0x8d,0x0d,0x2c,0xfb,0x19,0x25,0xf1,0xb5,0x7a,0x6e,0x48,0xbc,0x0d,
-  0x61,0xdb,0x3c,0x3d,0x57,0xaf,0xbe,0x0d,0x7e,0x4b,0xc0,0x32,0x24,0x16,0xd0,0x40,
-  0x37,0x07,0x07,0x55,0x7d,0xfc,0x79,0xaa,0xa5,0x95,0x5d,0x85,0xde,0xc5,0x85,0x42,
-  0x83,0x14,0xc6,0x41,0xb6,0x7d,0x72,0x6a,0xb0,0x78,0x74,0x80,0xa2,0x23,0x43,0xfe,
-  0xe8,0x84,0x0f,0x8d,0xb4,0x08,0x27,0x46,0x78,0x54,0x96,0xa7,0x06,0xa6,0xa8,0x1c,
-  0xbf,0xbf,0x10,0x1c,0xc3,0x87,0x7c,0x35,0xa2,0x41,0xb4,0x22,0x2d,0xb0,0xf0,0x36,
-  0x1a,0x54,0x17,0x65,0xca,0x9f,0x9a,0xbf,0xba,0x72,0xca,0xe2,0xff,0x4f,0x7b,0x67,
-  0x13,0xda,0x44,0x10,0xc5,0xf1,0x59,0xbb,0x5b,0x53,0xd3,0xd8,0x04,0x1b,0x02,0x35,
-  0x84,0x84,0x35,0xb1,0x82,0xc8,0xa8,0x6d,0x15,0x22,0xc9,0x14,0xa3,0xc6,0x40,0x1b,
-  0x41,0x8a,0xd4,0x83,0x17,0x2f,0xe2,0xc9,0x8f,0xa3,0xd4,0x2c,0x21,0xa2,0x07,0x85,
-  0x50,0x22,0x22,0xf8,0x51,0xc1,0x93,0xb4,0x78,0x10,0x45,0x10,0x61,0x6e,0xa5,0x78,
-  0x88,0x87,0x9e,0xf4,0x20,0x62,0x2f,0x82,0x92,0x1c,0x0a,0xe2,0x21,0xae,0x33,0xb3,
-  0x6b,0xdd,0x28,0xb6,0x18,0xfb,0x2e,0xf2,0x7e,0xa7,0x17,0x32,0xf9,0xef,0xe3,0xf1,
-  0x78,0xf9,0xcf,0x26,0x99,0x1c,0x3a,0x12,0x0c,0xe6,0x8e,0x85,0xfa,0x75,0x43,0x0b,
-  0x31,0x26,0x03,0x67,0x10,0x89,0x60,0x54,0x04,0x9e,0xfe,0x91,0x0d,0xb8,0x32,0xf9,
-  0x82,0x65,0x23,0xae,0xe5,0x65,0x4f,0x95,0xe5,0xbd,0x13,0x31,0x2c,0x55,0x40,0x3c,
-  0x14,0x34,0xf9,0x15,0x70,0x22,0x6c,0xa1,0x72,0x83,0x2b,0x81,0xf4,0x87,0xae,0x63,
-  0x6c,0x9b,0x3f,0x63,0x5d,0xc7,0x59,0xe5,0x75,0x62,0x88,0x8c,0x6d,0xd8,0xc2,0x16,
-  0x45,0xe0,0x73,0x82,0xe1,0xa1,0x80,0x7c,0x4a,0x05,0x9e,0x7c,0xb4,0xfc,0xe0,0x85,
-  0xd1,0x68,0x75,0x63,0x22,0xb4,0x50,0x71,0xdf,0xfd,0x17,0x7e,0xd8,0x00,0x69,0x14,
-  0xa3,0xd6,0xd5,0x76,0x3f,0xa0,0x6c,0xa1,0xf4,0x87,0xfe,0x42,0xc1,0xeb,0x0f,0x1f,
-  0xfe,0xc1,0x1f,0x2a,0xf7,0x25,0xfd,0x61,0xba,0x54,0xf4,0xfa,0xc3,0xe5,0x75,0xf2,
-  0x87,0xca,0x16,0x7e,0xac,0xda,0xad,0xec,0x57,0xc7,0x28,0x4e,0x6d,0xbb,0x2f,0x6d,
-  0x61,0xf5,0x56,0x2b,0x69,0xbb,0x81,0x77,0xbd,0xba,0xfa,0x97,0x25,0xb1,0xfe,0x9b,
-  0x63,0x14,0x5b,0xe9,0x92,0xb4,0x85,0x4b,0x8d,0x56,0xda,0x76,0x83,0xb6,0xf5,0x31,
-  0xd7,0x1f,0x9a,0xb1,0xf1,0x77,0xd3,0xbb,0x85,0x3f,0x34,0x2f,0x8f,0xcf,0x2b,0x87,
-  0x69,0x2a,0xab,0x59,0x69,0xfc,0x43,0xfe,0x94,0xc4,0x35,0xf9,0xf7,0x37,0x94,0x1c,
-  0xec,0xed,0x5c,0x05,0x41,0x10,0x04,0x41,0x10,0x04,0x41,0x90,0xff,0x1d,0xb5,0x77,
-  0xd0,0x71,0xef,0x80,0x20,0x08,0x82,0x20,0x08,0x82,0x20,0xc8,0xea,0xa8,0xbd,0x43,
-  0x37,0xee,0x1d,0x10,0x04,0x41,0x10,0x04,0x41,0x10,0x04,0x59,0x1d,0xb5,0x77,0xf0,
-  0xa9,0xbd,0x83,0x78,0x64,0xec,0x3f,0x35,0xc9,0xb2,0x99,0x4b,0x93,0x40,0x57,0x1b,
-  0x9c,0x27,0x3b,0x99,0x99,0x23,0xfd,0x1c,0x46,0x5f,0xdf,0x74,0xe6,0xb6,0xe5,0x0f,
-  0xbf,0xc8,0xc3,0xc8,0x93,0x6c,0x5d,0xe6,0xcf,0x48,0x96,0xc3,0xe8,0xeb,0xf1,0xda,
-  0x03,0x3e,0xb0,0x78,0xe3,0x1a,0x8c,0x3c,0xa1,0x75,0xfa,0x89,0x99,0xe7,0x38,0xe5,
-  0x30,0xfa,0x81,0x7d,0x53,0x57,0x78,0xf4,0xf1,0xe9,0x22,0x8c,0xbc,0xa8,0xbf,0x93,
-  0x3f,0x54,0xfd,0x7b,0xb7,0xdf,0xb1,0xc8,0x81,0xc8,0x0c,0x5c,0xfd,0xfb,0x44,0xff,
-  0x14,0x09,0x54,0xfd,0x37,0xa7,0x9e,0x37,0xc9,0xd6,0x89,0xa7,0x47,0x61,0xe4,0x45,
-  0xfd,0x9d,0xfc,0xc1,0xfa,0x7f,0x57,0xf8,0x11,0xf3,0x5f,0xac,0xf9,0xd6,0x5e,0xda,
-  0x11,0xb4,0x9e,0x15,0xfd,0x53,0x82,0xeb,0xff,0xa0,0x36,0x42,0x92,0x3d,0x3b,0xe0,
-  0xfa,0xdf,0xc9,0x1f,0xaa,0xfe,0x81,0x44,0xee,0x30,0xd9,0xb3,0x9c,0x82,0xea,0x1f,
-  0x6a,0x73,0x39,0x3f,0x69,0x93,0xc3,0xe8,0xeb,0xbe,0xf3,0x37,0xf9,0xc8,0x93,0x1a,
-  0xd8,0xfc,0x77,0xf3,0xff,0xfd,0x64,0x82,0xf5,0x41,0x37,0x6b,0x73,0xdc,0x8c,0x4c,
-  0x83,0xcd,0x1f,0xbb,0x29,0xe7,0x67,0x13,0xaa,0xfe,0x7d,0x99,0x0f,0x0d,0x3e,0xfc,
-  0xe6,0x44,0x1d,0x46,0x5e,0xd4,0xdf,0xc9,0x1f,0xac,0xfe,0x99,0xeb,0xf7,0xac,0xbd,
-  0x91,0xd9,0x9e,0xb5,0x97,0x76,0x04,0xb5,0xeb,0x72,0x7e,0x82,0xf5,0x7f,0x77,0x6c,
-  0xee,0xac,0x95,0x7a,0xf9,0x36,0x07,0x23,0x2f,0xea,0xef,0xe4,0x0f,0x56,0xff,0xe4,
-  0xc4,0x33,0x12,0x0f,0xdf,0x85,0x9b,0x3f,0xb6,0x9c,0x9f,0x70,0xfd,0x3f,0x60,0x24,
-  0x58,0x66,0x36,0xf0,0x0a,0x46,0x5e,0x1e,0x72,0xa2,0xf2,0x87,0xa9,0x3f,0x55,0x47,
-  0x1d,0x95,0x3f,0x53,0x62,0xc9,0x5f,0xad,0x74,0x51,0xc2,0xfe,0xfa,0xf3,0x04,0xf7,
-  0xb5,0x06,0x25,0x33,0xda,0x4f,0xcd,0xf7,0x27,0x7f,0x5d,0xf7,0x1d,0x0e,0xf7,0x99,
-  0xa7,0xf0,0x33,0x01,0x00,
+  0x1f,0x8b,0x08,0x08,0x9c,0xc4,0xe8,0x42,0x00,0x03,0x68,0x68,0x34,0x30,0x35,0x5f,
+  0x31,0x5f,0x30,0x35,0x2e,0x62,0x69,0x74,0x00,0xec,0xfd,0x0f,0x78,0x14,0xd7,0x91,
+  0x2f,0x0c,0x57,0x9f,0x6e,0x89,0xa3,0xe9,0x91,0xa6,0x91,0x84,0x57,0xb6,0x31,0x6e,
+  0x8d,0x04,0x1e,0x94,0x91,0x18,0x46,0x58,0xc8,0x42,0x8c,0x5a,0x23,0xd9,0x19,0x1b,
+  0x6c,0x26,0x8e,0x93,0x65,0x77,0xfd,0xe5,0x0e,0x84,0x64,0x95,0xbc,0xc4,0x2b,0x3b,
+  0xb9,0x7b,0x49,0xd6,0xeb,0x1c,0x8d,0x04,0x8c,0x90,0x0c,0x03,0x28,0x31,0x4e,0x58,
+  0x6f,0x23,0x64,0x5b,0x38,0x24,0x3b,0x08,0x0c,0x02,0x1c,0xdc,0xc2,0xb2,0x2d,0xfe,
+  0x18,0x2b,0x0e,0xeb,0xe0,0x3f,0x71,0x06,0x47,0x26,0xb2,0x23,0xdb,0x32,0xc6,0x8e,
+  0x04,0x02,0xde,0x3a,0x3d,0x92,0xa6,0x47,0x64,0xf7,0xe6,0xbe,0xf7,0xf9,0xde,0x6f,
+  0x9f,0xe7,0xbb,0xf2,0xf3,0xec,0x9e,0xb4,0x8e,0x9a,0xee,0xd3,0xe7,0x54,0xfd,0xaa,
+  0xea,0x57,0x55,0x90,0xe1,0x18,0x4e,0xfc,0x07,0x20,0xac,0x00,0x47,0x5d,0xdd,0x02,
+  0xcf,0xad,0xff,0x6d,0xfe,0x7f,0xf3,0xdc,0x5a,0xf2,0xc0,0xd7,0x57,0xc1,0x4a,0x90,
+  0xbd,0xdf,0xbd,0xd5,0xf3,0x8d,0xef,0x3d,0x38,0x7f,0xc1,0x02,0xf8,0x3a,0xfe,0x2f,
+  0x8f,0xe7,0xd6,0x79,0x9e,0x85,0xf3,0xbc,0xe5,0xb0,0x0a,0x32,0xe6,0x97,0x56,0x2c,
+  0xf0,0x56,0x78,0x3d,0xf0,0x0d,0x10,0x4a,0x3b,0xae,0xe2,0xcf,0x33,0x8f,0x7f,0xe5,
+  0x9b,0x1e,0x60,0x02,0x00,0x4c,0xf3,0x08,0x21,0xfe,0xff,0x65,0x8f,0xa0,0x0a,0xc0,
+  0xaa,0x8a,0x3d,0x60,0xf0,0xff,0x0d,0xe3,0xbf,0xcf,0xf0,0x80,0x6a,0xfd,0xdf,0x82,
+  0x07,0x34,0x08,0x82,0xd6,0xca,0xb2,0xe1,0x2f,0xf8,0xa1,0x12,0x9b,0x18,0xfe,0x45,
+  0xf3,0x61,0x72,0xfe,0xd5,0xe3,0xec,0x3f,0x9c,0x94,0xfc,0xa9,0x3a,0xaf,0x8f,0x8f,
+  0x18,0xf1,0xfc,0xcf,0xa7,0x0b,0x01,0x98,0xb8,0xeb,0x0f,0xdf,0xfc,0x4b,0xee,0xbf,
+  0xf0,0xf3,0x89,0xfb,0xff,0xaf,0xce,0x07,0xe5,0x2f,0x98,0x8e,0xef,0x3b,0x31,0xf8,
+  0xa1,0x22,0x68,0xb0,0x1c,0xd2,0x41,0x60,0x10,0x82,0xbc,0xff,0x60,0xb0,0xb0,0x77,
+  0x62,0xfe,0xd1,0xb4,0x31,0xef,0x29,0x71,0x61,0x7e,0xd6,0xe7,0x62,0x25,0xbc,0x0a,
+  0x0b,0x8c,0xcc,0x11,0xf1,0x0a,0x8c,0x42,0x45,0x9f,0x3d,0x2e,0x8e,0xc1,0xc7,0x50,
+  0x05,0x77,0xb3,0x1c,0x0f,0xd4,0x8f,0xcf,0x37,0xf2,0x9e,0x57,0x8e,0xab,0x5e,0x95,
+  0x7e,0x4e,0x7e,0x01,0x2d,0xe0,0x8c,0xdb,0xbb,0xc9,0x47,0xd0,0xad,0x16,0xbc,0x69,
+  0xef,0xc4,0xc1,0x06,0x56,0xa2,0xd2,0x08,0x89,0x49,0x13,0xab,0xd8,0x27,0xed,0x86,
+  0x2d,0xb6,0x39,0xb0,0x61,0x01,0x91,0x60,0xab,0x50,0x62,0xe4,0x79,0xc8,0x49,0x38,
+  0x2c,0xbb,0x5e,0xa4,0x1e,0x32,0x04,0x3b,0xc1,0x0d,0x54,0x99,0xe3,0x15,0x26,0xef,
+  0x8f,0xf3,0x7f,0x02,0x4e,0x0f,0x8d,0x39,0x77,0x6b,0x3f,0x65,0x45,0xf1,0xbc,0x18,
+  0x4e,0x3b,0xbc,0x41,0x35,0x32,0x3a,0xc8,0x50,0xd8,0x46,0x4b,0x08,0xdd,0x8c,0xf7,
+  0x0f,0x8d,0xcf,0xaf,0x9e,0x3e,0x04,0xbf,0x82,0x32,0x4f,0x56,0x4c,0x74,0x85,0xdf,
+  0x3a,0xeb,0x1b,0x76,0xc7,0x6a,0x86,0x60,0x94,0x55,0xf4,0xb4,0xea,0xe2,0x71,0xe9,
+  0x8f,0xbf,0xf2,0x45,0xdd,0x11,0x41,0x91,0x26,0xee,0xaf,0x0b,0xcf,0xc1,0xc7,0xb4,
+  0x0a,0x1c,0x9e,0x1b,0xfb,0xc8,0x7b,0xb0,0xd0,0x98,0x36,0x2c,0x8e,0x09,0x97,0x33,
+  0x9e,0x37,0xb2,0x7a,0xc4,0x0f,0xe0,0xa2,0xe4,0x63,0x0e,0x2a,0x0e,0xc2,0xc4,0xfd,
+  0xfb,0x95,0xdd,0xf4,0x7d,0xcd,0x0b,0xfc,0xfe,0xd2,0x1f,0x7b,0x7c,0x41,0x7b,0xac,
+  0x60,0x08,0x2e,0x41,0x99,0x61,0x67,0xe2,0xfb,0xf0,0x47,0xcd,0x13,0xb5,0x47,0x65,
+  0x8f,0xa4,0x4e,0xbc,0x6f,0x9a,0x8f,0xb6,0xc4,0x43,0x0b,0xe4,0x61,0xb1,0x4e,0x6a,
+  0x31,0xd4,0xb7,0x6d,0x31,0x71,0x37,0xec,0x85,0x02,0x83,0x32,0x32,0xc8,0x36,0x80,
+  0x93,0xd1,0x28,0x29,0xc3,0xdd,0x3f,0xf1,0xbe,0xab,0xb5,0xf6,0x3b,0x74,0xdd,0xe6,
+  0x21,0x76,0xd8,0xa9,0xba,0xe2,0x19,0x7c,0x7d,0x76,0x42,0xa1,0xe1,0x82,0xf4,0x8d,
+  0x64,0x07,0xa8,0x1a,0x55,0xc9,0x08,0x9e,0x95,0xc4,0xcf,0x88,0xf2,0xb5,0x8c,0x8d,
+  0xb1,0xfc,0x8e,0x1b,0xbf,0x4f,0xbe,0x46,0xd7,0xeb,0x73,0x87,0xe4,0x35,0xe4,0x09,
+  0xa8,0xea,0x56,0xe3,0x74,0x0d,0x79,0x27,0xf3,0x49,0x96,0x1f,0xa2,0xdf,0x82,0x2b,
+  0x93,0xf7,0x0f,0xd0,0xa5,0xf0,0x6e,0xbb,0x1a,0xce,0xf2,0x88,0x76,0xf8,0xa3,0x5e,
+  0x39,0x96,0xe9,0x11,0x4f,0xc2,0xa7,0xd1,0x05,0x71,0x3b,0x1f,0x9c,0x85,0x98,0xe6,
+  0xae,0xa8,0x79,0x8d,0x4c,0xec,0x07,0x2d,0xad,0x55,0xfd,0x47,0xa5,0x8a,0x39,0x86,
+  0xc5,0x21,0xed,0x8a,0xb2,0xb0,0x37,0x0b,0xd7,0x07,0x3e,0x85,0xaa,0x97,0x1c,0x31,
+  0x1c,0xfc,0x7f,0x94,0xaa,0x5a,0xc7,0x48,0x8e,0x92,0x3e,0xb1,0x3e,0x54,0xfa,0x79,
+  0xb8,0x07,0x4f,0x75,0xd6,0x01,0x71,0x35,0x9c,0x80,0x32,0x96,0x19,0x13,0x87,0x70,
+  0x7e,0x59,0x9f,0x3d,0x8a,0x83,0x13,0xcc,0x1b,0xb7,0xbb,0xe4,0xa2,0xc9,0xfd,0xd3,
+  0x97,0xb7,0x5d,0x5d,0x0f,0x3b,0x80,0x7e,0x57,0x9c,0x49,0x70,0xc0,0xdc,0xf5,0xe4,
+  0x6d,0x38,0x00,0xfa,0xc9,0x40,0x30,0xfb,0x6d,0xfc,0x43,0xd5,0xa0,0x21,0x9b,0x77,
+  0xf2,0xfb,0xaa,0xb0,0x91,0xb5,0x1a,0x05,0xaa,0xad,0xdc,0xb6,0x0c,0x1e,0x63,0xea,
+  0xd9,0xeb,0xf1,0x35,0xe1,0x79,0x96,0x1f,0x2f,0x5f,0xee,0x3f,0x05,0xeb,0x71,0x80,
+  0x2f,0xae,0xc2,0xc4,0xfa,0xd7,0x49,0xad,0xb0,0x35,0xa4,0xd6,0xe3,0xee,0xca,0xc4,
+  0x8d,0xa4,0x0e,0x2f,0xe7,0xeb,0xb9,0x97,0xdf,0x36,0x37,0xdc,0xab,0xed,0x8d,0xaa,
+  0x03,0xb8,0x03,0xb3,0x27,0xf7,0xe7,0xe0,0x8c,0x41,0x38,0x65,0x94,0x36,0x67,0xe9,
+  0x05,0x7f,0x0b,0xef,0xb4,0xef,0xed,0xcc,0xd4,0xf1,0xeb,0x7f,0x0e,0x5e,0x66,0xff,
+  0x40,0xfc,0x23,0x1c,0x87,0x2e,0xe6,0xd6,0xc5,0x8a,0xc9,0xe7,0x09,0x08,0x02,0x0c,
+  0xfa,0x7d,0xd4,0x01,0x62,0x9c,0x0d,0x42,0x05,0xcd,0x62,0x62,0x1c,0x46,0x58,0x05,
+  0x38,0x98,0xf8,0x2e,0x0c,0x82,0x0f,0x1c,0x86,0xf8,0x1a,0x4c,0xdc,0x9f,0x2a,0x4f,
+  0x91,0x1e,0xf6,0x94,0x96,0x19,0x15,0x3b,0xd2,0x8f,0x41,0xf8,0x76,0x1c,0x0c,0xc0,
+  0x28,0xe9,0xd2,0xec,0x8a,0x28,0xc1,0xfb,0xe0,0xd3,0x1c,0x51,0xf1,0xe8,0xe4,0xf3,
+  0x30,0x58,0xd5,0xd3,0xdc,0xaf,0x06,0x6d,0xd1,0x9c,0x55,0xb0,0x0b,0xd4,0x3a,0x7b,
+  0x94,0x0c,0xc0,0x41,0xcd,0xa9,0x45,0xa2,0xa4,0x10,0x9a,0xa1,0x44,0x93,0xa3,0x24,
+  0x3e,0x29,0x16,0xca,0xd3,0x0a,0xd3,0x5a,0xb4,0x5f,0x04,0x68,0x34,0x7d,0x00,0x32,
+  0x94,0x6f,0x6b,0xcd,0xe6,0x7c,0x8a,0xdb,0x26,0xea,0x77,0xc3,0xcf,0x61,0x9e,0x26,
+  0xf7,0x93,0x97,0x26,0xf7,0x83,0x9a,0x2b,0x09,0x0d,0x9a,0xd3,0xd8,0x90,0x9b,0xbe,
+  0x4a,0xd8,0xa1,0xa9,0x5a,0x9e,0x42,0x7a,0xf1,0xfe,0x6a,0xd0,0xa5,0xe0,0x09,0x5d,
+  0x0b,0xc5,0x9a,0x1c,0x24,0x47,0x85,0x89,0xfd,0xb0,0x26,0x33,0x04,0x11,0x38,0x02,
+  0xb8,0xdb,0x75,0xe8,0x23,0x15,0x42,0xa6,0xf9,0xbe,0xe0,0xc5,0x2b,0xb2,0xaa,0xf0,
+  0xf7,0xdd,0x64,0x88,0xa7,0xc4,0x89,0xfd,0xb9,0x2d,0xed,0x3d,0xb8,0xac,0x3d,0xaf,
+  0x39,0xda,0x72,0x3e,0x23,0xff,0xee,0xaf,0x0a,0x66,0xe1,0xfb,0x4a,0x97,0xb5,0xac,
+  0xe0,0xbc,0xd3,0xe2,0x67,0x30,0xaa,0xf9,0x82,0x8e,0x36,0xf1,0x5c,0xfa,0xc4,0x7e,
+  0xc8,0x4b,0xbb,0xc0,0x5e,0xf1,0x2c,0xd2,0xb2,0xda,0xc4,0x42,0xd7,0x2b,0x77,0x2e,
+  0x0e,0xdc,0x83,0xf3,0x85,0xcb,0x01,0xaf,0x3f,0x2b,0xda,0xb8,0x4f,0x3d,0xa6,0x96,
+  0x6a,0xf6,0xfe,0xc6,0x97,0x26,0xf7,0x4f,0x79,0xde,0x59,0x88,0xa8,0x4e,0x81,0x36,
+  0x91,0x1d,0x42,0x04,0xda,0xa3,0x36,0x86,0xab,0xd1,0x0d,0x45,0x0a,0x6d,0x12,0xf1,
+  0x57,0xe0,0x04,0xbb,0x4e,0x4e,0x4d,0xae,0x67,0xe0,0xf6,0xb5,0xb6,0x06,0xe3,0x19,
+  0xcd,0x76,0x9d,0xbf,0x10,0x1a,0x84,0xc2,0xa0,0x4d,0x21,0xb5,0xb0,0x47,0x55,0xef,
+  0xb2,0x29,0xfe,0x01,0x68,0xc0,0x17,0xcf,0x50,0xc8,0x6b,0x93,0xf2,0x67,0x9b,0xd4,
+  0x81,0x8b,0x4c,0xb4,0x40,0x74,0x65,0x07,0xc9,0x70,0x91,0x80,0xcd,0x5c,0x4f,0x67,
+  0x91,0xa6,0xb6,0x91,0x73,0xa4,0x19,0x9c,0x9a,0x2b,0x4a,0x5e,0x9a,0xdc,0x0f,0xfa,
+  0x8c,0x55,0xd0,0x03,0x15,0x81,0xac,0x68,0xce,0x1c,0x68,0xd6,0x66,0x6a,0xfc,0x7d,
+  0xe1,0xa0,0xee,0xd5,0xee,0xda,0x7e,0xcb,0x3a,0x38,0x06,0x8c,0x7f,0xfa,0xc1,0x49,
+  0xf9,0xd3,0x27,0x74,0xc0,0xa8,0x8d,0x7f,0xf4,0x25,0x03,0x91,0x4f,0xc0,0x17,0xc2,
+  0xaf,0x3f,0xa0,0x7c,0x22,0xf9,0xb4,0x7f,0xdb,0x22,0x76,0xc0,0x27,0x82,0xb9,0x1f,
+  0x2e,0x4e,0xca,0x1f,0xaa,0xb0,0xea,0xbe,0xe9,0xde,0x0c,0x5c,0x6d,0x5c,0x7f,0xad,
+  0x4c,0xb1,0xb3,0x02,0x5c,0xff,0xac,0x32,0xc8,0x62,0x39,0x71,0xa5,0x4f,0xf0,0x82,
+  0x9b,0xa1,0xa0,0x9b,0xd8,0xff,0xae,0xb4,0x6e,0x3c,0x31,0xf9,0x51,0x9b,0x4e,0x28,
+  0x6c,0x84,0x82,0xb0,0x43,0x27,0x83,0x70,0xc4,0x98,0xc3,0xec,0x7c,0xb0,0x01,0x0a,
+  0x18,0x8d,0x93,0xe3,0x93,0xfb,0xc1,0x25,0xdd,0x45,0xdb,0x0d,0x97,0xc7,0x16,0xb3,
+  0xa1,0xd8,0x61,0xae,0xec,0x88,0x27,0xfd,0x24,0x6e,0xfa,0x39,0x78,0x0d,0xb7,0x4d,
+  0x23,0xb8,0x18,0xca,0x9f,0xe3,0x93,0xf2,0x87,0x29,0x01,0xe9,0x29,0xf8,0x82,0x62,
+  0x7b,0x90,0x3c,0x07,0xb7,0x68,0x73,0xe1,0xef,0xcc,0xf3,0x9b,0x51,0xd8,0x27,0xd7,
+  0xc3,0xbf,0xc3,0x7a,0x3e,0x3f,0x84,0xff,0xd0,0xc4,0xfd,0x23,0x91,0x7b,0xe1,0x17,
+  0x0d,0x07,0xf5,0xac,0x11,0xf9,0x09,0xf8,0x37,0xf6,0x4b,0xd5,0xbe,0x46,0x7c,0x07,
+  0x3e,0x67,0xb7,0x9e,0xcf,0x5a,0x23,0xbe,0x44,0x5e,0x60,0x07,0x75,0x7b,0x9d,0xf8,
+  0xc1,0xa4,0xfc,0xa1,0x33,0x3a,0xe1,0x6f,0xa5,0x7d,0x80,0xd2,0x66,0x29,0x79,0x0b,
+  0x05,0xa5,0x83,0xcb,0x93,0x8b,0xd2,0x23,0x86,0x3d,0x26,0x0e,0x10,0x14,0xbc,0xcc,
+  0xa1,0x8b,0x47,0x27,0xe5,0x0f,0x48,0x87,0xb4,0x33,0x4d,0xb7,0xe9,0xf6,0x91,0x69,
+  0x8f,0xc0,0x89,0xa8,0x47,0xb5,0x73,0xfd,0x75,0x85,0x79,0xcf,0x9a,0x83,0x8f,0xd9,
+  0x62,0xdd,0xbe,0x4b,0x86,0xc9,0xfd,0xb3,0x8b,0xfe,0x04,0xc8,0x51,0x94,0x3f,0x0f,
+  0x92,0x59,0x6c,0x67,0x7c,0x97,0xba,0xec,0x41,0x7c,0xfe,0xa1,0xa6,0x5b,0x87,0xe8,
+  0x0f,0xe0,0x34,0x3e,0x7f,0x31,0xcb,0xac,0xf3,0x17,0x4d,0x7e,0x5f,0xdc,0x11,0xb0,
+  0x8e,0xcc,0x65,0xd4,0x63,0xb3,0x37,0xad,0x57,0xf3,0xc3,0x94,0xbf,0xef,0x7e,0x61,
+  0x76,0x5f,0xe7,0x43,0xa6,0xe0,0x2a,0x66,0x74,0xa5,0x4d,0x9b,0x94,0x3f,0xaa,0x14,
+  0x21,0x1b,0x22,0xaa,0x3f,0x10,0x43,0x79,0xfe,0x33,0x4d,0x55,0x17,0x71,0xf9,0xa3,
+  0xa3,0x3c,0xa7,0x3e,0x72,0x07,0x34,0x6a,0x6e,0x46,0xdd,0x24,0x20,0x4d,0x9c,0xdf,
+  0xce,0x19,0x83,0xd2,0x89,0x42,0x17,0xb3,0x0f,0x8b,0x6e,0x38,0xa1,0xe3,0xf3,0x9b,
+  0xef,0x1b,0xbc,0xc5,0x68,0xed,0x12,0xcf,0x6d,0xfe,0xa3,0x56,0xc2,0xe8,0xee,0xc6,
+  0x6f,0x4f,0x3e,0x0f,0x13,0x9a,0x95,0x0f,0x34,0x9f,0x30,0x2f,0x26,0xfe,0x42,0xba,
+  0xb8,0xd2,0x37,0xdd,0x5c,0x9f,0x4b,0xe0,0x33,0x1c,0x1e,0xdc,0x78,0x38,0x60,0xc5,
+  0x3a,0x1e,0xd5,0x89,0xfd,0x9f,0xaf,0xec,0x46,0x21,0xb6,0x17,0xef,0x2f,0xcf,0xc4,
+  0xf5,0x5f,0xe4,0xc9,0xe4,0xf2,0xfc,0x8a,0x34,0xdf,0xc0,0x81,0x14,0xbe,0x4a,0xab,
+  0xd8,0xb2,0xf8,0x0e,0xa3,0x76,0x62,0xfe,0x0e,0xf8,0x87,0x30,0x2a,0x29,0x15,0xd5,
+  0x96,0x5b,0x89,0x34,0x39,0xf3,0x32,0xb9,0xfe,0xed,0x82,0x76,0x83,0xc6,0x72,0xbe,
+  0x89,0x1a,0xbf,0x04,0x37,0xa2,0x45,0xfe,0xb0,0xb4,0x22,0xd8,0xa0,0x38,0x63,0x34,
+  0x46,0xdc,0xf0,0x33,0xb5,0x08,0x32,0xf8,0xfc,0x43,0xe0,0x34,0x70,0x50,0x08,0x3f,
+  0x13,0x4a,0x1a,0xcc,0xf9,0x13,0xfb,0x81,0x4a,0xb4,0x21,0x1c,0x72,0x82,0xcd,0x93,
+  0x6e,0x77,0xb5,0x53,0xf5,0x8e,0xb9,0x7c,0x7d,0x62,0x45,0xa1,0xa3,0xd4,0xeb,0xac,
+  0xc5,0xfd,0xe6,0x66,0x4b,0xf2,0xd3,0x93,0xf2,0x07,0x6e,0x5a,0xad,0x6e,0x70,0xa1,
+  0x34,0x8e,0x15,0xb8,0xe1,0x8f,0x50,0x04,0xa6,0x7e,0xb9,0xb8,0xe0,0xc1,0x5e,0x1c,
+  0x14,0x12,0xfe,0xbe,0xb8,0x1f,0x8c,0x49,0xf9,0xb3,0xe3,0xa6,0x21,0xe5,0x8a,0x7a,
+  0x33,0xa0,0xfe,0xdd,0x0d,0xaf,0xdb,0xaa,0xa8,0x83,0xbf,0xef,0x19,0xa1,0xca,0x70,
+  0xec,0x11,0x2e,0x90,0xab,0x04,0x55,0xdb,0xd7,0xc5,0x41,0x32,0x89,0x37,0x66,0xbc,
+  0x0b,0xaf,0xb2,0xaa,0x33,0x8e,0x4f,0x76,0x3e,0x04,0x57,0x03,0xa5,0xea,0x46,0x43,
+  0xac,0x64,0x57,0x9d,0x8b,0xfa,0xb2,0xce,0x3b,0x71,0xa0,0x96,0x1e,0x77,0xbc,0xdb,
+  0x38,0x2c,0x4c,0xca,0xe7,0xbc,0x73,0xa8,0xd4,0x4a,0x7a,0xe5,0xcf,0x89,0x53,0xda,
+  0xa4,0x15,0xe5,0xd3,0x7e,0x32,0x4f,0xeb,0xee,0x77,0x0e,0x67,0x3e,0x47,0xfe,0x0d,
+  0x0e,0x29,0xde,0x61,0x79,0x37,0xbe,0xef,0xa4,0xfc,0x4f,0x0b,0xc1,0x56,0x70,0xf7,
+  0xc9,0x1e,0x12,0x52,0x76,0xaa,0xf8,0xe2,0xc0,0x15,0x3d,0xb8,0xfa,0xe9,0x02,0xbf,
+  0x54,0xbb,0x07,0x61,0xb1,0x4d,0x55,0x8f,0x4e,0xde,0xdf,0x10,0x9e,0xa4,0x2d,0xac,
+  0xc4,0x90,0x63,0x24,0x84,0xab,0x51,0x04,0x74,0x73,0xd8,0xad,0x76,0x67,0x38,0x8f,
+  0xd3,0xae,0x70,0x87,0x56,0x4e,0x09,0xc1,0xf5,0x1c,0x4e,0xee,0xcf,0xdc,0x75,0xf0,
+  0xa6,0x81,0x5f,0x3f,0x26,0xd6,0xe0,0xd7,0x47,0x45,0xbc,0x5b,0xfe,0x02,0xc2,0x92,
+  0x8a,0xa8,0xad,0xe3,0xaf,0xe6,0xd1,0x4f,0x35,0x67,0x7f,0xd6,0x6e,0xd2,0x3f,0x29,
+  0x7f,0xce,0xe2,0x96,0xbd,0x42,0xaa,0x7a,0x1c,0xb1,0x9c,0xbd,0x70,0x15,0xaa,0x6c,
+  0x8e,0x6e,0x71,0x90,0x5d,0x14,0x7c,0xfa,0x3f,0x74,0x8a,0x1f,0xd1,0x2b,0x70,0xc8,
+  0x70,0xec,0x16,0x47,0x26,0xe5,0x8f,0xa1,0x3c,0xcd,0x2e,0x6a,0x15,0xc6,0x26,0xcf,
+  0xb4,0x1d,0xca,0x1f,0x51,0xec,0x3b,0x9a,0xe4,0xb9,0xf0,0x82,0xf6,0x50,0xdb,0xa3,
+  0x6e,0xf1,0x1b,0xe4,0x84,0xe1,0x8d,0xda,0x3b,0xc4,0x24,0xfe,0x39,0x2e,0xcd,0x86,
+  0x8b,0x30,0xcf,0x90,0x87,0x9d,0x2a,0xe2,0x49,0x27,0xcb,0xda,0x4c,0x70,0x87,0xa8,
+  0xdf,0xd3,0x23,0x4f,0x92,0xc2,0x26,0xdc,0x5a,0x11,0xaa,0x8b,0x0f,0x4d,0xee,0x87,
+  0x78,0xda,0xed,0x4a,0x97,0xea,0x32,0x70,0x7d,0x22,0xa8,0xa6,0xf5,0xdc,0x1b,0x99,
+  0xad,0x57,0x43,0xb1,0xa3,0x05,0x14,0x62,0x13,0x70,0xa1,0x0c,0xaa,0x90,0xf2,0x49,
+  0xf9,0xb3,0x42,0xb8,0x2e,0x30,0x27,0xf2,0x9d,0x38,0xc2,0x1e,0x4f,0xf5,0xd6,0x86,
+  0xd9,0xd2,0x4f,0x96,0x93,0xd7,0x61,0x6d,0x78,0x6e,0x88,0x2e,0x27,0x37,0xdc,0xb9,
+  0x93,0xe3,0x81,0xbf,0x25,0xcb,0x93,0xf8,0x27,0x90,0x5e,0xdb,0xa5,0x95,0xf7,0x39,
+  0x3c,0xa4,0x99,0xfd,0x1e,0x3c,0x76,0x07,0x59,0xd2,0x1b,0x7e,0x41,0xed,0xd4,0x5c,
+  0xd9,0x32,0x95,0xce,0x42,0x79,0xc0,0x7d,0xa3,0x9c,0x34,0x2a,0xb4,0xeb,0xf7,0xe5,
+  0x8d,0x40,0x95,0x31,0xed,0x33,0xf1,0x34,0xfc,0xf1,0xae,0x45,0x14,0xb5,0xf9,0x02,
+  0xf8,0x67,0x58,0x58,0x9b,0xd5,0x8f,0xcb,0xf2,0x5b,0x05,0x55,0xdb,0x1b,0x62,0x74,
+  0x52,0xfe,0x74,0xa6,0x9d,0xc2,0x77,0x5e,0x18,0xc7,0x63,0xab,0xc2,0xa5,0x6f,0x7a,
+  0xd4,0xac,0x0e,0xd1,0x4d,0x4f,0x84,0xbd,0xc6,0xd2,0x98,0x89,0x88,0xbc,0x5c,0x70,
+  0x3d,0x93,0xc4,0x3f,0xc2,0x76,0xf8,0x31,0x29,0xe8,0x43,0xfc,0xac,0xd0,0x03,0x90,
+  0x8f,0x07,0x21,0x6c,0xcf,0x6b,0x24,0xaa,0x11,0x40,0x04,0x28,0x35,0x72,0xa0,0x52,
+  0x9f,0x7e,0x7e,0xf2,0xfb,0x1a,0xa8,0x7b,0x9f,0x60,0xb3,0x07,0x32,0xd6,0x90,0x6c,
+  0xd8,0xab,0xef,0x52,0x69,0x1d,0x99,0x35,0x0e,0x7b,0xe6,0xcc,0x22,0xe3,0xf8,0x27,
+  0x36,0x29,0x7f,0x02,0xb9,0xa7,0xe8,0x96,0x90,0x6a,0xe0,0xb1,0x4a,0x17,0xf6,0x82,
+  0x2b,0x68,0x2b,0x27,0x0e,0xad,0x31,0xaa,0xfe,0x89,0x2e,0x5e,0x97,0xc9,0xb6,0x32,
+  0x75,0x80,0xde,0x46,0x5e,0xb3,0xe0,0x9f,0x8b,0x91,0x53,0x2a,0xc2,0x36,0xdd,0x56,
+  0xae,0x5e,0x84,0x45,0xdb,0xec,0x1f,0xc8,0x73,0x51,0xde,0xb7,0x47,0xdd,0x1d,0xf8,
+  0xa1,0x8f,0xeb,0xb1,0x06,0xc4,0x3f,0x87,0x92,0xf8,0x07,0x76,0x66,0x71,0xa5,0x9f,
+  0x05,0xb7,0xa0,0x1a,0x22,0x4f,0x11,0x44,0xcb,0x06,0xe2,0x01,0x1f,0xc7,0x3f,0x0c,
+  0x06,0xb5,0x71,0xfc,0x33,0xf1,0x3c,0x34,0xf8,0x1e,0x8c,0xea,0x15,0xda,0xa6,0x68,
+  0x4d,0x21,0x9a,0x15,0x5e,0xae,0xdd,0xe6,0x84,0x8e,0x45,0x2b,0x35,0x84,0xcd,0x85,
+  0xd0,0xa3,0x78,0x71,0x60,0xc5,0x3f,0xd2,0x37,0x3c,0x7b,0x98,0x13,0x41,0x8e,0xad,
+  0x10,0x0e,0x0a,0xd7,0x69,0x72,0x1b,0xe9,0x10,0x10,0xf6,0x84,0x22,0xb9,0x04,0x35,
+  0x2c,0xea,0x5f,0xd4,0xa7,0xf1,0x49,0xf9,0x90,0x27,0xe1,0x34,0x28,0xd2,0x6e,0xe4,
+  0xe8,0x68,0x0f,0x38,0x87,0x71,0x7e,0x21,0x7d,0x14,0xe6,0x05,0x68,0xff,0x96,0x87,
+  0xab,0x1f,0x85,0x82,0x5a,0x3a,0x6c,0xc1,0x3f,0x54,0x92,0xe0,0x20,0x53,0x83,0x37,
+  0xe6,0x22,0xda,0xd9,0xe3,0x2f,0xd4,0xe4,0x5c,0x92,0x6b,0xc2,0x1e,0x1a,0x24,0xf7,
+  0xa5,0xad,0xf5,0xe7,0x6b,0x19,0x56,0xfc,0xd3,0x0d,0x21,0x65,0x04,0x4c,0x74,0xa7,
+  0x9a,0xb0,0xc7,0x81,0xb0,0x07,0x61,0x46,0x09,0xe2,0x9f,0x82,0x10,0xd9,0x80,0xa2,
+  0x71,0xa9,0x51,0xf3,0x51,0x12,0xff,0xfc,0xcd,0x05,0xf8,0x0c,0x38,0xc8,0x11,0xbe,
+  0x87,0x68,0xa7,0x4a,0x73,0x9c,0x16,0xdf,0x23,0x1c,0xf6,0xcc,0x6b,0x13,0x9f,0x9c,
+  0xc0,0x3f,0x4f,0x4d,0xe2,0x9f,0x6d,0x33,0x2e,0xc0,0x6f,0xc1,0x77,0xb7,0xdc,0x26,
+  0xd6,0xc2,0x31,0xa5,0x54,0xcb,0x7c,0x4d,0x5c,0x10,0x7e,0x05,0x0e,0xe0,0xa0,0x66,
+  0x01,0x7b,0x45,0xad,0xc2,0xf5,0x99,0x36,0x67,0xf2,0xfc,0x96,0x2b,0x71,0xe8,0x83,
+  0x12,0xbb,0xdc,0x94,0xa3,0x42,0x67,0x6e,0x11,0xcb,0x24,0x36,0x7c,0x1e,0xb4,0x50,
+  0x96,0xad,0x25,0xf9,0xda,0x88,0x5a,0x02,0x94,0x89,0x59,0xe9,0x49,0x2b,0xb6,0x97,
+  0x6e,0x06,0xf7,0x9d,0xf2,0x75,0x64,0x55,0x5a,0x03,0x71,0x6a,0xf4,0xba,0x70,0x1a,
+  0x87,0x3d,0xbd,0xb2,0xe2,0x97,0xa0,0xa1,0xce,0x1d,0xa4,0xb9,0x4e,0x22,0x24,0xf1,
+  0x58,0x07,0xb4,0xe4,0x23,0xc8,0x54,0xd2,0x67,0x23,0xfe,0x2c,0xd2,0x10,0x1d,0x15,
+  0x9a,0xcb,0x2e,0x47,0xb3,0x0b,0xb5,0xc3,0x6a,0x96,0x3f,0x10,0xcd,0x4e,0x9f,0x94,
+  0x0f,0xed,0xd0,0x01,0x6f,0x08,0xbe,0x6a,0x39,0x2a,0xae,0x52,0x8e,0x81,0xf7,0x76,
+  0xfb,0x8f,0xc5,0x42,0x38,0x26,0x78,0xb5,0xbb,0xa3,0xf2,0x1c,0xc4,0x3f,0x3e,0xcd,
+  0x1d,0x75,0xb8,0x26,0xe5,0x43,0x27,0x74,0xd0,0x04,0xe8,0xcd,0x41,0x18,0x0c,0x3e,
+  0xbf,0xe3,0x71,0xb1,0x17,0x61,0x4f,0x45,0xf5,0x46,0x05,0x07,0xef,0xb3,0xca,0x55,
+  0x0e,0x05,0x0d,0xb1,0x89,0xf9,0x45,0xa0,0x6b,0x7c,0x77,0xdd,0xcd,0x61,0xcf,0x19,
+  0xf0,0x0a,0x69,0xac,0x11,0x3f,0x04,0x79,0x04,0x5c,0x61,0x51,0xc7,0x4f,0xe3,0x45,
+  0x44,0x04,0x16,0xfc,0x23,0xe5,0x29,0x47,0xd8,0x1c,0x86,0x42,0x86,0xc2,0x06,0x21,
+  0x9f,0xd1,0x21,0xe2,0x42,0x7d,0xe4,0x63,0x91,0x38,0x0e,0x8e,0x44,0x9c,0x2c,0xa0,
+  0x8b,0x1b,0x26,0x57,0xc7,0x35,0xe3,0x9e,0xb4,0xbd,0x03,0xee,0x9e,0xeb,0x3d,0xce,
+  0x56,0xf8,0x29,0xc4,0xe3,0xd7,0x2f,0xb6,0x49,0xa8,0x2f,0xdd,0xd5,0xa8,0xf1,0x37,
+  0x22,0x10,0x72,0xc5,0xd1,0x94,0x48,0xe2,0x9f,0xfc,0xea,0x99,0xb0,0x90,0xce,0x1e,
+  0x44,0x18,0x50,0x09,0x8f,0x29,0x05,0x47,0xf3,0xea,0x71,0xff,0x1c,0xb0,0xcd,0x8d,
+  0x07,0xea,0xc9,0xcc,0xc2,0x18,0x9b,0xdb,0x8f,0xbf,0xea,0x4b,0xe2,0x2b,0x3a,0x0b,
+  0xfe,0x3b,0xab,0x1a,0xcc,0xbc,0x82,0x66,0xda,0xef,0xc2,0xf3,0xe3,0x99,0x6b,0xc4,
+  0x59,0xf0,0x27,0xe6,0x8e,0x23,0x10,0x7a,0x02,0x07,0xdd,0x71,0xf7,0x1a,0xf1,0x78,
+  0x12,0xff,0x64,0x76,0x4a,0x97,0x60,0x4e,0x7c,0xda,0x3e,0x54,0x73,0x7f,0xd4,0x1e,
+  0xe6,0x82,0x9d,0xab,0xf5,0x12,0xae,0xdf,0xd1,0xb0,0x45,0xc3,0xd3,0x11,0x9b,0x16,
+  0x9e,0x94,0x3f,0x5a,0xda,0x3b,0xf0,0x1b,0xb6,0xf0,0xf7,0x8e,0x31,0xd1,0x27,0xfd,
+  0xee,0xeb,0xa5,0xfc,0x6e,0xfb,0xe1,0x2d,0x56,0x15,0xbf,0x7b,0x8d,0x30,0x4b,0x3b,
+  0x8e,0x03,0xc7,0x88,0xd8,0x3f,0x29,0x7f,0x3a,0xa7,0x6f,0x87,0xf5,0x5b,0xf2,0x7b,
+  0xe8,0x83,0xb6,0x99,0xf0,0x1b,0x25,0xbf,0x37,0x33,0xc4,0x9f,0xbf,0xa3,0xd8,0x90,
+  0x1f,0x22,0x33,0xa1,0x23,0x5a,0xcc,0x45,0xf1,0x07,0x93,0xe7,0x3d,0x0a,0x33,0xe1,
+  0x31,0x98,0x6d,0xd8,0xf0,0x7d,0xd5,0xad,0x0a,0x9a,0xb1,0x71,0xb2,0x1d,0x1e,0x0b,
+  0x15,0xf7,0xca,0xf5,0xd7,0xdd,0x2f,0x21,0x5e,0x32,0xe4,0x7a,0xb2,0x6e,0xf2,0x7b,
+  0x7d,0x3b,0xf7,0x18,0x34,0x2a,0x6a,0x0f,0x2e,0x9a,0x5d,0xdc,0x0a,0x6a,0x7f,0xc6,
+  0x53,0x88,0xb7,0xf7,0x12,0x37,0xbf,0xed,0x52,0x44,0x44,0x38,0x58,0x10,0x3e,0xd3,
+  0x34,0xb1,0x3f,0x5d,0xd3,0x7f,0x0e,0x6f,0xb0,0x85,0x86,0x6d,0x18,0xf1,0xc3,0xef,
+  0xa0,0x4b,0x41,0x69,0xd0,0x24,0xfd,0x0a,0x66,0xe1,0xfb,0xca,0xab,0xa7,0xb7,0x70,
+  0x60,0x73,0x28,0x67,0x43,0x53,0xf2,0x79,0x86,0xa4,0xd1,0x6a,0x9f,0x81,0xf6,0xf8,
+  0x90,0x7a,0x49,0xf2,0xf5,0x3a,0xfa,0x11,0x36,0xff,0x13,0xf3,0x19,0xcb,0xa2,0xa8,
+  0xf1,0x47,0x43,0xbe,0xc4,0x8a,0x4d,0xdc,0xbf,0x41,0x19,0x73,0x5d,0xe6,0x37,0xa9,
+  0x37,0xfd,0x1b,0x39,0x47,0x33,0x4f,0x8b,0x65,0xec,0x77,0x7a,0x69,0xbf,0x63,0x58,
+  0xae,0x84,0x53,0x90,0xd3,0x87,0x08,0x21,0xbe,0x6a,0x62,0x7e,0x4f,0xd3,0x4a,0xe5,
+  0xa0,0x51,0x82,0xf7,0xb7,0xd9,0xc9,0xcf,0x84,0xca,0xf3,0x68,0xad,0xcf,0x81,0x16,
+  0x56,0x14,0x97,0xb7,0xaf,0x74,0x6b,0xdd,0x1a,0x0e,0x62,0x24,0xae,0x25,0xf1,0x4f,
+  0x09,0xca,0x93,0x12,0xe3,0x46,0x8e,0x7f,0xb6,0x42,0x49,0x3c,0x23,0x96,0x5e,0x08,
+  0x2d,0xc4,0x69,0xc8,0xcf,0xe1,0x95,0xc3,0x4a,0x91,0x61,0x8b,0xa5,0xc7,0x27,0xf7,
+  0x0f,0x05,0x3b,0x8a,0x29,0xb7,0x81,0xf6,0xbe,0x1b,0x61,0x40,0x89,0x41,0x55,0xdc,
+  0x6f,0x8d,0x54,0x35,0x64,0xc5,0xd9,0x44,0xf7,0x00,0x35,0x5a,0xe6,0x93,0xa3,0x93,
+  0xfb,0x93,0xd1,0xd5,0x30,0xea,0x32,0x9f,0xdf,0x8d,0xcf,0x3f,0xcb,0x40,0xfb,0xb4,
+  0x90,0x9e,0x50,0xbd,0xfc,0x35,0xdd,0xc2,0x19,0x57,0x05,0x0e,0x0a,0xe2,0x64,0xe2,
+  0x79,0xf4,0x8c,0x11,0x17,0xd7,0x5f,0x1b,0x87,0xc5,0xb7,0x51,0xbf,0xdf,0x6a,0x38,
+  0xe2,0x22,0xc2,0x1e,0xb8,0xd9,0x58,0x66,0x88,0x0f,0xd3,0x31,0x40,0x89,0x34,0x2c,
+  0x0e,0x4e,0xca,0x1f,0x43,0x18,0xa3,0x6f,0x1a,0xa5,0x61,0x7b,0x9f,0xf8,0x9c,0xf6,
+  0x2b,0xb5,0xa2,0x0f,0x37,0xd2,0x11,0x78,0x95,0xf8,0x8e,0xda,0x47,0xc5,0x47,0xb4,
+  0xab,0xd1,0xaa,0x01,0xc7,0x2e,0x71,0x38,0xe9,0xff,0x51,0x3e,0x63,0x61,0x55,0xfd,
+  0x09,0x65,0x5b,0x8b,0x8d,0xf7,0x57,0x38,0xcf,0x2c,0xe9,0x22,0x6e,0xfd,0x67,0x74,
+  0x5e,0xbf,0xad,0x8b,0x3b,0x6a,0xf0,0x8d,0xe4,0x76,0xc4,0x27,0x93,0xfe,0x9f,0xb4,
+  0x57,0x76,0x77,0x17,0x3e,0x13,0xe9,0x64,0xa4,0x15,0xb6,0xdc,0xe0,0x3a,0x25,0x7b,
+  0x49,0x2b,0x6b,0x84,0x39,0x47,0x71,0x87,0x2c,0x6d,0xda,0x9b,0x8f,0xd0,0x48,0x25,
+  0xe7,0x93,0xfe,0x9f,0x19,0x4d,0xd0,0xc9,0x8a,0x8c,0x3c,0xdd,0xe9,0x06,0xe6,0x72,
+  0x72,0x20,0x64,0xa7,0x3f,0x83,0x07,0x70,0x19,0xc7,0xef,0x2f,0x5a,0xf1,0x8f,0x36,
+  0x7d,0x00,0x2e,0xb2,0xf2,0x88,0xbd,0x0d,0xbf,0xfe,0x1b,0x1a,0x5f,0x0d,0x1c,0xc8,
+  0xf8,0xc5,0x5b,0xb9,0xfe,0xe5,0xc0,0x58,0xd6,0xc5,0x7e,0xab,0xff,0x47,0x7d,0x07,
+  0x16,0xd6,0x39,0x5e,0x13,0x86,0xc0,0xdc,0x18,0x88,0x0f,0xe9,0xd5,0xf1,0x81,0x8a,
+  0x88,0x88,0xaf,0xd8,0x90,0x05,0xff,0x74,0x90,0x63,0x50,0x16,0xe5,0xb0,0x53,0x79,
+  0x53,0x2b,0xe3,0xda,0x1c,0x37,0x1e,0xf5,0x9a,0x3b,0x10,0x11,0xa9,0xef,0xa8,0x63,
+  0x87,0x05,0xff,0x9c,0x49,0x73,0x43,0x03,0x4a,0x4b,0xea,0xc9,0x19,0x93,0x22,0x74,
+  0xa1,0x41,0x9f,0xc5,0xc7,0x7e,0x1e,0x16,0xbe,0x6b,0x8b,0x39,0x87,0x38,0x7e,0x36,
+  0xe4,0x5d,0x16,0xff,0x4f,0x3c,0xed,0xee,0x6a,0x02,0x85,0xac,0x05,0x70,0x5a,0x43,
+  0xd3,0x2a,0xfe,0x9a,0x27,0xb5,0xbd,0x30,0xc7,0x28,0xf2,0xe0,0xf7,0xde,0x09,0xee,
+  0x5e,0xb9,0xd0,0x82,0x7f,0x46,0x84,0x74,0x6d,0x1d,0xcb,0x1f,0xc8,0x08,0xf8,0x9f,
+  0x10,0x1f,0x8d,0xce,0x1e,0xb4,0xad,0x21,0xef,0xd0,0x03,0x3a,0x0e,0x7e,0x40,0xde,
+  0x51,0x9f,0x66,0x99,0x71,0xf9,0xdb,0xa4,0x52,0x99,0xb8,0x7f,0x80,0x66,0x19,0x47,
+  0xd9,0x02,0xe6,0x98,0x4d,0x4e,0xc1,0x0b,0xb1,0x7d,0xf1,0x12,0x8f,0x78,0x52,0xbb,
+  0xa4,0x2f,0x88,0x67,0x95,0xe3,0xf3,0xff,0x1e,0x2a,0x0d,0x47,0xa7,0x90,0x9d,0xf4,
+  0xff,0x64,0xee,0x87,0x2b,0xca,0xcd,0x3d,0x59,0xf1,0x1a,0xee,0xfd,0xf3,0x19,0x77,
+  0xe3,0xb2,0x68,0x97,0x94,0xc4,0xfa,0xe0,0x09,0xad,0xea,0xc5,0xf7,0xed,0xb7,0xe0,
+  0x9f,0x01,0xf6,0x2e,0x57,0x82,0x2c,0x67,0x08,0xde,0xc0,0x6d,0x79,0x33,0x2e,0x0b,
+  0xbd,0x2a,0x78,0xfb,0x33,0x63,0xb2,0x3b,0x61,0x98,0xe8,0x28,0xcf,0x27,0xf1,0xcf,
+  0xf4,0xe7,0x6a,0xd7,0x49,0xf9,0x1a,0xd5,0xc8,0x3b,0xd0,0x40,0xf3,0xfb,0x6f,0xe4,
+  0xf6,0xd4,0xf3,0xba,0xda,0xeb,0x42,0xf9,0xc9,0xed,0x29,0x43,0x0e,0x39,0x93,0xf8,
+  0x87,0xc1,0x75,0xf0,0x73,0xa6,0x72,0xd8,0x73,0x4a,0xe3,0x68,0x47,0xe6,0xfe,0x9f,
+  0x03,0xd1,0x7c,0x8e,0x88,0x66,0xc1,0x01,0x56,0x1c,0x97,0xeb,0x10,0x6f,0x4f,0xac,
+  0x3f,0xe2,0x1f,0x68,0x94,0xd4,0x6a,0xd7,0x2d,0xe4,0x24,0xe5,0x68,0x4a,0xf6,0xf8,
+  0x87,0x10,0x58,0x72,0xfb,0xc5,0x6f,0xc7,0x01,0xca,0x1f,0xd5,0x8a,0x7f,0xa6,0x3f,
+  0x13,0x3e,0xa7,0xcd,0xd7,0xed,0x83,0x68,0xb4,0x72,0x6f,0x8f,0x69,0x2f,0x5f,0x04,
+  0x2f,0x22,0xa2,0x69,0x2e,0x1c,0xa0,0x7d,0x11,0x17,0x2f,0x5a,0xf0,0x4f,0x7c,0xe6,
+  0x88,0xea,0xb3,0xcf,0x63,0x62,0x9c,0x8c,0x08,0x3e,0x58,0x66,0xfa,0x43,0x10,0xf6,
+  0xf0,0x2b,0xd2,0x38,0x10,0xb2,0xfa,0x7f,0x7a,0x05,0x54,0x8b,0x1a,0x8a,0x91,0x26,
+  0x72,0x8c,0x95,0x85,0x36,0x21,0xfe,0x69,0x3a,0xc6,0x61,0xcf,0xe6,0x2f,0xae,0x32,
+  0xf5,0xe3,0x54,0xfc,0x23,0x35,0x57,0xb7,0x7f,0x29,0x33,0x97,0xcc,0x86,0x06,0xc3,
+  0xf9,0x60,0x56,0xd4,0x76,0x0b,0x34,0xbf,0xeb,0x0c,0x16,0x6f,0xc7,0x2b,0xcd,0x5a,
+  0x89,0x46,0xdb,0x2c,0xf6,0x57,0x5e,0x1a,0xbf,0xe8,0x0c,0xda,0xda,0xd2,0x9f,0x84,
+  0xe6,0xe0,0x9c,0xfb,0x50,0x8c,0xcc,0xe6,0x3b,0x30,0x88,0xd3,0xd2,0xf0,0x57,0x6e,
+  0xfc,0xa7,0xc3,0x56,0xfc,0x93,0x66,0xce,0x97,0xdb,0xd2,0xd7,0xe2,0x40,0x0d,0xda,
+  0x72,0xd3,0xd3,0x12,0x6e,0x90,0x5c,0x5b,0x1a,0x69,0xd0,0xdc,0xc1,0xf2,0x5c,0x0b,
+  0xfe,0x29,0xcf,0x0c,0xb5,0x47,0x88,0x17,0x36,0xb2,0x02,0x1d,0x5a,0xa5,0x32,0x81,
+  0x03,0x21,0xd4,0x6f,0x5d,0x28,0xc7,0x6a,0x42,0xd0,0x47,0x7c,0xd0,0xca,0xac,0xfe,
+  0x9f,0x9b,0x2e,0xe0,0xb1,0xaa,0x0a,0x66,0xf6,0x7f,0xf9,0x1b,0x70,0xb9,0xda,0x17,
+  0xcc,0x8a,0x16,0x0c,0x98,0xb0,0x67,0x53,0xc2,0xf1,0x85,0xaa,0xbf,0xdf,0xea,0xff,
+  0x11,0x06,0xb4,0x13,0x33,0xbc,0xcb,0xf1,0xfc,0x16,0xb2,0x37,0xa8,0x37,0x88,0x83,
+  0xd9,0x70,0x2c,0xe4,0x5b,0x8e,0xcb,0x52,0xa8,0xe1,0xd2,0xf1,0x2b,0x2f,0x25,0xf1,
+  0x0f,0xf4,0xf8,0x23,0x6a,0x18,0x5c,0x08,0xc3,0x48,0x24,0xd4,0x4e,0x5d,0x8c,0xe8,
+  0x61,0x86,0x08,0xcd,0x15,0xb6,0xe1,0x15,0xb5,0x1d,0x32,0x0d,0xab,0xff,0x67,0xc6,
+  0x69,0xb6,0x16,0xf2,0x97,0xd3,0x7b,0xb3,0xbf,0xb2,0x63,0x2d,0xc5,0x8d,0x77,0x2f,
+  0xc9,0x65,0x6b,0x57,0x15,0x07,0x69,0x30,0x8c,0x83,0xc4,0x95,0xa4,0xff,0x27,0x6f,
+  0x46,0x1b,0x4d,0x5c,0x74,0xe6,0xc2,0x93,0x88,0xa8,0x10,0x16,0xb6,0xc1,0xa3,0x30,
+  0xb7,0x9a,0x06,0xb3,0x39,0x50,0x44,0x7c,0xc8,0xfd,0x69,0x13,0xfb,0x41,0x9f,0x31,
+  0x00,0xc7,0x34,0x6f,0xc0,0x1e,0xad,0xc1,0xaf,0x99,0xef,0xd5,0xb6,0x47,0x39,0xfe,
+  0xc1,0xcf,0xda,0x9a,0x18,0x98,0xf8,0x76,0x70,0x72,0xff,0x0f,0x72,0xff,0x4f,0x0f,
+  0x2e,0xc2,0x36,0x71,0x80,0x1e,0xcb,0x47,0xfc,0x63,0x2e,0x0b,0x70,0x84,0x2c,0x8e,
+  0x23,0xa2,0x68,0x4e,0xd2,0xff,0xe3,0x52,0x74,0x38,0xa3,0xe1,0x6a,0xb3,0x1a,0x55,
+  0xea,0x43,0xfc,0x99,0xc9,0x81,0x68,0x9f,0xe9,0x7f,0xc3,0x41,0x80,0x0f,0x0c,0xd1,
+  0x36,0xb9,0xff,0x5d,0x69,0x2e,0xc5,0x74,0x32,0x77,0x38,0x5d,0xb0,0x01,0x05,0x17,
+  0xd5,0x89,0x8b,0xbe,0x09,0x65,0xdd,0x36,0x1c,0xe0,0x15,0x67,0x03,0x5e,0xb1,0x25,
+  0xf1,0x49,0xda,0x52,0x40,0xa3,0x20,0xbe,0xbc,0x82,0x64,0xa1,0xfe,0x0a,0xf5,0x5c,
+  0x5f,0x8e,0x82,0x1a,0x0f,0xce,0x08,0xe5,0x57,0x1a,0x99,0x3a,0x1c,0x28,0xf7,0xdb,
+  0xa4,0x89,0xef,0xab,0x0b,0x0b,0xe0,0x31,0x2d,0xbf,0x9f,0x7e,0x8f,0xdc,0x04,0x3f,
+  0x42,0x60,0x40,0x57,0x71,0x3c,0xc0,0x66,0x6b,0xb6,0xef,0xf9,0x6f,0x82,0xf5,0xfc,
+  0x57,0x0f,0xe3,0x3f,0x34,0x71,0xff,0x4e,0xb8,0x01,0xde,0x61,0x7b,0x75,0xd7,0xa0,
+  0xad,0x82,0xbc,0xc6,0x4a,0xf5,0xcc,0x11,0xb9,0x0b,0x7a,0x99,0x47,0x97,0x06,0xe5,
+  0x0a,0x72,0x8a,0xed,0x8d,0xbb,0x07,0xe5,0x22,0x8b,0xff,0xa7,0x03,0x3e,0xe0,0x4e,
+  0x78,0xbd,0x66,0x10,0x3e,0x48,0x58,0xf7,0xab,0xf9,0xb2,0x00,0x0e,0x86,0xf8,0x79,
+  0x34,0x52,0xfd,0x3f,0x69,0x57,0xa0,0x87,0x95,0x86,0xb2,0xce,0x14,0xec,0x67,0x27,
+  0x58,0xe9,0x80,0xe3,0x8c,0x78,0x05,0xae,0x46,0x4b,0x07,0xec,0x67,0xc4,0xcf,0xe1,
+  0x9f,0x59,0xa9,0x6a,0x5f,0x2e,0x26,0xfd,0x3f,0x9d,0x42,0x13,0x5b,0xdb,0xb1,0x33,
+  0x88,0x66,0xbb,0xc4,0x7e,0xbb,0xe5,0xd9,0x38,0x0a,0xa2,0xb7,0xd1,0xb0,0x9a,0x3b,
+  0x78,0xd7,0x74,0x1c,0x3c,0x2b,0x7d,0xc1,0xb0,0x2d,0x27,0x16,0xff,0x8f,0xb6,0x4d,
+  0x6a,0x55,0x67,0x13,0x5b,0x30,0x1c,0xed,0x4d,0xa7,0xf9,0x7d,0xb6,0x20,0xe9,0x87,
+  0x7d,0x90,0x6f,0x64,0xd4,0xe3,0xa0,0x0d,0x66,0x03,0xed,0xf3,0x43,0xd2,0xff,0x93,
+  0xfb,0x92,0xc6,0xa4,0xc2,0x72,0x9a,0x87,0xaf,0xd4,0x85,0x62,0x9c,0x82,0xff,0x24,
+  0xec,0x91,0x4c,0x0b,0xf7,0x24,0x9a,0x13,0xa8,0xfa,0x81,0xd0,0xc9,0xfd,0xd9,0x39,
+  0x63,0x37,0x1a,0x89,0x0b,0xfa,0xb3,0xba,0x51,0x6d,0xb5,0x48,0x5e,0x2d,0x2b,0xe1,
+  0xcf,0xf1,0x1a,0x99,0x89,0x81,0xa9,0x71,0x8a,0x2c,0xf2,0xf0,0xa4,0x74,0x29,0x58,
+  0xd1,0x6f,0xba,0x7d,0xde,0xa8,0xf6,0x55,0x67,0x71,0xa0,0x78,0x89,0x3c,0x32,0xfe,
+  0x87,0x09,0x0d,0x98,0xf4,0x3f,0x08,0xca,0x07,0xf0,0xea,0x96,0xd2,0x7e,0x7b,0x5c,
+  0xbc,0x9f,0xeb,0x93,0x26,0xfb,0xe8,0x17,0x87,0xe1,0xa2,0xba,0x98,0x65,0xc5,0x0b,
+  0x46,0xf8,0x42,0x19,0x8e,0x41,0x02,0xb5,0x49,0xf9,0xf3,0x40,0xb0,0xd1,0x70,0xc6,
+  0x6d,0x9d,0xc4,0x2d,0xfd,0x5a,0x6b,0x67,0xf4,0x39,0xae,0x76,0x59,0x09,0x64,0xea,
+  0x7c,0x60,0x94,0xa1,0xfc,0x44,0x8b,0x63,0x12,0xff,0x08,0x6e,0x68,0xb1,0xaf,0x34,
+  0xe8,0x7c,0xf2,0x00,0x69,0xa1,0x45,0x9a,0x2d,0x16,0x4e,0xa8,0x69,0xd3,0x71,0x7a,
+  0x98,0x3a,0x41,0xde,0x43,0xf4,0xa4,0xfc,0xc9,0xb5,0x67,0xb7,0xa8,0xed,0x88,0x7f,
+  0xb2,0x37,0xa1,0x59,0xe1,0x0a,0x16,0x71,0x7f,0xe3,0xde,0x52,0x37,0x37,0xf3,0xb9,
+  0xa3,0xbe,0xd0,0x68,0x89,0x85,0xc3,0x49,0xff,0x4f,0xda,0xb7,0xb4,0x13,0x21,0xd3,
+  0x88,0xbe,0x7b,0x7a,0x4b,0x7d,0xf9,0x1b,0x59,0x88,0xbe,0xe0,0xa2,0x6b,0xe6,0x19,
+  0xdb,0xb3,0xf8,0x9a,0x9f,0x72,0x8b,0xec,0x69,0x91,0x89,0x13,0xd3,0xf5,0x19,0x63,
+  0xd2,0xd5,0xf2,0x79,0xc6,0xa6,0x61,0xf1,0xe1,0xd6,0xab,0xa1,0xb2,0x93,0x8f,0x72,
+  0xb5,0x75,0x49,0xf5,0xbd,0x29,0x0f,0x0b,0x63,0x60,0xea,0x77,0x5d,0xac,0x9b,0x36,
+  0x89,0x37,0xd2,0x2e,0xe2,0xfe,0x59,0xa8,0xdb,0x8f,0xe5,0x94,0xd1,0xab,0x4a,0x29,
+  0xd8,0x07,0x39,0x50,0x64,0x55,0x47,0xed,0x7d,0x05,0x5e,0x18,0xa3,0x0b,0xa3,0xf6,
+  0x11,0x71,0x78,0x52,0xfe,0x30,0xe5,0x23,0x44,0x83,0x4e,0x9d,0x12,0x34,0x8b,0x9e,
+  0xd7,0x9c,0x40,0x55,0x34,0x04,0x5a,0xd8,0xbc,0xe1,0x00,0x02,0x21,0xb5,0xbb,0xda,
+  0x19,0x40,0x20,0x14,0x9f,0xfc,0xbe,0x34,0xcd,0x80,0x06,0xa9,0xd0,0xd8,0x60,0x9b,
+  0x53,0x0b,0x3b,0x57,0xaa,0x52,0x86,0x8a,0x66,0xbe,0x88,0x78,0xd8,0x16,0xdb,0x92,
+  0x05,0xb1,0xce,0x42,0x83,0x7a,0xc3,0x47,0x2d,0xf8,0xe7,0xdf,0x64,0xbc,0x7f,0xbb,
+  0x8d,0xda,0x56,0xe3,0x6a,0x38,0xdf,0xcd,0xc0,0x0f,0x61,0xc2,0x06,0x1b,0x47,0x98,
+  0x5d,0x61,0x67,0xfc,0x86,0x58,0x0a,0xfe,0x39,0x01,0x2f,0xf4,0x2e,0xd0,0x4b,0xb6,
+  0x89,0xdf,0xd4,0x2e,0x11,0x6f,0x7d,0x66,0xa7,0xec,0x26,0x27,0xf0,0x98,0x64,0xed,
+  0x6b,0x2c,0xd1,0x2e,0xb2,0x32,0xc0,0xa5,0x4b,0xe2,0xff,0xb8,0xf0,0x1c,0x2e,0xc2,
+  0xcd,0x2c,0xb3,0x3f,0x67,0x1f,0xa2,0x9d,0x5f,0x6a,0x25,0x3c,0xcc,0xc7,0x97,0x25,
+  0xd3,0xcf,0x1d,0x83,0xb0,0x98,0xe3,0x43,0xab,0xff,0xa7,0x13,0xfe,0x18,0xf4,0x32,
+  0x94,0x36,0x73,0xe0,0x8f,0xa4,0x82,0x1f,0x43,0x37,0xf0,0xfb,0x3b,0x8e,0xa0,0xfc,
+  0xb9,0xa8,0x54,0xc4,0x37,0x76,0x21,0x3e,0x9c,0xd8,0xff,0x7d,0x69,0xc5,0xd0,0x12,
+  0x46,0xf9,0xc3,0xc4,0xbf,0x87,0x4d,0xe0,0xac,0x96,0x75,0x5c,0x9f,0x13,0x50,0x7c,
+  0xb4,0x31,0x46,0x8a,0x43,0x87,0xc1,0x19,0xca,0x3a,0x42,0xce,0x5b,0xf0,0xcf,0xd2,
+  0x17,0xf6,0xc6,0x75,0x9d,0xaa,0xd9,0xb7,0xc3,0x4e,0xe2,0xe2,0xde,0x42,0x0e,0xa4,
+  0xdd,0x71,0xdb,0x02,0x94,0x3f,0x7b,0xfb,0x5c,0x11,0xdb,0x82,0xec,0x64,0xfc,0x2b,
+  0x24,0xcc,0x62,0xff,0x1a,0xcd,0xd7,0x5d,0xdf,0x22,0x5f,0x85,0xc6,0x68,0x7e,0x08,
+  0xb5,0xff,0x2c,0x04,0x06,0x08,0x03,0xd6,0x64,0x67,0xc3,0xb3,0xd1,0x15,0x67,0x11,
+  0x11,0x9d,0xb1,0xc4,0xbf,0xec,0xf0,0x69,0xdc,0xb3,0x2e,0xe0,0x91,0x43,0x88,0x76,
+  0xca,0x99,0x63,0x8e,0xec,0xf6,0x6f,0x8d,0x55,0xf6,0xa1,0x22,0xb3,0xc3,0x25,0xbd,
+  0xdb,0xc8,0xf2,0x88,0x96,0xf8,0xd7,0x4d,0xdb,0xa3,0x1f,0xc3,0xe2,0x06,0x5c,0x84,
+  0x0b,0xf0,0xb1,0xe6,0xe3,0x68,0x70,0x4c,0x33,0xb7,0xcd,0xf0,0xf8,0x42,0xe1,0xf9,
+  0xb2,0xe2,0x9f,0x21,0x78,0x81,0x3b,0xa5,0x63,0xd3,0xe6,0xc0,0x5b,0xda,0x42,0xd5,
+  0xae,0x8b,0x1f,0x86,0x70,0x7d,0x5e,0xb2,0x77,0x8b,0x6e,0xd2,0x22,0xa0,0x61,0x1e,
+  0x2b,0xb0,0xe2,0x9f,0xed,0xb0,0x0e,0x76,0x80,0x1c,0x14,0x17,0xc0,0xfa,0xc2,0xb9,
+  0x9a,0xbd,0x1e,0xb7,0xfd,0x7a,0x14,0x0b,0xa6,0x45,0xb9,0x11,0x0d,0x4c,0xb9,0xde,
+  0x69,0xf5,0xff,0xfc,0x2b,0x97,0xae,0xba,0x7c,0x86,0xfc,0x58,0xda,0xba,0x65,0xb6,
+  0x27,0xa3,0x2e,0xfd,0x1d,0xc0,0xf7,0x7d,0x9f,0xae,0xb1,0xcd,0x82,0xf5,0x47,0x9f,
+  0x54,0x11,0x11,0x0d,0xa7,0xe0,0x9f,0xad,0x2b,0xd4,0x98,0x1c,0x25,0x12,0x6e,0x1b,
+  0x57,0xd0,0xf5,0xb8,0xf3,0x24,0x77,0xab,0x1a,0x79,0x92,0xd3,0xa9,0xb5,0x18,0x73,
+  0x1e,0x42,0x44,0x6d,0xf5,0xff,0x1c,0x22,0xaf,0xc3,0xc2,0xe8,0xa6,0xb8,0xd8,0x0d,
+  0x6f,0xc2,0x42,0x3d,0x73,0x40,0x1c,0x44,0x7b,0xd7,0xd7,0x30,0xb3,0x53,0x74,0xa1,
+  0x7d,0xb4,0x70,0xd7,0x32,0x3d,0x05,0xff,0x9c,0xe5,0x41,0xae,0xeb,0x36,0x45,0x96,
+  0xb4,0x73,0xb7,0x0f,0xcd,0x62,0x8d,0xdc,0xff,0xf3,0x30,0xcc,0x5b,0xdb,0xf8,0x7b,
+  0x09,0xb5,0x86,0xe2,0x68,0x4a,0xc1,0x3f,0x03,0xa8,0xc4,0x2b,0x42,0x59,0x51,0xf1,
+  0x9b,0xe3,0xfe,0x9f,0x82,0x42,0x44,0xd4,0xbe,0x6f,0x65,0x6e,0x17,0xcf,0x71,0xfd,
+  0x18,0xb2,0xff,0x44,0x24,0x96,0xf8,0xd7,0x1d,0xe1,0x66,0x41,0x7d,0x88,0x46,0x71,
+  0xff,0x1c,0x24,0xdc,0xed,0x30,0x1e,0xf6,0xa2,0x4f,0x90,0x3f,0xf0,0xf8,0x4b,0x2d,
+  0xdd,0x46,0x54,0x0b,0xfe,0x29,0x14,0x9a,0xd5,0xa2,0x5a,0x5b,0xd4,0xe6,0xae,0xdd,
+  0x05,0xe3,0x8e,0x23,0x3e,0x3f,0xa3,0x3f,0xfb,0x82,0xd6,0xcc,0x10,0xf8,0x45,0x49,
+  0xba,0xd5,0xff,0x23,0x70,0x6f,0x06,0xcd,0x25,0x5f,0x84,0x3d,0x9a,0x1e,0x94,0x73,
+  0x11,0x26,0x35,0x00,0xc2,0xa4,0xfb,0xc8,0x6f,0xa1,0xa1,0x5a,0x0d,0xe2,0xaf,0x88,
+  0x15,0xff,0xa0,0xb6,0xad,0x80,0x7b,0x10,0x6f,0xd0,0x41,0xc1,0x03,0x9b,0x12,0xfa,
+  0xd7,0x07,0x8f,0x32,0xdc,0xf6,0x7d,0xe9,0x5e,0xe6,0xd6,0xe5,0x2c,0x0b,0xfe,0x39,
+  0x0d,0xbf,0x44,0xc1,0x30,0x2d,0x88,0xfb,0x67,0x54,0xab,0x0a,0x6e,0xea,0x17,0xdf,
+  0xe3,0xfa,0x2b,0x38,0x4f,0x41,0xfd,0x7e,0x19,0xaf,0xa0,0xc6,0xb7,0xc6,0xbf,0x4e,
+  0xc3,0xcb,0x68,0x94,0x2d,0xdb,0x57,0x50,0x09,0x6f,0x40,0x59,0x70,0xbb,0x82,0xf3,
+  0x8f,0xe1,0x15,0x7b,0xbf,0x78,0x41,0xfb,0x65,0x60,0x6f,0x00,0x07,0xe9,0xc9,0xf8,
+  0x97,0x12,0x87,0x88,0x50,0x02,0x32,0x23,0x21,0x36,0xa8,0x3a,0x21,0x2f,0x4c,0xce,
+  0x9a,0xfe,0xa8,0x48,0x18,0x05,0x63,0x2c,0xdf,0x69,0xa3,0x61,0x92,0x65,0x91,0x3f,
+  0x27,0xcd,0xb7,0x6b,0xc9,0x26,0xb5,0xae,0x3d,0x81,0xc2,0x60,0x44,0x09,0xbf,0xc8,
+  0xf0,0x4a,0x90,0x2a,0x5b,0x7a,0xd9,0x1e,0x15,0xdf,0x57,0x69,0xb7,0xf8,0x7f,0x66,
+  0xf0,0xf8,0x57,0x49,0x00,0x97,0x65,0x95,0xb2,0x8b,0x38,0xfd,0x94,0x8b,0x71,0xbe,
+  0x9e,0x45,0x6d,0xe4,0x43,0x5c,0x31,0x04,0x96,0x31,0x92,0x6e,0x89,0x7f,0xbd,0x04,
+  0xc7,0x54,0xdf,0xf2,0x65,0xdb,0xe4,0x39,0x4d,0x6f,0x90,0xb2,0x7a,0x8a,0xc0,0x86,
+  0x1c,0x9b,0xe6,0xab,0xb6,0x6f,0xc3,0xef,0x3b,0xca,0xbc,0x41,0x77,0x54,0x74,0x49,
+  0x49,0xfd,0xdb,0xe1,0x1f,0xe5,0xfe,0x9f,0x9f,0x14,0x3c,0x0d,0x67,0xa5,0xca,0xc0,
+  0xbc,0x36,0xb1,0x17,0xd7,0xa7,0x52,0xcb,0x7c,0x3c,0x67,0x80,0x8d,0x2a,0xbe,0x7a,
+  0x47,0x54,0xfe,0xc0,0x82,0x7f,0x54,0xc4,0x3f,0xb8,0xa9,0x98,0xac,0x33,0xbe,0xec,
+  0x1c,0x08,0xf1,0xf5,0x97,0x32,0xd7,0xf3,0x88,0xa4,0x56,0x01,0xf6,0x70,0x4a,0xfc,
+  0xeb,0x36,0x65,0x63,0x4f,0x41,0x58,0xd6,0xb3,0x2b,0x60,0x43,0x5a,0x09,0x77,0x04,
+  0xd5,0x21,0xec,0x29,0xd1,0xe9,0x00,0xa9,0x70,0x6e,0x84,0x82,0x68,0x60,0xc0,0x1a,
+  0xff,0x4a,0x5b,0xaa,0x6e,0xd5,0x5d,0x2b,0x51,0x3b,0x6f,0x32,0x8f,0x09,0x9a,0xa5,
+  0x1c,0xff,0xb8,0x43,0x19,0xe5,0xdc,0x50,0x65,0x45,0xaf,0xb8,0xf6,0x58,0xfc,0x3f,
+  0xba,0x50,0x09,0x9b,0x8c,0x7c,0x43,0x7e,0x30,0x6b,0x96,0xfa,0xb4,0x9a,0xd9,0x47,
+  0x2f,0x92,0x93,0x8c,0x9f,0xdf,0xc8,0xf2,0xec,0x1b,0x10,0xff,0xac,0x60,0x78,0x90,
+  0x93,0xf1,0xaf,0x4e,0x3a,0x0b,0x7e,0xc3,0xe6,0xaa,0xcb,0x2e,0xca,0x47,0xc8,0xcb,
+  0xd1,0xaa,0x61,0xfb,0xc3,0xe2,0xbf,0x92,0x97,0xd9,0xe2,0x78,0xda,0x08,0x1a,0xda,
+  0x2f,0xb3,0xc3,0xdc,0x11,0x64,0x89,0x7f,0xdd,0xb4,0x7b,0x3a,0x1a,0x4d,0x82,0x63,
+  0x3f,0xee,0x9f,0xb7,0x34,0xdf,0xd1,0x79,0xfb,0xc5,0xef,0xe8,0xdc,0x8c,0x5a,0x16,
+  0x35,0x15,0x3d,0x22,0xa2,0x98,0x15,0xff,0xcc,0xf8,0x48,0x7b,0x99,0xc3,0xaa,0xb1,
+  0x02,0x1f,0x5c,0x8d,0x94,0xc6,0xed,0x63,0xa2,0x0f,0x4e,0x44,0xab,0xe2,0x68,0xbf,
+  0xe3,0x15,0x56,0x1a,0x9f,0x36,0x6a,0xc5,0x3f,0xd3,0x9f,0xd0,0xd6,0x43,0x3e,0x3e,
+  0x64,0x58,0x41,0xb3,0x34,0x9f,0x8b,0x9d,0x99,0x08,0xf3,0x8a,0x0d,0xd7,0x77,0x49,
+  0x1e,0xec,0xc9,0xcb,0x8f,0xc8,0x67,0xc9,0x33,0x96,0xf8,0xd7,0x76,0xb6,0x5e,0xd9,
+  0xc9,0x10,0xed,0xe4,0xa9,0x07,0x60,0x47,0x2f,0x7d,0x30,0x3c,0x13,0xd6,0xab,0xc5,
+  0xbd,0xb6,0x7a,0xa2,0xa0,0xbd,0xb6,0x83,0x2d,0xd1,0x88,0x05,0xff,0x48,0x27,0xa5,
+  0x46,0xaa,0xea,0xb8,0x8c,0x22,0xd7,0x5f,0x7c,0x3d,0xed,0xe6,0xc2,0xda,0x2a,0x89,
+  0x8c,0xf8,0x41,0xcd,0xe5,0xc0,0x3d,0x89,0x7f,0xd2,0x4a,0x5a,0x99,0xd3,0x5b,0x9e,
+  0x39,0x2c,0x17,0xa2,0x74,0x2d,0x7d,0xcd,0x35,0x22,0x57,0x9a,0xfa,0xcb,0x76,0xb0,
+  0xb1,0x58,0xbd,0xa4,0x74,0xf5,0x2f,0xd3,0x6b,0x2c,0xf8,0x47,0x8b,0xab,0xb8,0x1a,
+  0xca,0xb2,0x58,0xcd,0x7b,0x0c,0x07,0x7d,0x8e,0x2e,0x93,0x8f,0x51,0x69,0xdc,0xd9,
+  0x26,0x7e,0x88,0xe6,0xb1,0x2f,0xb2,0x6c,0x9f,0x15,0xff,0xc0,0x15,0xed,0x14,0x1c,
+  0x76,0x2e,0x1b,0x46,0x79,0x8b,0xf7,0x37,0xec,0xc3,0xa8,0xdf,0xd1,0xde,0xef,0xc5,
+  0x63,0x35,0xa6,0x5e,0x62,0xa5,0x5c,0xb0,0x27,0xe3,0x5f,0x0d,0xb9,0xcb,0x48,0x4b,
+  0x1c,0x41,0x4b,0x8c,0xdc,0x82,0x30,0xc6,0x7c,0x7e,0xb7,0x89,0x67,0x02,0xdb,0xc8,
+  0x47,0xb0,0xed,0x8c,0x53,0x97,0x9f,0x4b,0xf1,0xff,0xb8,0xd5,0x16,0x56,0xd4,0xb6,
+  0xc4,0x73,0x97,0xb3,0xd0,0x7c,0x5f,0x54,0xd3,0x94,0xcf,0x47,0xe0,0xf4,0x01,0xfe,
+  0x61,0xbb,0x53,0xee,0x4c,0x89,0x7f,0xd9,0xa1,0x45,0x41,0xeb,0xc5,0x83,0x8b,0x56,
+  0x0a,0x3a,0x9f,0x6f,0xa7,0xdc,0x2c,0x75,0x79,0x88,0xa1,0x44,0xa7,0xab,0x20,0x83,
+  0xc5,0xfe,0x82,0xcc,0xd5,0x4d,0x27,0x48,0x05,0x73,0xd4,0xa3,0xd8,0xb9,0x0a,0xf3,
+  0x7b,0x66,0xd6,0x8b,0x33,0x11,0xe6,0xf9,0x0c,0x34,0x2b,0xe2,0xf8,0xe2,0x68,0xb1,
+  0x32,0x4b,0xfc,0x4b,0xcf,0x7c,0xbb,0xfa,0x6a,0xfe,0xad,0xcc,0x31,0x9c,0x33,0x0c,
+  0x49,0xb5,0x55,0x5e,0xd5,0xe3,0xd0,0x50,0x5e,0xbd,0xad,0x3e,0xcf,0xfd,0xf3,0x16,
+  0xff,0x4f,0xda,0x79,0x38,0xc1,0x6e,0x0d,0xe1,0xc5,0x4a,0xe8,0x5f,0x7b,0xeb,0x8a,
+  0xcc,0x11,0xf1,0x7b,0x26,0xfe,0xc9,0x1c,0x15,0x3d,0x70,0x12,0x72,0x00,0x17,0x2a,
+  0xc9,0xff,0xe1,0xf8,0xe7,0x04,0xf7,0xcf,0x47,0xc8,0x1c,0xf2,0x06,0x6b,0x0f,0xd1,
+  0x6e,0x7f,0x09,0x69,0x69,0x9a,0x37,0x8c,0x2f,0xe2,0x24,0x11,0xe6,0x54,0xb9,0x7c,
+  0x4e,0xca,0x9f,0xdb,0xe3,0xb4,0x05,0x0a,0xf9,0x4b,0xb9,0x21,0x06,0x85,0x5a,0x86,
+  0x87,0xac,0x36,0xf7,0x43,0x86,0x17,0xc1,0x13,0xc3,0x8d,0x83,0xc0,0x2f,0x29,0x7f,
+  0x8c,0xe9,0xee,0xd0,0x4f,0x5b,0x9d,0xa1,0x25,0x08,0x03,0xa4,0x6d,0xac,0x48,0x0b,
+  0xc4,0x48,0x91,0x8a,0xf8,0xa7,0x87,0x7a,0x6c,0x3a,0x44,0x5c,0x4e,0xe2,0x8a,0x12,
+  0x8f,0x25,0xfe,0xd5,0x00,0xc7,0x8e,0x96,0x3d,0x34,0x6d,0x83,0xec,0x66,0x67,0xf4,
+  0x32,0x2d,0xd3,0x23,0xfe,0x03,0x2c,0x01,0x5f,0x4f,0x66,0x6c,0x5a,0xa1,0x76,0x02,
+  0xba,0xfa,0xdd,0xcf,0xb6,0x80,0x25,0xfe,0xb5,0x0f,0xc5,0xd8,0x0f,0x35,0xc7,0x9d,
+  0xe2,0x80,0x76,0x19,0x16,0x6a,0x49,0xb5,0x3e,0x2c,0x7e,0x93,0x5e,0x0a,0xfb,0x06,
+  0x70,0xa9,0xad,0xf8,0xa7,0x1d,0xde,0xf7,0x57,0x2c,0xb5,0xb3,0x9c,0x0f,0xc9,0x19,
+  0xa1,0x4c,0x2b,0x8e,0xd5,0x7c,0x68,0xee,0x37,0x3c,0x86,0x2f,0xc2,0xaf,0x35,0x4f,
+  0x7f,0xeb,0x9e,0x69,0xb1,0x24,0xff,0x47,0x9a,0x8d,0x68,0xdf,0x19,0x72,0x3d,0x49,
+  0x5e,0x86,0xfe,0x7e,0xd5,0xa0,0xdd,0xe1,0x93,0xf0,0x53,0xf8,0x87,0x1e,0x04,0xae,
+  0x1f,0xa9,0x2d,0x41,0xbe,0x43,0x6a,0xba,0x92,0xf8,0x47,0xd2,0xd4,0x1d,0x50,0x57,
+  0x6f,0x13,0xc8,0x29,0x95,0xb1,0xc2,0x6a,0xdc,0x6f,0x27,0x25,0xd3,0x4d,0xe1,0x21,
+  0x7d,0x84,0xe1,0xd2,0xa1,0x29,0xd1,0x6d,0xc1,0x3f,0x37,0x48,0xbf,0xd4,0xf3,0x07,
+  0x6c,0x01,0xff,0xeb,0x6a,0x2b,0xcb,0xff,0xbf,0x38,0xed,0x07,0x1e,0xd3,0x8b,0xe3,
+  0x08,0x7b,0xde,0xd4,0x9a,0xd8,0x6c,0x95,0x7e,0x2d,0x7d,0x9b,0xc5,0xff,0x53,0xab,
+  0xbd,0xaf,0x97,0x1b,0x25,0xa2,0x78,0x92,0xb0,0xd6,0x05,0x2a,0xe7,0xff,0x68,0x9f,
+  0x32,0x77,0xdc,0x31,0x5f,0x3c,0x06,0xdc,0x94,0x71,0xdf,0xf0,0xe5,0x2d,0x16,0xfc,
+  0xf3,0x1c,0x8c,0x28,0x55,0xc6,0xdd,0x67,0xff,0x6a,0x8c,0xeb,0x77,0xcd,0xf1,0x09,
+  0xe2,0x9f,0x1f,0x22,0x9e,0x19,0x5f,0xa8,0x45,0xbd,0x38,0xb0,0xe0,0x9f,0x19,0x83,
+  0x3a,0x5a,0xaf,0x3d,0x25,0x86,0x70,0x92,0xfb,0xe7,0xb5,0xcc,0x98,0x60,0xc6,0xa3,
+  0x2f,0xba,0xb9,0x3d,0xf2,0x16,0x74,0x71,0xe8,0x6e,0xc5,0x3f,0xdb,0xe0,0x59,0xa1,
+  0xc0,0xa0,0x21,0xe7,0x69,0xe9,0x25,0x72,0xab,0x46,0xeb,0xfd,0x6f,0xdb,0x0f,0x40,
+  0x71,0x1f,0x0a,0xa2,0x33,0x74,0x1d,0x17,0x4d,0x41,0x2b,0xfe,0xd1,0x9e,0xa8,0xfd,
+  0x25,0x9b,0xfb,0xc9,0x92,0xa5,0x2b,0xdf,0x44,0x51,0x34,0x57,0xc5,0xf7,0xfd,0x1d,
+  0x1c,0x58,0xe7,0xe6,0x61,0xaf,0x97,0xa1,0x81,0xa9,0x21,0x3a,0x05,0xff,0xd0,0x3d,
+  0x7b,0xd4,0xe1,0xb9,0xbe,0xec,0x93,0x8c,0x35,0xb9,0x07,0xf0,0x58,0x9d,0x32,0xdd,
+  0x3e,0x7c,0x61,0x49,0x63,0x54,0x1d,0x70,0xe5,0xaf,0xb3,0xe0,0x9f,0xb4,0x67,0xd8,
+  0xe7,0x64,0x11,0xbb,0x79,0xb5,0x78,0x89,0x7d,0x4d,0xff,0x27,0xdd,0xae,0x4f,0xbb,
+  0x64,0xba,0x7d,0xec,0x3a,0x19,0x85,0x53,0x5a,0x69,0xd4,0x3e,0x64,0xc5,0x3f,0x42,
+  0xc2,0xc9,0x53,0x92,0xa0,0xc1,0xfc,0xa3,0xf2,0x00,0x0e,0xca,0xc7,0xdd,0x3e,0x06,
+  0x0c,0x52,0x1f,0x49,0xf5,0xff,0x00,0xda,0xfb,0x30,0x67,0xa5,0x1a,0x9d,0x56,0x08,
+  0x19,0x1d,0x5e,0x04,0x42,0x66,0xe0,0xe3,0x11,0x1e,0x08,0x2b,0x54,0x7b,0xc0,0x33,
+  0xc5,0xff,0x03,0xab,0xe1,0x60,0x9a,0xaa,0xd1,0xcd,0xe2,0x1d,0x91,0x06,0xc3,0xb5,
+  0x26,0xd0,0xc6,0xf9,0x27,0x68,0xdf,0x21,0x10,0x9a,0x8d,0xf8,0xa7,0x3d,0xe8,0x6a,
+  0x43,0xc5,0x37,0x89,0x7f,0xa4,0x0e,0xe1,0x20,0x94,0x20,0xfe,0x21,0x85,0xe1,0x5d,
+  0x9a,0xb3,0xd7,0xd6,0xe6,0xc4,0xf9,0xa8,0xaf,0x97,0x28,0xa4,0x30,0x1f,0xa1,0x8e,
+  0x7f,0x8a,0xff,0x27,0x3d,0xe3,0x20,0xc2,0xc2,0x1b,0xa2,0x36,0x09,0x76,0x91,0x22,
+  0x6d,0x39,0xe7,0xff,0xec,0x01,0x97,0x26,0xe7,0xda,0x24,0xa1,0x81,0xf3,0xcd,0x14,
+  0x92,0xb4,0xbf,0xca,0x33,0xe2,0x0a,0x7f,0xbb,0x8d,0x3a,0x82,0xae,0x41,0xe0,0x8e,
+  0x20,0x31,0x4e,0x47,0x10,0x6f,0x2c,0x4b,0x28,0x62,0xd3,0x11,0x61,0x89,0x7f,0xdd,
+  0x34,0x20,0x7d,0x86,0xc7,0xea,0xee,0xd3,0xe2,0x67,0xe4,0xdf,0xc9,0x62,0xee,0xd6,
+  0xf8,0xcc,0xc4,0x3f,0x0e,0x3e,0xb8,0xec,0x47,0xfc,0x73,0xda,0x12,0xff,0xca,0x9b,
+  0xce,0x57,0xe3,0xb6,0xa0,0xfd,0x35,0x71,0x01,0xfb,0x90,0x7b,0xa7,0xfb,0x4d,0x37,
+  0xc8,0x0f,0xee,0xb2,0x73,0x7f,0xc8,0xb1,0x0c,0xaf,0xdf,0xb1,0xa5,0xe6,0x5c,0x12,
+  0xff,0x00,0x67,0xfb,0x38,0x23,0xae,0x26,0x51,0xa5,0x9d,0x60,0x02,0x21,0x7e,0xa5,
+  0x44,0xb1,0x11,0x72,0xf6,0xde,0x08,0x38,0x15,0x79,0xc0,0x7f,0x6a,0x72,0xfd,0x21,
+  0xad,0x17,0x57,0xc3,0x15,0xa0,0xd7,0x93,0x6f,0xd0,0x7c,0x04,0x42,0x37,0x2a,0xe4,
+  0x45,0xee,0x81,0xd7,0x6e,0x50,0x8e,0xbe,0x2e,0xac,0x65,0xf9,0xa1,0x96,0x2f,0xa5,
+  0x27,0xed,0xaf,0xbc,0xe9,0x1d,0x26,0xdb,0x8a,0x6e,0xc9,0xfe,0x7b,0xd8,0x95,0x5f,
+  0x72,0x47,0x0b,0xe2,0x9f,0xd0,0x41,0xa1,0x44,0xb3,0x45,0xfd,0xe7,0x10,0xf4,0xed,
+  0xd4,0x10,0x8a,0x5b,0xf8,0x3f,0x52,0x87,0x7a,0x10,0x2a,0x78,0x34,0xf3,0xef,0x61,
+  0xae,0x6a,0xb2,0x77,0xfe,0xc0,0xdf,0x57,0xdb,0x18,0xe5,0x40,0xae,0xd6,0x1b,0x74,
+  0x6c,0x9f,0x96,0xe4,0xff,0x3c,0x63,0xee,0x07,0x1f,0x0f,0x72,0x75,0x28,0xa3,0x09,
+  0xf6,0xd7,0x39,0x73,0xfe,0xcd,0x51,0xb1,0x97,0xe2,0xe0,0x4e,0x47,0x34,0xe7,0x03,
+  0x65,0xe2,0xfe,0x2e,0xd8,0x69,0x7a,0x17,0xed,0x0d,0x35,0x3a,0x19,0x01,0xef,0xf4,
+  0x4c,0x96,0x73,0x16,0x46,0xd0,0x54,0xb8,0x99,0x89,0x21,0x34,0x0f,0xbc,0xd0,0xda,
+  0x2b,0xdb,0x2c,0xf1,0x2f,0x17,0xbc,0x0b,0xf3,0xba,0xe9,0x80,0xff,0x4d,0xf6,0x0e,
+  0x2c,0x8c,0x51,0xee,0xd8,0x3c,0x24,0x94,0x34,0x88,0xfa,0xdf,0xba,0xc8,0x06,0x70,
+  0xea,0x7d,0x29,0xfe,0x9f,0xb5,0x4b,0xf1,0x74,0x94,0xbc,0x46,0xf3,0xc2,0x11,0x12,
+  0x95,0x0a,0x5f,0xcb,0x80,0x30,0x37,0xc3,0xeb,0x78,0x84,0x62,0x29,0x6c,0x0d,0xab,
+  0x67,0xf3,0x5c,0xe4,0xae,0x64,0xfc,0x4b,0x98,0x09,0x4f,0xc3,0x77,0xb4,0xbc,0x20,
+  0x9e,0xa6,0x1f,0x47,0x66,0x0f,0x67,0x68,0xeb,0xde,0x4e,0xb8,0x6d,0x7f,0x40,0x72,
+  0xe1,0xc7,0xfe,0xd0,0xbb,0x2e,0x37,0xa9,0x4b,0xde,0x1f,0x66,0xa9,0x7f,0x42,0xb4,
+  0xe3,0x5e,0x9e,0xf3,0x04,0x39,0xcd,0x6e,0x8d,0x67,0x06,0x84,0x77,0x80,0x5f,0xf9,
+  0xe2,0xc3,0xe2,0x5d,0xf0,0x6b,0xb6,0x47,0xb7,0xaf,0x91,0xbf,0x3d,0xf1,0xb5,0x80,
+  0x5e,0xbf,0x0b,0xd5,0xfa,0x2c,0x1e,0xe4,0x1a,0x22,0xfd,0x28,0x66,0xb3,0xd8,0x04,
+  0xbf,0x65,0x7f,0x63,0x3c,0xe1,0x11,0x8a,0x89,0xe1,0xeb,0x26,0xd6,0x47,0x4b,0xfb,
+  0x40,0xbb,0x1a,0x5d,0xc4,0x41,0xd4,0x5d,0x5a,0xdb,0x8f,0x0e,0x7e,0x68,0x5f,0x9e,
+  0xe3,0xd3,0x5e,0x65,0xf3,0x06,0x1c,0xdd,0xe2,0x15,0x78,0x85,0x55,0x85,0x96,0x06,
+  0x44,0xc5,0x8a,0x7f,0xd8,0x81,0x1d,0xf9,0xbd,0x9d,0x0f,0x6e,0x98,0xc5,0x3a,0x3a,
+  0xf4,0xa1,0xcc,0x20,0x99,0xa9,0x35,0x42,0xf9,0x80,0x7c,0x49,0xb8,0x4f,0x6b,0xe2,
+  0x81,0x60,0x4a,0xac,0xfe,0x96,0x6d,0xc6,0xf3,0xca,0x3c,0xd3,0x3a,0xd3,0x3a,0xc4,
+  0x2f,0x18,0x11,0x8d,0xdc,0x6f,0x5b,0x0f,0xc5,0x27,0x5b,0x1e,0x42,0x33,0x66,0x6d,
+  0xd0,0x0d,0xf4,0x4c,0x76,0xad,0x32,0xb1,0xfe,0xa1,0xdc,0x63,0xb0,0xb7,0x7a,0xce,
+  0x99,0x3b,0xdd,0x68,0xbd,0xea,0x01,0xbd,0x3f,0x03,0xfc,0xcb,0xd8,0x56,0xc1,0xc5,
+  0x03,0x19,0x1a,0xde,0x0e,0xe7,0xcf,0xc8,0xfe,0xdb,0x49,0xfe,0x8f,0x6b,0xc6,0x6e,
+  0xf8,0xd4,0xef,0x1b,0xc1,0xdd,0xee,0x56,0x77,0xb1,0xf2,0x38,0xca,0x9f,0xbb,0xd9,
+  0x09,0x62,0xfa,0xdb,0x51,0xd5,0x36,0xf8,0xe2,0xbb,0x3b,0xe5,0xbb,0x2c,0xcf,0x73,
+  0x4e,0xbd,0xa4,0x56,0x44,0xd1,0x9e,0xda,0xed,0x1c,0x0c,0x96,0xf5,0x3a,0xd8,0xb4,
+  0xdd,0x3c,0x0c,0x61,0x6c,0x8a,0xc9,0x4f,0x91,0xf3,0xac,0xf2,0x5d,0xb4,0xd0,0x3b,
+  0x92,0xf8,0x27,0x38,0x26,0x5d,0x85,0x85,0x3d,0xf6,0x60,0x63,0x25,0x6c,0x97,0x16,
+  0xbe,0x90,0x19,0x17,0x87,0xe8,0xab,0x09,0x7d,0x97,0x07,0xbf,0x83,0x52,0x84,0x82,
+  0x8d,0x49,0x7d,0xdd,0x83,0xff,0x12,0xc2,0x9e,0x6e,0x54,0xe2,0xd3,0xc0,0x68,0x2f,
+  0x8b,0x67,0x36,0x91,0xf1,0xb0,0x45,0x0c,0x25,0xc0,0x06,0x68,0x67,0x9d,0x31,0xbf,
+  0x9a,0xc4,0x3f,0x28,0x39,0x0e,0xc3,0x9c,0x38,0xed,0x26,0x25,0xea,0xc1,0x86,0x39,
+  0xef,0xd2,0x86,0x75,0x13,0xf3,0x9d,0xee,0xf4,0x66,0xc1,0xa9,0x6d,0x60,0xf8,0x87,
+  0x13,0xfb,0x81,0xd6,0x4a,0x70,0xd8,0xc5,0xe3,0x83,0x15,0xf6,0xb9,0x9d,0x50,0x78,
+  0x26,0x03,0xc8,0x50,0xc6,0x4e,0x6d,0xf5,0xb1,0x46,0x2f,0x48,0x78,0x3b,0x55,0xbb,
+  0x8b,0x84,0x93,0xf6,0x17,0xd0,0x3a,0x38,0x1c,0xe2,0x4e,0xb0,0x02,0x37,0x1b,0xf1,
+  0x96,0x6d,0x73,0x33,0xc4,0x7b,0xa6,0xff,0xe1,0x7c,0x83,0x8b,0xbe,0x41,0xbc,0x90,
+  0xf5,0x98,0xa8,0x26,0xf1,0xcf,0xf5,0x7b,0xe0,0x53,0xf7,0x4d,0x46,0xa6,0x21,0x8e,
+  0x91,0xbe,0x90,0x4f,0x5a,0x66,0xd4,0x8c,0xc1,0xef,0x54,0xdf,0xaf,0xef,0x1e,0x46,
+  0xfc,0x33,0x06,0x55,0xf0,0xe8,0x96,0xaf,0xa7,0xe0,0x1f,0xf2,0x62,0xf8,0x56,0xdd,
+  0x7e,0x52,0x2c,0xaf,0x3d,0xe9,0x2c,0xa5,0x76,0x43,0xac,0x8f,0xbe,0x0a,0x0b,0x25,
+  0x77,0xbf,0x58,0x0f,0xbf,0x25,0x0b,0xb9,0xff,0xc4,0xc2,0x7f,0x46,0xfc,0x13,0x69,
+  0x72,0xee,0xb0,0x83,0xdf,0x05,0xcd,0x01,0xe7,0xbd,0xf6,0xa6,0xc6,0xc2,0xd0,0xa6,
+  0x7e,0x67,0x1e,0xdd,0x4e,0x0a,0xa4,0x66,0xad,0x88,0x04,0xba,0x1a,0xeb,0x27,0xe3,
+  0xef,0x7d,0x69,0x71,0xd8,0x05,0x85,0x46,0xc6,0x16,0xe2,0x62,0x7a,0xa8,0xee,0xfa,
+  0x8c,0x1c,0xc2,0x58,0xa3,0x34,0x67,0x39,0x9a,0x99,0x19,0xb0,0xa3,0xb2,0x30,0xc3,
+  0xe5,0x22,0x16,0xfe,0xf3,0x8c,0xdd,0x0d,0xbb,0x98,0x53,0x77,0x75,0xa3,0x19,0xbb,
+  0x8b,0xb5,0xeb,0x78,0xdb,0x12,0x4e,0xb4,0x0e,0xd1,0x6d,0xd9,0x2e,0x75,0x57,0xa4,
+  0x48,0xdf,0xd6,0x45,0xea,0x93,0xf8,0x04,0xe5,0xe7,0xd9,0x9e,0x32,0x3d,0xd3,0xde,
+  0xe8,0x0a,0x0f,0xc6,0x2b,0xe6,0x66,0xb6,0xd6,0x38,0xd5,0x17,0xa0,0x2c,0x2e,0xc5,
+  0xc4,0x02,0xff,0x1f,0x59,0x59,0x97,0x3d,0x96,0x93,0xc2,0x7f,0xce,0x7d,0x47,0xa8,
+  0x62,0x0e,0x5c,0x16,0xed,0x1d,0x5c,0x0d,0x47,0x50,0xee,0x57,0x2f,0x49,0x55,0x3c,
+  0xbe,0x3c,0x02,0xbf,0xe1,0x57,0xce,0x58,0xf8,0xcf,0xbd,0xca,0x6e,0xb4,0xdf,0x39,
+  0xda,0x24,0x2e,0x78,0x5f,0xf3,0x49,0x8e,0x1d,0xe2,0x7b,0xc2,0x25,0xa5,0xcc,0xc8,
+  0xda,0x23,0x7e,0x41,0xba,0x74,0xaf,0x97,0x65,0x4d,0xaf,0xb9,0x60,0x89,0x7f,0x49,
+  0xd0,0x3c,0xac,0x6e,0x41,0xfb,0xfd,0x1e,0xd6,0x3c,0x5c,0xb2,0x40,0xde,0x4e,0xde,
+  0x6b,0x78,0x9e,0xd3,0x5a,0xb6,0x39,0x25,0x7a,0x88,0x38,0xf5,0xcc,0xc7,0x53,0xfc,
+  0x3f,0xda,0xf4,0xe9,0xcc,0x15,0xa6,0x4a,0xb6,0x1d,0x8f,0x5d,0x3a,0x5b,0xe2,0xcc,
+  0x3e,0xc6,0xdd,0x80,0x70,0xd7,0x0d,0xd9,0x12,0x6e,0x63,0x27,0x95,0x15,0x9c,0x3f,
+  0xb1,0xdf,0x86,0x85,0xeb,0xa4,0xc7,0x58,0xc1,0x6e,0xfa,0x37,0xe4,0x6b,0xb0,0x8e,
+  0x15,0x87,0x96,0x2c,0x27,0x6f,0xc2,0x01,0x3d,0x5f,0xb5,0x2d,0x9f,0x73,0x1d,0xdd,
+  0xcf,0x0a,0x5c,0x19,0x75,0x64,0x6c,0xf2,0x7c,0xdd,0x49,0x89,0xf6,0x2b,0x28,0x5f,
+  0x6a,0x9f,0x8e,0xf8,0xf0,0x2c,0x87,0x6d,0x2a,0xda,0x9b,0x7b,0x59,0x99,0x96,0xa5,
+  0xc8,0x76,0x38,0xaf,0x2a,0x61,0x87,0x4b,0x7c,0x6d,0x32,0x7e,0xaa,0xdd,0xd4,0xa6,
+  0x7d,0x0c,0x8b,0x5a,0x6f,0xf9,0xa4,0xe6,0x39,0xe9,0xb2,0x80,0xdb,0xac,0x9f,0xfb,
+  0x0f,0xf1,0xbc,0xa4,0xf1,0x40,0xd8,0x79,0xb2,0xb8,0x79,0x1e,0x8f,0x27,0x4e,0xac,
+  0x4f,0x67,0xda,0x00,0x7c,0x02,0x1e,0x66,0xe7,0xd1,0xe7,0xb7,0x61,0xaf,0x66,0x47,
+  0xe0,0x06,0x27,0x3c,0x0b,0xcc,0x40,0x21,0x3d,0x0e,0xa4,0x1a,0xf5,0x23,0x49,0xe2,
+  0x9f,0xcd,0x6d,0x70,0x80,0xd3,0x12,0x34,0x14,0xe1,0xeb,0xa0,0xa0,0x7a,0x77,0xbf,
+  0xdf,0x03,0xeb,0x5d,0xf9,0x08,0x84,0xc8,0x49,0x58,0x27,0x7c,0xab,0x9a,0x6a,0x36,
+  0xef,0x24,0xbe,0x62,0xf0,0x18,0x7d,0xb6,0x21,0xff,0xdd,0xc0,0x9a,0xf4,0xaf,0xc1,
+  0xe6,0x9e,0xfc,0xfa,0xeb,0xeb,0xc8,0x75,0xf0,0x18,0xbb,0x85,0xe3,0x9f,0xd7,0x60,
+  0xa7,0xa1,0xc7,0x07,0x03,0xce,0x3c,0x0b,0xfe,0x79,0x59,0xd8,0xcb,0x54,0xd6,0x77,
+  0x6b,0xf8,0x1f,0x58,0x33,0x02,0x75,0xd4,0xe6,0xb7,0x10,0x93,0x56,0x74,0x1b,0x9a,
+  0x9d,0xcf,0xf4,0x15,0x0d,0xd2,0xd6,0xf0,0x0d,0x93,0xf2,0x61,0x70,0xc6,0x61,0xf8,
+  0x3c,0x52,0xaa,0x2f,0x1d,0x32,0x03,0x6b,0x68,0x48,0xc6,0x1b,0xcb,0xb5,0xd7,0x60,
+  0xe1,0x2f,0xed,0xba,0x78,0x29,0xfc,0x91,0x56,0xda,0x69,0xff,0x88,0x54,0x4c,0xee,
+  0x9f,0x00,0xc4,0x23,0x23,0x70,0x04,0xe6,0x31,0x61,0x87,0x36,0x12,0xf0,0x65,0x67,
+  0x35,0x35,0xc6,0xb5,0x89,0xf8,0x17,0x6c,0xe3,0xa6,0x19,0xc7,0x3f,0x13,0xcf,0x4f,
+  0x95,0x73,0xd1,0x63,0xaa,0x57,0x5b,0x1d,0x15,0xe7,0x90,0x63,0xcc,0x5b,0x6f,0xbf,
+  0x81,0x0f,0x78,0x58,0x24,0x4f,0x94,0xe0,0x18,0x74,0xad,0x5a,0xfa,0xb8,0x48,0x26,
+  0xf7,0x0f,0x93,0xee,0x80,0x66,0x40,0x50,0x17,0x25,0xb7,0x34,0x35,0x1b,0xed,0xf5,
+  0xee,0x36,0xe7,0x6c,0x68,0x7e,0xad,0x4c,0xa3,0xdb,0x6d,0x85,0x0a,0xca,0x93,0x20,
+  0xdd,0x92,0xea,0xff,0x81,0x16,0xea,0x0c,0x05,0x94,0xf4,0x42,0xad,0xf9,0x7a,0xa7,
+  0x7f,0x5b,0x34,0x5c,0x58,0xdf,0xcc,0x61,0xcc,0x8f,0xc6,0xf9,0x42,0x78,0xab,0xac,
+  0xc9,0xfd,0x06,0x68,0x7f,0x35,0x73,0x33,0x2d,0xd7,0x96,0x08,0x7b,0xe5,0x71,0xff,
+  0x4f,0x23,0x14,0x9a,0xfc,0x67,0xd2,0xd0,0xa3,0x06,0x5d,0xb9,0x04,0x7f,0x37,0xfe,
+  0x53,0x9e,0x19,0x22,0x11,0xe8,0x12,0xec,0x90,0x3d,0x81,0x76,0x72,0x54,0x25,0x31,
+  0xf8,0xae,0x39,0x60,0x76,0x66,0xf1,0xff,0x9c,0xb9,0xe9,0x02,0x2c,0xc6,0xdd,0xb2,
+  0xac,0x3f,0xe7,0x33,0xee,0xed,0xe9,0xcf,0x3a,0x2d,0x5f,0x86,0x4f,0xb4,0xaa,0xa0,
+  0x8c,0x88,0x48,0x32,0xf1,0xcf,0x7d,0xe2,0xb9,0xc9,0xf5,0xcc,0x9b,0x71,0x01,0x5e,
+  0x81,0xf9,0xda,0xd2,0xb6,0x9c,0x05,0xfa,0x2b,0x5a,0xd5,0xf2,0x99,0xfd,0xe2,0xad,
+  0xf0,0x8a,0x0b,0xd7,0x27,0xd8,0xb8,0x80,0x7d,0x16,0x2a,0xd5,0xdc,0xaf,0x59,0xe2,
+  0x5f,0x6b,0x94,0xb8,0x14,0x81,0x76,0x81,0x02,0xd9,0xc5,0x22,0x5a,0x49,0x5e,0x20,
+  0xfc,0x55,0xce,0xff,0x29,0xa2,0x9d,0xcc,0x96,0x0f,0xdd,0xab,0x9e,0xb9,0x81,0xae,
+  0x0b,0x9f,0x9a,0x5c,0x4f,0x9a,0x36,0x04,0x3f,0x13,0x70,0x35,0xb2,0xb3,0x9b,0xd4,
+  0x06,0x6d,0x75,0x90,0xe6,0x6e,0xe0,0xfe,0x2e,0xd7,0x43,0x36,0x4f,0x7a,0x1a,0xec,
+  0x35,0x42,0x41,0x3a,0x9d,0xbc,0x26,0x4c,0xcc,0xcf,0x4b,0xdb,0xcd,0x61,0x64,0xb5,
+  0x6b,0x73,0x78,0xb7,0xd4,0xc2,0xa3,0x8d,0xd1,0xb0,0xbb,0xba,0x19,0x8a,0x34,0xdb,
+  0x16,0x52,0x18,0x39,0xd8,0x54,0x14,0xa0,0x9c,0xff,0x3c,0x31,0x5f,0x17,0x5e,0x82,
+  0xf7,0xb9,0x13,0x6f,0x9b,0xfc,0x94,0xff,0x18,0xf3,0x69,0xae,0xed,0x68,0x38,0x9b,
+  0x1e,0xbf,0x6d,0x62,0x21,0x1b,0xc5,0x0f,0x61,0xff,0xb1,0x85,0xff,0xcc,0xe3,0x5f,
+  0x6f,0xd4,0x1e,0x79,0x28,0x11,0xf6,0xca,0xab,0xac,0x73,0x64,0x8b,0x2f,0x21,0xd0,
+  0xae,0x0c,0x64,0xe6,0x15,0xe0,0x51,0xb2,0xfb,0xaa,0x1d,0x5b,0xb6,0x9e,0x4f,0xfa,
+  0x7f,0x40,0xe7,0xb4,0x2b,0xc9,0xde,0x24,0xe6,0x43,0xdf,0xbd,0x9c,0xed,0x93,0x93,
+  0xcf,0x06,0x55,0x84,0x3d,0x9c,0x08,0xd4,0x27,0xf9,0xa8,0xbd,0x49,0x26,0x16,0xff,
+  0x4f,0x39,0xec,0x87,0x7c,0x9d,0xea,0xc2,0xf7,0xfd,0x1b,0xd9,0xce,0x36,0x3a,0x40,
+  0xca,0x61,0x9d,0x46,0x58,0x20,0x6e,0x73,0xc1,0x46,0xad,0x20,0xe2,0x1a,0xb0,0xe2,
+  0x9f,0x19,0x01,0x61,0x6f,0xc8,0x34,0xc3,0x67,0x6b,0x9b,0xb5,0xc2,0x55,0x08,0x84,
+  0xd2,0x61,0xab,0xa6,0x1a,0x19,0x2a,0xb9,0x83,0x36,0x6a,0xae,0x7e,0x5a,0xee,0xb4,
+  0x59,0xfc,0x3f,0x79,0xf0,0xbc,0x90,0x6f,0xb8,0x1e,0x24,0xf7,0x41,0x1b,0x43,0xeb,
+  0xec,0x7b,0x64,0x06,0x3c,0x06,0x6a,0x5f,0x46,0x3d,0x59,0x26,0xad,0xe7,0x1e,0x95,
+  0x87,0xd1,0xfe,0x9d,0xb8,0x7f,0x67,0x84,0xb3,0x7d,0xe6,0xc7,0x97,0xfe,0x93,0xec,
+  0x85,0xdf,0x22,0xfe,0x71,0x9f,0x91,0x2b,0xc8,0xa7,0x4d,0xf3,0x07,0x33,0xd7,0x88,
+  0x5f,0xc3,0x13,0xb9,0x48,0xb7,0x8f,0xc8,0x4e,0xab,0xff,0x07,0xa5,0x9f,0xcf,0x58,
+  0xb6,0x2f,0x27,0x0e,0x43,0xb0,0x88,0x13,0x59,0x47,0x78,0x9a,0xc0,0x0b,0xdf,0x46,
+  0x09,0x43,0x2e,0x41,0x85,0xc9,0x7f,0x4e,0xda,0xbf,0x69,0xaf,0x69,0x7d,0xd1,0x2a,
+  0x1d,0xcd,0xf6,0x32,0xe3,0x55,0x56,0xba,0xc2,0x0c,0x7b,0xbd,0x1c,0x9d,0xff,0xae,
+  0x7d,0xcd,0xd7,0x7d,0xf0,0x6a,0xdb,0xfc,0xb3,0xf6,0x41,0x31,0xe9,0x9f,0x79,0x66,
+  0x7a,0x44,0x5b,0x1f,0x2d,0x66,0xae,0x87,0x48,0xae,0xf6,0xba,0x92,0x9f,0xeb,0x0a,
+  0x92,0xd3,0x6a,0x63,0x14,0x1f,0xfb,0x21,0x32,0x53,0x5a,0xaf,0xcf,0xcd,0xa1,0xab,
+  0x6c,0x45,0xe9,0x13,0xf3,0x01,0xb6,0x2b,0xeb,0x55,0x8e,0x7f,0x9c,0x79,0xec,0x49,
+  0x98,0x6b,0xd0,0x2f,0x91,0x7e,0x6d,0x3d,0x14,0xf0,0xf8,0xd7,0xfd,0xda,0xd3,0x3c,
+  0xb1,0x25,0x68,0xf5,0xff,0x28,0x27,0xb5,0x46,0xbb,0x7b,0x55,0xe4,0x39,0x92,0x8f,
+  0xd2,0xd0,0xa5,0x23,0x48,0x7f,0xc5,0xd6,0x00,0xce,0x81,0x8c,0x3c,0xb2,0x74,0xf6,
+  0x4e,0x6d,0x50,0x75,0xd9,0x09,0x9d,0x9c,0xdf,0x39,0xa3,0x13,0x5e,0x60,0xbe,0x17,
+  0x33,0x47,0xe4,0xd9,0xf0,0x7e,0xfc,0xd0,0x1a,0xca,0x1a,0xff,0xa0,0xbc,0x00,0x7b,
+  0xcf,0x66,0x6e,0x6b,0x7c,0x80,0xfd,0xb1,0x57,0x8f,0xdb,0xbb,0xc3,0x56,0x3c,0xf6,
+  0xbe,0xf3,0xd2,0x51,0x5f,0xbf,0x63,0x0f,0xc2,0xec,0xe5,0xa1,0xeb,0x72,0x1c,0xfa,
+  0xde,0x81,0x28,0xf7,0x87,0x94,0xb4,0x89,0xad,0xca,0xdf,0x31,0x5f,0xc3,0xbc,0x8e,
+  0x94,0xf8,0xd7,0x45,0x8d,0x07,0xb9,0xdc,0xc3,0x8d,0x2a,0x5a,0x5b,0x5e,0xc3,0x61,
+  0x88,0xae,0xb4,0x2b,0x7a,0xa9,0x61,0xef,0xe7,0xf9,0x29,0x74,0x6f,0xbf,0x7d,0x4f,
+  0x63,0x5f,0xd2,0xff,0x23,0x7d,0x1b,0x0e,0x37,0x78,0xe2,0x91,0x98,0xed,0x0b,0x10,
+  0xe9,0x71,0x86,0x50,0x7f,0x39,0xe1,0x50,0xdc,0xd9,0x83,0xfb,0xff,0xa3,0xda,0xc6,
+  0xbe,0xb2,0xcd,0x0e,0x46,0x06,0x2d,0xfe,0x1f,0x17,0x3d,0x4c,0x9d,0xf5,0x34,0xe6,
+  0x77,0xf2,0xc0,0xd0,0x0a,0xb9,0xd5,0x36,0x47,0xe1,0x8e,0xa3,0xbc,0x6e,0x32,0x44,
+  0x5a,0x1a,0x4c,0x8f,0x50,0x0a,0xff,0xb9,0xf6,0xb0,0xaa,0x02,0xf5,0x38,0x41,0xe1,
+  0xde,0x0f,0x19,0x70,0xf5,0xf6,0x52,0xbd,0xc7,0xe6,0xf1,0x9f,0x84,0x86,0xfc,0x39,
+  0x3c,0xb0,0x7d,0x74,0xed,0xe4,0xf2,0x67,0x7e,0x0b,0x2e,0x49,0x5e,0x6d,0x66,0x7d,
+  0x8e,0x8b,0x70,0xb1,0x73,0x33,0x47,0x53,0x87,0xb9,0x23,0x0b,0xf5,0x0b,0x39,0xce,
+  0x05,0xe9,0xb3,0xa2,0xd1,0x38,0xb9,0x3f,0x1f,0x1d,0x61,0x57,0x95,0xdb,0xb4,0x7f,
+  0xe3,0xdb,0x66,0x0c,0xb8,0xb7,0x27,0x67,0x18,0x2e,0xd1,0x2a,0x43,0x46,0x45,0x26,
+  0x8d,0x64,0x57,0x99,0xfe,0x9f,0xc2,0x24,0xde,0x18,0x82,0x57,0x61,0x11,0x5b,0x6a,
+  0x14,0x94,0xc0,0x18,0x5b,0xbc,0x6a,0xda,0x88,0xe8,0x51,0x4e,0xa8,0xa5,0x27,0x37,
+  0xc6,0xc4,0x59,0xd0,0xcb,0x4a,0x43,0x3c,0xfe,0x65,0xf1,0xff,0x0c,0xc1,0x26,0xa9,
+  0x8b,0x45,0x80,0x94,0x48,0xdd,0x0d,0x25,0xd5,0x72,0x37,0x71,0x29,0xbf,0x33,0x76,
+  0x9c,0x79,0xf4,0xb2,0x19,0xa8,0x42,0xa0,0xd2,0x9d,0x12,0xff,0x3a,0x39,0xbd,0x11,
+  0x8a,0x18,0x55,0x6d,0x76,0x29,0x06,0xee,0x80,0xec,0xb1,0xb5,0xe6,0x35,0x2a,0xea,
+  0x19,0x9b,0xc7,0x69,0x4f,0xc8,0x67,0x0f,0xb1,0xc4,0xbf,0xd2,0x76,0x43,0xa3,0x32,
+  0x27,0x8a,0xeb,0xef,0x86,0x83,0x4d,0x25,0x5a,0x4b,0x8c,0xb4,0xaa,0x3f,0x35,0xf9,
+  0xe4,0x78,0xa5,0x85,0xa9,0x2b,0x68,0x4a,0xfc,0x2b,0x6d,0x88,0x1e,0x63,0x15,0x51,
+  0x57,0xb3,0xec,0x86,0x91,0x88,0x2f,0x24,0x7b,0x48,0xa7,0x49,0xbb,0xcd,0x8a,0x89,
+  0x59,0x5a,0x4f,0x5f,0xf6,0x79,0x7b,0xcc,0xc2,0x7f,0x8e,0x0b,0xbb,0x61,0x74,0xc3,
+  0xa2,0xfe,0x4d,0x88,0x0f,0x39,0x1a,0x0c,0x38,0x86,0xbf,0xb8,0x26,0x35,0xbe,0x33,
+  0x2f,0x25,0xfe,0x05,0xbb,0xb9,0x92,0x6a,0xb3,0xb7,0xf3,0xfb,0xa3,0xa1,0x97,0xd9,
+  0x8d,0xe8,0xe8,0x04,0x02,0x09,0xfb,0x7c,0xdc,0x3f,0xa8,0xd1,0x02,0x8e,0x2e,0x71,
+  0xd8,0x92,0xff,0x55,0x39,0xbd,0x79,0x85,0x7a,0x7a,0x03,0x8f,0xd6,0x1d,0x7c,0xc3,
+  0xa9,0x65,0xc5,0x50,0x86,0x3d,0xad,0xce,0xeb,0xa1,0x23,0xe4,0xa3,0x26,0xdc,0x0f,
+  0x23,0xf2,0x7e,0x2b,0xfe,0x99,0xf1,0x80,0x7d,0xb3,0xa1,0x2b,0x94,0xdd,0x61,0x87,
+  0x58,0xa3,0x4b,0x63,0x5e,0x88,0xd8,0x1b,0x99,0xdb,0x68,0xf6,0x38,0x4f,0x91,0x46,
+  0xda,0xd9,0x2f,0x2f,0x20,0x29,0xf1,0x2f,0xf5,0x47,0xd1,0x5b,0x3a,0x6d,0x81,0xd7,
+  0x67,0x49,0x47,0xf4,0x82,0xd5,0xb6,0x35,0x70,0x03,0x3c,0xad,0x17,0x0f,0xf2,0xc4,
+  0x28,0x65,0x13,0x9b,0x1b,0x47,0x43,0xcc,0x1a,0xff,0xca,0xd2,0x36,0xb7,0x21,0x3e,
+  0x71,0x8a,0x59,0x30,0xa2,0x97,0x0f,0xd8,0x3d,0xc2,0xa0,0xf6,0x02,0xab,0x1c,0xcc,
+  0xbc,0x4d,0x3c,0x09,0x2f,0x40,0xb9,0xe6,0xa8,0xc8,0xb1,0xc6,0xbf,0x9e,0x53,0x3e,
+  0x64,0xb7,0xf5,0x39,0x86,0x73,0xc6,0xe8,0x45,0xbe,0x2c,0x0f,0x8a,0x23,0x0a,0x5f,
+  0x96,0x92,0xf3,0x35,0x68,0x4a,0x28,0x0b,0xa7,0xfa,0x7f,0xd0,0x3a,0x0b,0x39,0x39,
+  0x2d,0x61,0x35,0x2c,0x17,0x66,0x69,0x88,0x36,0x07,0xe1,0x92,0xe1,0xed,0xcf,0xda,
+  0xb7,0xd5,0x0d,0x7f,0x14,0xbc,0xf1,0x54,0xff,0x8f,0xf0,0x2f,0xb0,0x57,0x31,0xf9,
+  0x3f,0x33,0xe1,0xc7,0x50,0x5c,0x9d,0x59,0x4f,0xce,0x28,0x07,0x82,0xae,0x5e,0xee,
+  0x88,0x26,0xeb,0x13,0x1e,0xe9,0xf3,0x16,0xff,0x1b,0xda,0x6b,0x4c,0xd7,0x33,0x02,
+  0xe9,0x5f,0x13,0xda,0xd8,0xbc,0x50,0xde,0x1a,0xc4,0x7b,0x7b,0xb9,0x07,0xec,0x36,
+  0xff,0x2c,0xe1,0x69,0x76,0x8b,0xe9,0xff,0x99,0x5c,0xff,0x80,0x34,0xc4,0xf1,0xcf,
+  0x49,0x1a,0x4b,0x5f,0x0a,0x51,0x28,0x09,0x65,0x70,0xf6,0xe6,0x5e,0x70,0x19,0x38,
+  0x98,0x03,0x8d,0xce,0xc2,0xee,0x3b,0x3d,0xd6,0xf8,0x57,0x5a,0x27,0x5c,0xd4,0xe7,
+  0xb3,0xe2,0x77,0xc5,0x3a,0x78,0x47,0xf5,0xe9,0x54,0x15,0x2f,0x32,0xce,0xff,0xc9,
+  0xd2,0x0b,0x8a,0xe0,0x1c,0xec,0xdd,0xe2,0x4e,0x8d,0x7f,0xc5,0x61,0x18,0xf1,0x8f,
+  0x83,0xe7,0x43,0xe5,0x41,0x96,0x64,0xa6,0x7d,0x25,0x3c,0x42,0x32,0x07,0x42,0x15,
+  0x90,0x95,0xea,0xff,0x39,0xb7,0xf9,0x58,0x13,0x1e,0xd2,0xc7,0x6b,0x0a,0xe9,0x68,
+  0xa1,0xaf,0x7a,0xe9,0xb6,0xea,0x5a,0x93,0x1f,0x72,0xb7,0x22,0xae,0x82,0x37,0x70,
+  0xff,0x3b,0x7e,0x22,0x58,0xf9,0x3f,0xdf,0xe4,0xf1,0xa9,0xa0,0x2d,0xea,0x2f,0x84,
+  0x83,0xd5,0x25,0x5a,0xe6,0xf6,0xf0,0x78,0xfc,0x0b,0x11,0x11,0x34,0xe7,0x3b,0xb5,
+  0x25,0xdb,0xac,0xfc,0x9f,0x19,0x85,0x52,0xb3,0x82,0x87,0x2e,0x9a,0x5e,0x28,0x71,
+  0xb7,0x0f,0xa2,0xa3,0x01,0x68,0x26,0x6e,0x2d,0x63,0x1b,0x59,0xc5,0x1e,0x57,0xbf,
+  0x7d,0x87,0x1c,0x4d,0x4f,0xe1,0x3f,0x6b,0x8d,0xb5,0xce,0x7e,0x5b,0xee,0x1d,0x52,
+  0xde,0x1e,0x70,0xf3,0xec,0xa7,0xb5,0x3c,0x42,0xc4,0xf1,0xcf,0x34,0x68,0xae,0x1d,
+  0xd4,0x7e,0x9a,0x67,0xe5,0xff,0xa4,0xad,0x68,0x8f,0xb8,0xba,0x12,0x6c,0x93,0x8b,
+  0xf8,0x9a,0xf7,0xb3,0x9c,0xb8,0x19,0xff,0xca,0x64,0x35,0x21,0xe9,0x0c,0x31,0xa9,
+  0xd1,0xa7,0x84,0x49,0xff,0xcf,0x8c,0x81,0xe8,0x65,0xe9,0x66,0x04,0x39,0xf2,0x00,
+  0x5c,0x86,0xc5,0xda,0x9c,0xa8,0xf8,0xdf,0xc9,0xa8,0x9f,0xd3,0x9e,0xe5,0xd3,0xf0,
+  0x19,0xdc,0x6a,0x7a,0x3c,0x92,0xf8,0x27,0xed,0x02,0xfc,0xb3,0x56,0x1a,0x4c,0x3f,
+  0x5d,0x54,0xc8,0x89,0xd3,0x08,0x7b,0xc4,0xc2,0xd0,0x2b,0x70,0x83,0x96,0xd5,0x2f,
+  0xe6,0xc2,0x8b,0x28,0xdf,0x96,0x45,0x45,0x4b,0xfe,0x97,0x72,0x56,0x8b,0x05,0x9d,
+  0xd1,0x48,0x07,0x8a,0xc1,0x43,0x84,0xd3,0xb0,0xc5,0x15,0x24,0x12,0x2c,0x23,0x8e,
+  0x06,0xa2,0xb6,0x6f,0x28,0x74,0x82,0x6c,0xe5,0xff,0xd0,0xb4,0x5e,0x7d,0xaf,0xaa,
+  0x2f,0x97,0xaf,0xf3,0x4b,0x12,0xbe,0xef,0x5d,0xf8,0xbe,0xab,0xc2,0x0d,0x52,0xbc,
+  0xf6,0x2e,0xc4,0x7b,0xac,0x01,0x81,0xb7,0x99,0xef,0x66,0x89,0x7f,0xd1,0x83,0xf0,
+  0xae,0x96,0x11,0xcd,0xc2,0xf5,0x57,0xdd,0x5a,0x5e,0x94,0xac,0x82,0x66,0xe9,0x9b,
+  0x78,0x65,0x56,0x21,0x6b,0x86,0x9d,0x66,0x3e,0x9d,0x25,0xfe,0xc5,0xbd,0x55,0xde,
+  0x6a,0x7c,0xbb,0xc2,0xbc,0x51,0x98,0xa5,0x15,0x23,0xd0,0x65,0x88,0x6f,0xab,0x67,
+  0x45,0x73,0x38,0xff,0x27,0x7b,0xe5,0x32,0x9e,0xff,0x35,0xb1,0x3e,0x9d,0x9c,0xff,
+  0x43,0x2b,0xeb,0xb3,0x6e,0xe0,0xf8,0x47,0xf2,0x05,0x38,0x10,0x62,0x9c,0xff,0xf3,
+  0x35,0x13,0x11,0xd9,0xf9,0x95,0x46,0x6b,0xfc,0x6b,0x9c,0xe4,0xdc,0x84,0xeb,0x3f,
+  0xa8,0x75,0x09,0x8e,0x86,0xaf,0xe7,0xd3,0x38,0xad,0xe0,0xb4,0x2b,0x13,0x7f,0x52,
+  0x47,0x6a,0xfe,0x97,0x4b,0x3d,0x42,0x76,0x86,0x5d,0x71,0x14,0xcb,0x47,0x98,0xb3,
+  0x61,0xc9,0x6a,0x12,0xc9,0xbc,0x42,0x4a,0x18,0x75,0x85,0xbb,0xd9,0xc6,0x90,0x33,
+  0x9c,0xd5,0xee,0x4d,0x89,0x7f,0xc1,0x21,0xad,0x70,0x1b,0xbd,0x35,0x6c,0x87,0x1d,
+  0x50,0x67,0xdc,0x78,0x5d,0xba,0x9d,0xb6,0x43,0x91,0x81,0x16,0xd9,0x37,0xc9,0xcf,
+  0x7a,0x5d,0xf3,0x51,0x43,0x59,0xe3,0x5f,0x33,0x61,0x1f,0x14,0x32,0x54,0xfa,0xf7,
+  0xc3,0xfe,0xc8,0x5c,0xe3,0xa7,0x9a,0xff,0x39,0x6d,0x9f,0x50,0x6c,0xb8,0xea,0xc9,
+  0xe9,0xec,0x7f,0x83,0x5d,0x86,0xad,0x1e,0xac,0xf1,0xaf,0xeb,0x78,0xb6,0x57,0x3e,
+  0x7d,0x43,0x9c,0x35,0xf3,0x5c,0xd3,0x6d,0x03,0xff,0x6d,0x79,0xce,0x2c,0xfd,0x29,
+  0xb6,0xe8,0xbc,0xbd,0x5c,0xfc,0x1a,0xfc,0x81,0xdd,0x16,0x77,0xa4,0xc4,0xbf,0x32,
+  0x3b,0xe0,0xa2,0x7a,0x88,0x6d,0x6a,0x93,0x77,0x4b,0x17,0xa1,0xec,0xe4,0xcd,0x51,
+  0x72,0x92,0xe1,0xf9,0x3a,0x63,0x12,0x3b,0xdf,0x82,0x32,0x8d,0xc7,0xbf,0xc8,0xc4,
+  0xfa,0x70,0xfe,0xcf,0x58,0x7f,0x69,0x68,0x69,0x9d,0xf8,0x08,0x7c,0xc6,0x2a,0x06,
+  0xb2,0xce,0xa0,0xda,0xfa,0xbb,0xa8,0x6f,0x20,0x0b,0x11,0x11,0x5c,0x6e,0x28,0x1d,
+  0x70,0x1c,0x14,0x0d,0x8b,0xff,0xa7,0x0d,0xf6,0x34,0x14,0x28,0x81,0x95,0xe2,0xfd,
+  0xda,0x70,0x54,0x1d,0x94,0x83,0x05,0xf7,0xc3,0xbf,0xc7,0x2b,0xe3,0x99,0xf5,0xe2,
+  0xfd,0xf0,0x4b,0x98,0xcb,0xe4,0x22,0x0b,0xff,0x19,0xa0,0x0d,0xf6,0xa9,0xf9,0xd2,
+  0x5c,0x03,0xdf,0x77,0x1f,0x9d,0x6b,0xfc,0xe4,0x4b,0x68,0xb8,0xad,0x87,0xef,0x70,
+  0xff,0xfc,0xcc,0xd0,0x01,0xc8,0x3f,0xfa,0x77,0x41,0xa7,0x61,0xe1,0xff,0x9c,0x84,
+  0x18,0x38,0x21,0x20,0xa0,0xfc,0xd1,0x1b,0x38,0xad,0xd7,0xb6,0x14,0x36,0xc3,0x6a,
+  0x43,0xf0,0x90,0x3b,0x60,0xaf,0xdf,0x75,0x9e,0x3b,0xf6,0x53,0xf8,0x3f,0x28,0x6d,
+  0x9a,0x32,0xbb,0xe5,0xd5,0x52,0x77,0x74,0x91,0x91,0xa5,0x88,0x95,0xd2,0x31,0xf8,
+  0xa1,0xc9,0xef,0xe5,0x82,0x74,0x18,0x07,0x1f,0x58,0xf0,0xcf,0x10,0x5c,0xd4,0x8e,
+  0xb4,0x6d,0xd2,0xe5,0x21,0x18,0xa9,0x46,0xfb,0xb4,0x4d,0xdc,0xad,0x8d,0xc2,0x0d,
+  0x9c,0x2f,0xfd,0x73,0x18,0xed,0x7b,0x84,0x5f,0xb1,0xe2,0x9f,0x0b,0xf4,0x0a,0x7c,
+  0x97,0x2d,0x5d,0xde,0xf8,0x30,0x8c,0xe9,0x0b,0x8d,0xcc,0x33,0x39,0x0f,0xe3,0xc1,
+  0xf4,0x18,0xad,0x9f,0x88,0xf5,0xf0,0x3b,0xd8,0xa9,0x6f,0x8a,0x5b,0xe3,0x5f,0xb5,
+  0xab,0xe0,0x50,0x9f,0x53,0xa7,0x0d,0x3c,0x5e,0x43,0x55,0xc3,0xd6,0x86,0x82,0x7d,
+  0xb3,0x51,0xc4,0x61,0x0c,0x91,0x1a,0x7a,0x9c,0xe7,0x97,0x1c,0x4e,0x8d,0x7f,0x41,
+  0x8c,0x07,0x7d,0xf4,0x0d,0x6e,0xe8,0x86,0x39,0x46,0xde,0x8f,0xc9,0x6a,0x3c,0x38,
+  0x26,0xec,0xf9,0x07,0x68,0x6e,0x2e,0x0a,0xc8,0xa9,0xf8,0x27,0x0d,0x62,0xf9,0x2a,
+  0xa7,0xcd,0xd8,0xa1,0x5b,0x72,0xf6,0xd9,0x38,0xed,0x67,0x73,0xa8,0xae,0x9f,0x7a,
+  0xb2,0x39,0x1e,0x70,0x19,0x3f,0x2d,0xb5,0xe6,0x7f,0x65,0x7e,0x03,0x2e,0xdc,0xeb,
+  0x84,0x56,0x43,0x2c,0xae,0x1d,0xa9,0x5f,0x78,0x06,0xb5,0xc9,0xc3,0x30,0xaa,0x95,
+  0x22,0x6c,0x13,0x43,0xf4,0x2d,0x9e,0xaf,0x14,0x6b,0xb4,0xc4,0xbf,0x6e,0x1a,0x63,
+  0x23,0x65,0x26,0xc8,0x19,0x8b,0x8e,0x84,0xaa,0x4e,0x39,0x82,0xfc,0x7d,0x3d,0x55,
+  0x27,0x51,0xad,0x0f,0xdb,0xc6,0x60,0x21,0x38,0x8e,0xe6,0x58,0xfd,0x3f,0x9f,0x23,
+  0xc8,0xa9,0xea,0xc8,0x8c,0xdb,0xbe,0x07,0x57,0x6b,0x4b,0xf3,0xc5,0x9e,0xcd,0x0f,
+  0x29,0x7d,0xec,0x0b,0x24,0x73,0x58,0xf4,0xb0,0x33,0x50,0x1a,0x72,0xbc,0x9f,0x82,
+  0x7f,0xce,0x41,0x04,0x61,0x0f,0xd5,0xc9,0x93,0x06,0xc2,0x3c,0x95,0xae,0x23,0x73,
+  0x68,0xc4,0xe5,0xf4,0x44,0x3a,0x49,0xc1,0xbd,0xcd,0xd1,0x22,0x4d,0xd6,0x9d,0x56,
+  0xfc,0xd3,0x8b,0xdf,0xac,0x24,0xd2,0xec,0x7c,0xc9,0xf0,0xec,0x74,0x3a,0xc1,0x46,
+  0x08,0xcf,0x1f,0x71,0x41,0x27,0x07,0x7e,0xdc,0xdf,0x85,0xe8,0xdf,0xca,0xff,0xe9,
+  0x20,0x91,0x48,0xc9,0x51,0xbc,0xbf,0x8e,0x30,0xb2,0x5d,0xa3,0xdb,0x88,0x9b,0x20,
+  0xac,0x92,0xe8,0x76,0xa2,0xb2,0x96,0x9e,0x6f,0x57,0xcb,0x7a,0xba,0x05,0xff,0xcc,
+  0x78,0x09,0xfa,0xc2,0xbe,0x68,0x66,0x2c,0x67,0x95,0x72,0x09,0x3c,0xab,0x1c,0xad,
+  0xe2,0x9d,0xf4,0x58,0x9b,0xcd,0x93,0x59,0x2e,0xbb,0xd8,0x31,0xc3,0x6b,0xbc,0xaa,
+  0x17,0x58,0xf1,0xcf,0x01,0x4e,0x02,0xef,0xdd,0x74,0xa8,0xe6,0x7f,0xb8,0x50,0xad,
+  0xb3,0x65,0xc1,0x1b,0xc7,0xa4,0x31,0xf0,0xa9,0x8e,0xb8,0x78,0x1c,0x86,0xa5,0xaa,
+  0x55,0x38,0xb0,0xc6,0xbf,0x3a,0x58,0x5f,0xa0,0x22,0x9a,0xb5,0x0f,0xf5,0xe3,0x25,
+  0xc5,0xa7,0x2d,0xd3,0x6b,0x7e,0x8f,0x12,0xaf,0x5e,0x29,0x66,0xa2,0x0b,0x8e,0x85,
+  0xb2,0x8d,0x4d,0xba,0x68,0xcd,0x7f,0x2f,0x84,0x48,0x44,0x35,0x68,0x14,0x4f,0xd2,
+  0xf3,0xdc,0x0d,0xd8,0x46,0x3e,0x0c,0xee,0x0d,0xae,0x7c,0x1b,0x11,0xf2,0x6e,0xd8,
+  0xc0,0x9c,0x75,0x4b,0x7e,0x2e,0x7a,0xad,0xf9,0x5f,0xc0,0x7a,0x71,0x9b,0xe9,0x24,
+  0x13,0x0e,0x6f,0x70,0x77,0xc9,0xb7,0x86,0x0d,0xe8,0x52,0x5c,0x3c,0x5e,0x23,0x81,
+  0xae,0x15,0x6a,0xb2,0xcb,0xbf,0xc6,0x8a,0x7f,0x48,0x93,0x9e,0xdf,0x19,0xf9,0x96,
+  0x6d,0x96,0x74,0x60,0x73,0x71,0x41,0xcb,0x72,0xf2,0x1a,0xec,0xdf,0x31,0x37,0x8e,
+  0xf8,0xea,0xc7,0xca,0x93,0xbb,0x66,0xbf,0x27,0x0f,0xa2,0x62,0x9e,0xb8,0x7f,0x80,
+  0x4a,0xaa,0xa1,0x57,0x18,0x25,0xb9,0xa2,0xbd,0xef,0x53,0xa9,0x92,0x39,0x0a,0xc5,
+  0x17,0x11,0x08,0x75,0xf6,0xda,0x55,0x51,0x22,0x67,0xf5,0x7d,0xda,0x32,0xb5,0xe5,
+  0x5e,0x0b,0xfe,0x69,0x85,0xb1,0xe9,0xcf,0x47,0x1c,0x46,0xcd,0x73,0x1c,0x16,0x6a,
+  0x8e,0x5f,0x15,0x5c,0x56,0x2f,0x09,0x0b,0x0d,0x12,0x32,0xf9,0xcf,0x8b,0x0c,0x47,
+  0x28,0x95,0xff,0xcc,0x49,0xb0,0x3d,0x3c,0x1b,0x91,0xd3,0xf6,0xfa,0x32,0x8d,0xfa,
+  0x5d,0xd1,0x4b,0x19,0x5e,0x63,0x99,0x9a,0xe3,0x86,0x6f,0x41,0xb6,0x61,0x4f,0xe5,
+  0x3f,0x6f,0xe7,0xd9,0x46,0x3c,0x49,0x36,0x17,0x0e,0xc0,0xdc,0xed,0xa8,0x4d,0xf2,
+  0xe8,0x11,0xc8,0x67,0x72,0xa8,0x60,0x39,0xac,0xe3,0xf8,0x27,0x44,0xac,0xfc,0x9f,
+  0x1f,0xc3,0x5a,0xf6,0x9d,0xf8,0xae,0xe5,0xf7,0xdc,0x0c,0x7b,0xa3,0xf9,0x9c,0xed,
+  0x7c,0x9d,0xfd,0x59,0x36,0xbb,0xbe,0x65,0xec,0xde,0x3b,0xa6,0x37,0xb0,0x82,0x78,
+  0x46,0x5d,0x4a,0xfc,0xeb,0x24,0x69,0x84,0x92,0x0e,0x6a,0x4f,0xcf,0xa2,0x87,0xc1,
+  0xd5,0x2f,0x2b,0x78,0xd0,0x0e,0x6b,0x9c,0x08,0x4d,0xee,0x79,0xa9,0x31,0xbd,0xbd,
+  0x77,0xae,0x9e,0xc2,0xff,0x89,0xc0,0x29,0xad,0x8a,0x15,0x0f,0x8a,0x15,0x5c,0x10,
+  0x75,0x3e,0xfa,0x81,0xec,0x82,0x8b,0xca,0x01,0xe6,0xf8,0x96,0xf8,0x7d,0xf8,0x48,
+  0xf3,0xb2,0xcc,0x29,0xfc,0x67,0x18,0x09,0xf8,0xc0,0xd1,0x50,0x9a,0xa0,0x3d,0x3b,
+  0xd6,0xe5,0xc4,0x4d,0x22,0x90,0xa3,0x89,0x27,0x82,0xe1,0xaf,0x52,0xf1,0x8f,0x32,
+  0xa0,0xbd,0xaf,0xfa,0xb4,0xac,0x68,0xe3,0x53,0x81,0x63,0xba,0xd7,0xef,0x50,0xf8,
+  0x42,0xa9,0x1e,0x4d,0x8a,0x8a,0x3c,0x75,0xda,0x5b,0x67,0x7f,0xdc,0xca,0xff,0x91,
+  0xfe,0x7e,0x02,0xed,0x14,0xa2,0x2e,0x71,0xf2,0xfd,0xe3,0xa6,0x07,0xb5,0x2e,0xad,
+  0xae,0x8d,0xc7,0xbf,0xb4,0x76,0x2d,0x33,0x6a,0xb3,0xfa,0x7f,0x66,0xd3,0x5d,0x38,
+  0x1f,0xc5,0x48,0xab,0x62,0xa6,0x29,0x6d,0xc6,0x3f,0x3c,0xa8,0x15,0x19,0xb6,0x68,
+  0xfa,0x2a,0x75,0xdc,0xff,0x93,0x9e,0xe2,0x7f,0x6e,0x14,0x78,0xd2,0x93,0x3f,0x13,
+  0x78,0xfe,0x7b,0x22,0x11,0xac,0xda,0xa5,0xd9,0x38,0x63,0xaa,0x01,0x20,0xf8,0x78,
+  0xae,0x35,0xfe,0x95,0x19,0x42,0x6d,0x56,0x09,0x59,0x40,0x74,0xce,0x0f,0x07,0x87,
+  0x2e,0xab,0x28,0xe8,0x7e,0x00,0x59,0x3a,0xe2,0x1f,0x7e,0x05,0xbf,0x6f,0x2a,0xff,
+  0xe7,0x32,0x54,0x55,0x4f,0x1b,0xcf,0x76,0xe7,0xf9,0x5f,0x1c,0x21,0x94,0x7e,0x29,
+  0x93,0x5f,0xb9,0xac,0x2d,0xe6,0xf8,0xe7,0x9b,0xd6,0xfc,0x77,0xf8,0x13,0x54,0xd6,
+  0xde,0xbd,0xe5,0xaf,0xbe,0xa7,0xde,0x9d,0xe3,0xad,0x16,0x5f,0x63,0x6e,0xbc,0x03,
+  0xd1,0xd2,0xa3,0x62,0x47,0xe4,0x8f,0xae,0xd2,0x5a,0xc7,0xaf,0x52,0xf0,0x0f,0xae,
+  0xb6,0x50,0x02,0x34,0x1c,0xce,0x97,0xce,0x78,0x8a,0x40,0x6e,0xe7,0x40,0x08,0x35,
+  0x0e,0x4a,0x6c,0x15,0x5a,0xa1,0x88,0xca,0x0c,0x52,0xf0,0x8f,0x19,0xed,0xca,0xc8,
+  0x49,0x6f,0x42,0x75,0x84,0xdb,0x20,0x7b,0x43,0x3a,0x1c,0xa4,0x2b,0x56,0x05,0x86,
+  0xc9,0x8f,0xb5,0xb5,0xa0,0x06,0xe4,0xec,0x3b,0xac,0xf8,0x67,0xf7,0xf4,0x5d,0x86,
+  0x3b,0x90,0xa7,0x84,0x9f,0x84,0xc7,0xa1,0xc8,0xdf,0x82,0x1f,0x22,0x78,0x10,0xda,
+  0x43,0xb4,0x3f,0xbc,0x0f,0x1e,0xd5,0x6c,0x9a,0x18,0xd5,0x52,0xf1,0xcf,0x41,0xc3,
+  0x17,0xca,0xdc,0x9e,0xc3,0x89,0x5e,0x5e,0x4d,0xde,0x26,0xce,0x81,0xd1,0xa8,0x37,
+  0xe8,0x6e,0x13,0x9f,0x24,0x28,0x7f,0xf8,0xfb,0x0e,0x5a,0xf9,0x3f,0x85,0xa3,0x3c,
+  0xc9,0x7d,0x8b,0xbc,0x0a,0x3e,0x11,0x71,0x90,0xdd,0x78,0xae,0xdc,0x0c,0x84,0x6d,
+  0x17,0x57,0xb1,0x5f,0xe9,0x66,0x44,0x2c,0x05,0xff,0x08,0x23,0x81,0x32,0xc8,0x6c,
+  0xaa,0xd6,0xd4,0x3e,0x27,0x47,0x3b,0x5f,0x57,0x61,0xc4,0x56,0x29,0xd8,0x59,0x8d,
+  0x06,0x27,0xcd,0x8c,0x3c,0x71,0x43,0x8a,0xff,0xe7,0x08,0x38,0x59,0x9d,0x4e,0x2b,
+  0x3c,0xbf,0x30,0xda,0xa3,0x59,0x43,0x68,0xc8,0xef,0xd7,0x1e,0x61,0x2e,0x15,0x5c,
+  0x74,0x03,0x94,0xe9,0x4b,0x06,0x44,0x2b,0xff,0xf9,0x6e,0x6d,0x6f,0xb4,0x90,0x4b,
+  0x9b,0x2c,0xa1,0x01,0x8f,0xc9,0x8d,0x78,0x5e,0xe8,0x9e,0x2f,0xf1,0x78,0x31,0xdc,
+  0x93,0x16,0x26,0x9d,0xc6,0x8d,0x3e,0x4b,0xfc,0x4b,0x17,0x72,0xe1,0x39,0x56,0x60,
+  0x44,0x86,0xd3,0x73,0xe1,0x49,0x5b,0xbe,0x76,0xc3,0x7d,0xd9,0x8a,0xba,0x0f,0xe5,
+  0x79,0xde,0x30,0xb9,0x09,0xc2,0x50,0xdc,0x2f,0xaf,0xce,0x76,0xa5,0xe0,0x9f,0x67,
+  0xc3,0xb7,0xbe,0x6b,0x7f,0x24,0xec,0x83,0x93,0x6c,0x7e,0xdc,0x31,0x48,0x78,0x44,
+  0xac,0x38,0x6e,0xaf,0x13,0xef,0x22,0x2f,0xb3,0xdb,0xce,0x3a,0x46,0xe4,0x6f,0x5b,
+  0xfc,0x3f,0x1d,0x02,0x47,0x3b,0xd4,0x3b,0x4d,0x47,0xfb,0xd4,0x77,0x2f,0x2a,0xb2,
+  0xb3,0x74,0x0c,0x81,0xae,0xa8,0xa2,0x60,0xbb,0x04,0xfb,0xab,0x11,0x0f,0xf8,0x2d,
+  0xfc,0xe7,0xd7,0xb5,0xa1,0x68,0xd5,0xbb,0x99,0xa3,0xe4,0x07,0x81,0x57,0xd9,0xcd,
+  0x3b,0x38,0xff,0x99,0x5e,0x66,0xf3,0xe2,0xee,0xe5,0x05,0x65,0xf4,0x25,0x56,0x1a,
+  0x77,0x74,0xa7,0xf0,0x7f,0x7e,0xac,0xb3,0xfa,0x79,0x7d,0x91,0xef,0x92,0xbc,0xde,
+  0xdf,0x40,0x31,0x20,0xfa,0xfd,0x6d,0xee,0xbe,0xee,0x62,0x4a,0x83,0xfe,0x5c,0x05,
+  0xe5,0x4f,0xaf,0xfc,0x81,0x95,0xff,0x0c,0x6d,0x0d,0x1d,0xda,0x77,0x8c,0xeb,0xeb,
+  0xb3,0xee,0x83,0x26,0x14,0x5c,0x72,0xc8,0x4c,0x7b,0x77,0x1b,0x19,0x1a,0x89,0xc2,
+  0x01,0x86,0xf8,0xd9,0x6f,0xf5,0xff,0xe4,0xf6,0x52,0x16,0x2d,0xe9,0xa7,0xcf,0xe2,
+  0xc5,0xad,0xe0,0xa6,0xb2,0xce,0x69,0xbd,0xcc,0x9d,0x97,0x61,0x27,0x8c,0x6d,0xd5,
+  0xf4,0x5a,0x59,0x4d,0xe1,0x3f,0x77,0xc0,0xfb,0xa4,0xca,0x78,0x74,0x04,0x61,0xc6,
+  0x31,0xce,0xe7,0x89,0x36,0x7e,0x84,0xfb,0xc7,0x17,0xcf,0xdc,0x2f,0xfe,0x1b,0x4a,
+  0x18,0x6f,0xdc,0x91,0xca,0x7f,0x1e,0xe0,0x49,0xa6,0x2f,0x99,0x49,0x5e,0xa3,0x3c,
+  0x1a,0xd8,0xd6,0x78,0x56,0x1b,0xa9,0xae,0x54,0xef,0x89,0x89,0xf7,0xc0,0xa0,0xfe,
+  0x48,0xcf,0x14,0xfe,0xf3,0x05,0xdc,0x24,0xdc,0x5b,0xd2,0xe0,0xc6,0x3f,0x2d,0xed,
+  0xcb,0x8a,0x8b,0x8f,0xe8,0x57,0xa5,0x2a,0xc3,0x1e,0x6a,0x74,0xc1,0x8b,0x6c,0x21,
+  0x67,0x04,0x59,0xf0,0x0f,0xa0,0x3e,0x62,0x4e,0x23,0x10,0x13,0x43,0xca,0x60,0xbb,
+  0x33,0xd2,0xb2,0x6d,0xa5,0x4a,0xbb,0xe3,0x25,0x50,0xa7,0x93,0x4e,0xa5,0x99,0xa8,
+  0x9a,0x6b,0x9b,0xa8,0x27,0xf1,0x8f,0x30,0x07,0x22,0x2a,0xcf,0x2e,0x21,0x9d,0xd2,
+  0x61,0x4e,0x8c,0xd9,0xb6,0x4e,0x85,0xc7,0xd9,0x03,0x86,0x29,0xc1,0x22,0x0a,0x02,
+  0xa1,0xce,0xb0,0x15,0xff,0x14,0xb2,0x08,0x84,0x38,0xdb,0xa7,0x0f,0x74,0xfc,0x4f,
+  0x86,0xbb,0x00,0x62,0xda,0x6a,0x4e,0x83,0x69,0x4a,0x63,0x1a,0xce,0x57,0x2d,0xf2,
+  0x07,0x32,0x57,0xb1,0x3e,0x8d,0xd3,0x96,0xe4,0x0e,0x1e,0x7f,0xd7,0xee,0x61,0x39,
+  0x6a,0xee,0x88,0x56,0xd2,0x63,0x67,0x05,0x2a,0x1c,0xd3,0xca,0x78,0x7c,0xc1,0x8a,
+  0x7f,0xe2,0xfe,0x31,0x97,0xe9,0xcd,0xa8,0x47,0xa8,0x68,0x02,0xa1,0x61,0x9c,0x3f,
+  0x4f,0xe0,0x03,0xe5,0xb2,0x80,0x1a,0xad,0x57,0xec,0xb4,0xe0,0x9f,0x31,0x36,0x06,
+  0xf3,0xe3,0x77,0x9f,0x2f,0xf8,0x5b,0x9e,0x06,0xc5,0xdc,0xc3,0x5f,0xa8,0x84,0x13,
+  0x0d,0x15,0x71,0xc7,0xeb,0x39,0x0b,0x22,0x97,0xd5,0x2a,0xdc,0x3f,0x5f,0xb7,0xe2,
+  0x9f,0xb7,0x11,0x24,0x3b,0xe3,0x81,0x67,0x49,0x11,0x6c,0x3a,0x5a,0x12,0x8d,0x7c,
+  0xd6,0x7e,0x93,0xd6,0x52,0x54,0x12,0x97,0xb7,0x12,0xb7,0x71,0xd0,0xc0,0x41,0xaa,
+  0xff,0xe7,0x15,0x8e,0x87,0xb9,0xf5,0xdd,0x89,0x86,0x7f,0x49,0x13,0xf5,0xfa,0x4d,
+  0x3e,0x58,0x4f,0x8b,0x27,0x5b,0x52,0xf7,0x2a,0x26,0xd1,0xc5,0x82,0x7f,0xa6,0xef,
+  0x86,0x83,0x52,0x7b,0x9c,0xf2,0x68,0x63,0x0b,0x94,0x34,0x45,0x62,0x4e,0x3b,0x1f,
+  0xf4,0xdc,0xd8,0x89,0xff,0xe2,0xa1,0x44,0x6a,0xbc,0x95,0xff,0x3c,0xc4,0x61,0xcf,
+  0x43,0x77,0xc7,0xe4,0x08,0x27,0x86,0x65,0xdb,0x3d,0x39,0x9c,0xff,0xfc,0x03,0x63,
+  0xd9,0x21,0x71,0x1e,0xbd,0xa4,0xf3,0x7c,0xc0,0x69,0x56,0xfc,0xf3,0x1c,0x5c,0xed,
+  0xe0,0x24,0xde,0xf9,0xdd,0x0c,0xf5,0xbb,0x2a,0x9a,0x6e,0x1f,0xdc,0x81,0x37,0xc7,
+  0x65,0x9e,0x5f,0x60,0x2e,0x9d,0x15,0xff,0xec,0x86,0xdf,0x43,0x85,0xdf,0xbe,0x57,
+  0x74,0x69,0x27,0x38,0xcd,0x23,0x26,0x0e,0x85,0xcd,0xf8,0x23,0x47,0x44,0x27,0x88,
+  0x99,0x88,0x67,0xf5,0xff,0x2c,0x0e,0xb4,0x04,0x9d,0xfd,0xae,0x0b,0xc2,0x77,0xb4,
+  0xdf,0x21,0x86,0x96,0x3f,0x79,0xed,0x2a,0x6b,0x81,0x07,0x0c,0x59,0xcf,0xe6,0xf5,
+  0x37,0xcc,0x8c,0xb6,0x14,0xfe,0xb3,0x5f,0x57,0xea,0x0c,0xba,0xcf,0x6f,0xe3,0xcb,
+  0xa2,0xc9,0x95,0x78,0x5e,0x1a,0x89,0x8b,0xf3,0xe7,0x7b,0x71,0x3b,0x9a,0x8a,0x3b,
+  0xc5,0xff,0x93,0xf1,0x68,0x53,0xc1,0x00,0x5d,0xe3,0xff,0x01,0xa7,0xfd,0x7c,0x43,
+  0xfe,0x3e,0x79,0x07,0xd6,0x37,0x15,0x9f,0x95,0x79,0x20,0x6c,0x2d,0xcf,0x90,0xfa,
+  0xc1,0x14,0xfe,0x73,0x5c,0x2d,0x37,0xec,0x1e,0x91,0x46,0x5f,0x68,0xaa,0x54,0x1d,
+  0x1e,0xf1,0xa4,0xf0,0x02,0xab,0x1c,0x9a,0xa6,0x8a,0xb5,0xe4,0x28,0xc4,0x0c,0x47,
+  0x45,0x0a,0xff,0xf9,0xe7,0xda,0xb3,0x7c,0x11,0x3e,0x69,0x1c,0xe4,0xde,0x30,0x69,
+  0xd9,0xb0,0x78,0x19,0xae,0x2a,0x78,0x85,0xf3,0x5d,0xc7,0xf8,0xe0,0x13,0xb1,0x7f,
+  0xd2,0xfe,0xea,0x4c,0xfb,0x10,0x4e,0xac,0x2a,0xe7,0xd9,0xee,0x7d,0xd2,0x89,0xe8,
+  0x21,0xe6,0xde,0x9b,0x53,0x6c,0xf0,0xf5,0xd9,0xa4,0xd7,0x7c,0x80,0x1a,0xd3,0xcc,
+  0xc7,0xb4,0xe2,0x9f,0x5f,0xc2,0xa3,0x4a,0xbe,0xf1,0xe8,0x43,0xf8,0x90,0xeb,0x95,
+  0x02,0x46,0x1f,0x24,0x33,0xd9,0x6f,0xd0,0x7e,0x94,0x35,0xbc,0xd2,0x94,0xc8,0x27,
+  0xb5,0xe2,0x1f,0x9e,0xed,0x3e,0x97,0x47,0xbb,0x2e,0x42,0x23,0xcb,0x7f,0x37,0x83,
+  0xa7,0xa5,0x98,0x7c,0xef,0xba,0xf0,0x51,0x75,0x9d,0x49,0xfc,0x4e,0xc1,0x3f,0x43,
+  0xd0,0xa8,0xe9,0x7a,0x46,0xcc,0xd9,0xc7,0xc3,0x5e,0xf1,0x0c,0x4f,0x91,0x3b,0x6b,
+  0xab,0x84,0xdb,0x2c,0x9d,0xf4,0x00,0x33,0xcc,0xfd,0x66,0xc5,0x3f,0x9d,0xe4,0x94,
+  0xb1,0x68,0xeb,0x52,0x3d,0xfb,0x4c,0xe8,0x38,0x2c,0xda,0x77,0xa7,0x8e,0xb0,0xf6,
+  0x38,0x17,0x2c,0x83,0xe2,0x45,0x38,0xa5,0x9b,0x19,0x28,0x29,0xf8,0x47,0x19,0x59,
+  0xce,0x49,0x3e,0x05,0x67,0x4d,0xb7,0x4f,0x96,0x64,0x12,0x81,0x7c,0x82,0x83,0xd5,
+  0xc4,0xe7,0x8c,0xd0,0x6b,0xf2,0xbf,0x06,0xc6,0x93,0x80,0x72,0x0a,0x95,0x3b,0x81,
+  0xa7,0xbd,0x8b,0xdc,0x9f,0x63,0xaa,0xc5,0xf1,0x7c,0xa8,0xd4,0xfc,0xaf,0x55,0xc4,
+  0x24,0xe1,0x44,0xc9,0x1c,0xb6,0x4b,0x2a,0xd1,0x36,0xfc,0x98,0xe7,0x7f,0xa1,0xd9,
+  0x2b,0x47,0xc7,0x89,0x3d,0x29,0xf5,0x7f,0x78,0xfc,0xab,0x99,0xb5,0x6b,0xb6,0xcd,
+  0xfe,0x42,0xc6,0x81,0x50,0x24,0xea,0x2c,0xd4,0x77,0x24,0xf2,0xb5,0x87,0x26,0xe6,
+  0xa7,0xfa,0x7f,0x1a,0x34,0x67,0xc8,0x86,0xb0,0x47,0xda,0x41,0xdc,0xc1,0x1b,0x78,
+  0xfc,0x6b,0x47,0xb5,0x99,0x08,0x9f,0x20,0xc6,0x20,0x62,0xb4,0xe6,0x7f,0xad,0xc0,
+  0xd5,0xf0,0xc2,0x3d,0xcc,0xa6,0x9a,0xd5,0x8d,0x78,0xfc,0x8b,0x0c,0x9a,0x6a,0x77,
+  0x3a,0x27,0x02,0x99,0xef,0x6b,0xcd,0xff,0x7a,0xaf,0xe9,0xb2,0x56,0xa5,0xfd,0xbc,
+  0x6d,0x9c,0xff,0x3c,0xaf,0x4d,0x7c,0x8f,0x67,0xb8,0x73,0x20,0xf4,0x19,0xbd,0xac,
+  0x25,0x18,0x2f,0x56,0xfc,0x63,0xfc,0x56,0x2b,0xe5,0xbf,0xbd,0xc0,0x89,0xc4,0x01,
+  0xfb,0xeb,0xe2,0x02,0xf6,0x7e,0x62,0x7d,0x0a,0xb5,0x63,0x2e,0x73,0x7e,0x8a,0xff,
+  0xc7,0x88,0x68,0x4e,0x68,0x69,0xca,0x8e,0x93,0x08,0x94,0xdc,0x70,0x57,0x18,0x35,
+  0x52,0xa7,0xda,0x0e,0x72,0x18,0x37,0x71,0x44,0x33,0x19,0x41,0xa9,0xf8,0x67,0x73,
+  0x08,0x8d,0xac,0xeb,0xf8,0x69,0xd2,0xdc,0xb5,0x19,0xd7,0xe1,0xfb,0xee,0xa2,0xaa,
+  0xb6,0x64,0xe6,0xd1,0xb4,0x86,0x86,0x89,0xf7,0xb5,0xf2,0x7f,0x9a,0x51,0x9e,0xe3,
+  0xa2,0x7d,0x98,0xde,0x9c,0x56,0x12,0x94,0xb9,0xff,0x67,0x17,0xac,0x34,0x89,0xe8,
+  0x22,0xcf,0xbf,0xbb,0x31,0x3a,0xc5,0xff,0xf3,0x06,0x78,0xb9,0x1b,0xe7,0x65,0x7f,
+  0x33,0xf8,0x82,0x99,0xfc,0xfb,0x9e,0xc5,0xe7,0xdf,0xb4,0x4d,0x2c,0x34,0x8e,0x19,
+  0xfc,0xf9,0x0b,0x52,0xf0,0x8f,0x3a,0x1a,0x49,0x2c,0x82,0xca,0x61,0x8f,0xc9,0x07,
+  0x7b,0x83,0xf3,0xc1,0xb2,0xe5,0x73,0x30,0x6a,0xe2,0x9f,0x69,0x56,0xfc,0xc3,0xa0,
+  0x4f,0xf1,0x65,0x3b,0x58,0xa3,0x2a,0xd5,0x25,0xa2,0xab,0x80,0xaa,0xa3,0x8c,0x2f,
+  0x7b,0x3e,0xf4,0x69,0xe6,0xfa,0xa7,0xf0,0x9f,0x61,0x23,0xcc,0x8b,0xca,0x83,0xa4,
+  0xbc,0xf0,0x22,0x94,0x34,0xc8,0x71,0x5b,0xb9,0x99,0x11,0x26,0x27,0xf2,0xbf,0x78,
+  0xfd,0x96,0x95,0x56,0xff,0xcf,0xed,0xd0,0x62,0xac,0x8e,0xca,0xe5,0x44,0x36,0xf3,
+  0x91,0x79,0xbe,0x2d,0x24,0x12,0x27,0xc9,0x6e,0xae,0xc1,0xf9,0xc0,0xea,0xff,0xa1,
+  0xbc,0x48,0x4e,0x3f,0x8a,0xa9,0xfb,0x39,0xed,0xa7,0x4f,0x06,0xa2,0x28,0xeb,0x3d,
+  0xb3,0x0d,0xb9,0x94,0xf0,0x54,0x71,0x7e,0x7e,0x9d,0xa9,0xfe,0x1f,0xce,0x76,0x76,
+  0xf0,0xb4,0xf7,0x3f,0xb0,0xc5,0x67,0x1d,0x75,0xa2,0x0f,0x5e,0x8d,0xdd,0xca,0xaf,
+  0x3c,0x11,0xfe,0x4d,0xe2,0x57,0x56,0xfe,0x73,0xa7,0x34,0x9a,0xe6,0x43,0x25,0x3e,
+  0xcb,0x9e,0x48,0x7b,0x8f,0x8a,0x71,0x7a,0x49,0xe5,0x66,0xbe,0xfc,0xa1,0x49,0x74,
+  0x49,0xe5,0x3f,0xa7,0x7d,0xae,0x1d,0x8b,0xce,0x1f,0xb0,0x8f,0x22,0xec,0x39,0xc1,
+  0xbc,0xef,0x3a,0x78,0xd9,0x9f,0x57,0xc3,0xbe,0xf8,0xa6,0x51,0xf1,0xaa,0x7a,0x35,
+  0x91,0xff,0x6e,0xe4,0x5a,0xf8,0x3f,0xd0,0xb4,0x23,0xbf,0x37,0xf3,0xeb,0xe2,0x13,
+  0xfa,0xce,0xd8,0xdc,0x01,0x14,0x3b,0xfd,0xda,0x7a,0xb5,0x78,0x10,0xc5,0x08,0x07,
+  0x36,0x8b,0xb9,0xfc,0xb1,0xfa,0x7f,0x72,0x61,0x2d,0x29,0x30,0xee,0xac,0x27,0xcf,
+  0x35,0x35,0x0a,0xf9,0x06,0xee,0x36,0x9e,0xaf,0xf1,0x9d,0x3e,0xf9,0xbb,0xe4,0x6d,
+  0xed,0x40,0x42,0x5e,0xa5,0xfa,0x7f,0x1a,0x7a,0xf4,0x5f,0x65,0x00,0xd9,0xc4,0x76,
+  0x42,0x9d,0x81,0xbb,0xcb,0x80,0x46,0xc9,0x5c,0xc6,0x93,0x2b,0xf6,0x6a,0x09,0x62,
+  0xa7,0xd5,0xff,0x93,0x7e,0x22,0xd2,0x55,0x8f,0xf6,0xe3,0x46,0x38,0x81,0x40,0xc5,
+  0xc1,0xf9,0x4e,0xaf,0x02,0xae,0xc0,0x15,0xf1,0xaa,0x49,0xf4,0x75,0xc4,0x6a,0x92,
+  0xfb,0x81,0x69,0x08,0x02,0xd5,0x23,0xf5,0xa8,0x7d,0x76,0xc3,0x25,0x09,0xa7,0x75,
+  0x98,0x7c,0x54,0x9f,0x71,0x73,0x17,0x27,0x4a,0x29,0xd7,0xe4,0x7f,0x8d,0xa1,0xda,
+  0xaa,0xf2,0x37,0x0d,0xcb,0x8b,0x79,0xf6,0xae,0xe1,0xb8,0x4b,0xbc,0x97,0x25,0xf8,
+  0x3f,0x05,0x63,0xf0,0x27,0x7b,0x82,0xff,0xac,0x25,0xe3,0x5f,0x75,0xd0,0xc2,0x0a,
+  0xeb,0xe9,0x3e,0xe7,0x6c,0xc5,0xa4,0xf1,0xec,0x26,0x3a,0x1b,0xe7,0xff,0x0c,0x99,
+  0x8c,0xe8,0x29,0xf9,0xef,0x76,0x94,0x3f,0x25,0xf1,0x1b,0x3c,0xe1,0xd5,0x26,0xed,
+  0xe7,0xa7,0xec,0x99,0xd5,0xca,0x35,0xf3,0xad,0xfc,0xe7,0x30,0x53,0x0b,0x8d,0x1b,
+  0x3c,0xc4,0xce,0x1a,0x15,0x3b,0xcf,0xc6,0x6d,0x95,0x50,0xf1,0x1d,0xbd,0xd1,0x9b,
+  0x9d,0x28,0xd4,0x26,0x7b,0xb2,0x2d,0xfe,0x1f,0xfb,0xd2,0x0e,0x14,0x0b,0x3d,0x1b,
+  0x63,0xf2,0x6a,0xe7,0x09,0xd5,0xd7,0x8b,0xeb,0x13,0x82,0x57,0x83,0xbe,0x33,0x8e,
+  0x2e,0x93,0x98,0xe1,0xe5,0x8a,0xd8,0x82,0x7f,0xee,0xde,0x0d,0x97,0x95,0x85,0x46,
+  0x5a,0xbf,0x78,0x12,0xae,0x86,0xaa,0x7a,0x1d,0x71,0xd1,0x24,0x42,0x1f,0xcf,0xdc,
+  0x53,0xc0,0x13,0xbd,0xf1,0xc5,0xcf,0x37,0x5a,0xfc,0x3f,0x33,0xae,0xc0,0xdb,0x6b,
+  0xab,0x56,0xed,0x3e,0x2a,0x66,0x73,0x36,0x14,0xc7,0x4b,0x9f,0xc0,0x25,0xb6,0x87,
+  0xda,0x5f,0x10,0xab,0xa0,0x55,0x9d,0x1f,0x7f,0x34,0x35,0xfe,0xf5,0x11,0x1c,0x0c,
+  0xa3,0x7d,0xda,0x94,0xad,0xb2,0x16,0xa3,0x7d,0xba,0xd8,0x4a,0xf2,0xed,0x97,0xb8,
+  0x07,0x2c,0x4c,0x28,0xfb,0x99,0xe1,0xec,0xcb,0x9c,0x12,0xff,0x82,0x28,0xac,0xd6,
+  0x68,0x7a,0x58,0x55,0xf7,0x6a,0xae,0x1b,0x64,0x89,0xf4,0xb0,0xc3,0x82,0xaa,0x50,
+  0xc1,0xef,0xc2,0xcf,0x59,0x77,0x74,0xee,0xd4,0xf8,0xd7,0x41,0x5e,0xed,0x44,0xd0,
+  0x56,0xb0,0x9f,0x81,0x53,0x97,0x3b,0xc9,0x1c,0xbe,0x8c,0x71,0x75,0x1b,0x9e,0xdf,
+  0x5d,0x68,0xd8,0x66,0x4c,0x89,0x7f,0xc1,0x1b,0x01,0x5f,0x9d,0xbd,0xb5,0x71,0x0e,
+  0x8f,0x0e,0xbb,0x1c,0x33,0xe5,0x3f,0xc0,0xa7,0xa2,0x37,0xd4,0xba,0x5d,0xb4,0xc3,
+  0xb1,0xea,0x72,0xa3,0x38,0x26,0xa6,0xe2,0x9f,0xcb,0xd1,0x2a,0x90,0xcf,0x88,0xfb,
+  0xe1,0x65,0x2e,0x96,0xf9,0x7e,0xfb,0x98,0xfe,0xb3,0x36,0x2f,0x8a,0xaf,0xf9,0x5d,
+  0x58,0x38,0x05,0xff,0xc0,0x6e,0xee,0xdf,0x0e,0xa2,0x91,0xdb,0xc1,0xde,0x02,0xdf,
+  0x72,0x7b,0xd3,0xcf,0xd4,0x6a,0xd4,0xef,0x4a,0xd6,0x93,0xdc,0xff,0x43,0x2a,0x78,
+  0xa0,0xcd,0x8a,0x7f,0xdc,0x70,0x5b,0xaf,0x93,0xd3,0xb6,0x5f,0x56,0x37,0x71,0x43,
+  0x7e,0x23,0xb9,0xe5,0xf6,0xb7,0x50,0x91,0xd1,0x1f,0x21,0x7e,0x7b,0x03,0xc8,0x4b,
+  0x99,0x29,0xf8,0x67,0xc6,0x52,0xd8,0xc3,0xe6,0x68,0x54,0xf5,0xf7,0xa0,0xd8,0x59,
+  0x3d,0x7c,0x97,0x9a,0x4d,0x51,0x83,0xaf,0xd2,0xb9,0x47,0xc8,0x60,0xe0,0x1e,0xb6,
+  0x4d,0xc1,0x3f,0xf0,0x4b,0xe3,0x96,0x55,0xae,0x6f,0x91,0xf3,0x64,0x7d,0x43,0x71,
+  0x3b,0xfd,0x3e,0xb9,0x4e,0x5b,0x1f,0x2b,0x5e,0x65,0x5b,0x3e,0xe7,0x06,0xe5,0xc7,
+  0x3d,0xb3,0xe3,0x19,0x53,0xf3,0xbf,0x3e,0xc9,0xdb,0x77,0x3b,0x55,0x44,0x83,0xbd,
+  0x50,0x58,0x09,0x45,0xb9,0x22,0xf8,0x1b,0xa3,0x0b,0xb6,0x6c,0x54,0x45,0x4a,0x0c,
+  0xa5,0xb2,0x6f,0x4a,0xfe,0xd7,0x73,0xf0,0x09,0xdc,0x56,0x3b,0x8d,0x87,0x4d,0x3f,
+  0x06,0xb3,0x10,0xe2,0x05,0x33,0x3e,0xf8,0xca,0xaf,0x78,0x44,0x55,0x5a,0x64,0xa4,
+  0xc6,0xbf,0xd2,0x78,0x51,0x0e,0x5f,0xc8,0xae,0xcb,0x59,0xfc,0xfc,0x72,0xfe,0x6a,
+  0x39,0x1f,0x40,0xa6,0x21,0x0e,0x29,0x23,0xc4,0xc7,0x13,0x39,0x53,0xfd,0x3f,0x5c,
+  0x68,0xb8,0x3c,0x62,0x2e,0xac,0x37,0x78,0xf4,0x41,0x7c,0x98,0xac,0x17,0xe6,0xf2,
+  0x44,0xe3,0x7e,0xd8,0xaf,0x17,0xf3,0x52,0x1b,0x56,0xfc,0xf3,0x04,0x1c,0x68,0xfa,
+  0x87,0x90,0xed,0x61,0xbf,0x8f,0xe3,0x9f,0x90,0x7c,0xbf,0x2d,0x9b,0x67,0x84,0xa9,
+  0xcd,0x75,0xe1,0x37,0x61,0x5f,0xac,0x98,0xbf,0x6f,0x8a,0xff,0x07,0xf6,0xf6,0xaf,
+  0xee,0xb1,0x3d,0xe7,0xb7,0x35,0xa0,0x18,0x0f,0xca,0x33,0x6d,0x7f,0xaf,0xe1,0xf9,
+  0xfa,0x1e,0x7d,0x82,0x1c,0xd7,0x62,0x3c,0x91,0x70,0x0a,0xfe,0x81,0xcf,0xb5,0xaa,
+  0xf6,0xac,0x01,0xb1,0x9c,0x07,0xca,0xda,0x51,0x3e,0x97,0xc3,0x6b,0x68,0xd8,0x65,
+  0x0e,0x8a,0x23,0xca,0x15,0xcd,0xac,0x27,0x36,0xc5,0xff,0x13,0xca,0xa2,0x99,0xe1,
+  0x02,0xb3,0x30,0x4b,0xb6,0x23,0x2c,0x9e,0x65,0x23,0x62,0x45,0x9e,0xc3,0x64,0x44,
+  0x87,0xfe,0x0c,0xfe,0x19,0x2f,0xfb,0x53,0x88,0x0b,0x6b,0x0e,0x66,0x4b,0xc7,0xb4,
+  0x8a,0x60,0xd6,0xb6,0x82,0x42,0xee,0xff,0xd1,0x4a,0xa6,0xe0,0x1f,0x38,0xa8,0x3b,
+  0xb5,0x96,0xe8,0x5d,0x85,0xf4,0x20,0x71,0xd6,0x72,0xb5,0x1b,0x6e,0x66,0x6a,0x90,
+  0xf3,0x7f,0x42,0x97,0x13,0xfe,0x9c,0x54,0xfc,0x73,0x50,0x75,0x6a,0x4b,0xb8,0xb5,
+  0x75,0x10,0x7f,0x9b,0x11,0x45,0xd0,0x6d,0xf2,0x55,0xf6,0x10,0x89,0x0f,0x42,0xb6,
+  0xe8,0xd4,0xfa,0x3f,0x7c,0x59,0x72,0xfd,0x69,0xb0,0x47,0xc0,0x81,0x92,0xcd,0xf9,
+  0x3f,0x21,0x8d,0xe6,0x7a,0xd3,0x78,0x05,0xaa,0x20,0x4d,0xc5,0x3f,0xa1,0xf1,0xb2,
+  0x3f,0x05,0xbc,0xfe,0x4f,0x17,0x6b,0xe6,0xf5,0x7f,0xfa,0xa0,0x82,0x6d,0xd4,0xc7,
+  0x13,0xb1,0x37,0xa6,0xe2,0x9f,0x01,0xb8,0x2c,0xfc,0x12,0xf1,0x4c,0xce,0x18,0xe5,
+  0xf8,0x47,0xbc,0x2f,0xe7,0x33,0xf8,0x0c,0x16,0xf7,0x2f,0x3b,0xad,0x5d,0x80,0xcb,
+  0xd5,0x95,0x53,0xf1,0x0f,0x0f,0x93,0x79,0xaa,0x1d,0x6d,0xe2,0x02,0xf2,0x8a,0xab,
+  0x34,0x68,0xef,0x17,0xf7,0xe9,0x2f,0xe2,0x46,0xb2,0x9f,0x16,0x67,0xc3,0xbf,0xc3,
+  0x7c,0x9e,0x3f,0x95,0xea,0xff,0xe9,0xe6,0xa4,0xb8,0xb5,0xd9,0x40,0x39,0x10,0xa2,
+  0x4f,0xfa,0xe7,0xea,0x11,0x68,0x57,0xe8,0x3a,0x42,0xcd,0xfa,0x87,0xae,0xa9,0xf8,
+  0xe7,0x20,0xb8,0xfc,0x72,0xf6,0xca,0x81,0xce,0xcd,0xc0,0xb3,0xbd,0x48,0x13,0x67,
+  0x58,0x05,0x23,0xb9,0xa4,0x29,0xfa,0x53,0x70,0x69,0x54,0x49,0x8d,0x7f,0x29,0x07,
+  0xa1,0x28,0x28,0xb7,0x55,0x0c,0xc0,0xe3,0x92,0x33,0x18,0x89,0x66,0x27,0xea,0xff,
+  0xd0,0x2d,0xfc,0x0f,0x95,0x22,0x8d,0x4e,0xc5,0x3f,0x9f,0xb0,0x0a,0xcd,0xb1,0x8d,
+  0x70,0x18,0xd3,0x55,0x8f,0xf8,0xb6,0x23,0x80,0x9f,0xb5,0x5e,0xfa,0xb1,0xf8,0xa4,
+  0xf6,0x06,0x94,0x9b,0xf9,0xef,0x56,0xfc,0x03,0xa3,0x85,0xfb,0x35,0xc7,0xf5,0xe2,
+  0x9c,0xd0,0x59,0xa1,0x72,0xd5,0xbc,0x9f,0x88,0xbd,0x64,0x54,0xa8,0x0c,0xcc,0xcb,
+  0x93,0x1f,0x80,0xd1,0xd6,0xfd,0xfe,0xa9,0xfe,0x1f,0xbe,0xfe,0xca,0x52,0x26,0xef,
+  0x00,0xb3,0xec,0x00,0xe2,0x97,0xda,0x11,0xa5,0x2b,0xdb,0xde,0x94,0x93,0x4f,0xc6,
+  0xf9,0xe7,0x29,0xf1,0x2f,0x38,0xc2,0xd9,0x3e,0x3a,0xb9,0x01,0x9e,0x61,0x05,0x51,
+  0x1a,0x0a,0x2f,0x82,0x23,0xb0,0x30,0x9a,0x39,0xb0,0xe1,0x0b,0xea,0xe7,0x20,0x32,
+  0x97,0x9e,0x9a,0xff,0x05,0x7b,0x07,0x18,0x9e,0x47,0xba,0x09,0xad,0xad,0xc2,0x87,
+  0x32,0xca,0xd7,0xad,0x55,0xf7,0x30,0xb5,0xdf,0x96,0x17,0x76,0x34,0x35,0x6a,0xc0,
+  0xa8,0xc7,0x99,0x1a,0xff,0xda,0xaf,0x15,0xf0,0xfa,0x3f,0x79,0xea,0x0e,0x3a,0x3b,
+  0x78,0x3d,0x4f,0x83,0xda,0x07,0xdf,0xe0,0xc0,0x60,0xa6,0xb2,0x1f,0xf2,0x8d,0xba,
+  0xa9,0xf9,0x5f,0x9c,0xff,0xd3,0x7a,0x91,0x3c,0x81,0xd6,0xd9,0xc2,0xf8,0x5c,0xb3,
+  0xec,0x4f,0xc3,0xfc,0x78,0xc9,0x99,0x82,0x1b,0xc8,0x4b,0x6c,0xb3,0x3e,0x35,0xff,
+  0x0b,0x86,0x39,0xff,0x27,0xf6,0xfb,0x41,0x3c,0x38,0x8b,0x78,0x76,0xea,0x30,0xcf,
+  0x37,0xd1,0x50,0x9e,0xbc,0xa7,0x5f,0xe4,0x12,0x3b,0x05,0xff,0x64,0x5e,0x81,0xe7,
+  0xf5,0xaa,0x77,0xed,0x17,0x1b,0x3f,0xa7,0xbf,0x63,0xa5,0xab,0xec,0x23,0x37,0x96,
+  0xd1,0x57,0xd9,0x7c,0xdd,0xcd,0x03,0x61,0xc6,0xe6,0x52,0xdd,0x3d,0x62,0x8d,0x7f,
+  0x09,0xdb,0x61,0xbf,0x31,0x8f,0x47,0xdb,0xc7,0xd8,0x6f,0x60,0xe7,0x3d,0x68,0x7f,
+  0x4d,0x57,0xd3,0x61,0x2e,0xb3,0xad,0x20,0x33,0xb5,0x26,0xb6,0x23,0x62,0x4b,0xc5,
+  0x3f,0x28,0xaf,0x68,0x31,0x67,0x07,0x9d,0x56,0xd6,0xc3,0x6c,0xad,0x9c,0xd3,0x7e,
+  0x70,0xd0,0x8b,0xf2,0xaa,0x1e,0x5a,0x3d,0xb3,0x1b,0xe8,0x14,0xfc,0x23,0x75,0x55,
+  0xbb,0x8d,0xf2,0x05,0x47,0x4f,0xa9,0x5b,0x61,0x4e,0x34,0xaf,0x8c,0x7c,0xdb,0x34,
+  0x6c,0x6f,0x50,0xfd,0xb7,0xe3,0x77,0x29,0x04,0xdb,0xd4,0xf8,0xd7,0x25,0xb6,0xf8,
+  0x35,0x7a,0x81,0xbc,0xe2,0x79,0x01,0xca,0x0a,0x29,0x88,0x7f,0x0f,0x2f,0x40,0xe1,
+  0x79,0xf7,0x13,0xf2,0x77,0xe0,0xa8,0x51,0xc6,0xdc,0xd7,0xc4,0xbf,0x42,0x59,0x7d,
+  0xb8,0x08,0x83,0xd2,0x25,0x5e,0x98,0xeb,0xd9,0x82,0x1d,0x0c,0x07,0x67,0x36,0xb5,
+  0x8b,0xbb,0x43,0x17,0xff,0x0c,0xfe,0x81,0xab,0x7a,0xa9,0xd1,0x3a,0x2c,0x3f,0x07,
+  0x27,0xa2,0xa5,0x2c,0xb3,0x41,0x74,0x0b,0xaf,0x36,0x2c,0x1a,0x44,0xa0,0x3e,0x02,
+  0xa7,0xa0,0x94,0xb5,0xa6,0xf8,0x7f,0xa4,0xd5,0x10,0x3b,0xca,0xfd,0x3f,0x7e,0x97,
+  0xd2,0x22,0xa0,0x5a,0xef,0xb2,0x15,0xc0,0x5b,0xf7,0x3a,0xe3,0x14,0x77,0x78,0xfa,
+  0x86,0x06,0x55,0x9b,0x17,0x9b,0x12,0xff,0x3a,0x64,0xa6,0x89,0xd9,0x3a,0xe0,0xa7,
+  0xb0,0xd2,0x49,0x63,0x73,0xe6,0x48,0x2d,0xf6,0x6f,0x1f,0xa5,0xdb,0xc2,0xaf,0xd0,
+  0x0d,0x86,0xb3,0x61,0x0a,0xff,0xc7,0x0e,0x5d,0xea,0x78,0x5a,0x19,0xca,0x67,0xc1,
+  0xc5,0xc3,0x1c,0x26,0x3f,0x13,0x10,0x58,0x86,0xd5,0x10,0xfb,0x82,0xc7,0x9a,0xff,
+  0x95,0xb6,0xda,0x04,0x39,0xae,0xe1,0x9c,0x0e,0xf2,0x16,0x74,0x69,0x33,0x79,0xa1,
+  0xb9,0x16,0x7c,0x4d,0x37,0xcb,0x89,0x93,0xe3,0xf9,0x5e,0xbe,0x3e,0x16,0xfc,0x33,
+  0x63,0xcc,0xcc,0xdf,0xe1,0xfc,0x0d,0x0e,0x7b,0x40,0x1e,0x16,0x86,0xf3,0xfe,0xa4,
+  0x56,0x71,0xe2,0xd3,0x30,0x5c,0x51,0x16,0x43,0x6a,0xfd,0x9f,0xaf,0x5c,0x51,0x2e,
+  0x85,0x4a,0xcf,0x6e,0x32,0xc4,0x7b,0xe1,0x52,0x83,0x57,0xcd,0xec,0x13,0x2b,0x95,
+  0x56,0xe8,0x8a,0xcf,0x1c,0x2d,0xb8,0x4e,0xbb,0x9c,0x5d,0x1a,0xb7,0x8f,0x88,0xb1,
+  0x24,0xfe,0x81,0x8f,0xe0,0xf9,0x5a,0x12,0x42,0x23,0xcb,0x29,0xb5,0xa8,0x65,0x21,
+  0x79,0x1b,0x79,0x5e,0x3b,0x1e,0x72,0xc6,0xcd,0x0a,0x90,0x87,0x83,0x2b,0xe3,0xb4,
+  0x5b,0x4c,0xd6,0x7f,0x36,0xcf,0x97,0x47,0x35,0x96,0x84,0xb7,0xa8,0xf4,0xa7,0x2e,
+  0x17,0xb7,0xce,0xec,0x10,0xc9,0xc3,0xf7,0xf5,0x66,0x4b,0x6c,0xb3,0xaa,0xf2,0xa5,
+  0xe8,0x4a,0xc1,0x3f,0x87,0x21,0xdc,0x2f,0xb3,0x97,0x9c,0x6a,0x0b,0xcc,0x01,0x79,
+  0x1d,0x31,0x2b,0x42,0x1b,0x75,0x31,0x52,0x02,0x87,0x99,0x19,0x58,0x4c,0xd6,0x7f,
+  0x06,0xc9,0x2d,0x1d,0x06,0xef,0x30,0x2a,0x1d,0x51,0xf9,0x35,0x54,0xa8,0x99,0x92,
+  0xe8,0x46,0xb3,0xc8,0x73,0x9e,0xc6,0xa6,0x95,0xb0,0x4b,0xac,0xdd,0x70,0xc7,0x84,
+  0xe8,0xe4,0xf3,0xef,0xd0,0x78,0xfe,0x7b,0xd5,0x17,0x1d,0xc7,0xe4,0x98,0xeb,0x77,
+  0x46,0xd5,0xf0,0xa6,0x91,0xc6,0xb7,0x6d,0x1f,0x6d,0xfe,0xe1,0x7b,0x9c,0xff,0xa3,
+  0x8c,0xfb,0x7f,0x86,0x2c,0xfa,0x77,0x37,0x47,0xd7,0x31,0x07,0xe7,0x1f,0xbe,0x25,
+  0x95,0x69,0x8e,0xa6,0x9a,0x8f,0x38,0xff,0xe1,0xa8,0x3d,0x26,0x7e,0xc8,0x4d,0x63,
+  0xbe,0xdf,0x92,0xfc,0xe7,0x3e,0xc9,0x0d,0xcf,0x73,0x23,0x0b,0x88,0xca,0x7e,0x16,
+  0x71,0xc6,0xe5,0xce,0xec,0x31,0xa5,0x1d,0xd5,0x6e,0x66,0xcc,0x3f,0x94,0xbb,0x81,
+  0xa9,0xf1,0x14,0xff,0x8f,0x91,0x6b,0x87,0xc3,0x68,0x86,0xb7,0xa8,0x44,0xe0,0x34,
+  0x8c,0x8e,0xbf,0x2b,0xc6,0x6d,0xd0,0x0e,0x6e,0x5c,0xcf,0xec,0x93,0xd9,0xcd,0x3b,
+  0x70,0xbe,0x07,0xf5,0xfb,0xc4,0x4f,0x08,0x66,0xc1,0x81,0x1d,0xc5,0x5a,0xcb,0x08,
+  0x79,0x48,0x7b,0x3a,0xd6,0x50,0x67,0xd2,0x76,0x9f,0x8e,0x16,0x7f,0xd0,0xbc,0xc6,
+  0x79,0x45,0x49,0x67,0xf9,0xef,0xe2,0x95,0xb1,0xc9,0x7a,0xe0,0x81,0xbc,0x2c,0xed,
+  0xd3,0x86,0xca,0xda,0x65,0x20,0xdb,0x58,0x4b,0x7b,0xee,0xee,0xff,0xe6,0x11,0x4f,
+  0xda,0xdf,0xf5,0x57,0x0e,0xda,0x17,0xe5,0x9f,0x04,0xc4,0x69,0x9c,0xf8,0x6d,0xc1,
+  0x3f,0xf6,0xe7,0xb4,0xab,0x1a,0x2e,0x82,0x26,0x3e,0xc7,0x3e,0x06,0x9f,0xe8,0xf8,
+  0xa4,0xf1,0x6d,0xb8,0xc2,0x89,0xd3,0xc3,0xe2,0xc3,0x9a,0x19,0x3a,0xe4,0x78,0x72,
+  0xe2,0x7d,0x39,0xbf,0xf4,0x92,0x5a,0x19,0xb7,0xc7,0x45,0x40,0xd8,0x53,0xb2,0x65,
+  0x53,0x58,0xfc,0x30,0x74,0x11,0x3c,0xb8,0xec,0x39,0x89,0xc4,0x4c,0x5c,0xa8,0xa3,
+  0xc9,0xfa,0x27,0x1c,0xff,0xd4,0x16,0x73,0xb6,0xb3,0x82,0x78,0x7b,0xbe,0xc1,0xcd,
+  0x28,0x76,0x00,0x76,0x70,0xd8,0xf3,0x36,0x3d,0x07,0x1c,0xff,0xac,0x4c,0xf2,0x7f,
+  0x80,0xe3,0x1f,0xbd,0x38,0x4e,0x29,0xb9,0x41,0x58,0xcf,0xbe,0x35,0x28,0xff,0x2d,
+  0xbe,0x6f,0xd7,0xba,0x9d,0x3c,0x11,0x0c,0xf1,0x0f,0xc3,0x5f,0xad,0xf1,0x6f,0x4b,
+  0xc5,0x3f,0xe0,0xee,0x8f,0x30,0x42,0x23,0x5b,0x25,0xb5,0x5f,0xbe,0x0d,0xd7,0xb3,
+  0x0b,0xd4,0xce,0x1b,0xb8,0x19,0xab,0x07,0x57,0x73,0xfc,0xf3,0x66,0x12,0xff,0x48,
+  0x9d,0xdc,0xe9,0xd7,0x84,0xcf,0x5f,0x4e,0x8f,0xef,0xa8,0xe8,0x76,0xe8,0x39,0x83,
+  0xf8,0xbe,0xf3,0xb7,0x21,0xe2,0x7d,0x63,0xd5,0x95,0xa6,0x4a,0x86,0x83,0x43,0xc9,
+  0xfb,0x9b,0xfa,0xc8,0xa7,0x38,0xd8,0x17,0x78,0x1a,0x0e,0x77,0x04,0xe5,0x18,0xe3,
+  0x57,0xa6,0xc5,0x73,0x47,0x68,0x16,0xcc,0x63,0x05,0xaf,0x25,0xd7,0x27,0x58,0xa8,
+  0x8c,0x42,0x36,0x2f,0xf3,0x3b,0x47,0x38,0xa6,0x7b,0x6b,0x97,0x6d,0x2b,0x18,0x80,
+  0xf7,0xa1,0x6c,0x95,0x99,0xdf,0xd4,0x03,0xe3,0xf5,0x0f,0x27,0xe6,0xb3,0x44,0x3d,
+  0xc3,0xfa,0x96,0x28,0x99,0x16,0xdd,0xc1,0x8a,0xb8,0xf5,0xc4,0x15,0xab,0x73,0x4d,
+  0xa6,0x99,0x88,0xad,0xb5,0x27,0xf0,0xcf,0xc4,0x4f,0x9e,0xd4,0x01,0x7b,0xa0,0xe8,
+  0x3e,0x8e,0x7f,0xb4,0x66,0x84,0xd9,0x4b,0x36,0x93,0x73,0xb8,0x91,0xe6,0x68,0x89,
+  0xc4,0xed,0x66,0x13,0x11,0x59,0xf0,0x4f,0xae,0x04,0x7b,0x34,0x33,0xdb,0xab,0x90,
+  0xee,0xac,0xa6,0x5a,0x8b,0x92,0xdd,0x2b,0x6c,0xd6,0x70,0x5a,0xae,0xff,0x3d,0x1e,
+  0x01,0xd1,0xe6,0xa6,0xe0,0x1f,0xca,0xf1,0x4f,0x05,0x1e,0x5b,0xc4,0x3f,0x94,0x98,
+  0xd1,0x96,0xb8,0xd4,0x07,0xfb,0xc1,0x94,0x3f,0x89,0x8a,0x34,0x05,0x1f,0x4d,0x9b,
+  0x90,0x3f,0xdd,0xb9,0x88,0xf7,0x6a,0xab,0x34,0xc7,0x85,0x02,0x5e,0x08,0x88,0x7b,
+  0x33,0x84,0xf7,0xe0,0xb7,0x7e,0xbc,0x12,0x25,0x63,0xc0,0xfd,0x3f,0x59,0x51,0xf1,
+  0xa3,0xc9,0xfa,0xab,0xe5,0x88,0x7f,0x46,0x5d,0xa5,0x46,0x56,0x9b,0xbc,0x00,0xde,
+  0x13,0x7c,0xd5,0xf6,0x68,0xce,0xf7,0xd4,0x63,0xb4,0x4a,0xb3,0x6f,0x16,0x07,0xb4,
+  0x57,0x5c,0xbc,0xfe,0xa1,0xf8,0xd1,0xe4,0xfe,0xc9,0x83,0x38,0x2d,0xcf,0x47,0xd8,
+  0xb3,0x0e,0x9f,0x27,0xe2,0xca,0x62,0x36,0x96,0x1d,0x82,0x33,0x2a,0xe7,0x23,0x89,
+  0x71,0x5b,0xc4,0xc9,0xeb,0x1f,0xe2,0xfb,0x4e,0x7c,0x5f,0x0d,0x9a,0x60,0x8f,0x4b,
+  0xe5,0xf5,0x9f,0x6b,0xa5,0x1d,0xa4,0x48,0x8b,0xf0,0xfa,0xcf,0x0d,0xb4,0x44,0x63,
+  0xf8,0xe2,0xac,0xc1,0xe5,0xe6,0xf8,0x27,0x59,0xaf,0x32,0x2f,0xb7,0x83,0xc3,0xc8,
+  0x00,0x8d,0xde,0x30,0xdb,0x0c,0x44,0xda,0xa2,0x6c,0x35,0x02,0xa1,0xa2,0xa0,0x10,
+  0xc5,0x3f,0x34,0xeb,0x2f,0x71,0xfc,0x33,0xb1,0x3e,0xbc,0xfe,0xe1,0x41,0xe8,0x5a,
+  0x93,0x85,0xbf,0x55,0xde,0x0f,0x3f,0x8c,0xbf,0x15,0x57,0xc1,0xb1,0x90,0xbb,0x9e,
+  0x46,0x6f,0xc1,0xf5,0x37,0x78,0xfd,0x43,0xc4,0x03,0x13,0xf7,0x1f,0x54,0x3a,0x10,
+  0x06,0xe3,0xb2,0xe4,0x8a,0x7f,0xa0,0xa3,0x01,0xb3,0x10,0x22,0xcf,0x7f,0xf7,0xd5,
+  0x39,0xa2,0xd3,0x3a,0x12,0x11,0xc3,0x28,0xe2,0xed,0x89,0xf9,0x45,0xe6,0x7e,0x2b,
+  0xe1,0xcb,0x1e,0x4a,0x54,0x97,0x6a,0x12,0xe3,0xea,0x78,0x21,0xa0,0x38,0xf4,0xa9,
+  0x53,0xf0,0x0f,0x4d,0xe3,0xd5,0x0e,0x8b,0x9b,0x96,0xe8,0x35,0x87,0x8c,0x23,0xd5,
+  0xdc,0xed,0xa3,0x8d,0x48,0x1b,0xe0,0xf7,0xd1,0x16,0x9d,0x0c,0x2a,0x1b,0xf1,0x20,
+  0xb8,0x74,0x31,0x3c,0xb9,0x7f,0x68,0xda,0x52,0x05,0xcf,0x4b,0x1b,0x0a,0x19,0x1b,
+  0xc4,0x58,0xe1,0xbb,0x72,0x39,0x4f,0x93,0x14,0xd4,0x31,0xb3,0x5e,0x4d,0x34,0xa8,
+  0x26,0xf8,0x99,0x13,0xf3,0x79,0xfd,0xc3,0x03,0x85,0xc5,0x70,0xe3,0xa7,0x78,0xe8,
+  0xf6,0x19,0xf9,0xfd,0x72,0x7d,0xf8,0xb7,0xb4,0xb1,0x3d,0x9f,0xbb,0x41,0xde,0x16,
+  0xd7,0x31,0xce,0xdf,0x4b,0xef,0x4b,0xe2,0xb7,0x3c,0x44,0x3b,0x3b,0xfe,0x79,0x87,
+  0xe3,0x07,0x68,0x5f,0x5f,0x60,0xb7,0xbe,0xeb,0xf8,0x1b,0xf1,0x54,0xc6,0xcb,0x46,
+  0x7e,0x3c,0xf3,0x91,0xc6,0x2b,0xda,0xdb,0x6c,0x4f,0x88,0xae,0x11,0x8f,0xa7,0x4f,
+  0x3e,0x4f,0x26,0xca,0xdb,0x2f,0xf9,0x1a,0x1c,0xe5,0x7f,0x35,0xa8,0xf8,0xe0,0x08,
+  0x9a,0xf9,0x5c,0x8c,0xb8,0x7c,0x2c,0xb3,0x2b,0x67,0x75,0xef,0x78,0xe2,0x6d,0x78,
+  0xd2,0xff,0x1c,0x92,0x8e,0xc0,0x55,0x63,0x7e,0x87,0xb4,0x46,0xac,0xf0,0x0f,0xb2,
+  0x45,0x21,0xc7,0x88,0x78,0x91,0x71,0xb7,0x4f,0xfa,0x88,0xf8,0x0e,0xbc,0xcd,0x16,
+  0x73,0xfd,0x75,0x26,0xc9,0x37,0x86,0x56,0x38,0xa0,0xec,0x68,0xcb,0x7c,0x50,0x0c,
+  0x68,0xad,0x2c,0x7f,0x75,0xcb,0x83,0x68,0x2d,0x1e,0x40,0x33,0x0a,0x5f,0xf3,0x6d,
+  0xf6,0x52,0xa8,0xd8,0xb0,0xaf,0xc9,0xfe,0x20,0x79,0x1e,0x11,0xff,0xec,0xe5,0x45,
+  0xb3,0x87,0x49,0xb9,0xf4,0x24,0xcc,0xed,0x97,0x83,0xe4,0x0c,0xca,0xab,0xe2,0x1e,
+  0x94,0x57,0x63,0x52,0x87,0xfd,0x3b,0xf8,0xbe,0xfe,0x5e,0x6d,0x62,0xbe,0x96,0xdb,
+  0xca,0x9d,0x18,0x2c,0xc3,0x43,0x02,0xb9,0x0d,0xd3,0x55,0x43,0xae,0xc4,0x43,0x72,
+  0xf8,0x3e,0x37,0x5f,0xc6,0x93,0xa8,0x7e,0xec,0x46,0x86,0xc7,0xff,0x9a,0x45,0x3f,
+  0xee,0x46,0x7d,0xe4,0x35,0x66,0x0e,0x8b,0x9c,0x12,0x52,0x81,0xda,0xa1,0x71,0x00,
+  0xae,0x86,0x7d,0x75,0x59,0xc3,0xe2,0x3b,0xec,0x03,0x7c,0x5f,0xd4,0xef,0xa7,0x92,
+  0xf5,0xa6,0xa6,0x9b,0xd9,0x70,0x6d,0x8e,0x58,0xe3,0x60,0x04,0xe5,0x4f,0xad,0xa3,
+  0x83,0xbb,0x7d,0x54,0x9f,0xc6,0x0b,0xaf,0xc1,0x4f,0x6a,0x79,0x69,0xc4,0x9a,0x41,
+  0x29,0x89,0x7f,0x4c,0x7d,0xc7,0xeb,0x4b,0x8f,0xf0,0x40,0xd8,0x31,0xc7,0xf9,0x46,
+  0x5e,0xd8,0x6d,0xa1,0x96,0x39,0x7c,0x63,0x25,0x9c,0xb2,0x55,0xf1,0xf8,0x57,0x7c,
+  0x12,0xff,0xf4,0x20,0xfe,0x39,0x0c,0x6e,0xdd,0x16,0x23,0xaf,0x12,0x7d,0x03,0x1a,
+  0x02,0x3a,0xf9,0x08,0xaf,0x2c,0x58,0xc3,0xf5,0x3b,0x69,0x31,0xe6,0x70,0x45,0x6f,
+  0xc1,0x3f,0x92,0x99,0x1d,0xcf,0x2f,0xfe,0x11,0xb6,0x31,0x67,0xa3,0x1c,0x0d,0x7f,
+  0x04,0x3f,0x83,0x39,0xa1,0x0c,0x4f,0xb6,0x5b,0x69,0x61,0x25,0x01,0x13,0xff,0x4c,
+  0xc8,0x07,0x0a,0x76,0x6d,0xef,0x74,0xd3,0x08,0xed,0x43,0x30,0xda,0x09,0x37,0x02,
+  0xcf,0x77,0x2e,0x2c,0xbc,0x2b,0x80,0x88,0x48,0x68,0x84,0x55,0x86,0xcb,0xeb,0x4f,
+  0xd6,0x3f,0x84,0xbc,0xef,0xf0,0x6c,0x7d,0x66,0x8f,0x91,0x41,0xed,0xcc,0x97,0xbc,
+  0x6d,0x78,0x3a,0x86,0xa4,0x8f,0x49,0x59,0xf0,0xee,0xcf,0x0a,0x2a,0x13,0xf5,0xd3,
+  0x10,0xef,0x25,0xeb,0x1f,0x66,0x8e,0x49,0x57,0x55,0xd3,0x6c,0x3f,0x03,0x63,0x5e,
+  0x14,0xcb,0x86,0x38,0x26,0x5d,0xd2,0x2a,0xef,0x9a,0xc7,0x11,0xd1,0x65,0xae,0xdf,
+  0xf7,0x88,0x83,0x77,0x24,0xfd,0x3f,0x47,0xe0,0x0d,0x75,0xb1,0x6a,0x3f,0xca,0x03,
+  0x2f,0x46,0xa9,0xea,0x38,0x9a,0x53,0x59,0x3b,0x96,0x7f,0xa3,0xdd,0xde,0x87,0x78,
+  0xe9,0xf2,0x96,0x85,0x67,0x1d,0x29,0xfe,0x1f,0x6a,0xfa,0x7f,0x54,0xfa,0x2f,0xce,
+  0x79,0xdc,0xda,0xd2,0xe5,0x46,0xff,0x62,0x56,0xee,0x71,0x2e,0xa5,0x11,0x12,0x37,
+  0xd0,0x14,0xed,0xcb,0xe8,0x26,0xc3,0x93,0xf9,0x5f,0x54,0x3a,0x09,0x7b,0x14,0xde,
+  0xe4,0xc2,0x6b,0x0f,0x74,0xe6,0xbb,0x42,0x4b,0x94,0x70,0x26,0xdb,0x43,0xeb,0xf0,
+  0x64,0xa7,0xf7,0xaa,0x07,0x61,0xd5,0x51,0x3c,0x68,0xe7,0x85,0x89,0xef,0x6b,0x08,
+  0xbb,0xe1,0xa0,0xf6,0xc0,0x8a,0xce,0x6d,0x88,0xa6,0x3a,0x59,0x51,0xb5,0x1c,0xf1,
+  0xba,0xe1,0x20,0x5b,0xa9,0xda,0xa2,0xe9,0xef,0x66,0x1c,0x4e,0x14,0xd6,0x1e,0x9e,
+  0xc4,0x4b,0x30,0x63,0x08,0xde,0x8a,0x96,0xb8,0xec,0x54,0xb0,0x4b,0x71,0x76,0x08,
+  0x1c,0x1b,0x38,0x51,0xb9,0xaf,0x62,0x7e,0x96,0x3e,0xed,0xf7,0xf0,0xfd,0xb6,0x32,
+  0x1e,0x3f,0x35,0xac,0xf9,0x5f,0xc2,0x0f,0x79,0x58,0x90,0xa7,0x35,0xbd,0x03,0x7f,
+  0xc5,0x70,0xdb,0x8c,0xd9,0x47,0x85,0xc5,0x70,0xf7,0x27,0x39,0x71,0x3a,0x46,0xaa,
+  0x8e,0x73,0x7c,0x98,0x12,0xff,0xba,0xa4,0xf9,0x94,0xa5,0x6d,0xe2,0x10,0xeb,0x0b,
+  0x96,0xb5,0xa2,0xa1,0xea,0x86,0x0f,0xc0,0x1b,0x75,0xe8,0xe2,0xfb,0xe4,0x18,0x1a,
+  0x13,0x78,0xff,0x4f,0xac,0xfe,0x1f,0xe1,0x12,0x7e,0x63,0xfa,0x2f,0xfe,0xcb,0x70,
+  0xa6,0xdf,0x19,0x73,0xfc,0x2b,0xa9,0xaa,0x45,0xfb,0x51,0x5d,0x12,0x4b,0xff,0xbd,
+  0x11,0x56,0xdb,0x5f,0xe3,0xf1,0x3b,0x4b,0xff,0x0b,0xbb,0x14,0x63,0x6e,0x4a,0xd5,
+  0xec,0x57,0x01,0x88,0xee,0xc1,0xfd,0x96,0x05,0xcf,0x40,0x61,0x64,0x49,0x3a,0xe9,
+  0x53,0xf6,0x34,0xa8,0xc3,0x22,0xc7,0x3f,0x13,0xdf,0x17,0xf1,0x8f,0xd2,0x61,0x14,
+  0x17,0xd2,0xbf,0x21,0xef,0x68,0xdb,0xa3,0xf9,0xfa,0x92,0x3b,0x71,0xfe,0x5a,0x36,
+  0xfb,0x9b,0x72,0x80,0xbc,0x0e,0xcf,0xb6,0x9b,0x15,0x02,0x93,0xf9,0x5f,0x81,0x3c,
+  0xc4,0xdb,0x9d,0x95,0x9a,0xfd,0xd6,0xc6,0x93,0xa1,0x1e,0xed,0x7b,0x9a,0x43,0x90,
+  0xed,0x6a,0x1c,0x16,0xbc,0xe8,0xf0,0x90,0x57,0xb4,0xd1,0x98,0x27,0x81,0x7f,0x26,
+  0xe6,0x6b,0x79,0xcf,0x21,0x48,0xae,0xd2,0xe6,0xfd,0x4a,0x7c,0x3b,0xf4,0x99,0xf4,
+  0x88,0xff,0x54,0x4f,0xce,0x98,0x74,0x19,0x16,0xd5,0x3a,0x86,0xd9,0x05,0x78,0x45,
+  0x59,0xd4,0xcb,0xeb,0xff,0x4c,0xe2,0x43,0x8a,0xeb,0x3f,0x2a,0xa0,0x10,0xee,0x96,
+  0x4b,0xe0,0xa8,0x54,0xe6,0x77,0x0c,0x0b,0x6e,0x5c,0xd8,0xaa,0x6a,0x7b,0x13,0x8f,
+  0x80,0x98,0xfe,0x6a,0xe1,0xa8,0x85,0xff,0xbc,0x1d,0xf5,0x75,0x3e,0x0b,0xd4,0x93,
+  0x59,0x84,0xb3,0x7d,0xe4,0x7a,0xff,0x4d,0xda,0x5a,0x82,0x88,0xe8,0xcb,0x68,0x61,
+  0xed,0x1b,0x8f,0x7f,0x4d,0xda,0x77,0x2a,0xc7,0x3f,0xac,0x20,0xe4,0x2a,0x27,0x59,
+  0xc2,0xa3,0xec,0xc9,0xc1,0x96,0xbc,0xec,0xac,0x86,0x1f,0xb3,0xd5,0xc3,0xb4,0x0e,
+  0x81,0xd0,0xb3,0x88,0x7f,0x96,0xac,0x49,0x4f,0xca,0xb7,0x3a,0x8e,0x7f,0x0c,0xd5,
+  0x88,0x54,0x1e,0xb5,0x53,0x34,0xf3,0x8f,0xca,0x6d,0x7e,0x77,0x5a,0x83,0xf1,0x40,
+  0x28,0xb0,0x00,0x81,0x41,0xb7,0x56,0xc2,0x19,0xf2,0x6f,0x26,0xf3,0xbf,0x72,0x3b,
+  0xe1,0xca,0xb6,0xd2,0x76,0xfb,0x47,0x39,0x2e,0x38,0x15,0x29,0x63,0x0e,0xce,0xff,
+  0x79,0x47,0xaf,0x8a,0xba,0x75,0x71,0x94,0x5d,0x99,0xee,0xd3,0x37,0x71,0xff,0xcf,
+  0xc4,0xf3,0x07,0x78,0x3e,0x4e,0x22,0xe8,0x10,0x97,0x38,0xdb,0x19,0x6d,0xe4,0x38,
+  0x8c,0xd8,0x7c,0x39,0x0e,0xd6,0x78,0xb6,0x70,0x84,0x67,0x08,0xa6,0xe6,0x7f,0xa1,
+  0xbe,0x63,0xde,0x55,0xee,0xcd,0x39,0x03,0x74,0x34,0x5a,0x66,0xd6,0x7f,0xe6,0xb0,
+  0x27,0x98,0xc8,0xef,0x16,0xbc,0xf5,0xad,0x53,0xf0,0x0f,0x3d,0xe8,0x54,0x43,0xb4,
+  0x8d,0x0c,0x44,0x0f,0xf2,0x40,0xcc,0x16,0xdb,0x9c,0xf0,0x31,0x70,0x2e,0xcf,0x8b,
+  0xf1,0xfa,0x3f,0x6a,0x51,0xf0,0xcf,0xfa,0x7f,0x5c,0x66,0x9a,0x3c,0xbc,0x6b,0xf2,
+  0x7f,0x34,0x33,0xc3,0x6b,0x0b,0x19,0xd0,0x33,0x12,0xfe,0xa2,0x53,0x93,0xfa,0x8b,
+  0xfb,0x7f,0xf6,0x24,0x92,0xdc,0x7b,0x11,0x08,0x85,0x34,0xd3,0x11,0xc4,0x13,0xc1,
+  0x28,0x4f,0x0c,0x6f,0xd0,0x5c,0xf5,0x2e,0x85,0x1c,0x4f,0xe6,0x7f,0xdd,0x14,0x32,
+  0xdd,0x3e,0x11,0x56,0x13,0x1f,0x77,0x04,0x99,0xf9,0x5f,0x5d,0xdc,0xcd,0x12,0x9f,
+  0xcc,0x7f,0x9f,0xc4,0xcf,0xdd,0xdc,0xff,0xa3,0x2d,0xd6,0x96,0x9d,0xce,0x79,0x0f,
+  0xa5,0x0d,0x5a,0xa3,0xa7,0xc5,0xf7,0xe0,0xc3,0x6a,0x5e,0xf6,0xa7,0xe6,0x32,0x6e,
+  0xa4,0x2a,0xd3,0xff,0x23,0x58,0xf1,0xcf,0x65,0x17,0x4f,0xf2,0x6a,0xbc,0xe0,0xb9,
+  0x0c,0x65,0x46,0xfa,0x69,0xf1,0x56,0x78,0xbf,0xba,0x74,0x39,0x8a,0xb5,0x0b,0xec,
+  0xf2,0x1d,0xa5,0xda,0xb2,0x28,0x39,0x67,0xc1,0x3f,0x3a,0x74,0xfb,0x9d,0x10,0x69,
+  0x22,0x67,0x81,0xd7,0xff,0xa1,0x3c,0x30,0xd7,0x57,0xeb,0x84,0x2c,0x46,0xce,0xea,
+  0xdd,0x50,0x86,0x50,0xcd,0x7f,0x6a,0x52,0xfe,0x2c,0x95,0x10,0xff,0x40,0xa1,0x46,
+  0xf3,0x48,0xaf,0x74,0x90,0xce,0xe1,0x61,0xbe,0x34,0xfb,0x8e,0x90,0x6b,0x39,0xbf,
+  0x12,0x3c,0xa8,0xd6,0xf1,0xf8,0xd7,0x54,0xfc,0x83,0xe8,0x91,0x57,0x2b,0xdd,0x45,
+  0x39,0x7a,0x5c,0x57,0x88,0x03,0xa2,0x7d,0x01,0xf1,0x24,0x3b,0xc8,0xe6,0x04,0xcc,
+  0x78,0xe2,0xc4,0x7c,0x5d,0xea,0x50,0x3e,0x81,0x05,0x01,0x7b,0x1b,0x8f,0x66,0x1a,
+  0x0b,0xea,0x1d,0xdb,0xc5,0x42,0xfa,0xbe,0xe1,0x7d,0xc8,0xbe,0xad,0x66,0x00,0x1e,
+  0x84,0x45,0xa9,0xfc,0x1f,0x8e,0x7f,0x0e,0xf6,0x1c,0xaa,0xd9,0x14,0x75,0xae,0x82,
+  0x51,0xd5,0x57,0x9b,0x95,0x2d,0xf6,0x42,0x8f,0x71,0xa4,0xde,0xbe,0xbd,0x31,0x11,
+  0x11,0xdb,0x14,0x15,0xcf,0x4f,0xf1,0xff,0xf8,0x14,0x7b,0xb3,0x68,0xd6,0x7f,0x96,
+  0xf8,0xfa,0x53,0xce,0x3f,0x77,0x33,0xf1,0x2c,0xf4,0xe5,0x99,0x88,0x34,0xb9,0x7f,
+  0xa8,0xe4,0x82,0x23,0x81,0x79,0xba,0x2b,0xee,0xbc,0xa4,0xee,0xd7,0x9c,0x7b,0xe4,
+  0x81,0xec,0xdb,0xc0,0x46,0xe6,0xed,0xa3,0x7a,0x41,0x37,0x6c,0x94,0x0a,0x10,0x11,
+  0xf9,0x93,0xfe,0x1f,0xca,0xed,0xd3,0x80,0x9b,0x6b,0xff,0x57,0xd9,0x9e,0x38,0x9e,
+  0x97,0x1b,0x9c,0x77,0xe4,0x37,0x42,0x49,0x90,0x56,0x92,0x97,0x72,0xdb,0x99,0xf4,
+  0x5a,0x8b,0x35,0xfe,0xa5,0x0a,0x66,0x91,0xd2,0x30,0xd5,0xb2,0x4f,0x2b,0xfb,0xb5,
+  0x7c,0x4d,0x5e,0x45,0xbe,0x44,0xd7,0xab,0xc5,0x7e,0xba,0x8a,0xfc,0x14,0x9e,0x12,
+  0x9e,0xe4,0x8d,0x30,0xe2,0x93,0xf9,0x5f,0xae,0x3c,0xee,0xff,0x59,0xac,0xdb,0xeb,
+  0x6a,0xde,0x81,0xcb,0x6c,0xc7,0x80,0xe3,0x8c,0xfc,0x08,0x79,0x99,0x55,0xe9,0xf6,
+  0xe5,0xe2,0xe7,0xe4,0xe3,0xf0,0xad,0xf1,0x69,0x6b,0xc4,0x77,0x53,0xfc,0x3f,0x07,
+  0x85,0x4a,0xf6,0x0f,0xbc,0xba,0xcb,0x15,0xf0,0x05,0x1c,0x71,0x7c,0xec,0x4b,0xf5,
+  0x55,0x4c,0x6e,0x6a,0xec,0x86,0xb7,0x60,0xd1,0x2a,0xee,0xff,0x99,0x5c,0x1f,0x8e,
+  0x7f,0xfe,0xc4,0x4a,0x75,0xfb,0xb1,0x9a,0xd7,0xe1,0xc5,0xf0,0xc2,0xb8,0xe3,0x8c,
+  0xf0,0x39,0x9c,0xe8,0x2f,0x0d,0xd1,0x51,0xb1,0x0c,0x5e,0xe5,0xfc,0x9f,0x91,0x82,
+  0xa4,0xbd,0x16,0x41,0x3c,0xb3,0x5f,0xbb,0x35,0xe2,0xfa,0x12,0x39,0x8d,0xd0,0x78,
+  0x47,0xf4,0x84,0x46,0x86,0xc3,0xeb,0xd9,0xad,0x41,0xfa,0xa0,0x5f,0x51,0x9a,0xf3,
+  0x6f,0x35,0x96,0xfd,0x80,0x24,0xeb,0x6f,0x9b,0xfe,0x1f,0x25,0x1f,0xf2,0xbe,0xe4,
+  0xec,0xd7,0x1e,0xa5,0xb3,0x0d,0xc4,0x3f,0xa7,0xe9,0xfa,0xf2,0x7c,0xa0,0x9f,0x38,
+  0xef,0x83,0xf5,0xb0,0xc2,0x90,0x1f,0x4a,0xef,0x9d,0xbc,0xbf,0xa6,0xb4,0x42,0x8c,
+  0x14,0x92,0x80,0x40,0x8c,0xec,0x30,0x53,0x75,0x99,0x3b,0xe9,0x1a,0x9b,0x0a,0x63,
+  0x75,0x0b,0xc8,0x9d,0x68,0x98,0x7c,0x53,0x43,0xf9,0x93,0x94,0x57,0x1c,0xff,0x5c,
+  0x02,0x4f,0x8f,0x7d,0x57,0x41,0x1f,0x1c,0x63,0xfb,0xc3,0x8e,0xc7,0x71,0x23,0xbd,
+  0x6a,0x78,0xef,0xb5,0xef,0x93,0xbf,0x41,0x8e,0x7b,0x4d,0xfe,0x8f,0x05,0xff,0x28,
+  0xbc,0xc8,0xe1,0x21,0x1d,0x37,0xd5,0x59,0xb8,0xe8,0xf7,0x29,0xcb,0x3a,0xd0,0xfe,
+  0x42,0xfc,0x13,0x44,0x7d,0xd4,0x69,0x5c,0x04,0xdc,0x51,0x31,0xfc,0x95,0xd5,0xff,
+  0x73,0x25,0x5a,0xc5,0x8b,0xd8,0x8c,0x48,0xaf,0x70,0x7f,0x7e,0xbf,0x49,0xe3,0xf4,
+  0x85,0x97,0xbd,0xdd,0xd8,0x0b,0xaf,0x26,0x2a,0x02,0x0d,0x26,0xeb,0x45,0x23,0xfe,
+  0xe9,0x66,0xbe,0x7c,0xda,0x4a,0xe2,0xa4,0x39,0x52,0x02,0x2d,0x91,0xf0,0x1f,0x78,
+  0xfd,0x19,0x75,0x49,0x84,0x9c,0x93,0x1a,0x79,0x7e,0x13,0x42,0x91,0x60,0xd2,0xff,
+  0xb3,0x5a,0x39,0x08,0x25,0xba,0x6b,0x33,0x4a,0x83,0x66,0x56,0xb2,0x42,0xde,0x86,
+  0xa7,0xf5,0xa7,0x50,0xc2,0x3d,0x24,0x7f,0x00,0x19,0x9c,0xef,0x72,0xfc,0x33,0xb9,
+  0x1f,0xa8,0x66,0x87,0x98,0xe0,0x66,0x14,0x88,0x61,0x56,0x03,0x48,0xc4,0x07,0xa9,
+  0x1b,0x96,0x50,0x62,0x10,0x6e,0x7f,0x51,0xaf,0xd5,0xff,0x93,0xb7,0xda,0x94,0xb7,
+  0xad,0x26,0xda,0x37,0xe3,0x35,0x5f,0x8e,0xc3,0x6f,0xcc,0x41,0x41,0x1c,0x4e,0xd4,
+  0x7a,0x99,0xbd,0xab,0x31,0x9e,0x6f,0xe1,0x3f,0xc3,0x98,0xed,0x36,0xd4,0xef,0x39,
+  0x66,0xb6,0xbb,0xe0,0x30,0x6a,0x86,0x39,0xbf,0x05,0xcc,0xfa,0x3f,0x97,0xd5,0xe7,
+  0x35,0xd3,0x75,0x36,0x89,0x1f,0x80,0xe0,0x2e,0x00,0x17,0x27,0x50,0xfe,0xc7,0x03,
+  0xb0,0xfe,0x48,0x20,0x70,0xbb,0x4a,0xf9,0xcf,0x06,0xd6,0x9f,0x26,0xc0,0xcd,0xa2,
+  0xa1,0x86,0xfd,0x4f,0x06,0xff,0x3b,0xf7,0x37,0x6b,0x08,0x8d,0x93,0xa9,0xff,0xa3,
+  0x81,0xe5,0xe7,0x3f,0x9f,0x98,0x18,0xfc,0xef,0xdc,0xff,0x7f,0xf5,0xe7,0xbf,0xd8,
+  0xfa,0x2b,0xbc,0x97,0xdf,0x49,0xf8,0x2e,0xcc,0x34,0xfe,0x93,0x81,0xf4,0xff,0xf8,
+  0xfe,0xff,0x5f,0x5e,0x7f,0x49,0x61,0x7f,0xc1,0x9a,0x0b,0x93,0xf2,0xea,0x7f,0xf5,
+  0xa7,0xb2,0xf2,0x2f,0x99,0xe5,0x70,0xfc,0x3f,0xbc,0xfd,0xff,0x0b,0x3f,0x55,0x57,
+  0xaf,0x5e,0x35,0xfe,0x27,0x83,0xff,0x7f,0x9e,0xff,0x5f,0xec,0x3c,0xfe,0x1f,0x79,
+  0xf8,0x7f,0xe4,0xe1,0xff,0xc6,0xfa,0xff,0x1f,0x79,0xf8,0x3f,0xfb,0xf9,0xaf,0x26,
+  0x7f,0xfe,0x6b,0xcd,0xe7,0xfc,0x28,0x5e,0x44,0x54,0x1e,0x11,0x1f,0x86,0x63,0x0d,
+  0x8b,0x4e,0x3a,0x46,0x6a,0xc6,0x82,0xaf,0xc2,0x7c,0xf5,0xe6,0xf3,0x8d,0xa5,0xf4,
+  0x24,0x2c,0xee,0x70,0xfc,0x7a,0x0a,0x3f,0xea,0x10,0xe3,0xa4,0xaf,0xf0,0x55,0xed,
+  0x8d,0xc2,0x82,0xde,0x96,0x6e,0xf2,0x36,0xfb,0xdd,0xb7,0x9c,0xaa,0x5c,0x4b,0x54,
+  0x68,0x0e,0x94,0xdc,0x79,0xe2,0x31,0xf2,0x89,0x25,0x3f,0xba,0x35,0xf7,0x10,0xc4,
+  0x0d,0xd9,0x4b,0x4e,0x2a,0xcd,0x54,0xed,0x93,0x3d,0xbc,0x5e,0x31,0x5a,0x7d,0x68,
+  0x26,0x48,0x91,0xf0,0x02,0x77,0x86,0xe9,0x1f,0x4b,0xfa,0xeb,0x56,0x9b,0xf1,0x56,
+  0x99,0xdb,0xa7,0x8f,0x37,0xb4,0xf3,0x36,0x2b,0x27,0xe1,0x46,0xc1,0xa9,0xb6,0xb8,
+  0x6c,0x73,0x00,0x11,0x7b,0x9f,0xdc,0x69,0xe1,0x47,0x09,0x12,0xda,0x53,0xf8,0x3c,
+  0x0e,0xde,0x0d,0xa4,0x47,0xaf,0x30,0xc4,0x6e,0xb3,0x7e,0x94,0xd7,0x25,0x77,0x8b,
+  0x25,0xe4,0x18,0xf3,0x45,0x1d,0xcf,0x15,0xfc,0x2a,0x19,0x1f,0xe4,0xfe,0xd2,0x76,
+  0x1e,0x04,0x9c,0xfe,0x36,0xe5,0xfd,0x41,0x5e,0x1d,0x2e,0x18,0x4b,0xbb,0xc4,0x3d,
+  0x66,0xc3,0xa5,0x63,0xca,0xa8,0x54,0x15,0x72,0xe8,0x30,0x98,0x8c,0x0f,0x2a,0x66,
+  0x7c,0x90,0x93,0x7c,0xc6,0xe0,0x18,0xda,0xef,0xd2,0xbe,0x44,0xdb,0x2f,0x78,0x34,
+  0xde,0x38,0x07,0x2e,0xf9,0xbd,0x8a,0x3b,0x66,0xcd,0x8f,0x93,0xdc,0xbc,0xde,0x1a,
+  0x0f,0x62,0x5e,0x81,0x66,0xad,0xc0,0x08,0x44,0xc9,0x58,0xfa,0x26,0x68,0x07,0xfa,
+  0x0c,0xf9,0x79,0xe0,0xa0,0xee,0x34,0xe8,0xcf,0x53,0xfa,0x83,0x2c,0x35,0xfb,0xc5,
+  0xc8,0x66,0xf5,0x42,0x58,0x65,0xdc,0x85,0x03,0xe1,0xb0,0xa4,0x86,0x02,0x1e,0xa7,
+  0x4b,0x89,0x31,0xd5,0x08,0xe4,0x59,0x7a,0x16,0x73,0x7e,0xd4,0x7e,0xc6,0xab,0x41,
+  0xfa,0xdf,0x51,0x9b,0x8c,0xb3,0x43,0xbc,0x3f,0x88,0x76,0x60,0x8b,0xb8,0x92,0xde,
+  0x09,0x3f,0x09,0xee,0x43,0xa3,0x81,0x2e,0x0f,0x2f,0x98,0x9c,0x1f,0xa0,0x76,0xed,
+  0x3c,0xf8,0x7a,0x96,0xcd,0x17,0x4f,0xa2,0xfd,0x95,0x3b,0x68,0x2f,0x15,0x97,0xc2,
+  0xa7,0xa0,0xb8,0xdd,0xf3,0x6b,0x78,0x7d,0xa4,0x98,0x61,0x77,0xcb,0x37,0x4c,0xfa,
+  0xe7,0xb5,0x9b,0x9e,0xbb,0x8f,0x07,0x49,0x33,0x87,0xc5,0xdf,0xaa,0x97,0xa6,0xfb,
+  0x4e,0x67,0x7e,0x52,0x30,0x06,0xaf,0x0a,0x3e,0x96,0x75,0xb6,0x66,0xbc,0x90,0xe6,
+  0x0b,0x62,0xff,0x64,0xfd,0x10,0x17,0xae,0xff,0x1b,0x2c,0x51,0xcd,0x9e,0xbd,0xc0,
+  0xbc,0xef,0x65,0xe9,0xe2,0x87,0xea,0x89,0xba,0x0a,0xcd,0xf1,0x26,0x0f,0xd4,0x0a,
+  0x9c,0x28,0x2e,0x92,0x64,0x7f,0x4c,0x85,0xdb,0xd7,0x89,0x68,0x02,0x5b,0x0b,0x05,
+  0x46,0x66,0x88,0x5c,0x8e,0xfc,0xba,0x96,0x13,0xa5,0x1a,0xef,0x97,0x9a,0x48,0xb1,
+  0xb1,0xc4,0x20,0xde,0x64,0xfe,0x2f,0xf0,0xb6,0x92,0x73,0xe3,0xf2,0x9a,0x95,0xa7,
+  0xd8,0xa3,0x0d,0x3b,0x06,0xef,0x5c,0x9d,0xfe,0x0e,0x5d,0xcf,0xe6,0xaa,0x6f,0x05,
+  0x9c,0xb3,0xd4,0xc7,0x4c,0xa2,0xf8,0x4a,0x6b,0x7d,0xa4,0x56,0xd8,0xab,0xe9,0xc6,
+  0x12,0xbe,0x9e,0x5b,0x55,0xd5,0xc8,0x28,0xc1,0xfd,0xb3,0x95,0xa8,0xaa,0x9c,0x61,
+  0x5b,0x0d,0x5b,0x39,0x3f,0xb3,0x95,0x64,0x5b,0xea,0x23,0x75,0xc2,0x3b,0xa1,0x6c,
+  0x96,0xa9,0x3b,0x07,0xe1,0x14,0x78,0x99,0x3c,0x90,0xc3,0x1b,0x85,0x2c,0xd2,0x1d,
+  0x03,0xf2,0x22,0xfc,0xc7,0x17,0x73,0x8f,0x59,0x45,0xb2,0xfe,0x00,0xe7,0x47,0x51,
+  0x9f,0xb0,0x89,0x87,0x05,0x39,0x5f,0x7a,0x1e,0x2f,0x0b,0x39,0x0c,0x3e,0x69,0x5a,
+  0xb8,0x26,0x5e,0x31,0x48,0x7d,0xb0,0xa9,0xa9,0xd1,0xd2,0x1f,0x4d,0x19,0xa0,0x89,
+  0x6a,0x90,0x69,0x03,0xda,0x9d,0xac,0x2c,0xe4,0xe0,0x8d,0xd2,0x8e,0x41,0x76,0x3d,
+  0x8f,0x7f,0x41,0x73,0xbb,0x4f,0xb3,0xb7,0x59,0xeb,0x23,0xd5,0xae,0x1a,0x27,0x75,
+  0xa7,0x9f,0x83,0xe6,0x7e,0x34,0x33,0x95,0x82,0x42,0xda,0x2c,0x54,0x86,0x6c,0xdb,
+  0x79,0xbc,0xaf,0x87,0x57,0x00,0x90,0x93,0xab,0x93,0xe8,0x8f,0x56,0xa2,0xd5,0x44,
+  0x9d,0x03,0x42,0x33,0x9d,0x13,0xe0,0x8d,0xd2,0xa4,0x66,0xa1,0x48,0x0b,0xb4,0xe1,
+  0x95,0x5d,0xb4,0x24,0xb5,0x3e,0x36,0x98,0xfe,0x31,0x37,0x2f,0x8b,0xdd,0x4b,0xf2,
+  0x6b,0xdc,0x5f,0xaa,0x89,0x66,0xa7,0x49,0x0d,0xfe,0x22,0xcd,0x96,0x4b,0x5e,0x94,
+  0x1a,0xb4,0x92,0xa0,0x2b,0xf7,0x5e,0xff,0xa4,0x7d,0xba,0x86,0xaa,0xe3,0xf1,0x29,
+  0x32,0x38,0x7d,0x9c,0x96,0xac,0x92,0x3e,0x52,0x04,0xad,0x90,0x13,0x27,0x75,0xb8,
+  0x02,0x4b,0x99,0x58,0x32,0x19,0x1f,0xe4,0xfc,0xa8,0xcf,0x24,0x5f,0xb5,0x23,0x9a,
+  0xa0,0x85,0x07,0x37,0xf5,0xcb,0x4f,0x4e,0x34,0x4a,0x3b,0x2d,0x5d,0x4e,0x0c,0x7e,
+  0x91,0xc2,0x8f,0xe2,0xfc,0xb1,0xcc,0xb6,0x69,0x17,0xd8,0x2b,0x5a,0x55,0xad,0x23,
+  0x9a,0xf3,0x1e,0xdb,0x55,0xf8,0x5d,0xcd,0xb1,0xb9,0x71,0x9f,0x76,0xd9,0xe3,0xd5,
+  0xec,0xaf,0x8b,0x25,0x93,0xe7,0xb1,0x5c,0x89,0xd3,0x6e,0x70,0xa2,0xe1,0x9d,0x7d,
+  0x96,0x46,0x20,0x2b,0x77,0x09,0x23,0x3d,0x91,0x48,0x9d,0x17,0x64,0xb6,0x24,0x4e,
+  0x07,0x1f,0x72,0xda,0x32,0x3b,0xfc,0xe9,0xc9,0xf8,0xa0,0xc9,0x8f,0x2a,0xd4,0xc4,
+  0x6c,0xd2,0xa4,0x35,0x14,0xba,0xfb,0x6e,0x50,0xd2,0x5f,0x84,0x06,0xa5,0x50,0x93,
+  0xb3,0x89,0x9d,0xed,0x95,0xd0,0x1e,0xcf,0x21,0xd9,0xc2,0xc4,0xfa,0x6f,0x9b,0xd1,
+  0x01,0x07,0x05,0xce,0x4f,0x23,0x03,0xb6,0xc7,0x55,0x93,0x5d,0x8f,0xcb,0x2e,0x98,
+  0xfc,0x70,0xde,0x31,0x4d,0xd7,0xf2,0xb7,0x64,0xa7,0x27,0xeb,0x23,0x71,0x7e,0x54,
+  0xfc,0xc7,0xdc,0x09,0xd6,0x0b,0xc7,0x22,0x66,0xf4,0x73,0xc0,0xf6,0x3e,0x7c,0xfe,
+  0x2d,0x47,0x74,0x43,0xa1,0x36,0xba,0xc0,0xbb,0x82,0x46,0xe5,0x64,0x7f,0xb4,0x0f,
+  0x84,0x42,0xb3,0x5f,0x1e,0xcf,0x0e,0x50,0xdf,0x4f,0xa4,0xc5,0xf5,0xc2,0x1b,0x50,
+  0x51,0xeb,0xb8,0x6d,0xeb,0x39,0xba,0x83,0xf1,0x8e,0x2a,0xe2,0xc5,0xc9,0x7a,0x83,
+  0x66,0x7c,0x50,0xe3,0x6d,0x68,0x40,0x55,0x46,0x24,0x2f,0xd8,0x78,0x61,0x8a,0x7e,
+  0x52,0xa6,0x64,0x31,0x99,0x57,0x68,0xef,0xe2,0x1e,0x5a,0x4b,0x7d,0xc8,0xb5,0x2e,
+  0x5e,0x0d,0x92,0xb3,0xc1,0x2b,0xa2,0x47,0x84,0x22,0xb6,0x31,0xd1,0x16,0xd6,0xd9,
+  0x49,0x3b,0x48,0x39,0x3d,0xa2,0x39,0x99,0x1c,0x27,0x49,0x84,0xe2,0x92,0xc6,0x9b,
+  0xe6,0x78,0xd2,0x97,0x99,0x65,0x34,0xfe,0x96,0x97,0xa9,0xd9,0x0a,0xab,0x42,0x37,
+  0x94,0xa7,0xd3,0xe9,0x5d,0x6a,0xc8,0x90,0x23,0x84,0x24,0xeb,0x43,0xc2,0x4c,0x6a,
+  0x92,0xa2,0xd7,0xa4,0xcf,0x04,0x1f,0xdb,0x65,0x6c,0xe0,0x07,0xb9,0xd1,0xfb,0xf5,
+  0x50,0xf3,0xf7,0xc8,0x4c,0xd8,0x47,0xf2,0xfb,0x64,0x89,0xd0,0x24,0xff,0x2a,0xc2,
+  0x9b,0xf8,0x2c,0x8e,0x3b,0xbe,0x2f,0x5e,0x07,0x9f,0x35,0xcd,0x0f,0x65,0xad,0x29,
+  0x78,0x42,0xfb,0xcd,0x33,0x0b,0x57,0x64,0x95,0xcb,0x37,0xa0,0xea,0x99,0x3f,0x36,
+  0xad,0x4e,0x4e,0xf6,0x37,0xb1,0xcd,0x4c,0xc8,0x5b,0xc7,0x1e,0x79,0x08,0x8f,0xd5,
+  0x9c,0xea,0x44,0xff,0x53,0xa1,0xc2,0xc8,0x6a,0x42,0xc1,0xcb,0x25,0xf6,0x32,0xfd,
+  0x8b,0x49,0x7e,0x94,0xff,0x47,0x1f,0xc1,0xd5,0xa6,0xaa,0x78,0xd6,0xc8,0xb4,0x0f,
+  0xa4,0xab,0xe1,0xaa,0x90,0x7d,0xa4,0xe6,0x8a,0xfa,0x31,0xdb,0x33,0x64,0x7f,0xae,
+  0xc6,0x97,0xf0,0x8f,0xf5,0x95,0x9e,0x49,0xf6,0xa7,0xbb,0xfe,0x09,0xe3,0x40,0x6c,
+  0x9e,0x41,0x3f,0x21,0xd9,0xec,0x5c,0xcc,0xbd,0x6a,0x6e,0x7d,0xf8,0x6d,0x58,0x0f,
+  0xea,0x60,0x66,0x80,0xe4,0x6a,0xff,0xae,0xe4,0x1b,0x8e,0xec,0xec,0xa4,0x7f,0x8c,
+  0xc7,0x07,0x0f,0x68,0x26,0x69,0xb3,0x6d,0xdb,0xb3,0xaa,0xdb,0x68,0xe6,0xfd,0x64,
+  0x9f,0x86,0xfc,0xa5,0x77,0x1a,0xe4,0x61,0xf8,0x11,0xe4,0x1f,0x95,0x43,0x24,0x19,
+  0x1f,0x0c,0x49,0x27,0x4d,0xf9,0x1f,0x40,0xed,0x26,0xe9,0xcc,0x6d,0xdc,0xe8,0x21,
+  0x43,0x42,0x23,0x84,0x7a,0x33,0xb2,0xc8,0x37,0xe1,0x71,0x70,0xc6,0xe5,0xdc,0xec,
+  0xfe,0xa4,0x7f,0x0c,0xe5,0xe7,0xa7,0x28,0x54,0xd3,0x87,0x79,0xf7,0x93,0x5f,0xf9,
+  0x8c,0x48,0x37,0x2a,0x9a,0x7f,0x03,0x67,0xc8,0x1e,0xfb,0xd9,0x4a,0xf6,0xa6,0x81,
+  0xaa,0x79,0xb7,0xc5,0x3f,0xc6,0xb8,0x3e,0x62,0x26,0x49,0xfe,0x24,0x7c,0xa0,0xf8,
+  0x12,0x65,0xe8,0x2e,0xf1,0x8c,0xcb,0x01,0x71,0xb7,0x34,0xe2,0xf1,0xf5,0x65,0xed,
+  0xb0,0xf8,0xbb,0x12,0xf1,0xc1,0x52,0x2e,0xcf,0x87,0xe1,0x77,0x50,0xa0,0xc9,0x9c,
+  0x06,0xf3,0x1b,0xb2,0x50,0x73,0x7c,0x4b,0xf6,0x68,0xc7,0x4c,0xff,0x58,0xe3,0xc0,
+  0x24,0x3f,0xbc,0xc7,0x8c,0xf7,0x99,0xf9,0x6e,0x75,0x4a,0xbb,0xd1,0xae,0xc9,0x31,
+  0x71,0xb7,0xd2,0x22,0x14,0xf5,0xca,0x8c,0xb8,0x95,0x66,0xce,0xcf,0xe9,0x9e,0xc2,
+  0x8f,0x1a,0x0f,0x5a,0x75,0xc2,0x86,0xbc,0x6f,0xe3,0x7c,0xb2,0x1b,0x5a,0xa0,0x08,
+  0x07,0xe1,0x0e,0x5e,0x31,0xc9,0xcc,0x8f,0x9b,0xac,0x8f,0xc1,0xf9,0x51,0x87,0x13,
+  0xa4,0x20,0xbf,0xd2,0x1e,0x72,0x71,0x6f,0x21,0xaf,0xc7,0xee,0xaa,0x96,0x9d,0x5b,
+  0x9a,0x78,0x6a,0x8c,0x01,0xd3,0xad,0xf1,0xc1,0xcc,0xd5,0xec,0x12,0xde,0x1f,0x9f,
+  0x5f,0x8f,0x9e,0x50,0x2b,0x8e,0xe3,0x8b,0x6f,0x87,0x97,0xa1,0xcc,0xbf,0xa9,0x5d,
+  0xec,0x90,0x8e,0xc1,0x5e,0xbe,0x02,0xf1,0xf4,0xc9,0xf8,0xe0,0x4d,0x97,0xe1,0x92,
+  0x92,0xc8,0x8f,0xd3,0x2e,0x6a,0x65,0x47,0x1d,0xc3,0x05,0xcf,0xa5,0x5d,0x85,0x47,
+  0x8e,0xdf,0xac,0x89,0xf7,0x99,0xf1,0xc1,0x79,0xaf,0x59,0xe2,0x83,0x3d,0x69,0x1c,
+  0xff,0x2c,0xcc,0x72,0x1c,0xcd,0x79,0x4d,0x79,0x35,0x5a,0x65,0xb3,0xbf,0xe4,0xf4,
+  0xc0,0x49,0x86,0x83,0x37,0xc4,0x7a,0xf6,0xbb,0x68,0x69,0xfc,0xe6,0xee,0x2f,0xc7,
+  0x26,0xf9,0x0c,0x47,0xe9,0x47,0xbc,0xe9,0x49,0x9e,0xfc,0x28,0x89,0x43,0x8b,0x5a,
+  0x92,0xc7,0x53,0xba,0xd5,0x16,0x56,0x92,0x67,0xef,0xc2,0xbd,0xff,0x33,0xd5,0x17,
+  0x47,0xe0,0x11,0x9b,0x5c,0xff,0x3e,0x94,0x93,0x7b,0x55,0x17,0xc8,0xea,0x75,0x11,
+  0x68,0x24,0x6e,0x42,0xd1,0x94,0x30,0x98,0xe0,0xf6,0xf7,0x45,0x89,0x56,0xb0,0x15,
+  0xdf,0xd7,0x66,0xe5,0x47,0xc5,0x81,0xf3,0xa3,0x8a,0x76,0xe2,0xf9,0xfd,0x80,0xbb,
+  0x25,0xe3,0x79,0xdb,0xfc,0x73,0xf0,0x1f,0x7a,0x60,0x47,0xc6,0x1e,0x52,0x24,0x8c,
+  0x67,0x70,0x24,0xf9,0x51,0xf9,0x66,0x35,0xe6,0x0a,0xd5,0xd1,0x34,0x6d,0x27,0x9c,
+  0x60,0x3e,0x97,0x7d,0x43,0x81,0x93,0xfb,0xcf,0x3d,0xad,0x79,0xe2,0x37,0xd9,0x5b,
+  0x09,0xfe,0x52,0x92,0x1f,0xa5,0x4f,0xe7,0xfb,0xe1,0x00,0x98,0x45,0x00,0xae,0x4e,
+  0x5f,0x2c,0xcc,0x1b,0x96,0xfb,0xc9,0x65,0xe1,0x61,0xed,0x81,0x61,0x71,0xb2,0xa2,
+  0x78,0x12,0xff,0x9c,0x36,0xf1,0x8f,0x57,0xca,0x6a,0x9a,0xb6,0x92,0x67,0x67,0x68,
+  0x76,0xb6,0xfe,0x43,0x36,0x12,0x7a,0x64,0x79,0xd6,0x16,0x31,0x0e,0x89,0xfb,0xd7,
+  0xa4,0xf2,0xc3,0x0f,0x4b,0xce,0xb8,0xf8,0x64,0xce,0x07,0xda,0x09,0x28,0xa9,0x7d,
+  0x3b,0x4a,0xfe,0x1e,0x25,0xf0,0x3f,0xd6,0xd3,0x7d,0xe1,0x38,0x67,0x58,0xe1,0xf3,
+  0x8b,0xfb,0x53,0xe2,0x83,0x87,0x01,0x9a,0x37,0x48,0x89,0xb6,0x20,0xc6,0xcf,0x78,
+  0x7f,0xb4,0x98,0xb6,0xba,0xe9,0xf1,0x5c,0xf2,0x7e,0xc3,0x78,0xa2,0x4a,0x92,0x1f,
+  0x35,0xac,0xcc,0x12,0x0e,0xb0,0x7c,0x5d,0x0e,0x90,0x43,0xb0,0x5e,0xff,0xce,0x53,
+  0xb6,0x1f,0x84,0x5f,0xd3,0xf6,0xb3,0x15,0x85,0x19,0xcb,0xc9,0x3b,0xe5,0x8f,0xb1,
+  0xd9,0x3c,0x3f,0xee,0xca,0xe4,0xfc,0xba,0x3c,0xdc,0x6f,0xe0,0xa1,0x59,0x2a,0xb1,
+  0x87,0x3f,0x55,0x7c,0x9a,0xcc,0x69,0x78,0xc3,0xcc,0xcd,0x8a,0xe7,0xa3,0xfe,0x3d,
+  0xa1,0x7a,0xcc,0xfc,0xb8,0xc9,0xf9,0x5a,0x2e,0xae,0x8f,0xf2,0x3c,0x2f,0x02,0x80,
+  0x68,0xc7,0xe3,0x33,0xee,0x7e,0xad,0xe6,0x7b,0x70,0x51,0xfb,0x2b,0xb6,0x61,0x78,
+  0xbc,0x50,0x24,0x5f,0xcf,0xc9,0xf5,0xe1,0xe7,0xf7,0x12,0x3c,0xd4,0x90,0xb9,0x4e,
+  0x1c,0x92,0x96,0x84,0x4b,0x55,0x77,0x5f,0x8e,0x87,0x9e,0x80,0x45,0xd5,0x10,0x15,
+  0x2f,0x48,0x66,0xfe,0x42,0xb9,0xe8,0x9f,0x5c,0xff,0x93,0x74,0x3b,0x2f,0xcb,0xcf,
+  0x96,0xd4,0x6f,0xdd,0x8e,0x62,0x07,0xcd,0xc5,0xe1,0x6c,0x85,0xae,0x0f,0x2d,0xe2,
+  0xfc,0xf0,0xd3,0xe3,0xd0,0xc8,0xe6,0x4d,0xe5,0x47,0xb1,0x7c,0xf5,0xce,0xe5,0xe4,
+  0x77,0xf0,0xaf,0x4c,0x5d,0x49,0x03,0x24,0x4b,0x45,0xfc,0x13,0xa2,0x6b,0xfc,0xbf,
+  0xe1,0xbf,0xe2,0xf1,0xd0,0x24,0x3f,0x6a,0xa9,0xd4,0xca,0xcf,0xe3,0xaf,0x6f,0xac,
+  0xc8,0x3e,0xb5,0x61,0x73,0x9b,0x5a,0x4f,0x73,0xfd,0xb3,0x11,0x6f,0x17,0xd5,0xbb,
+  0x3c,0xa4,0x57,0x2d,0x4d,0xac,0xe7,0x54,0x7e,0x54,0x01,0x7b,0xf4,0x19,0x71,0x14,
+  0xde,0x84,0xbd,0x31,0xfb,0x39,0xf9,0x36,0x13,0xff,0xd8,0xf5,0x9c,0x51,0x7a,0xd1,
+  0xec,0x98,0x56,0x70,0x31,0x85,0x1f,0xd5,0x4d,0x8e,0x28,0x08,0x03,0x76,0xc0,0x20,
+  0xf1,0xe5,0x39,0xc2,0x62,0x3c,0x3c,0xd2,0xe3,0x4b,0x77,0xf0,0x78,0x4d,0x22,0x5f,
+  0x4c,0xc8,0x4e,0xc6,0x6b,0x94,0x0e,0x18,0x4d,0x2b,0x5b,0x81,0x87,0xf4,0x5c,0xd3,
+  0x31,0x98,0x15,0xba,0x39,0x2a,0x9e,0x63,0xc7,0xa2,0xde,0x5a,0x3b,0x6f,0x24,0xf1,
+  0x06,0x1c,0x4a,0xe4,0xc7,0x4d,0xcc,0x67,0xd2,0x2a,0x7a,0x10,0x9c,0x4b,0x69,0x34,
+  0xfb,0xe5,0x70,0x33,0x31,0xfd,0xed,0x7f,0x80,0xc6,0xb8,0x73,0x25,0xdd,0xec,0x7c,
+  0x8f,0x8d,0x22,0xb0,0x91,0xad,0xfc,0xa8,0x72,0x1e,0x1f,0x84,0x74,0x8d,0xc6,0xc2,
+  0x66,0x1b,0x8b,0x3b,0xe4,0xcd,0x66,0x3d,0xdb,0x39,0x3d,0x08,0x7b,0x7a,0x85,0xcd,
+  0x50,0x94,0x9a,0x1f,0xa7,0x9a,0xfc,0x28,0x95,0x57,0x43,0x7a,0x51,0xe0,0xdd,0xd0,
+  0xe4,0x05,0xe4,0x15,0xfc,0xc3,0x50,0x90,0x2e,0x40,0xfc,0x63,0x52,0xa7,0x94,0xeb,
+  0x92,0xfe,0xf9,0x35,0x3c,0x3e,0x88,0x78,0x7d,0xe9,0xb8,0x7f,0x5e,0x90,0x71,0x60,
+  0xd2,0xa2,0xdc,0x7c,0xd0,0x0f,0x15,0xbc,0x63,0x88,0x85,0x1f,0x65,0xd6,0x0b,0xaa,
+  0xe2,0x4d,0x60,0x4f,0x23,0x10,0x32,0xab,0x61,0xff,0x77,0x44,0x80,0x87,0x83,0x8e,
+  0x7e,0xb3,0x50,0xb6,0x19,0x21,0xfd,0x68,0x12,0xff,0x94,0x9b,0xf3,0x17,0x2e,0xb5,
+  0xf7,0x4f,0xbb,0x00,0xc7,0x94,0xaa,0x40,0xd6,0xeb,0x8d,0xcf,0x32,0xbc,0xc3,0x72,
+  0xc7,0xaf,0x44,0x44,0x44,0xd5,0x38,0xbf,0x7f,0xda,0x47,0xa9,0xf1,0x41,0xa7,0x6a,
+  0xcf,0x6c,0x4a,0x8f,0xab,0x11,0x28,0xb1,0x89,0x61,0xdc,0x32,0xdd,0x50,0x92,0x2b,
+  0x87,0x9d,0x83,0x3a,0x53,0x8b,0x38,0x03,0x33,0xc9,0x8f,0x0a,0xf0,0xf8,0xa0,0xcb,
+  0xdd,0x67,0xcb,0x4d,0xe7,0xd9,0xa6,0xee,0xa5,0x37,0x66,0x83,0xc4,0x36,0x4b,0xee,
+  0x80,0xcc,0xe3,0xa1,0x3b,0xd4,0xc2,0xd4,0xf8,0xe0,0xb6,0x04,0x3f,0xea,0xec,0xf5,
+  0x6d,0xe9,0x43,0x8c,0xf3,0xa3,0x96,0x6c,0x0e,0x17,0x73,0x84,0xe9,0x97,0xf7,0x20,
+  0x10,0xda,0x65,0xae,0x67,0xb6,0xa5,0x3e,0x64,0xa2,0xde,0x75,0x20,0x6b,0xbb,0xff,
+  0xbd,0x05,0xc7,0x9a,0x7c,0x7f,0xb3,0x2c,0x2a,0x3e,0xc5,0xaf,0xd4,0x3b,0xa2,0xc2,
+  0x39,0xf2,0xbe,0xf9,0xbe,0x16,0x7e,0x54,0x1f,0xdf,0x0f,0xa4,0x52,0x73,0x6c,0x11,
+  0xcf,0x91,0x51,0xd5,0xf7,0x90,0x23,0xaf,0x85,0xd7,0x47,0x32,0x0b,0x25,0xf5,0xde,
+  0xfb,0x06,0x4c,0xe1,0x47,0x51,0x33,0x3e,0x58,0xa6,0xda,0xd7,0x89,0x7a,0xfd,0x88,
+  0x59,0x96,0xaa,0x20,0x9f,0x37,0x0a,0x99,0xb9,0x11,0x81,0xa8,0x7a,0x46,0xf1,0xa6,
+  0xe6,0xc7,0xf1,0xf8,0xe0,0x21,0xdc,0xcf,0x75,0xef,0xe6,0x1c,0xa4,0x3f,0x21,0xf3,
+  0xf4,0xce,0x21,0x7f,0x45,0xf9,0x86,0xf0,0x2d,0xbc,0x51,0xec,0x6d,0xec,0x19,0xc9,
+  0x4c,0x94,0xf3,0x4f,0xee,0x1f,0x2a,0x2d,0xc5,0xf3,0x52,0x68,0x64,0xb8,0xc9,0x33,
+  0xc2,0x5e,0xde,0x36,0x25,0xcf,0x96,0x06,0x8d,0x51,0x1c,0xcc,0xb2,0x6d,0x24,0x3f,
+  0x6d,0x32,0xcf,0xcb,0xd1,0x49,0xfc,0x03,0xca,0xfd,0x70,0x40,0xe5,0xdd,0xc1,0xfc,
+  0xdb,0x84,0xc7,0xd4,0xe2,0x98,0x4d,0x8d,0xfd,0x18,0xd2,0x61,0x76,0x9c,0xae,0x09,
+  0x6f,0xa7,0x4f,0x13,0x01,0xcf,0x6f,0x7a,0x20,0x19,0x1f,0xdf,0xf6,0x35,0xb8,0xaa,
+  0xdf,0x1a,0xca,0x5c,0x23,0x3e,0x21,0xfd,0xa9,0xa3,0x2a,0x34,0x73,0xb9,0x50,0x46,
+  0x5e,0x8e,0xfe,0x30,0xe4,0x3e,0x23,0x1e,0x21,0xbf,0x61,0x9b,0xe3,0xcb,0xd6,0x4c,
+  0x4b,0xf2,0xa3,0x6c,0x33,0x76,0xd3,0x4b,0xb9,0x3e,0xde,0xed,0x8b,0x57,0x03,0xa8,
+  0x02,0x7b,0x5c,0x44,0xf9,0x93,0x3f,0x4d,0x13,0x87,0x79,0xbf,0x4b,0x6d,0x56,0x6a,
+  0x7e,0x5c,0x28,0xf7,0x08,0xbc,0xc5,0x16,0x22,0xbe,0x12,0x2a,0xa4,0x57,0x37,0x54,
+  0x85,0xb2,0xce,0x7c,0xb9,0x42,0x79,0xa5,0xad,0x2a,0xdf,0x71,0x46,0xf4,0xc1,0x7b,
+  0xbf,0x2a,0x3d,0xbb,0xc9,0xca,0x8f,0x7a,0x06,0xf1,0xcc,0xf3,0x2c,0x3f,0xed,0x9e,
+  0xff,0x2e,0xae,0xd1,0xd6,0x4f,0x2f,0x8e,0x80,0x41,0xf2,0x24,0x96,0x57,0xbc,0x41,
+  0xfe,0x55,0x38,0x57,0xfd,0x8c,0xf1,0xd6,0x27,0x53,0xe3,0x83,0xb0,0x83,0xc9,0x0f,
+  0xde,0xa1,0xa8,0x4f,0xd3,0xe2,0x6a,0xe1,0x4b,0x08,0x1e,0xd7,0x4b,0xc5,0x90,0x11,
+  0x24,0xcb,0xb5,0xb5,0xea,0x6c,0x6e,0xca,0xf5,0x4e,0xce,0xd7,0x72,0x5b,0x85,0xc3,
+  0xa0,0xd2,0x1b,0x6e,0xbd,0x6e,0x25,0x6b,0x69,0x28,0x61,0x19,0xc5,0xc4,0xb5,0xaa,
+  0x5d,0x73,0x8f,0xc8,0xba,0x33,0x04,0x7b,0x84,0x42,0xe3,0x84,0x87,0xbc,0xd6,0x34,
+  0x31,0xdf,0x35,0x7d,0x88,0xf3,0xa3,0xba,0x6e,0xee,0x16,0xbf,0x40,0x3e,0x66,0xbe,
+  0x3a,0x47,0x9b,0x3c,0x87,0xb4,0x30,0x5f,0xc8,0x11,0x91,0x1f,0x90,0xfe,0x48,0x38,
+  0xff,0x84,0x9c,0x62,0x13,0xef,0xab,0x0b,0x5c,0xde,0x56,0x44,0x1d,0x1e,0xf1,0x7d,
+  0x0e,0x14,0xb7,0x64,0xb5,0xa3,0x18,0x7f,0x2b,0xe0,0xeb,0xe7,0x65,0xb1,0xd5,0x4b,
+  0x60,0xf2,0xc3,0x93,0xfc,0xa8,0x7c,0x13,0xff,0x2c,0x42,0xeb,0xbe,0xf1,0x61,0xed,
+  0x55,0xce,0xc6,0x0c,0x4e,0x2b,0x84,0x93,0x50,0xac,0xd9,0x0d,0x71,0x31,0x7c,0xac,
+  0x6c,0x45,0x7d,0x47,0xf4,0xc9,0xfe,0xb0,0x3b,0x4c,0x7e,0x94,0x53,0x71,0x3c,0xe7,
+  0xdc,0x85,0xda,0xcd,0xa7,0x46,0xb6,0x87,0x0b,0xa0,0x2f,0x34,0x47,0xa5,0x11,0x27,
+  0x6f,0x73,0xc1,0xf5,0x57,0xba,0x05,0xff,0x08,0x7c,0x7e,0x51,0x2d,0x8a,0x29,0x0e,
+  0x7b,0x9c,0x2b,0xf3,0xb6,0x91,0x67,0xe0,0x71,0x56,0xe2,0x41,0xeb,0x64,0xb7,0xba,
+  0x13,0x38,0xc3,0x33,0x5b,0x4f,0xf2,0xa3,0x14,0xc4,0xdb,0x6a,0x08,0x6c,0x0a,0x1a,
+  0x51,0x5b,0x79,0x5b,0x22,0xb0,0x35,0xc1,0x66,0xa5,0x90,0xfb,0xf5,0x22,0xa4,0x91,
+  0xee,0xee,0xa9,0xc1,0xfd,0xd6,0x30,0xb1,0xfa,0x24,0x0f,0x3f,0xba,0xab,0x02,0xe4,
+  0xa8,0xd8,0xa1,0x9c,0x30,0xd9,0x08,0x44,0x37,0xeb,0xb3,0xb9,0xa2,0x62,0x44,0xfa,
+  0x98,0xd7,0x47,0xda,0x27,0xea,0x4f,0x4d,0xc6,0x07,0x37,0x27,0x68,0xe1,0x8e,0xfe,
+  0x9a,0x6e,0x9e,0xdf,0xc4,0xf3,0xdd,0xea,0x51,0x22,0xce,0xe3,0x83,0x87,0x71,0xc5,
+  0x16,0x1a,0x8e,0xf3,0x2f,0x0c,0x5a,0xfa,0xa3,0x7d,0x64,0xe2,0x43,0xf7,0x88,0x78,
+  0x8e,0x5e,0xf5,0x54,0x49,0xf6,0x41,0xf1,0x3c,0x8c,0xa9,0xa5,0x9c,0xff,0xfc,0x27,
+  0x78,0x05,0x4a,0x29,0x5e,0xb1,0xf4,0x87,0xdd,0xf6,0x11,0x7d,0x3e,0xe4,0x24,0xb4,
+  0x0b,0x24,0xb6,0xc9,0x53,0xc2,0x68,0xa7,0xf3,0x5d,0xe5,0x70,0x7f,0xd5,0x19,0x3a,
+  0xac,0x0d,0x40,0xcb,0x51,0xa7,0x87,0x76,0x5a,0xf2,0xe3,0xfa,0xe0,0xa4,0xb4,0xf7,
+  0x4e,0x67,0x5f,0xa7,0xe7,0xa5,0x42,0x7d,0x27,0xb8,0xa9,0x8d,0x77,0x97,0x3c,0x24,
+  0xa9,0x47,0xe7,0x7a,0x9c,0xbd,0xac,0x51,0x53,0xa5,0x80,0xea,0x3c,0x3a,0xb9,0x7f,
+  0x12,0xfc,0x70,0xe7,0x69,0x1a,0x5b,0xd9,0xc1,0xf3,0x0d,0xd9,0x86,0xa7,0xc8,0xa0,
+  0x72,0x38,0xe1,0x51,0x19,0xe0,0x78,0xf2,0x38,0xe5,0xfd,0x61,0x27,0xde,0xb7,0x7a,
+  0xfa,0x10,0xfd,0x84,0x75,0xf5,0xdb,0x63,0x59,0xb3,0xe1,0x67,0x60,0x1e,0x9c,0x77,
+  0xd3,0x2e,0x1a,0xde,0x9e,0xd6,0x98,0xf8,0x9e,0xff,0x18,0xf3,0x80,0x5b,0x17,0xfb,
+  0x6b,0x2d,0xfc,0x28,0x18,0xdd,0xe6,0xe3,0x24,0xf9,0xca,0xd6,0x8f,0xc1,0x37,0x9c,
+  0x39,0xd2,0x38,0xfc,0x8d,0xab,0xca,0x34,0xe3,0xe6,0xf1,0x42,0x01,0x3a,0x42,0xa3,
+  0x54,0x7e,0xd4,0x28,0x2f,0xfb,0x13,0x13,0x57,0xe0,0x7e,0xa8,0x0c,0xda,0xf7,0xe5,
+  0x0c,0xd5,0x5e,0x14,0xbc,0xc6,0xb4,0xd8,0xd7,0x0b,0xb5,0x13,0xcc,0x3b,0xdd,0xbe,
+  0x73,0x4a,0x7f,0xd8,0x83,0x14,0xf1,0x6d,0x4c,0xe8,0x85,0x4d,0x69,0x0f,0xf0,0x36,
+  0x31,0x1f,0xc3,0xde,0x8e,0x85,0x06,0x02,0xef,0xbf,0x57,0x1a,0x79,0x7f,0xc6,0x4e,
+  0x92,0xac,0x8f,0xd4,0x87,0xf2,0x67,0x4f,0x93,0xaa,0x64,0xc4,0xa0,0x97,0xa7,0x51,
+  0x00,0xd8,0xb3,0x5f,0x34,0x1b,0xeb,0xc8,0x1e,0x28,0x6c,0x33,0x1d,0xbe,0xaa,0xa5,
+  0x3f,0xec,0xb0,0xf2,0x35,0x78,0x96,0xe5,0x77,0xd0,0xef,0x93,0x1f,0xf3,0xb2,0x00,
+  0xae,0xc8,0x9a,0x75,0xaf,0xc3,0x81,0xb6,0xd9,0x71,0xf1,0x9f,0xc8,0x57,0xb5,0x4d,
+  0x8d,0x3b,0x74,0xfa,0x3e,0xb1,0xd6,0x47,0xba,0x07,0x3e,0x61,0x31,0x23,0xd3,0x43,
+  0x5e,0x86,0x5f,0x47,0xdd,0x03,0x6e,0x51,0x34,0xe0,0xfc,0xbd,0x9e,0x41,0xc7,0x21,
+  0xd1,0x05,0x46,0xbe,0x47,0x73,0xe7,0x8b,0x96,0xfe,0xb0,0x33,0x9e,0xd3,0xfe,0x39,
+  0xca,0x41,0xe0,0x97,0x07,0x4c,0xb4,0x33,0x6d,0x4f,0x4d,0x5c,0xfd,0x34,0xb7,0xea,
+  0x25,0x47,0xec,0x85,0xe1,0xec,0x3f,0x91,0xc5,0xbd,0x8e,0x15,0x72,0x32,0x3f,0x8e,
+  0x72,0xfc,0xa3,0xa3,0x36,0xec,0x16,0x25,0xf8,0xe3,0x83,0x3e,0xc1,0xd6,0xb0,0x75,
+  0x28,0x7a,0x9e,0x75,0x5d,0x5c,0x1a,0x6b,0x29,0x84,0x17,0xc0,0x9b,0xb7,0x54,0xaf,
+  0x49,0xda,0x77,0x7d,0x79,0xdb,0x61,0x2f,0xcd,0x67,0x74,0x58,0xcc,0xa5,0x2f,0xdb,
+  0x8b,0x05,0xf9,0x21,0xf2,0xb6,0x7e,0x00,0x6e,0x35,0x22,0xf5,0x64,0x01,0x59,0x27,
+  0xa8,0x4d,0xae,0x90,0xcd,0x3b,0xb9,0x9e,0x26,0x3f,0xaa,0x29,0x9f,0xd7,0x07,0x28,
+  0xe3,0x65,0x30,0xe3,0xb6,0x40,0xf6,0x3b,0x91,0xe7,0x1b,0x42,0xef,0xd3,0x1f,0x90,
+  0xeb,0x50,0xf7,0xe6,0x87,0xe8,0xa0,0xa5,0x3e,0x49,0x1d,0xe2,0x9f,0xbd,0x51,0xd3,
+  0xbe,0xa8,0x85,0x46,0xa1,0xc4,0x58,0xb2,0x80,0x9c,0x14,0xf6,0x32,0xb3,0x02,0x4c,
+  0x3a,0x84,0xdf,0x56,0xcf,0xe0,0x7a,0x26,0xf1,0xc9,0xe0,0x0c,0xde,0x0d,0x76,0x2f,
+  0x27,0x81,0xe7,0x19,0x1f,0x90,0xaa,0x1f,0x65,0xe9,0x39,0xef,0xab,0x57,0x88,0x97,
+  0x6d,0xd7,0xc5,0xdb,0x94,0x97,0x34,0xef,0x36,0x77,0x48,0x5c,0x64,0xe9,0x0f,0x92,
+  0xe0,0xab,0x2c,0x43,0x35,0x82,0x60,0x9d,0xa3,0x9d,0xc6,0x38,0x1b,0x89,0xe2,0x00,
+  0xc4,0x78,0x68,0x84,0x3c,0x37,0x35,0x3f,0xce,0xd4,0x8f,0x9c,0xe4,0xdc,0xc1,0x13,
+  0xc9,0xb5,0xd6,0x2d,0x78,0x4c,0x8e,0xf5,0xfa,0x12,0x44,0xa9,0x63,0xb8,0x91,0xec,
+  0xd1,0x1a,0x31,0x35,0x3f,0x0e,0x61,0xc9,0x78,0x5b,0x2e,0xa7,0x86,0xd6,0xd6,0x49,
+  0x68,0xf6,0x9b,0x8e,0x88,0xb4,0xe5,0x68,0x7f,0xf1,0x5f,0x25,0xeb,0x23,0x99,0xf8,
+  0x47,0x2b,0xe1,0x6d,0xbc,0x3a,0xd0,0xba,0x6c,0x37,0x5c,0xbc,0x2c,0x40,0x73,0xa2,
+  0x2c,0x80,0x9b,0xb4,0xa8,0x66,0x87,0xaf,0x3b,0xa6,0xe0,0x1f,0x5e,0x1f,0x89,0xbc,
+  0x37,0x41,0x8b,0x3a,0x47,0x1a,0x25,0xee,0x11,0xba,0x97,0x17,0x22,0x50,0x35,0x84,
+  0x46,0x5a,0x12,0xff,0x98,0xf9,0x71,0x95,0x1c,0xed,0xe8,0xf4,0x4c,0x82,0x0d,0x95,
+  0xa8,0x0f,0xb9,0x0c,0x6d,0x1a,0x3a,0x9e,0xb1,0xf5,0xb5,0x64,0x7e,0xdc,0x8c,0xf1,
+  0x26,0x68,0xfd,0x05,0x17,0xcc,0xfc,0xb8,0x4d,0xbc,0xad,0xd5,0x65,0x8d,0xd7,0x87,
+  0x14,0x2f,0x98,0x83,0x4d,0x41,0x6b,0x7f,0x10,0xce,0x8f,0x8a,0x96,0x7e,0xc9,0x1d,
+  0x25,0xab,0xe8,0xe3,0xaa,0x37,0xb8,0x94,0x27,0x12,0x5e,0x56,0xbd,0xcb,0xed,0x3f,
+  0x26,0xb7,0xe2,0xa0,0x2b,0x60,0x4f,0xc9,0x8f,0xcb,0x8b,0x4b,0xdd,0xfd,0x6c,0x41,
+  0x26,0x2f,0x93,0x1b,0x29,0x71,0x52,0x8a,0xf2,0x50,0x3a,0xa4,0x39,0xa9,0x2d,0x4c,
+  0x50,0x46,0xdf,0xe7,0x54,0x68,0x4a,0x7f,0x58,0xce,0x0f,0x57,0x55,0x8d,0x6e,0xd9,
+  0xd0,0xa1,0xe3,0xfb,0x06,0x02,0xbc,0x0c,0xd4,0x9e,0xe9,0x9d,0xcb,0xe9,0x75,0xa4,
+  0x50,0xd9,0x03,0x3b,0x6e,0x47,0xe0,0x9d,0xec,0x0f,0xbb,0x4d,0xea,0xe0,0xf2,0xa7,
+  0x3a,0x83,0xe7,0x1b,0x36,0x08,0xed,0xcb,0x23,0x51,0x3f,0xbf,0x52,0xc4,0xeb,0x47,
+  0x15,0xba,0xf0,0x8b,0xdc,0x47,0xfb,0xc9,0xb9,0x29,0xf5,0x21,0x63,0x77,0xd8,0x95,
+  0xec,0x69,0x21,0x5e,0x08,0xc2,0xad,0x88,0xb3,0x95,0xd1,0x9a,0x22,0x6d,0x69,0x54,
+  0x9e,0x03,0xa3,0xd3,0xbd,0xf5,0xae,0xa8,0x90,0xe4,0x63,0xf4,0x09,0x89,0xfd,0xe0,
+  0x88,0xc2,0x53,0x88,0x8e,0x2a,0x57,0x70,0x7f,0x97,0xf4,0x89,0x5e,0xa6,0xbd,0xaa,
+  0x88,0xdf,0xc8,0xfe,0x84,0x1d,0x31,0xf1,0x8f,0x85,0x5f,0xa7,0xc3,0xb0,0xea,0x55,
+  0xdd,0xec,0xcb,0x67,0x79,0x35,0x6c,0xc5,0xcd,0x1b,0xf5,0x8e,0xe0,0xfe,0xa2,0x26,
+  0x3f,0x8a,0xc6,0x78,0x7f,0xd8,0xa9,0xf9,0x71,0x05,0x3a,0x35,0xdd,0x3e,0x52,0x49,
+  0x03,0xed,0x20,0x7f,0x94,0x8e,0xf4,0x74,0xb1,0x4c,0x3d,0xfb,0x0c,0x6c,0x5c,0xe9,
+  0x64,0x54,0xb7,0xd6,0x87,0x44,0xf9,0xb3,0x97,0xe9,0xe3,0xdd,0x73,0xd0,0xfe,0xfa,
+  0xc9,0xc2,0xf4,0xd6,0xa6,0xae,0xe5,0x60,0xe4,0x79,0x88,0x41,0x50,0x3e,0x1b,0x54,
+  0x0d,0x1f,0x4f,0xf6,0x03,0xe5,0xf8,0x47,0xcb,0x3f,0xca,0xdb,0xfa,0xb0,0xf5,0xc4,
+  0xa4,0x49,0xff,0x16,0xf6,0x83,0xd0,0x97,0xf1,0x50,0xf6,0x28,0x4a,0x30,0xb3,0xbe,
+  0xd9,0xe0,0xe4,0xfc,0x48,0x04,0xf1,0x0f,0xdb,0x13,0x77,0xaf,0x21,0x57,0xd4,0xf5,
+  0x83,0x95,0x1f,0x64,0x2d,0x17,0x9f,0x50,0x3f,0x67,0xa5,0xe7,0xed,0x0f,0x37,0xbe,
+  0x06,0x2f,0xb3,0x98,0x6e,0xaf,0x13,0x3f,0x70,0x4e,0xcc,0xa7,0x33,0x4c,0xff,0xcf,
+  0x5b,0x8e,0x58,0xe9,0x87,0xec,0x52,0xc8,0x67,0x3c,0x1a,0x23,0xef,0x6f,0xef,0x82,
+  0x8a,0x33,0x8e,0xfd,0x62,0x1f,0xda,0x53,0x47,0xd8,0x3c,0x3d,0x27,0x59,0x1f,0x92,
+  0x34,0x1d,0x81,0xcb,0xbc,0x2c,0xf6,0x48,0xa3,0x2f,0xf4,0x2a,0xf3,0x9e,0xb3,0x5f,
+  0x16,0xce,0x9b,0x11,0x8d,0xda,0x51,0x3c,0x86,0xbf,0x8b,0xed,0x8d,0xb7,0x76,0x5b,
+  0xf3,0xe3,0xf2,0xb6,0x6b,0xf8,0xd1,0x35,0xfa,0xa0,0x38,0xd3,0xd8,0xd9,0xae,0x0e,
+  0xe2,0xd3,0xfe,0x16,0x9e,0x55,0xd5,0x3e,0xca,0x89,0xe2,0xeb,0x3d,0xf9,0x7d,0x28,
+  0x6a,0x3e,0x98,0xec,0x47,0xcf,0xf1,0xcf,0xb3,0x30,0xbb,0x9e,0x0e,0x13,0xde,0x16,
+  0x2d,0xbf,0x37,0x23,0x18,0xee,0xd7,0xf6,0x4b,0xb3,0x8d,0xc0,0x83,0xfe,0x61,0xff,
+  0x63,0x9e,0x50,0x43,0x60,0x8d,0x35,0x3f,0x0e,0xe5,0x4f,0x0c,0x9e,0xe2,0x6c,0xf0,
+  0x12,0xed,0x67,0xa0,0xbe,0x88,0xc0,0xb2,0x8f,0x76,0xf5,0x9b,0x12,0xe9,0x03,0x5e,
+  0x78,0x9c,0xd1,0xd4,0xfc,0x38,0xb3,0x09,0x6c,0xc0,0x3e,0x2c,0x2e,0x96,0x36,0x49,
+  0x05,0xf1,0x47,0x79,0xfd,0xe1,0x8b,0x3d,0x9f,0x72,0xda,0xd2,0x07,0xec,0xd7,0xc4,
+  0x7b,0xdf,0x49,0x26,0x7e,0x90,0xec,0x4f,0x8a,0xf8,0xe7,0x13,0xa8,0xd0,0x1c,0xb1,
+  0x25,0xbb,0x55,0xce,0x96,0xcf,0xe2,0x7c,0xf2,0x8b,0xf4,0x11,0x63,0x5e,0xcc,0xff,
+  0xa1,0xf2,0x7e,0x5f,0x65,0xc8,0x4c,0xd4,0x9d,0x78,0x7e,0xc4,0x3f,0xca,0x25,0xa5,
+  0x54,0x73,0x73,0xed,0xc6,0xeb,0x0f,0xd8,0x2f,0xe4,0x8c,0xa0,0x59,0xb7,0xc8,0x58,
+  0xca,0x3b,0x60,0xbe,0x25,0x94,0xe6,0xdb,0xfb,0x44,0xa3,0x76,0xe2,0xf9,0x39,0xfe,
+  0x39,0x28,0x39,0x57,0x99,0xdd,0xd8,0xdf,0x32,0xfb,0x9d,0x39,0x7f,0xaf,0xf1,0xb2,
+  0x3c,0x99,0x31,0xff,0x47,0xd0,0x6c,0xb4,0xab,0xae,0x88,0xd5,0xff,0x23,0xb8,0xb9,
+  0xbd,0x10,0xa6,0x09,0xb7,0x8f,0xd3,0x30,0xd9,0x9b,0x87,0xd6,0xba,0x8d,0x48,0x8c,
+  0x7c,0xf0,0x85,0x6d,0x11,0x67,0x80,0x6e,0x99,0x92,0x1f,0xb7,0x17,0xe2,0xcc,0xc5,
+  0xd9,0xf2,0x5b,0x51,0x51,0xe6,0x41,0x7a,0x2f,0xed,0x92,0xdc,0x46,0xc6,0x7c,0xbc,
+  0x12,0x41,0xf9,0x13,0x50,0xd6,0x59,0xf8,0x51,0x8f,0xae,0xd6,0x46,0x61,0x3e,0x4f,
+  0x82,0xfb,0x17,0x65,0x53,0x68,0xfe,0x19,0xb3,0x2d,0xda,0x45,0x58,0xdc,0x6b,0x1f,
+  0x2e,0x18,0x82,0x37,0x05,0x54,0x3d,0x5b,0x52,0xea,0x23,0xa1,0x12,0xa7,0x37,0x1b,
+  0x8e,0x7a,0x71,0x4c,0xbf,0x34,0xb7,0xea,0xcd,0x79,0x86,0x38,0x4c,0xaf,0x40,0x55,
+  0x9f,0xe3,0x7c,0xce,0x18,0x1f,0x70,0x6a,0xb4,0xb5,0x3e,0x24,0xf7,0xff,0xe0,0xc5,
+  0x38,0x2a,0xe5,0xcb,0x9e,0xd2,0x01,0x47,0x8f,0xe8,0x85,0x31,0xa9,0x94,0x3a,0x46,
+  0x6a,0xae,0xe0,0x41,0x2b,0x1d,0x6e,0xfd,0xf5,0x94,0xfe,0x68,0x87,0xc3,0x9c,0xfd,
+  0xb5,0x45,0x65,0x91,0x6a,0x44,0x77,0x6b,0x9d,0x25,0x50,0x5e,0xef,0x54,0xe5,0x6e,
+  0x4e,0xa4,0x37,0xd4,0x9e,0xc0,0x56,0x6b,0x7f,0xb4,0x34,0x33,0x5f,0xa9,0x56,0xae,
+  0x20,0xb5,0x1e,0xdd,0xa3,0x06,0x96,0x64,0xa3,0x01,0x36,0xdf,0xe5,0x0a,0x9a,0xf9,
+  0x17,0x5d,0x9a,0xab,0xcf,0xe6,0x4c,0xe9,0x8f,0xc6,0xf1,0x4f,0x49,0xa8,0x25,0x6a,
+  0x5b,0x09,0x8d,0xac,0xa8,0x41,0xee,0x36,0xdc,0xca,0x41,0xa3,0x48,0x1f,0xaf,0xb7,
+  0x50,0x64,0x20,0x7e,0xb0,0xf4,0x47,0x33,0xf7,0x8f,0xcf,0xe3,0x38,0x2b,0xae,0xa4,
+  0x63,0xbc,0x9a,0x68,0x44,0x54,0xd9,0x88,0x71,0xc8,0x63,0x3a,0x4e,0x47,0xb4,0x0a,
+  0x23,0x6b,0x9b,0xa8,0xa4,0xd6,0x47,0x82,0xaa,0x6a,0x44,0x83,0x31,0xb8,0x0d,0x61,
+  0x90,0x23,0xf8,0x85,0x8b,0xda,0x9f,0x68,0x19,0x38,0x12,0xfe,0x8d,0xbf,0xe2,0x15,
+  0x39,0x52,0xeb,0x23,0x5d,0xe2,0xdd,0x9d,0xba,0x6a,0x4a,0xe0,0x2d,0xcd,0xbb,0xc6,
+  0xde,0xd4,0xe8,0x64,0x23,0x9a,0x4f,0x31,0xfb,0x7f,0x9d,0x0f,0x76,0xbd,0x9b,0x1a,
+  0xff,0x32,0xfd,0x81,0x25,0xb5,0x72,0x5b,0xb8,0x48,0x3a,0xbe,0xdc,0xb9,0x19,0xda,
+  0xc2,0x73,0xb9,0x86,0x5a,0x00,0xe6,0xf3,0x33,0x62,0xd4,0x3e,0x4b,0xbc,0x29,0xf1,
+  0x2f,0x5c,0x9f,0x0e,0x79,0x9b,0x2d,0xa4,0x6e,0x61,0x6a,0x3f,0x2d,0xb4,0xf5,0xf0,
+  0xa6,0x62,0xba,0x99,0x4f,0x11,0x13,0x9c,0x86,0xb0,0xd6,0x82,0x7f,0x78,0xfc,0xeb,
+  0x40,0xb8,0x38,0x24,0x9f,0x21,0x5f,0x85,0xb5,0xac,0x60,0x80,0x2e,0x4f,0x7f,0x1d,
+  0x9e,0x8d,0x16,0x0f,0xd0,0x35,0xe9,0xef,0x48,0x07,0x1a,0x10,0x2a,0xd4,0xa5,0xe0,
+  0x1f,0x3b,0x7c,0xca,0x2a,0x4f,0x3a,0xbc,0xe2,0x2a,0xf8,0x35,0x8f,0x76,0xed,0x10,
+  0x0d,0x2d,0x46,0x2b,0xef,0xb5,0x7b,0xc4,0x93,0x70,0xde,0xf0,0xf4,0x65,0x7a,0x6a,
+  0x2c,0xf8,0xe7,0x26,0xee,0xff,0xa9,0xaa,0x9d,0x56,0x2f,0xee,0xe3,0xdd,0x72,0x7b,
+  0xe6,0x0d,0x8b,0x0b,0x94,0x51,0xb3,0x62,0x92,0x30,0x06,0xbf,0x13,0x12,0xf5,0x91,
+  0x52,0xea,0x03,0x5c,0x82,0x47,0x10,0x5f,0x89,0x2a,0x07,0x8a,0x46,0x89,0x51,0x30,
+  0xa4,0x5f,0x81,0xbd,0x21,0x73,0x7d,0xf8,0x15,0xde,0xdf,0xf9,0x9a,0xfa,0x00,0x72,
+  0x7d,0x76,0x6e,0xda,0x3e,0x61,0x05,0xaf,0xae,0xff,0xdb,0xe8,0x01,0x30,0xfb,0x83,
+  0xbc,0x8d,0x4b,0xb1,0x93,0x17,0xda,0xf5,0xa6,0xd6,0x07,0x60,0xc5,0xa1,0x13,0x23,
+  0xd9,0xd7,0xc1,0x7e,0x56,0x80,0xf8,0x27,0xfc,0x0e,0x8b,0x31,0x57,0x3d,0x0f,0xfc,
+  0xe1,0xaf,0xe6,0xc6,0x6f,0x28,0x27,0x9e,0xa9,0xf9,0x71,0x5f,0xe5,0xd1,0xd5,0x5a,
+  0xee,0x98,0xb5,0xb5,0x91,0x57,0x5e,0x3c,0xb8,0x9c,0x3e,0x64,0xf3,0x98,0xfd,0x97,
+  0x8b,0x8c,0x1b,0xca,0x6c,0xd9,0x29,0xf5,0x01,0x2e,0x42,0x55,0x2c,0x33,0x2e,0x57,
+  0xc0,0x95,0xf8,0x5e,0x96,0x35,0x24,0xfe,0x11,0xae,0x34,0xdc,0xa8,0x67,0xe9,0x28,
+  0x88,0x3e,0x4f,0xab,0x68,0xc0,0x2b,0x15,0xa9,0xf5,0x01,0x78,0x36,0x5c,0x13,0xaf,
+  0x06,0x60,0xf7,0x29,0xb7,0xaf,0xe3,0x6e,0x9f,0x9a,0x32,0x25,0x83,0xf1,0xc6,0x61,
+  0xac,0x4c,0x49,0x6b,0xb8,0xa6,0x3e,0x80,0x4f,0x5b,0xa6,0x88,0x4f,0xb1,0x51,0xe6,
+  0x0c,0xd9,0xb7,0xc8,0x73,0xd8,0x31,0xd5,0x89,0x6a,0xae,0x86,0xd7,0x47,0xf2,0x86,
+  0x56,0xe7,0xa5,0xd4,0x87,0x1c,0x8f,0x7f,0x6d,0xb3,0x15,0xb2,0x83,0x7d,0x65,0x2b,
+  0x5c,0xdb,0x9d,0x0e,0xde,0xe8,0xe4,0xde,0x8c,0xa8,0xc9,0x00,0x6f,0x0f,0x05,0xb6,
+  0x4f,0xe9,0x0f,0x82,0xf3,0x5f,0xba,0x71,0xcb,0x86,0xdd,0xf4,0xb0,0x5a,0xf4,0x12,
+  0x8d,0xda,0x0a,0x49,0x73,0xc2,0xed,0x83,0xf3,0x9b,0x9c,0xb5,0xae,0xfd,0xa9,0xfd,
+  0x61,0x13,0x45,0x90,0x78,0x59,0x24,0x13,0x08,0x2d,0xe0,0x8a,0x5e,0xeb,0xe4,0x6e,
+  0x10,0x5e,0x4a,0x91,0xf7,0x87,0xbd,0x81,0x08,0x13,0xeb,0x99,0xa8,0x0f,0xe0,0xe3,
+  0x4e,0x1e,0x54,0xc4,0xe9,0x15,0x89,0xfe,0xa4,0xc7,0xc1,0x2c,0x8b,0x6d,0x32,0xc6,
+  0x79,0xeb,0xe4,0x92,0x24,0xfe,0xb9,0x1e,0x5f,0x4a,0xa8,0x0a,0x2e,0x3b,0x2d,0x5e,
+  0x90,0x2e,0x6b,0xb7,0x26,0xea,0x43,0x5e,0xd5,0x16,0xf2,0xc2,0x41,0x08,0x75,0xfc,
+  0xb3,0xf8,0x95,0x94,0xfa,0x48,0xdc,0xff,0xa3,0x39,0x2e,0xd4,0xe4,0x4a,0x97,0xed,
+  0xa5,0x5a,0xd6,0xe9,0x1a,0xc4,0x3f,0x9a,0x99,0x36,0x88,0xf3,0xa9,0x49,0x1d,0x9f,
+  0x33,0xa5,0x3e,0x40,0x09,0xb4,0x34,0x11,0x95,0x75,0x6b,0x4e,0x5b,0xa6,0xee,0x54,
+  0x39,0x63,0x5c,0xa1,0x2c,0x1b,0x7f,0xc5,0x2b,0x06,0xac,0xb3,0x59,0xfb,0xc3,0xe2,
+  0x4b,0x11,0x77,0x70,0xc9,0x75,0x77,0xbd,0xa4,0xee,0x71,0x39,0xf9,0x8b,0x23,0x22,
+  0x0a,0x71,0xe0,0x97,0xdd,0x2b,0xe0,0xfb,0xde,0x45,0x95,0x70,0x6a,0x7f,0xd8,0x83,
+  0x02,0xca,0xb7,0x68,0xfa,0x00,0xdb,0x23,0x39,0xab,0xef,0x8c,0xda,0x3a,0xe8,0x61,
+  0x85,0x24,0x10,0xe9,0x41,0x94,0xcf,0x91,0x1f,0x59,0xfb,0xc3,0xe6,0x22,0x9e,0x11,
+  0xca,0xd6,0x6c,0xda,0x92,0x33,0x00,0xdf,0x8f,0x78,0xd6,0x38,0xb6,0x23,0xd0,0x1d,
+  0x65,0x5d,0x9a,0xdb,0xac,0x7f,0xa5,0x20,0x22,0xda,0x26,0x26,0xe3,0x5f,0x9d,0xa6,
+  0xbf,0xa8,0x44,0x73,0xdc,0x80,0x30,0x6f,0xd4,0x38,0xf2,0xed,0x57,0xb3,0x1b,0x57,
+  0xc1,0x68,0x6b,0x65,0xdf,0xb2,0xa8,0x80,0xf3,0x39,0xfe,0xd9,0x26,0x27,0xfd,0x0f,
+  0xe3,0xfc,0x70,0xd8,0xd4,0xb4,0x44,0x65,0x7d,0x37,0x78,0x73,0xed,0xe6,0xc6,0xd3,
+  0x12,0x89,0x8a,0x30,0x8c,0xa2,0x64,0x53,0x58,0x4c,0xed,0x8f,0x76,0x88,0xcc,0x8b,
+  0xca,0x1f,0xe1,0x52,0x6d,0x64,0x05,0xcc,0x35,0x48,0x06,0xe9,0x11,0xe6,0x64,0x4b,
+  0x38,0x22,0x3a,0x24,0x15,0xb0,0x25,0x03,0x7e,0xdb,0xc4,0x71,0x07,0x77,0x42,0xfe,
+  0xb8,0xe5,0x32,0xdb,0x52,0xde,0x6d,0x27,0x48,0xa7,0x2b,0xa7,0xb4,0x83,0x9a,0x99,
+  0x96,0x7b,0x12,0xf6,0x30,0xd5,0x40,0xc1,0x9e,0xec,0x0f,0x32,0xce,0x0f,0x67,0x72,
+  0x90,0xfc,0x90,0x87,0x81,0x12,0x65,0x3d,0x9e,0xa5,0xbb,0xfa,0x79,0x44,0x1b,0x4a,
+  0xfd,0xf9,0x47,0xe5,0xef,0x59,0xe3,0x5f,0x66,0x7d,0x80,0xc5,0x21,0xc7,0xa0,0xf8,
+  0x35,0xdb,0xc7,0x6c,0x6f,0xc8,0x1e,0x10,0x39,0x51,0x7c,0x7e,0xbb,0x63,0x8d,0xc8,
+  0x1b,0xa5,0xed,0x89,0x3b,0x46,0x64,0x5b,0x0a,0x3f,0x9c,0xc7,0xbf,0x36,0x31,0x79,
+  0x1f,0xea,0xdf,0x1f,0x6a,0x28,0xa8,0x87,0x62,0x97,0xa1,0x6c,0x9b,0x23,0xc6,0x1b,
+  0xa1,0xa6,0x9b,0xf5,0xca,0x92,0xfe,0x1f,0x6d,0xc6,0x3b,0xbc,0x9b,0xa7,0x6a,0x1f,
+  0x11,0x7d,0xd2,0x55,0x36,0x9f,0x67,0xc3,0x5d,0xe1,0x8c,0x68,0xde,0xd6,0xe1,0x8a,
+  0x86,0xaa,0xed,0x3d,0x7b,0xb7,0xb5,0x3f,0xda,0xf5,0xdb,0xe1,0xd7,0xf8,0xfc,0x79,
+  0xf7,0xda,0x66,0xd2,0x03,0x4a,0xbe,0x91,0x69,0xe2,0x99,0x48,0xb1,0x96,0xf9,0xa0,
+  0x59,0x1f,0xa9,0xb8,0x27,0xf2,0xfd,0x94,0xfa,0x90,0xdc,0x4d,0x5d,0xac,0x65,0x84,
+  0xb2,0xb6,0x69,0x07,0xa0,0x40,0x43,0xbc,0x74,0x5a,0xdd,0xa7,0x16,0x03,0x97,0x57,
+  0xca,0x01,0xa5,0x58,0x0b,0xd4,0x87,0xd3,0x27,0xbf,0x17,0x8f,0x7f,0x6d,0x05,0x77,
+  0xf8,0x7a,0x20,0x11,0xa9,0x5b,0x53,0xbb,0x11,0xff,0xbc,0x04,0x7b,0xf5,0xd5,0x79,
+  0x19,0xb8,0x9e,0xca,0x5e,0xa5,0x04,0x28,0xb5,0xe5,0x35,0x4d,0xe6,0xc7,0xcd,0x68,
+  0xe5,0xdd,0xbe,0xd4,0x62,0x8f,0xbc,0x1b,0x3f,0x74,0x8c,0xb6,0x46,0xc5,0x8f,0xe1,
+  0x60,0xaf,0x6f,0x90,0x07,0xb6,0x32,0xf9,0x52,0xa0,0x69,0x69,0x4b,0xa9,0x0f,0x80,
+  0x17,0xf5,0x8d,0x3f,0x22,0xdf,0x52,0x47,0xee,0x45,0x41,0xd4,0x86,0xf6,0xd7,0xa8,
+  0x36,0xcb,0x2c,0xdc,0x27,0x7c,0x4a,0x7d,0x86,0x59,0x78,0xcd,0xca,0x0f,0x7f,0x95,
+  0x7b,0x17,0x07,0xe5,0x4a,0xe5,0x64,0x5f,0x29,0x64,0x6a,0x62,0x39,0x7c,0x06,0xa5,
+  0xe3,0xfd,0x20,0xd4,0x52,0x5e,0x3a,0x4f,0x4d,0xa9,0x0f,0xf0,0x33,0x52,0xa2,0x2c,
+  0x89,0xe3,0x27,0x69,0x35,0xca,0xbc,0x74,0xfb,0x96,0xb9,0x4d,0xdd,0x61,0x67,0x7a,
+  0x42,0xff,0x32,0x67,0x21,0x8d,0xdc,0xa5,0x86,0x2c,0xfc,0x70,0xee,0xa6,0x20,0x37,
+  0xee,0xd9,0xe2,0x56,0x23,0x9a,0x73,0x47,0x46,0x37,0x71,0xc3,0x21,0xb6,0x72,0xb2,
+  0x3e,0x52,0x0f,0xed,0x0e,0xab,0xd6,0xfc,0x38,0xd8,0xa9,0xb9,0x61,0x09,0x23,0x94,
+  0x84,0xa5,0x39,0xd5,0x14,0x70,0x33,0xc6,0x54,0x15,0xe4,0x84,0x7c,0x56,0x8d,0x08,
+  0xb4,0x5b,0x18,0x5e,0x74,0x75,0xde,0x09,0xcd,0x57,0xed,0x50,0x64,0x17,0x4f,0xab,
+  0xe1,0x69,0xa1,0xaa,0x30,0x42,0xbc,0x3d,0x89,0xc0,0xa8,0xe6,0x31,0xdc,0x5d,0xa2,
+  0x9a,0xcc,0x8f,0xbb,0xde,0x74,0x62,0xc0,0x32,0x43,0x1c,0x91,0xc6,0xc6,0xeb,0x43,
+  0xc2,0x48,0xad,0x59,0x16,0x60,0x4c,0xba,0x5a,0xf4,0x3c,0xcc,0x4b,0xc1,0x3f,0x26,
+  0xff,0xa7,0xaa,0xdf,0xde,0x23,0xde,0x0f,0x0f,0x33,0xaf,0x9a,0x79,0x4c,0x46,0xfc,
+  0xc3,0x7c,0xba,0xfd,0x0c,0x59,0xa0,0x5d,0x51,0x70,0xc7,0x76,0x5b,0xf9,0x3f,0x79,
+  0x1f,0xc1,0x25,0x36,0xaf,0x97,0x86,0x49,0x55,0xa0,0x9b,0x15,0xa9,0x32,0x21,0x73,
+  0xa0,0x9b,0x95,0xe8,0xae,0x6d,0xe4,0x49,0xe3,0xd0,0xf7,0x9c,0x01,0xdb,0xd4,0xfa,
+  0x48,0x78,0xbe,0xfa,0x78,0x3d,0x70,0xa9,0x9b,0x85,0xd4,0xeb,0x19,0x01,0x29,0x0a,
+  0xab,0x59,0x5f,0xd4,0x29,0x09,0x5d,0x4c,0x5f,0x19,0xf0,0x58,0xfa,0x33,0xf2,0xfc,
+  0xb8,0x9f,0x49,0x25,0xbc,0x5a,0x82,0x1b,0xba,0x55,0x27,0xdc,0x88,0x66,0x1d,0xfc,
+  0x14,0x1e,0xd0,0x51,0xfe,0x3c,0x65,0xd6,0x07,0xb0,0x59,0xeb,0x23,0x41,0x1a,0x5f,
+  0x64,0x9f,0x61,0xdf,0xf8,0xf5,0xd5,0x10,0x63,0x5d,0x1d,0x99,0xae,0x9c,0x22,0xed,
+  0x8d,0xf0,0xc3,0x23,0xf6,0x6d,0xc2,0x2d,0x6c,0x84,0x79,0x57,0xd9,0xad,0xf9,0x71,
+  0xe3,0xf8,0xc7,0x70,0xb4,0xca,0x63,0xea,0x65,0x36,0xde,0x16,0xe4,0xf2,0xed,0x38,
+  0x78,0x5b,0xbc,0xa0,0xe2,0x8a,0x85,0xae,0xa9,0x8f,0x84,0xfb,0x2d,0x6e,0xdf,0xc7,
+  0xd3,0xe2,0x72,0xf1,0xf4,0x35,0x89,0x6e,0x5e,0x18,0xa7,0xdf,0x8e,0x86,0x1b,0x39,
+  0x4e,0x51,0x50,0x5f,0x13,0xff,0xc2,0x25,0xc6,0xa7,0xad,0xe2,0xf9,0xf2,0xbc,0xd0,
+  0x5c,0x09,0x1c,0xee,0xcb,0x32,0xe8,0x36,0x72,0xae,0x70,0x03,0x73,0xae,0xa4,0x53,
+  0xea,0x43,0xc2,0x5e,0xa9,0xe4,0x05,0x34,0xc3,0x97,0x91,0x9d,0x4d,0x66,0xff,0x4a,
+  0x22,0x75,0x1d,0x77,0x33,0xba,0x2d,0xfc,0x22,0xfc,0x44,0x6b,0xe7,0x1d,0x63,0x53,
+  0xeb,0x23,0x1d,0x60,0xdf,0xe1,0xfe,0x90,0x59,0xe1,0xc7,0xf4,0xe2,0xd0,0x8d,0x7f,
+  0x63,0xe3,0xc0,0x60,0xde,0x6e,0xfa,0x77,0xe1,0x77,0x60,0x16,0xdb,0x19,0xa2,0xdf,
+  0x4f,0xad,0x8f,0xa4,0x7c,0xca,0xd7,0x47,0x95,0xef,0xd1,0xcf,0x86,0x2b,0x3f,0x76,
+  0x54,0x8a,0x36,0x63,0x78,0x73,0xe5,0x2f,0xdc,0x37,0xe2,0x31,0xb9,0x97,0x7a,0x34,
+  0x7b,0xc5,0x94,0xfa,0x48,0xb8,0x3e,0xaf,0x4d,0x8b,0xff,0xd5,0x87,0xea,0x87,0xf4,
+  0xe6,0x1e,0xc7,0xde,0x9a,0x11,0xb8,0x9a,0xbb,0xd8,0x6c,0x94,0x26,0x9d,0x33,0xeb,
+  0x4b,0x4c,0x9b,0x82,0x7f,0xc8,0xac,0x41,0x94,0xf6,0x3e,0xf6,0x41,0xe8,0x91,0x3c,
+  0x87,0x5a,0xa0,0x1a,0x97,0xd4,0x4a,0x3c,0x56,0x05,0x2e,0x38,0x2f,0x94,0x69,0x8e,
+  0x6e,0xd9,0x8a,0x7f,0x66,0x2a,0x07,0x60,0x5e,0x1f,0x1d,0x9e,0x53,0xc9,0x7e,0xe3,
+  0x59,0x5c,0x8b,0x62,0x33,0x57,0x3f,0x90,0x51,0x5c,0x4d,0x79,0x7d,0xfe,0xfd,0xb0,
+  0x83,0xfb,0x93,0x93,0xf8,0xa7,0x27,0x81,0x7f,0xf0,0x7d,0x57,0xfa,0xa4,0x75,0x6c,
+  0x76,0xc7,0x92,0x41,0x32,0x0b,0xf6,0x45,0x8b,0x79,0x5b,0x90,0x59,0xf0,0x3c,0x9b,
+  0x1d,0x92,0xd7,0x5c,0x8b,0x7f,0x8c,0xc8,0x02,0x62,0x87,0xad,0x6a,0xa0,0x1f,0x8f,
+  0xa1,0xa3,0x70,0x2f,0x2a,0x7a,0x94,0x3f,0x0f,0x54,0xef,0xd5,0xb8,0x63,0x8d,0x58,
+  0xf0,0xcf,0x8f,0x3a,0x13,0xdd,0x60,0xe3,0xa2,0x0b,0x9e,0x81,0x39,0x1d,0xcb,0x86,
+  0x6e,0x74,0xa9,0x17,0x95,0xc5,0x4f,0xb9,0x3b,0x6b,0x10,0x11,0xc1,0xff,0xe0,0x89,
+  0x90,0xd7,0xe0,0x1f,0xd4,0x3e,0xb2,0x39,0xc8,0x75,0x34,0x8c,0x87,0xbd,0xee,0x59,
+  0x6b,0x36,0x0a,0x39,0x42,0xfe,0x4c,0x7d,0x24,0x6e,0xef,0x37,0xce,0x61,0xa3,0xaa,
+  0x2f,0xb4,0x29,0x8a,0xfa,0xae,0x59,0xf0,0x85,0xec,0x51,0x5e,0x1f,0xa9,0xe8,0xd0,
+  0x94,0xfe,0xb0,0x13,0xf8,0x87,0xd7,0x87,0x44,0x20,0x7d,0x01,0x07,0x99,0x5c,0xc2,
+  0x68,0x34,0x37,0x3c,0x5b,0x7a,0x43,0x70,0x86,0x5c,0xd7,0xe4,0xc7,0xf1,0x6c,0x14,
+  0x85,0x24,0x88,0x40,0x4b,0xa2,0x37,0xbc,0x07,0xbb,0xe0,0x01,0xde,0xc6,0xab,0x90,
+  0x35,0xd3,0x22,0xde,0x6a,0xed,0xa5,0xa9,0xf8,0xa7,0x7e,0x49,0xae,0x5f,0x82,0xf9,
+  0x9c,0xf8,0x91,0x4b,0x3a,0xc8,0x4e,0xa1,0x44,0xd3,0xa3,0xb6,0x4c,0xd8,0xac,0x4d,
+  0xa9,0x8f,0xd4,0x3d,0x8e,0x7f,0x38,0xed,0xc7,0x1c,0x9c,0xe0,0x6a,0x37,0x51,0x28,
+  0x52,0xe4,0xfe,0x9f,0x43,0x2c,0xb5,0x3f,0x6c,0xe6,0x40,0xa2,0x1b,0xec,0x69,0xf9,
+  0x3d,0x04,0x06,0x8f,0x68,0x8e,0xfe,0x9a,0x55,0xf0,0x86,0x64,0x36,0x7e,0xe5,0xf5,
+  0x21,0x9f,0xd7,0x1c,0x8a,0x05,0xff,0x6c,0x33,0xf9,0x3f,0x8b,0xab,0xed,0x51,0xe1,
+  0x02,0xef,0xf7,0x9d,0x28,0x24,0x85,0x57,0x34,0xa9,0x9f,0x7c,0xc6,0xe5,0x73,0xbf,
+  0x9b,0x3b,0xca,0xa6,0xe0,0x9f,0x4a,0xfa,0x14,0x39,0x4b,0xbb,0x79,0xfd,0x10,0xb2,
+  0x81,0xd7,0xc7,0x36,0xcb,0x02,0xe0,0xaf,0xea,0x79,0xc6,0x9c,0x78,0xcf,0xe4,0x7a,
+  0x42,0xa2,0x3e,0xb6,0x1f,0x57,0xaf,0x57,0xdb,0x23,0xad,0xe6,0x30,0x4f,0xe2,0x0c,
+  0x0d,0x9e,0x21,0xf8,0x0a,0xec,0xb1,0x3b,0xef,0x44,0x20,0x34,0x05,0xff,0xc0,0x03,
+  0xd5,0xd1,0x04,0xda,0x79,0x80,0xcf,0x77,0x4b,0x07,0x95,0x12,0xcd,0x65,0x5e,0xd1,
+  0xda,0x39,0x10,0xba,0x63,0x8a,0xff,0xc7,0xa7,0x49,0xdb,0xb3,0xcd,0xc1,0x8a,0x4d,
+  0x51,0xf1,0x96,0xc2,0x51,0xb1,0x72,0x25,0xc7,0x6f,0xea,0x28,0xf3,0xd6,0xda,0x15,
+  0xc4,0x3f,0x93,0xfa,0x77,0xdc,0xff,0xf3,0x6f,0x5b,0xc4,0x01,0x3a,0xaa,0x97,0x05,
+  0x36,0xf1,0x32,0x08,0xa3,0x92,0xd9,0x3f,0x77,0x00,0x3e,0xc1,0x1d,0x32,0xa5,0x3e,
+  0x64,0x62,0xd9,0xed,0x4c,0x0e,0xd1,0xbe,0x7c,0x4e,0x04,0x92,0x11,0x11,0x65,0x54,
+  0x64,0xbb,0xd1,0x18,0x50,0x47,0x54,0x2f,0x49,0xad,0x0f,0x29,0xf0,0xf8,0x97,0xa3,
+  0x2d,0x53,0x27,0x8b,0x60,0x83,0x51,0xd2,0xdc,0xa2,0x17,0xb9,0xe8,0x07,0xd5,0xf3,
+  0xa2,0x74,0xc0,0x3b,0xaa,0x98,0x85,0xe8,0xe3,0xd6,0xfa,0x48,0x89,0xfe,0xb0,0xfc,
+  0x50,0xd8,0x59,0xa3,0xb6,0x1a,0x61,0x8f,0x6d,0x53,0xef,0x5e,0xbf,0x2b,0x9e,0xb1,
+  0x20,0xfc,0x0a,0x4f,0x35,0x7d,0x51,0x56,0xa7,0xf4,0x07,0xe1,0xf6,0x4b,0xcb,0x1a,
+  0x72,0x33,0x59,0x9b,0x91,0xa9,0xc9,0xf5,0x08,0x24,0x9e,0x16,0x8a,0x8f,0x66,0xd4,
+  0xa3,0xd8,0x89,0x69,0x3b,0x34,0x39,0x94,0x5a,0x1f,0x49,0xe1,0xdd,0x60,0xe5,0xb1,
+  0xad,0xb3,0x94,0x97,0x23,0x37,0xbd,0xeb,0x48,0xd4,0x47,0xba,0x2d,0x9e,0xb9,0x46,
+  0x7c,0x13,0x2e,0x34,0xcd,0xd7,0x1d,0x75,0x29,0xfd,0x41,0x4c,0x79,0xab,0x35,0xc7,
+  0xc4,0x26,0x3e,0xe0,0x6e,0x9f,0x21,0xb8,0x48,0x7c,0xda,0x3d,0x3c,0x22,0x76,0x91,
+  0x6b,0x34,0x2b,0xfe,0xe1,0xf6,0xfb,0xa5,0x68,0x15,0xef,0x0f,0xbb,0x1f,0x96,0xfc,
+  0xa8,0x64,0x60,0xe9,0x58,0x4b,0x81,0x76,0xb1,0xd7,0x67,0x16,0x0a,0x40,0x7c,0x75,
+  0x4b,0x07,0x42,0xaf,0x7e,0x4b,0x7d,0xec,0xed,0xda,0x01,0xbd,0xb8,0x97,0x3e,0x44,
+  0xb2,0xb4,0x46,0xbd,0xb8,0x2e,0xb3,0x9c,0xd8,0xb4,0x3d,0x0d,0xff,0x1c,0x92,0xcb,
+  0xf1,0xf9,0xf7,0x29,0xbc,0x50,0xff,0xd4,0xfa,0x48,0x8a,0xdb,0xa0,0xc3,0xd9,0x6d,
+  0xb0,0x5e,0x99,0x17,0x68,0x46,0xc3,0x2d,0xba,0x5f,0x2a,0xc6,0x17,0x27,0x67,0xb4,
+  0x5f,0xc2,0x93,0xbc,0x3e,0x69,0x32,0xfe,0xa5,0x26,0xe4,0x0f,0xd0,0xf9,0x04,0x6c,
+  0x8d,0x7c,0xe3,0xe1,0xc2,0x52,0xb4,0xd7,0xb8,0xbd,0xdf,0x27,0xec,0x0d,0xa8,0x31,
+  0x5c,0xcf,0x64,0xfc,0xbd,0x2e,0xe1,0xef,0xd2,0xdc,0x23,0xe2,0x6e,0x40,0x45,0xdf,
+  0x33,0xf7,0xb3,0x9c,0x62,0x6d,0xf4,0xee,0x07,0xce,0x38,0x18,0xf9,0x18,0x81,0xee,
+  0xfe,0xb8,0x43,0x9f,0x76,0x6a,0x2a,0xfe,0xe1,0x49,0x5e,0xaf,0xc0,0x68,0xc8,0x1c,
+  0xbc,0x27,0xe1,0x95,0x7e,0x47,0x47,0xcd,0x47,0x08,0x84,0x7c,0x81,0x4d,0xba,0xa5,
+  0x3e,0x92,0xc1,0xeb,0x23,0xc1,0xe2,0x7a,0x7b,0xbd,0xb8,0x1a,0x81,0x50,0x15,0x9b,
+  0xc6,0xb5,0xdb,0xe5,0x48,0xe9,0x0b,0x8e,0xfe,0x5b,0x66,0xf2,0xf8,0x0e,0x8f,0x30,
+  0x26,0xf5,0x75,0x03,0xf0,0x78,0x56,0xc9,0xb0,0x2b,0x26,0x7e,0x83,0x8b,0x9d,0x28,
+  0xca,0xcf,0xdf,0x43,0x17,0xb4,0x9f,0x95,0x5d,0x7e,0xb7,0xbf,0x21,0x5f,0x2f,0x74,
+  0xe9,0xd7,0xf0,0x7f,0x4a,0x82,0xbc,0xbf,0x1e,0x44,0x5c,0x25,0x47,0x6f,0xe4,0xd5,
+  0x03,0xba,0xd5,0x39,0x4e,0xb9,0x95,0xac,0x56,0x9f,0x61,0xce,0x86,0x3c,0x3d,0x3b,
+  0xc5,0xff,0x23,0xec,0xcd,0x37,0xab,0x25,0x2c,0x3d,0xca,0xaa,0xdd,0x5a,0xcb,0x82,
+  0x70,0x8f,0x7a,0x10,0xe1,0x41,0x4b,0x7e,0xd8,0x4e,0x1b,0x25,0x9d,0xd1,0x42,0x8b,
+  0xfc,0x61,0x99,0xab,0xcd,0xea,0x07,0xf6,0x61,0x71,0xb6,0xde,0xc7,0x0d,0xcf,0x7f,
+  0xe4,0xf5,0xe8,0xa0,0x6c,0xe6,0xb2,0xb0,0xbc,0x1a,0x8e,0x4b,0x68,0x7f,0x75,0x88,
+  0xf1,0x54,0xff,0x4f,0x82,0xff,0x33,0x00,0x63,0xda,0xe2,0xac,0x9b,0x63,0xe2,0xb0,
+  0x32,0x66,0x47,0x44,0xd4,0x3e,0xed,0x82,0x74,0x85,0x67,0x08,0xc6,0x2d,0xf8,0xe7,
+  0x68,0xda,0x15,0xe5,0xaa,0xa7,0x54,0x47,0x58,0x3e,0xcc,0x4e,0x69,0xa5,0xc3,0x59,
+  0xcb,0x45,0x0f,0xbc,0x8a,0x3b,0xca,0xd1,0x23,0xfa,0x60,0x2c,0xba,0x30,0x6e,0x3f,
+  0x5a,0x60,0xe9,0x0f,0x8b,0xf8,0xe7,0x70,0xd0,0x19,0x89,0x74,0xa6,0xff,0x1e,0x36,
+  0x04,0x9d,0x5a,0xa0,0x9b,0xe4,0x9b,0x44,0x1d,0x79,0x2d,0x2a,0xfa,0x6e,0x70,0xc6,
+  0xe9,0x2e,0xe2,0x49,0xf6,0x87,0x05,0xb3,0x5e,0x44,0x63,0x04,0xfc,0x71,0x3f,0x53,
+  0x9d,0x7d,0x77,0xc5,0x08,0xf4,0xed,0x54,0x51,0xf0,0x12,0xa7,0x1d,0xba,0x9d,0x85,
+  0x46,0x9d,0x27,0x3b,0xd9,0x1f,0x36,0x2e,0x99,0xf1,0xaf,0x1d,0xae,0xdd,0x64,0xd0,
+  0x6f,0x56,0x17,0x8f,0x1d,0x77,0x2a,0x3f,0xe3,0x27,0x74,0x3b,0x47,0x44,0x09,0xfe,
+  0x55,0xf9,0xa4,0x7c,0xa8,0x9e,0xc1,0xe3,0xa7,0x5d,0xf1,0x93,0x91,0xec,0x4f,0xd9,
+  0x29,0xbd,0x6b,0x38,0x4b,0x11,0x6f,0x49,0x94,0x51,0xdd,0x8e,0x88,0x65,0x98,0x95,
+  0x71,0x7e,0x6f,0xd2,0xff,0x13,0x43,0xfc,0x73,0x89,0x2f,0x82,0x91,0x33,0x02,0x8b,
+  0xd9,0xf3,0xf5,0x8e,0x8b,0xa2,0x41,0x78,0xe1,0xd0,0x69,0x3a,0x07,0x42,0xbc,0x31,
+  0x8d,0x6e,0x89,0x7f,0xf5,0x27,0xf8,0x3f,0x51,0xb3,0x1a,0xed,0x31,0xed,0x50,0x3f,
+  0xa2,0xa9,0x6f,0x91,0x13,0x8a,0xd9,0x98,0x86,0x77,0x4c,0xf3,0xf1,0x7c,0xf9,0x54,
+  0xff,0xcf,0xf3,0xbc,0x1a,0xed,0x16,0x34,0xc2,0x9b,0x41,0x1d,0xac,0x8b,0xf9,0x0b,
+  0x02,0x6f,0xf5,0xcf,0xe9,0xe1,0xf1,0x08,0xb3,0xe3,0x12,0xda,0x53,0x65,0x16,0xfe,
+  0x0f,0x8f,0xbf,0xe3,0x7c,0x17,0x91,0xd5,0x96,0x15,0x21,0xee,0x1d,0xb5,0x29,0x22,
+  0x57,0x4c,0x4f,0xa3,0x06,0x8f,0xc5,0xdd,0xba,0x5c,0x19,0xf6,0x26,0xfb,0xc3,0x2a,
+  0x5f,0xb3,0x1f,0x40,0x18,0x20,0xd7,0x91,0x43,0x24,0x1c,0x29,0x18,0xa0,0x23,0xbc,
+  0x5f,0x6a,0x74,0x76,0x5c,0x0e,0x90,0x59,0xd2,0xbe,0x2d,0xc5,0x7a,0xcb,0x9a,0x70,
+  0x65,0xb2,0x3e,0x00,0xe5,0x6c,0x67,0x0f,0xc8,0xaa,0x08,0x9e,0xa3,0x60,0x16,0xca,
+  0xbe,0x3b,0xf4,0x02,0x2f,0x33,0x92,0x33,0xcd,0x0e,0xc3,0x50,0xd9,0xef,0x58,0x20,
+  0x67,0x27,0xeb,0x03,0xcc,0xe0,0xeb,0x73,0x98,0x6f,0x92,0x33,0xda,0x15,0x40,0xd8,
+  0x13,0xff,0xc2,0x05,0xe9,0x63,0x09,0x97,0xe5,0x57,0xd3,0xc6,0x60,0x8c,0x54,0x99,
+  0xfd,0xd1,0xa6,0xf0,0x7f,0x7c,0x7a,0x80,0xd5,0x18,0xca,0x09,0xde,0x28,0xd6,0x23,
+  0x2e,0x10,0x4c,0xda,0x4f,0x9c,0xfb,0xdf,0x60,0x41,0x1f,0xae,0x98,0x2d,0x89,0x7f,
+  0xf2,0x4c,0x3e,0x21,0xa3,0x5a,0xf6,0xdb,0xd0,0x88,0x68,0x87,0xa2,0x3c,0xc1,0x15,
+  0xdb,0x61,0x98,0x85,0xf7,0x9f,0x85,0xfc,0xa3,0x91,0x7a,0xf1,0xa1,0x64,0xfd,0xb7,
+  0x44,0x7d,0x24,0x9d,0x06,0xb2,0x5f,0x87,0xf5,0xec,0xeb,0xbc,0x0d,0xca,0x2c,0xe9,
+  0xe9,0x75,0xf8,0xbe,0xcb,0xc9,0x3b,0xb0,0x8f,0xcd,0xd6,0x69,0x39,0x3e,0xfd,0xc4,
+  0xfa,0xd7,0x99,0xfc,0x1f,0x77,0x98,0x66,0x38,0x4f,0xb1,0x46,0xb4,0x5e,0x5d,0x2a,
+  0x99,0x93,0xc6,0x19,0x0e,0x27,0x1e,0x47,0xfb,0xe2,0x70,0x48,0xcd,0xe9,0x2c,0x27,
+  0x7f,0x6b,0xe1,0x3f,0x9b,0x42,0x75,0x0b,0x1d,0x12,0x47,0xc2,0xa7,0x02,0xa5,0xcc,
+  0x1e,0x2a,0x58,0x84,0x57,0xca,0x98,0x63,0x48,0x1c,0x14,0xae,0xf4,0x2d,0xe8,0xb2,
+  0x0f,0x8a,0x96,0xfe,0xb0,0x89,0xf8,0x97,0x30,0xcf,0x34,0xc3,0x03,0x26,0x10,0x3a,
+  0x6b,0xf0,0x0a,0x42,0x9c,0x08,0x94,0x70,0x0d,0xad,0x9d,0x52,0x1f,0xc0,0xac,0x0f,
+  0xb9,0xb9,0xb1,0x17,0x7a,0xd4,0x2e,0xb3,0x7f,0x16,0x1c,0xd3,0xf1,0xca,0x4f,0x4c,
+  0x45,0xef,0x35,0x5a,0x95,0x94,0xfe,0xb0,0xab,0xcc,0x32,0x8f,0xf2,0x13,0xce,0x01,
+  0xe9,0x0d,0xcd,0x2c,0x94,0xfd,0x34,0x69,0xd6,0xdb,0x35,0x79,0x5b,0xa2,0x02,0x64,
+  0xbd,0xeb,0x27,0x44,0x4f,0xc6,0xbf,0x04,0xde,0x16,0x0d,0xad,0xad,0xa8,0xf3,0x3d,
+  0x84,0x55,0xce,0xb3,0x19,0x51,0x9b,0x59,0x1f,0x00,0x11,0x54,0xd8,0x9c,0x5f,0x4b,
+  0xb7,0x58,0xfa,0xc3,0xf2,0xf8,0xd7,0x41,0x04,0x39,0xa6,0xb7,0x67,0xb3,0xe6,0xfc,
+  0x12,0xde,0xff,0x51,0x68,0x30,0x0b,0x05,0xd8,0x4c,0x6a,0x10,0x07,0x06,0x1b,0x26,
+  0xeb,0x03,0x24,0xe2,0x5f,0x1e,0x81,0x7b,0x1b,0x08,0xef,0x06,0xc2,0xed,0x2f,0xa9,
+  0x6f,0xbc,0x50,0x00,0x1d,0x86,0x2e,0x8e,0x7f,0xb2,0x52,0xe2,0x5f,0xa3,0x5a,0x55,
+  0xcf,0xcd,0xfd,0x05,0x66,0x7f,0x58,0x6d,0x9c,0xf6,0xe3,0xd3,0x96,0x71,0x47,0x90,
+  0x59,0x31,0xe9,0x82,0xb5,0x3f,0x1a,0x77,0x7a,0xa8,0x95,0x41,0x47,0x30,0xe7,0x42,
+  0xe4,0x95,0xf2,0xf9,0xb5,0x08,0x03,0x9e,0x65,0xaf,0x68,0xb8,0x3e,0xaf,0xc9,0x85,
+  0x66,0xa9,0x01,0xfb,0x6b,0x62,0xba,0x35,0xfe,0x05,0xdd,0x7a,0x89,0x20,0x23,0xda,
+  0x21,0x2c,0xe4,0xa4,0xf8,0x3c,0xdf,0x0a,0x47,0xd0,0x50,0x92,0x9b,0xb2,0x55,0x94,
+  0x27,0x3e,0xa0,0x4d,0x24,0x6b,0x52,0xfe,0x98,0xf1,0xaf,0x3a,0x3c,0x74,0x79,0x9c,
+  0xed,0x03,0x2b,0x79,0x18,0xeb,0x45,0x5e,0x76,0x1e,0xdf,0x37,0x6c,0x02,0xa1,0x50,
+  0xdd,0x74,0x92,0x9d,0xe4,0xff,0x48,0x1c,0xff,0x94,0x04,0xcc,0x6a,0xe4,0xbb,0xc0,
+  0xac,0x2e,0xb5,0x8a,0x36,0x4b,0x44,0x13,0xdb,0xc6,0x11,0x26,0x1a,0x32,0x49,0x7b,
+  0x5f,0x9f,0x6e,0xc2,0x9e,0x90,0xa3,0xad,0xe0,0xe5,0xd0,0xfb,0x67,0xbc,0xf7,0x67,
+  0xfd,0x44,0x3c,0xc7,0xf9,0xed,0x26,0x90,0x13,0x46,0x99,0x4f,0x9b,0x89,0xa6,0xeb,
+  0xd4,0xf8,0x17,0xaf,0x97,0x75,0x0e,0xde,0x60,0x47,0xb4,0x4d,0x5b,0xc4,0x5e,0x36,
+  0x0a,0x47,0xaa,0x1d,0xd9,0x8d,0x7c,0xe9,0x2a,0x56,0xdd,0x6c,0xad,0x0f,0x90,0xe0,
+  0xff,0xf8,0xa6,0x2f,0x65,0x05,0xf9,0x85,0x7d,0x5a,0x57,0x2e,0xbe,0x6f,0x08,0xce,
+  0x24,0x0a,0x25,0x21,0x34,0x62,0x3e,0xd5,0xde,0x2a,0x92,0x94,0xf8,0x17,0xa2,0x41,
+  0x46,0xe3,0xe2,0x0f,0x60,0x63,0x60,0x81,0x6e,0x53,0xc9,0x6d,0xb0,0xd1,0x28,0x61,
+  0x68,0xd1,0xbb,0xe0,0x88,0x80,0x47,0x2f,0x4e,0x36,0xa4,0xc6,0xbf,0x50,0xda,0x5c,
+  0x7f,0x3d,0xae,0x46,0xcb,0xbb,0x85,0xbc,0x91,0xc1,0x17,0xd5,0x66,0x2e,0x9f,0x67,
+  0xa2,0xe2,0xe6,0xbf,0xe2,0x12,0x69,0x12,0xff,0x98,0xf1,0x2f,0x98,0x37,0x98,0x77,
+  0x26,0xfb,0xbf,0xdb,0xd6,0xc2,0x2d,0x86,0x6d,0x98,0x4c,0x87,0x26,0x5a,0x6c,0xdc,
+  0xf8,0x3d,0x32,0x53,0xe2,0xd0,0x88,0xaa,0x61,0x7d,0x32,0x1f,0x9c,0xc7,0xbf,0x10,
+  0xff,0x0c,0xba,0x03,0xe2,0x75,0xd2,0xcb,0x4d,0xb7,0x22,0xec,0x29,0x78,0x84,0xfc,
+  0x3b,0x67,0x44,0x9f,0x91,0x4d,0x68,0xa4,0xba,0xeb,0x44,0x4b,0x7f,0xd8,0x04,0x1e,
+  0x38,0x8a,0xfb,0x8d,0x97,0x8d,0x3a,0xa2,0x99,0x6d,0xbb,0xc7,0xc0,0xec,0x17,0x3f,
+  0xc4,0x2b,0x42,0x43,0x6a,0x7f,0xd8,0xb6,0x23,0x14,0xed,0xf7,0x77,0x33,0x97,0xe7,
+  0x94,0xd9,0x4e,0xb1,0xd2,0x10,0x02,0x89,0xcf,0xb9,0x47,0x28,0xee,0xe8,0x43,0xfd,
+  0x75,0x29,0x3a,0x9f,0xab,0xb6,0x64,0x7c,0xbc,0x53,0x49,0xf8,0x9f,0x69,0x90,0xcc,
+  0x64,0x4d,0x5a,0x7e,0x6d,0x66,0x3d,0x5a,0x4f,0x4d,0xc1,0x62,0x43,0xac,0x26,0x33,
+  0x11,0x1a,0xdd,0x8a,0xa2,0x49,0xfc,0xb6,0xb5,0x3f,0xac,0x39,0x3f,0x63,0x98,0xe4,
+  0xd2,0xb0,0x52,0xa0,0xd1,0x61,0x72,0x9a,0x7b,0x84,0x0c,0x59,0x0b,0x23,0x14,0x0c,
+  0x15,0x68,0x29,0xfd,0x61,0x0b,0xcd,0xfa,0x48,0x25,0xfd,0x94,0xb7,0x25,0x0a,0x1b,
+  0x2b,0xd7,0xdc,0x59,0x89,0xab,0x17,0xe6,0xf2,0xdc,0x15,0xe6,0x54,0xcc,0x42,0xcd,
+  0x05,0x24,0x90,0x7c,0x9e,0x34,0xae,0xbf,0xaa,0xce,0x64,0xe6,0x85,0x25,0xed,0x84,
+  0xd1,0xd5,0x67,0x3f,0x20,0x0e,0x84,0x8e,0x99,0xfa,0x4b,0x76,0x73,0xd5,0xc3,0x43,
+  0xf3,0x45,0x93,0xeb,0xc9,0xa6,0x8f,0xaf,0x4f,0xb4,0xf1,0x3d,0xed,0x93,0xa0,0x89,
+  0x7f,0xce,0xda,0x47,0x6e,0x37,0xfb,0x35,0xe0,0xfa,0x04,0x7d,0x92,0xe3,0x39,0x0b,
+  0xfe,0x49,0xf0,0x7f,0xaa,0x8c,0xac,0x3e,0x71,0x4e,0xfa,0xab,0x91,0xd2,0x1e,0xfb,
+  0xb0,0x5c,0x99,0x28,0x13,0x14,0xe5,0xfe,0x9f,0x68,0x29,0x38,0x42,0x22,0x9d,0xf4,
+  0xff,0xf0,0xf8,0xd7,0xf3,0x30,0xcf,0xa0,0xad,0xed,0xb3,0xa1,0xd5,0x28,0xd0,0x3a,
+  0x3d,0xa4,0x5d,0x3d,0xc8,0x4a,0x8c,0x3b,0x23,0xdc,0x9f,0x63,0x94,0x95,0xcb,0x1d,
+  0xc4,0x35,0x15,0xff,0x18,0xb6,0x06,0xa2,0x86,0x36,0xa8,0x28,0x6d,0x62,0xbc,0x9e,
+  0x33,0x6f,0x63,0x11,0x09,0x0f,0xd1,0x43,0xd4,0xb9,0x03,0x07,0xea,0xe4,0x7e,0xb3,
+  0xe5,0x26,0xf8,0xf6,0x68,0xad,0x14,0xe2,0x31,0xd4,0x35,0x1a,0xcb,0x6e,0x82,0x18,
+  0xdf,0x81,0xbc,0x50,0xd2,0x1e,0xe0,0x1c,0x23,0x42,0x26,0xfb,0xc3,0x12,0x8e,0x7f,
+  0x50,0x0d,0x65,0xb1,0x69,0x85,0x9c,0x76,0xa8,0xd9,0x79,0xe3,0x8c,0x11,0xbe,0x3e,
+  0xd1,0x82,0x21,0x38,0x6f,0x0a,0x22,0x19,0x26,0xfb,0xc3,0xb6,0xcf,0x18,0x4f,0xd2,
+  0x31,0xc4,0x0b,0xb8,0x6d,0x16,0x6b,0x8e,0x7a,0xd1,0x2c,0x14,0xc0,0xaf,0x8c,0x29,
+  0x97,0x95,0x45,0x66,0x7d,0xc8,0x64,0x7f,0x58,0x8e,0x9f,0xd7,0x99,0x45,0xd4,0x87,
+  0xef,0x3b,0xd1,0xe4,0x7d,0xc5,0xde,0x27,0x3e,0xdc,0x70,0x92,0x79,0x23,0xad,0xe7,
+  0xf2,0xaf,0xc0,0x29,0xb3,0xbe,0xc4,0xd4,0xf8,0x17,0x3c,0x90,0x68,0x02,0xd2,0x02,
+  0x3b,0x4f,0xa2,0x34,0xb8,0x29,0xbe,0x81,0x39,0x5b,0x1d,0x7b,0xc9,0x03,0xb0,0x41,
+  0x7d,0xa6,0xaf,0xa5,0xcb,0x76,0x4d,0xfc,0x8b,0xdb,0x17,0x06,0x6b,0x14,0xd4,0xbe,
+  0xe6,0x08,0xb1,0x2b,0x11,0x41,0x0d,0x47,0x9c,0xa8,0x8f,0x36,0x50,0xf5,0xa8,0xec,
+  0x09,0x87,0x2d,0xf9,0x5f,0x66,0xfc,0x8b,0x7b,0xcf,0xce,0x09,0x8d,0xe0,0xec,0x99,
+  0x1b,0xb5,0xb9,0xa7,0x6d,0x08,0xa9,0x71,0x5b,0x27,0x59,0x0d,0x1b,0x4c,0x3e,0x95,
+  0x85,0xff,0xac,0x99,0xf1,0xaf,0x12,0x4e,0xfa,0x1a,0x20,0xbc,0x2d,0x6c,0xe6,0x2e,
+  0x84,0x25,0x4c,0xf0,0xc6,0x68,0xa7,0x78,0x12,0x0c,0xe8,0xe2,0x85,0xe5,0xa3,0xd7,
+  0xfa,0x7f,0x86,0x6b,0x06,0x12,0x1b,0x63,0x44,0xdc,0xce,0xcf,0x17,0xaf,0x28,0xf5,
+  0x30,0x5c,0x31,0x5b,0xab,0x14,0xac,0x49,0x8d,0x7f,0xe5,0xf1,0x7c,0x04,0x31,0x02,
+  0x27,0x60,0x71,0x0f,0xc2,0xa4,0x21,0x68,0xd6,0x38,0xec,0xcc,0x19,0xba,0x6f,0x54,
+  0x33,0xf9,0xd5,0xd7,0xc4,0xbf,0x0c,0xb9,0x3b,0x34,0x04,0x2d,0x6c,0x9e,0x21,0xdf,
+  0x4a,0xc6,0xa0,0x39,0xd7,0xd9,0x46,0x75,0xf2,0xb1,0x76,0x48,0x2b,0x33,0xe4,0x23,
+  0x30,0x25,0xfe,0xc5,0x9b,0x56,0x94,0xe3,0xd7,0x35,0xab,0xf1,0x4b,0xb8,0x2c,0x0d,
+  0x4a,0x21,0xe4,0xc1,0x1d,0xa7,0x50,0xbb,0xa8,0x46,0x4b,0x8c,0x4d,0x89,0x7f,0xe9,
+  0x66,0x53,0x8c,0x37,0xd9,0x63,0x7a,0xf1,0xd0,0x8d,0xdf,0x26,0xef,0x90,0x4d,0x90,
+  0xaf,0xba,0x02,0xce,0x77,0xe0,0x40,0xec,0x49,0xfe,0xab,0x29,0xf1,0x2f,0xbd,0x92,
+  0x17,0x41,0xda,0x10,0xfe,0x75,0x67,0xe5,0xa0,0x83,0x92,0x93,0x5a,0x8f,0x1a,0xdb,
+  0x6d,0x9f,0x27,0x9e,0x94,0xce,0xbb,0x62,0xbd,0x8e,0x3d,0xb2,0x25,0xfe,0x95,0x39,
+  0xb1,0x3e,0x05,0x63,0xda,0xc7,0x50,0x75,0xda,0x11,0x17,0xc6,0x94,0xa7,0x9d,0x55,
+  0xec,0xc6,0xa3,0x35,0x63,0xda,0xe7,0xea,0xf3,0xbc,0xf4,0x68,0xaa,0xff,0x87,0x93,
+  0xc0,0x33,0x79,0xbf,0x9e,0x13,0x70,0xe8,0xa4,0x7d,0x9b,0xf8,0x1d,0xe3,0x7c,0x38,
+  0x1d,0xc2,0x0c,0x3f,0x44,0x17,0xfe,0x6a,0xd3,0xd4,0xfa,0xd8,0xcf,0x9b,0x24,0xe7,
+  0xf4,0x5e,0x14,0x23,0x1c,0xff,0xd8,0xee,0x57,0xf7,0xc3,0xad,0x20,0x6b,0x36,0xde,
+  0x7a,0x72,0x6e,0xcf,0x35,0xfd,0x41,0x1e,0x33,0xf3,0xbf,0xc8,0x9b,0xb0,0x89,0xcd,
+  0x1e,0xcc,0x58,0x4e,0x66,0xb1,0x03,0x46,0xbe,0x2a,0xaf,0xf6,0xce,0xa2,0x4f,0xb0,
+  0x1d,0x66,0x7f,0x90,0xc9,0x7c,0x19,0xee,0xff,0x39,0x0c,0x2e,0x43,0xe4,0x7c,0x86,
+  0x16,0x98,0x63,0xfc,0x4d,0x05,0x59,0x2d,0xed,0x85,0xc2,0x75,0xb2,0xce,0xf1,0xa4,
+  0x5a,0x64,0xb4,0x4c,0xad,0x8f,0xfd,0x66,0xa2,0xe9,0xf6,0x08,0xe3,0x6d,0x41,0x9a,
+  0x3f,0x12,0x5d,0x70,0xc5,0x28,0x8d,0x65,0x0d,0xf2,0x42,0x49,0x28,0x7f,0x96,0xe9,
+  0x05,0x53,0xea,0x63,0xc3,0x7e,0x48,0xb4,0x85,0xad,0xae,0xc0,0xbf,0x10,0x51,0x43,
+  0xa9,0x3c,0x42,0x54,0x73,0x56,0x18,0xb9,0xf7,0x3f,0xa8,0x8f,0x7d,0xf3,0x4f,0x78,
+  0x9a,0x0f,0x73,0x6a,0xf6,0x2d,0x05,0x03,0x70,0xa7,0x56,0xa9,0xdd,0x13,0x15,0x57,
+  0x49,0xa3,0x66,0xa0,0x87,0x4c,0xf1,0xff,0x68,0x26,0xda,0x19,0x20,0xcd,0x3b,0xda,
+  0xb5,0x4c,0xb3,0xf0,0x32,0xab,0xe0,0x6e,0x87,0xd9,0xf6,0x3d,0x5a,0xd9,0x9f,0xa9,
+  0x8f,0x44,0x9d,0xe3,0x69,0x4a,0x6a,0x91,0x76,0x3d,0x0e,0x94,0x5d,0x50,0x72,0x3a,
+  0x2f,0x4a,0x0a,0x6b,0x0f,0x83,0xe9,0xaf,0x98,0xe2,0xff,0x41,0x90,0x23,0x8f,0x57,
+  0x43,0x0a,0x0a,0x4a,0xd9,0x8b,0x30,0x5f,0xa8,0x0b,0x96,0xf3,0x46,0x69,0x07,0xb5,
+  0x8e,0x60,0xf9,0x82,0x29,0xf5,0xb1,0xbb,0x71,0xbf,0x2e,0x49,0x54,0x43,0x2a,0x87,
+  0x9b,0xf8,0x60,0x30,0xdd,0x07,0x4b,0x81,0x37,0x92,0x33,0xf9,0x3f,0xd6,0xfa,0xd8,
+  0x99,0xe3,0x20,0x27,0x2a,0xf2,0xb2,0xd8,0x65,0xc1,0x79,0x41,0xb4,0x4f,0x7f,0x67,
+  0x12,0xa1,0x0b,0xc6,0x7f,0xd5,0x6f,0x8d,0x7f,0x99,0xf3,0xbd,0xd5,0x78,0xb1,0xd0,
+  0x78,0x51,0xf1,0xde,0x65,0xef,0xc7,0x8d,0xf4,0x0a,0x54,0x69,0x33,0x37,0xcb,0x0b,
+  0xf2,0x2e,0xa7,0x7b,0x6b,0xed,0x6d,0x56,0xfc,0x03,0xdc,0xff,0xd3,0x8e,0x47,0x8b,
+  0xe4,0x1b,0x11,0xb5,0x3d,0x0f,0x05,0xe9,0x59,0x88,0x40,0x09,0x31,0xfb,0xa3,0x75,
+  0xa9,0x4e,0xea,0x32,0xa6,0xc4,0xbf,0x0e,0xbb,0x54,0x9e,0x66,0xd2,0x04,0x28,0x7f,
+  0xfc,0x75,0x8a,0xff,0x45,0xb5,0x01,0xdc,0xb5,0x54,0xf1,0xe3,0xfb,0xba,0x76,0x04,
+  0x5c,0xaf,0x91,0xa9,0xfe,0x1f,0xbe,0x9e,0x77,0x3c,0xe5,0x6c,0x10,0x54,0x5e,0xe8,
+  0x7e,0xc0,0xd6,0x9c,0xb6,0xba,0xd6,0x95,0x4b,0xdc,0xc2,0x41,0xc8,0xd7,0xf2,0xfa,
+  0xad,0xf1,0x2f,0x9e,0xff,0x65,0x96,0x3d,0x97,0x9f,0xcc,0xe3,0xfc,0x1f,0x33,0x4c,
+  0x76,0x4c,0x7b,0x60,0x65,0x64,0xa2,0x22,0xba,0x5d,0x29,0x98,0xe2,0xff,0x49,0x34,
+  0x85,0xc1,0xaf,0x0f,0x3c,0x51,0x8e,0x87,0x41,0x05,0x44,0x44,0x8f,0x8b,0x13,0xae,
+  0x42,0x39,0xc5,0xff,0x23,0x8d,0xfb,0xdf,0x76,0xc0,0x08,0xf5,0x0a,0x76,0xd6,0x10,
+  0xe7,0x85,0x49,0xf3,0x10,0x7f,0xc6,0xd5,0x41,0xe6,0xe5,0xfc,0x1f,0x4b,0xfc,0xeb,
+  0x76,0x04,0x39,0xbc,0x3e,0x2d,0xef,0xe6,0x72,0x04,0xda,0x99,0x6b,0x40,0xec,0x44,
+  0x74,0xf5,0x0f,0x51,0x59,0xf7,0x5f,0x84,0x43,0x46,0x3b,0xa3,0x7a,0x4a,0x7f,0xb4,
+  0x04,0xfe,0xc1,0xfd,0xb0,0xdb,0x8c,0x3e,0x64,0x94,0x93,0x21,0xda,0x55,0xef,0xe6,
+  0x2b,0x76,0x4a,0xdb,0xa1,0xa8,0xf1,0xe6,0xf2,0xf4,0xbb,0xae,0xf1,0xff,0x2c,0xa9,
+  0x27,0x6f,0x0b,0xcf,0x83,0xda,0x97,0xc7,0xf3,0xa7,0x0e,0xc0,0x77,0xb4,0x96,0x87,
+  0xf0,0xca,0x01,0xd8,0xd1,0x9f,0xf1,0x3d,0x62,0xe9,0x8f,0x06,0x3c,0xfe,0x55,0x6c,
+  0x76,0x03,0x89,0xfd,0xa9,0x61,0xfa,0xa0,0x7d,0x79,0xce,0x3b,0xea,0x05,0xf3,0x4a,
+  0xc1,0x3b,0x70,0x8e,0x95,0xea,0xc5,0x83,0xd6,0xfe,0x68,0x66,0xbf,0x54,0xde,0x1f,
+  0xa4,0x80,0x47,0xcf,0xab,0x5e,0x72,0x44,0x73,0x7e,0x0e,0x97,0x08,0x4a,0xe0,0xfd,
+  0x05,0x43,0xa6,0xab,0x36,0x4b,0x4f,0xe9,0x0f,0x72,0x85,0xf3,0x7f,0x50,0x49,0xe5,
+  0x5f,0x09,0xed,0x42,0xb3,0x7d,0x69,0x67,0x81,0x2f,0x74,0x2a,0x3a,0x2f,0xe4,0x18,
+  0x6b,0xf4,0x69,0x2f,0x23,0x22,0x5a,0x7a,0xa6,0x20,0xb5,0x3e,0xf6,0x78,0xfe,0xe9,
+  0x49,0x6d,0x3d,0x2b,0x1e,0xa4,0x5f,0x20,0x33,0xe1,0x29,0xad,0xb8,0x0e,0xdf,0x77,
+  0x1b,0x3c,0x0d,0x5f,0xd0,0xe8,0xdf,0x59,0xfd,0x3f,0x0a,0xe7,0xff,0x98,0xf3,0x7f,
+  0x0b,0xfb,0x54,0x77,0x1f,0x3d,0xaa,0x2e,0x95,0xd6,0xd1,0xe2,0x3e,0xbc,0x32,0x13,
+  0xd6,0xc1,0x6c,0xc8,0x08,0x4c,0xe9,0x0f,0xd2,0x05,0x3a,0xcf,0xa7,0x1b,0x12,0xb6,
+  0xe1,0xc2,0x06,0xec,0xca,0x52,0xb4,0x6f,0xed,0x47,0x51,0x6d,0xb5,0xc2,0xce,0xc0,
+  0x2f,0x20,0x03,0xa6,0xf6,0x87,0x15,0x78,0x34,0x87,0x8c,0x29,0x87,0x50,0xf0,0x4a,
+  0x5e,0xf2,0xb0,0x12,0x66,0x6e,0x45,0x1e,0x41,0x7b,0xe4,0x04,0x94,0x99,0xfd,0x05,
+  0x52,0xfc,0x3f,0x23,0x89,0x26,0x29,0x43,0xf0,0x01,0xd7,0x5f,0x4f,0xc9,0x78,0x07,
+  0xed,0x91,0xaf,0xa0,0x86,0xfa,0xd0,0xec,0x0f,0x92,0x75,0x4d,0x7d,0x6c,0x28,0x35,
+  0x6e,0x1e,0x13,0x79,0x20,0x6c,0xbe,0x61,0x1f,0x43,0x0d,0x78,0x0a,0x4a,0xb5,0x47,
+  0x63,0x8d,0x0b,0xe0,0x94,0x52,0x6a,0x64,0xc6,0x65,0x48,0x89,0x7f,0x75,0x2b,0xe3,
+  0xf9,0xd7,0x68,0x4f,0x19,0x91,0xdd,0x28,0xc6,0xdf,0x34,0x9c,0x21,0x77,0xcc,0x5f,
+  0xa2,0x6c,0x68,0x70,0x1a,0xd4,0x45,0xd4,0xd4,0xfe,0xb0,0x89,0x26,0x20,0xbb,0x79,
+  0xbd,0x44,0xc3,0x15,0xb5,0x2d,0xe5,0x6d,0x40,0xbf,0x8e,0x40,0xe8,0x9b,0x68,0xe1,
+  0x3a,0xe3,0x79,0x5d,0x24,0x64,0xf5,0xff,0x48,0x3c,0xa9,0xd9,0x8c,0x76,0x85,0x3b,
+  0xd4,0xa3,0x14,0xd2,0x97,0xc2,0x16,0x49,0xf5,0xff,0x8d,0xc7,0xc6,0x1b,0xd3,0x84,
+  0x78,0xa9,0xc9,0x64,0xfe,0x29,0xaf,0x8f,0xfd,0x09,0x77,0xda,0xc7,0xc4,0x7f,0x91,
+  0x22,0xdf,0x2b,0xed,0x6f,0x7d,0x4c,0x7c,0x58,0x39,0x0e,0xde,0x80,0xfd,0x13,0x71,
+  0x15,0x3d,0xce,0xf9,0x93,0x7a,0xa3,0x96,0x52,0x1f,0x3b,0xd1,0x1f,0x6d,0xda,0x98,
+  0x3e,0xa6,0xcd,0x3a,0xee,0xa8,0x11,0x2b,0xe1,0x08,0xf9,0xc5,0x5d,0xf7,0x9c,0xaf,
+  0x39,0x9d,0x50,0x6d,0x7a,0x4a,0x7f,0x34,0x1e,0xff,0xda,0x7b,0xd2,0x7d,0x5e,0xbc,
+  0x22,0x5d,0x26,0x0b,0x8d,0xcc,0xfe,0x82,0x61,0x78,0x7b,0x7e,0x29,0xb4,0xf6,0x89,
+  0xc3,0xc6,0xab,0x6c,0xef,0x9f,0xc1,0x3f,0xac,0xe0,0x0c,0x1d,0x4b,0xff,0x08,0x1e,
+  0x57,0x9d,0x06,0x8a,0xd9,0x8f,0x20,0x52,0x7f,0x28,0x8f,0x46,0xc8,0x59,0xa3,0x85,
+  0x39,0x11,0x1a,0x39,0xf5,0x29,0xf8,0x47,0xed,0xa7,0xf3,0xc9,0xc9,0xbc,0x9f,0xd1,
+  0x42,0xfd,0x2e,0x05,0xe5,0x67,0x14,0xd4,0x74,0x1b,0x2e,0x56,0x22,0xbf,0x29,0x46,
+  0xc8,0xf4,0x54,0xfc,0x63,0x16,0xc1,0x1e,0x82,0x9f,0xe2,0xc6,0x41,0x7b,0x6d,0x08,
+  0xad,0x88,0x39,0x2b,0xef,0xea,0x6c,0x3f,0x67,0x32,0xac,0xe4,0x58,0xba,0x05,0xff,
+  0x98,0xf5,0x42,0x79,0x12,0x1f,0x7e,0xaf,0xcb,0xb0,0x30,0x9e,0xb5,0x4d,0x1c,0x85,
+  0x37,0x0c,0x6f,0x7d,0x56,0x54,0xfc,0x83,0x89,0x88,0x70,0xab,0x4c,0xe5,0xff,0x2c,
+  0xe6,0x4d,0xd3,0xc6,0xe0,0xb2,0x52,0xd5,0x9f,0xf9,0xb6,0xe9,0x56,0xbd,0x8d,0x15,
+  0xf7,0xd7,0x9c,0x54,0xaf,0xfe,0xb9,0xfe,0x68,0x3c,0x08,0x3b,0x33,0x26,0xae,0xd6,
+  0x2e,0xf1,0x40,0x49,0x54,0x9c,0x0b,0x7d,0xdc,0x3e,0xfd,0x51,0xcd,0x59,0x18,0xbf,
+  0x7f,0x6a,0xfc,0x6b,0x2f,0xc7,0xcf,0xe7,0xa7,0x3d,0x80,0x07,0xa1,0xa4,0x41,0x8b,
+  0x92,0x08,0x9c,0x61,0xff,0x18,0x12,0xbb,0xef,0xfd,0x03,0x7b,0xc1,0xc4,0x6f,0x39,
+  0x5d,0x56,0xfc,0xc3,0xd3,0x2e,0x8c,0x80,0x17,0xb5,0xf3,0x1e,0x52,0xc2,0xdb,0x52,
+  0x4b,0xd2,0x06,0x94,0xec,0xa2,0x8b,0x1c,0xa7,0x5b,0x13,0xeb,0x93,0x12,0xff,0x12,
+  0xcc,0x78,0xd0,0xf7,0xc9,0x2c,0xed,0x00,0x9b,0x37,0xbc,0x6d,0x39,0x79,0x22,0xf0,
+  0x58,0x74,0x85,0x2a,0xaf,0x71,0xbe,0x6e,0xb6,0x12,0x33,0xf3,0xa1,0x26,0xee,0x6f,
+  0xe2,0x1f,0x7c,0x7e,0xee,0x86,0xc5,0x41,0x25,0xca,0xe7,0x1c,0x89,0xf4,0xe4,0xa9,
+  0x7e,0x87,0x50,0xd3,0x43,0x7e,0x2d,0x79,0xa6,0xd4,0xc7,0x36,0xf9,0x3f,0x37,0x1b,
+  0xf3,0x2e,0x34,0x8e,0x09,0x57,0x95,0xca,0xde,0x69,0xfd,0xf2,0xc3,0x08,0x9b,0xab,
+  0xb4,0x9b,0x87,0x6b,0x2e,0xc0,0x9f,0x14,0x33,0xff,0x6b,0x2a,0xff,0xc7,0xf7,0x9a,
+  0xa3,0x6c,0x49,0x96,0x74,0x8c,0x78,0x7b,0xed,0xdd,0x35,0xdb,0xe1,0x15,0x26,0x32,
+  0x37,0x22,0x0a,0xb2,0xe4,0xda,0xfe,0x68,0x28,0x7f,0xa4,0xe2,0x33,0x2d,0x28,0x3d,
+  0x94,0xa7,0x21,0xbf,0x07,0xea,0x57,0xe6,0x29,0xeb,0x25,0xb3,0x51,0xda,0xdb,0x09,
+  0xc3,0xea,0x9a,0xfe,0x20,0x3c,0xa9,0x6d,0x0d,0xf9,0x1a,0xbe,0xdd,0xec,0x10,0x2d,
+  0x27,0xb3,0x48,0x83,0x91,0x1f,0xa2,0x4b,0xc8,0xd1,0x44,0xa3,0xb4,0x6b,0xfa,0x83,
+  0x8c,0xfb,0xf3,0xa1,0x3d,0x50,0x68,0x04,0xca,0x89,0xcc,0x1a,0x8e,0x85,0xea,0x22,
+  0x1e,0xf2,0x87,0x35,0x8d,0x70,0x6d,0x7f,0x34,0xb8,0x28,0x96,0x71,0xfc,0x53,0x27,
+  0xbd,0x04,0x0b,0x99,0xfb,0x19,0xf1,0x30,0x9c,0xd2,0x76,0x76,0xa2,0xd9,0x35,0x2a,
+  0x99,0x8d,0xd2,0xae,0xe9,0x0f,0x02,0x09,0xb6,0x33,0x0e,0x0e,0xa1,0x62,0x5a,0x12,
+  0xd7,0xcc,0x2b,0x11,0xb3,0x82,0xdf,0x2c,0xee,0x18,0x99,0x82,0x7f,0x50,0xdf,0xb9,
+  0xdb,0xe4,0x42,0x54,0x73,0x26,0x2d,0xe4,0x25,0x72,0x8c,0x55,0x86,0x68,0x1b,0x4f,
+  0x04,0x93,0xae,0xed,0x8f,0x66,0x3a,0x19,0xfa,0xa2,0xe1,0x42,0xe5,0x71,0x28,0xe0,
+  0xd1,0xae,0x81,0xbc,0x37,0x22,0x25,0x75,0xf4,0x39,0xf2,0x87,0x09,0x62,0xf3,0x35,
+  0xf1,0x2f,0xfc,0xac,0xc0,0x07,0x21,0x1e,0xf6,0x1a,0xda,0xde,0x3c,0xbd,0xe4,0xf6,
+  0x0d,0x51,0xf2,0x9e,0xd4,0x2c,0xf0,0x88,0x98,0xf3,0x9a,0xf8,0x17,0x0f,0x72,0x49,
+  0xf4,0x71,0xce,0x7f,0xce,0x25,0xbd,0x74,0xb3,0x1f,0xaf,0x78,0x4c,0xc7,0xc8,0x35,
+  0xfd,0xd1,0x12,0xf1,0xaf,0x00,0x9b,0xa6,0xc2,0x30,0xbe,0xd6,0x52,0x26,0x70,0x20,
+  0xf4,0x08,0xea,0x58,0x33,0x11,0x6c,0xd6,0xd4,0xfe,0x68,0x03,0xa8,0xd6,0xb3,0x82,
+  0x8e,0xb6,0x69,0xe3,0x44,0x68,0xb3,0x2d,0x6c,0xed,0xcd,0x3c,0xbe,0x73,0x79,0x5c,
+  0xbf,0x5f,0xd3,0x1f,0xc4,0xa7,0xcd,0x0c,0xf2,0x6a,0xa2,0x9e,0xd2,0xa5,0xf6,0x68,
+  0x63,0x99,0xfe,0x4a,0xc8,0x2c,0x8b,0x7d,0x81,0x8d,0x43,0xa9,0xd4,0xfe,0x20,0x83,
+  0x50,0x42,0x27,0xa2,0x5d,0xdb,0x8b,0x11,0x08,0xc1,0x86,0x15,0x88,0x7f,0x58,0x76,
+  0x7c,0x07,0xa7,0x06,0x5d,0xd3,0x1f,0x0d,0xdf,0xf7,0x5e,0x6a,0xd2,0x7e,0x40,0xd5,
+  0xb6,0x29,0x61,0xc9,0x6c,0x94,0x66,0x53,0x48,0x6f,0xef,0x1e,0x58,0x3d,0xa5,0x3f,
+  0x1a,0xe2,0x9f,0x5d,0xb0,0xba,0xda,0x84,0x31,0x7b,0xa8,0xb3,0x96,0xfb,0xd3,0x10,
+  0x58,0x96,0x04,0x8a,0x70,0x61,0xd9,0x44,0xbf,0xb9,0x24,0xfe,0x49,0xf8,0x7f,0xb4,
+  0x40,0xb4,0xa6,0x03,0x15,0x71,0xa2,0x11,0x1e,0x41,0xfb,0x7d,0x39,0x4f,0x84,0xc7,
+  0x2f,0xe2,0xbb,0xa6,0x3f,0x2c,0xf0,0xb4,0xf7,0x79,0x26,0x3b,0x28,0xfa,0x5c,0x68,
+  0x9e,0x62,0x3a,0x3a,0x2a,0xb5,0xcc,0xb6,0x49,0xfc,0x73,0x4d,0x7f,0x10,0x1f,0xd8,
+  0xc3,0xdc,0xdb,0xa3,0x79,0xaf,0x1b,0xe7,0x9f,0x23,0xec,0x89,0x88,0x67,0xb5,0x3e,
+  0xb8,0xa6,0x3f,0xda,0xb8,0xff,0x67,0x48,0xec,0x64,0x87,0xa0,0x20,0x9a,0xa9,0x93,
+  0x0f,0x60,0xa3,0xf1,0xfb,0x36,0x97,0x4e,0x2e,0x72,0x46,0x34,0x93,0x75,0x71,0xc3,
+  0x35,0xf8,0xc7,0xe5,0x21,0xf7,0xf0,0xee,0x30,0xf1,0xeb,0x3d,0xf8,0x76,0x0d,0x77,
+  0xa9,0xf5,0x80,0xfb,0xa1,0xb1,0xf1,0xda,0xfe,0x68,0x09,0xfc,0x43,0xd7,0x6c,0x69,
+  0x83,0xe7,0xd5,0x02,0x76,0x7d,0xbd,0xb3,0x57,0x5d,0x6f,0xe4,0xfb,0x69,0x3d,0x79,
+  0x47,0x18,0x3f,0xbf,0x9d,0xd6,0xf8,0x17,0x9e,0xdf,0xca,0x01,0x3b,0xef,0x8f,0xf6,
+  0x27,0xa3,0x34,0x9e,0xf9,0x83,0x9c,0xd7,0xc9,0x49,0x56,0x10,0xb2,0xaf,0x69,0xfc,
+  0x7c,0xa2,0x75,0x5a,0x6a,0x7f,0x10,0x94,0x27,0x27,0xe7,0x31,0x5c,0x8d,0x4f,0x13,
+  0x66,0xe9,0x00,0xb7,0xdf,0x79,0xc6,0xdc,0x85,0x04,0x35,0x28,0x36,0x05,0xff,0xf0,
+  0x6a,0xd8,0xf6,0xc1,0x69,0xff,0xa8,0x5d,0x8d,0xf1,0x6e,0x0e,0x8d,0x57,0x94,0x04,
+  0x22,0x32,0xeb,0x43,0xa2,0x69,0x3f,0x6a,0xe5,0x3f,0x27,0xf8,0x87,0xbc,0xbb,0x47,
+  0x2e,0x2f,0xfc,0xf8,0x92,0x49,0x3b,0x7c,0x3e,0x17,0x11,0xce,0xf7,0xcc,0xc6,0xf7,
+  0xc5,0x53,0xfb,0xa3,0x8d,0xfb,0x8b,0x42,0xb6,0x5c,0xfb,0x81,0x67,0x78,0xf5,0x6f,
+  0xf2,0xb6,0xba,0x0f,0x76,0x68,0xf2,0xd9,0x70,0xee,0x38,0x95,0x31,0xdd,0x98,0x1a,
+  0xff,0xe2,0xfc,0x0d,0xc9,0xc4,0x93,0x78,0xac,0x4e,0xa9,0x7b,0x99,0x33,0x2c,0xdb,
+  0x89,0xcd,0x18,0xef,0x37,0x97,0xc4,0x3f,0xbb,0x4d,0x7f,0x57,0x95,0x81,0xbb,0xdd,
+  0x0d,0x9f,0x1a,0x5d,0x71,0xf7,0xb0,0xf8,0x11,0x8c,0x9e,0xf1,0x3a,0x1d,0x11,0xb9,
+  0x80,0x70,0x6a,0xa5,0x63,0x2a,0xfe,0xe1,0xf6,0xfe,0x3c,0x8f,0xd8,0x01,0x97,0xf2,
+  0x7d,0x3d,0xcb,0xcc,0xfc,0x77,0x5e,0xb1,0xb6,0xa9,0x71,0x10,0xfe,0xaf,0x84,0xbc,
+  0x4d,0xc1,0x3f,0x02,0xea,0xbb,0x1e,0x34,0x4b,0x2b,0xf1,0x0f,0x63,0xf5,0xf6,0x61,
+  0xb1,0x0d,0x7a,0x79,0xd8,0xcb,0x92,0xef,0x9c,0xda,0x1f,0xe4,0x30,0xcc,0xeb,0x89,
+  0x44,0x48,0x07,0x3c,0x2f,0x15,0x2c,0xcf,0x8c,0x91,0x73,0xa8,0x7f,0x57,0x7a,0x68,
+  0x1b,0x79,0x77,0xdc,0x35,0x61,0xed,0x0f,0x3b,0x6e,0xef,0xd3,0xb0,0xbf,0x70,0x5c,
+  0x71,0x67,0x0f,0x69,0xcd,0x0d,0xce,0x18,0xe2,0x81,0x89,0xf9,0xd7,0xf0,0x9f,0xdd,
+  0x5c,0xcd,0x35,0xe1,0x6f,0x55,0xee,0x6f,0x3c,0x49,0x78,0x9b,0x78,0x0a,0xce,0x5e,
+  0x61,0xdc,0x55,0x62,0xed,0x0f,0xcb,0x9f,0x67,0xb1,0x81,0xdb,0xbe,0xd0,0x2c,0x24,
+  0xee,0x8e,0xe1,0x8b,0xf7,0xa1,0x05,0x64,0xe7,0x61,0xbe,0x4b,0x89,0xf7,0x9d,0xc2,
+  0x7f,0xe6,0x49,0xee,0xdc,0xff,0xc3,0xdb,0x9e,0x66,0x0d,0xe7,0x70,0x47,0xd0,0x3c,
+  0xf8,0x37,0x2d,0xf9,0xbe,0x56,0xfc,0xf3,0x8e,0xd9,0xbf,0xc6,0x3e,0x32,0x6d,0x16,
+  0xbc,0xc0,0xb7,0xcd,0xa0,0xf8,0x1c,0xfc,0x2e,0x7b,0xbe,0x8a,0x3b,0x36,0x1b,0xc6,
+  0x58,0x95,0xbe,0x74,0x24,0xc7,0x12,0xff,0x52,0xde,0x55,0xba,0x19,0x0f,0xb2,0x23,
+  0xa8,0x8b,0xe0,0x60,0x09,0xac,0x9c,0xa9,0x6e,0xca,0x75,0xaa,0xb4,0x9b,0x14,0xc1,
+  0xc1,0x86,0x92,0x38,0x0e,0x62,0xc9,0xf8,0x57,0xda,0x49,0xf3,0x35,0xa9,0x47,0x71,
+  0x4b,0x2d,0x5c,0x9b,0xab,0xc4,0xae,0x6d,0x55,0xbf,0xdd,0x80,0x1b,0x03,0x50,0x22,
+  0x95,0xf0,0xd2,0xac,0x5e,0x8b,0xff,0x47,0xe7,0x41,0xb4,0xf1,0xfb,0xf3,0x42,0x1f,
+  0x2c,0xdb,0xcd,0x61,0x4f,0x3b,0x22,0x22,0xbc,0x3f,0x2b,0xe9,0x8b,0xc4,0x48,0x2c,
+  0x89,0x4f,0xb8,0xff,0x47,0x30,0x97,0xc5,0x3d,0x8e,0x46,0x64,0x37,0xbc,0x05,0xdd,
+  0x7a,0x6b,0x4c,0x9c,0xc3,0x2e,0x19,0xbe,0x90,0xfb,0x97,0x16,0xfc,0xa3,0x0b,0x31,
+  0x18,0xa7,0x45,0xe1,0x80,0x9a,0x6c,0xf0,0x87,0xd1,0xbe,0xc0,0x15,0x1b,0x96,0x71,
+  0xe9,0xa4,0x2a,0x4e,0x74,0x49,0xcd,0xff,0x7a,0x4b,0xf1,0x1a,0x99,0xdd,0xe2,0x6a,
+  0x9e,0x7f,0x17,0x5f,0x16,0xc3,0x8d,0x7c,0x42,0xf1,0x36,0xd9,0x63,0x39,0x4f,0xf2,
+  0x40,0x58,0xaf,0x7d,0x7f,0x8a,0xff,0x47,0xe5,0xfd,0x85,0x73,0xf1,0xeb,0x1f,0xe5,
+  0x03,0x15,0xa5,0x65,0x25,0x6c,0x0a,0x5f,0xa7,0x67,0xf2,0x8e,0x30,0x2d,0xcc,0x1d,
+  0x8f,0xf8,0xc4,0x7f,0x4c,0xf1,0xff,0x6c,0x65,0xbc,0x7e,0x42,0xf6,0x29,0x68,0x34,
+  0x42,0x46,0x06,0x7e,0x59,0x7c,0x5f,0x89,0xe0,0xb2,0x30,0xad,0x91,0xb9,0x35,0x54,
+  0xdc,0x9e,0x49,0x7d,0x17,0x17,0xbc,0xd0,0xca,0xf2,0x0b,0x5d,0x77,0xa5,0x7f,0xaa,
+  0xb6,0xb6,0xaf,0xf0,0xdc,0x78,0x67,0x98,0x77,0x50,0x9d,0x5d,0x98,0x81,0x46,0xa1,
+  0xb0,0xfe,0xc5,0xe2,0x01,0x3a,0x4a,0x1e,0x99,0x8c,0x7f,0xdd,0x85,0xf8,0xe7,0xd7,
+  0xe0,0xe9,0xcd,0xe4,0xec,0xfa,0xc6,0x4e,0x4f,0x5f,0xa6,0x5a,0x60,0x87,0x17,0x48,
+  0xe1,0x6e,0xbb,0x47,0x64,0x8c,0x07,0xc2,0x5a,0x0b,0x6b,0x92,0xf1,0x2f,0xff,0x4d,
+  0xe6,0xfa,0x48,0x8e,0x17,0x12,0x6e,0x43,0x98,0x66,0xf0,0xfe,0xb0,0x66,0x7d,0x24,
+  0xdc,0x51,0xcf,0x0b,0x8b,0x7b,0xfe,0xa1,0xde,0x12,0xff,0x7a,0x26,0xed,0x14,0xe7,
+  0xef,0x99,0xeb,0x63,0x0e,0x1c,0xdd,0x72,0xb1,0x71,0x89,0x96,0xeb,0x76,0xee,0x11,
+  0xba,0x04,0x95,0xf1,0xd6,0xf2,0x1a,0x92,0xc4,0x3f,0x9b,0xa3,0xbc,0x09,0xec,0x44,
+  0xb9,0xb4,0x62,0x68,0x09,0x22,0x10,0x3a,0xa0,0x99,0x7c,0xc2,0xd3,0x1c,0x1a,0x71,
+  0x09,0xd3,0x35,0x29,0xdf,0x18,0x1a,0xb1,0xeb,0xd9,0x3c,0x93,0xef,0x34,0x81,0x76,
+  0x66,0xb5,0x1e,0xd0,0xbf,0xa3,0x67,0xac,0x21,0xaf,0xc3,0x81,0x48,0xf1,0x70,0x64,
+  0x0d,0xa1,0x16,0xfc,0x63,0x98,0x65,0x57,0x23,0x70,0x1d,0x7e,0x08,0xae,0x0d,0x39,
+  0x7f,0x83,0x47,0xe4,0xf1,0xa0,0xbd,0x1c,0xda,0xdb,0xe0,0xee,0xa7,0x0b,0xfc,0x3f,
+  0x49,0xa9,0xff,0x73,0x14,0xc5,0x2c,0xd5,0x65,0x97,0x39,0x70,0x74,0x88,0x2e,0x7a,
+  0x08,0x16,0xe9,0xbc,0x2d,0x1a,0x7c,0x0e,0x55,0xba,0xfd,0xdc,0x34,0x4b,0xfc,0x0b,
+  0x86,0x09,0x2e,0x8b,0x52,0x62,0x88,0x9f,0x90,0xc4,0x46,0x6a,0x34,0x11,0xd1,0xcc,
+  0x8d,0x4d,0xbc,0x82,0x34,0xf3,0x09,0xf3,0xc2,0x39,0xd6,0xf8,0x97,0xe9,0xff,0xa9,
+  0x5b,0xba,0x19,0x8f,0x2d,0x0f,0x7b,0xd9,0x1f,0x9f,0xc6,0xfd,0x39,0xfb,0x27,0xe3,
+  0x5f,0xdf,0x76,0x6c,0x4b,0xcd,0x7f,0xe7,0x24,0xdb,0x3a,0x94,0x36,0xef,0xb1,0x66,
+  0x56,0x16,0xa4,0x3f,0x76,0x0e,0x40,0xb3,0xe2,0xfc,0x12,0xef,0xe8,0x21,0x1d,0x34,
+  0x1b,0xc5,0x4e,0xc1,0x3f,0xbf,0x64,0x05,0x5a,0x46,0xff,0xbd,0x9f,0x93,0x47,0xa1,
+  0xa0,0x36,0xaf,0x1f,0x15,0xf7,0x66,0xea,0xd4,0x6e,0x8c,0xa6,0x73,0x47,0xb4,0x53,
+  0x93,0x37,0x3b,0x4f,0x59,0xea,0xff,0xe4,0x72,0x7b,0x36,0x98,0x77,0x3f,0xf9,0x77,
+  0x58,0xcb,0xbe,0x51,0x4f,0xef,0x43,0x98,0xc4,0x1b,0xa3,0xa3,0x98,0x92,0xf0,0x7c,
+  0x15,0x86,0x96,0xa0,0xbe,0x4b,0xc5,0x3f,0xb8,0xe7,0x32,0x21,0xc7,0x30,0xd5,0xae,
+  0x5b,0x23,0x71,0x7a,0x66,0xbc,0x10,0x50,0xa2,0xfe,0x0c,0xab,0x49,0xe2,0x9f,0x33,
+  0x9c,0xff,0x0c,0xcf,0x55,0x27,0xf4,0xfb,0x34,0x53,0x9b,0xbf,0x07,0xa3,0xd5,0xfc,
+  0x58,0xa1,0x20,0xfa,0x61,0x82,0x08,0x94,0xca,0x7f,0xfe,0x10,0xaa,0x6a,0xb3,0xfa,
+  0xc5,0x05,0x1a,0x77,0xfb,0xe0,0xa0,0x50,0xb9,0x5c,0x37,0x9f,0x4f,0xbb,0x00,0x3d,
+  0x64,0x7e,0xb5,0x3d,0x68,0xf1,0xff,0xac,0x41,0xfc,0x13,0x91,0x10,0xff,0x84,0x89,
+  0xca,0x22,0x1c,0x08,0x85,0xb3,0x39,0x11,0x9a,0xc0,0x12,0xe6,0x8f,0x73,0x89,0xc1,
+  0x10,0x08,0x6d,0x4c,0xb7,0xe2,0x9f,0x1d,0xc4,0x5d,0x6d,0x53,0xc2,0x4d,0xca,0x0e,
+  0xc9,0xed,0xa7,0xd1,0x70,0x9a,0xba,0x27,0x1f,0x12,0x7c,0xef,0x46,0x9e,0x61,0xb7,
+  0xcd,0x12,0xff,0xe2,0xf8,0xa7,0x99,0xcb,0x73,0xc5,0xcf,0xdb,0xa8,0xd9,0xab,0x4d,
+  0x60,0xb9,0x07,0x12,0x1e,0x36,0xd6,0x8c,0x42,0x1a,0xe7,0xaf,0x4b,0xc6,0xbf,0x66,
+  0xf0,0x6e,0x2f,0x95,0x5a,0x49,0x34,0xa7,0x83,0xbc,0x0f,0xb3,0x34,0xbb,0x62,0x33,
+  0x3f,0xeb,0x7d,0x9c,0xcf,0x43,0x7b,0xc0,0x1b,0x42,0xc4,0x9b,0xf4,0xff,0x0c,0x26,
+  0xe2,0x5f,0x7e,0x47,0xb4,0xa5,0x50,0xe5,0xc0,0xb8,0x38,0x5a,0xc0,0x57,0xec,0xc8,
+  0x0a,0x3e,0x1f,0xf5,0x1d,0xcf,0xff,0xca,0xb9,0xa6,0x3e,0x76,0xa2,0x2d,0x6f,0x9f,
+  0x9a,0xa0,0x5d,0xc1,0xa0,0x5a,0x91,0x6d,0x37,0xf9,0xf6,0x9a,0x37,0x0f,0x81,0x90,
+  0x25,0xfe,0x25,0x50,0x38,0xe4,0x9c,0xd7,0x6e,0x1f,0x20,0xe5,0xb0,0x91,0xce,0x6b,
+  0x0f,0xf0,0xb0,0x57,0x56,0xa8,0x20,0x4a,0xe3,0xe4,0x38,0x22,0xa2,0x5b,0x19,0x0d,
+  0x91,0x54,0xff,0xcf,0x1e,0xe6,0xee,0xcf,0x58,0x60,0x7b,0x94,0x87,0x69,0xfa,0xd4,
+  0x72,0xd2,0xaa,0xec,0x4c,0x77,0x69,0x79,0x15,0xb8,0x3e,0xa8,0xc1,0x7b,0x69,0xb9,
+  0xd3,0x36,0x05,0xff,0xcc,0x63,0x88,0x1f,0x12,0xc4,0x60,0x3a,0x90,0xbd,0xd1,0x98,
+  0x06,0xf9,0x71,0xca,0x1d,0x41,0xcf,0x0b,0xb7,0x18,0xae,0x0b,0x44,0x9d,0x8c,0xd7,
+  0x74,0x8e,0xf3,0x9f,0x33,0x07,0xc5,0x43,0xc0,0xcb,0x62,0x4b,0x6b,0x6c,0x4f,0x68,
+  0x5f,0x67,0xb7,0x85,0xdc,0xcb,0xc5,0xd7,0xe1,0x4f,0x91,0xf9,0x67,0xed,0x01,0x39,
+  0x19,0xff,0xb2,0xdd,0xb4,0x9b,0x5e,0x42,0x89,0x89,0xf8,0x27,0x84,0x82,0x1d,0xcf,
+  0xa3,0x22,0x7e,0x87,0x5d,0x4a,0x1b,0xa7,0xf5,0x2e,0x5a,0x31,0x6e,0x2f,0x4c,0xac,
+  0x0f,0xac,0x35,0xf1,0xcf,0x90,0x6d,0x34,0xe7,0x23,0x8d,0xa7,0x7d,0xd9,0xcf,0xa0,
+  0x21,0x7f,0x95,0x2d,0x5a,0x6d,0x1f,0x44,0xfc,0xf3,0x27,0x56,0x3a,0x60,0xe7,0xfd,
+  0xd1,0x26,0xd6,0xc7,0xc4,0x3f,0xb1,0xe2,0x75,0xf4,0xcb,0xe1,0x37,0xe1,0xf9,0x0f,
+  0xe6,0xce,0xa1,0x2b,0x10,0xff,0xfc,0x52,0x52,0x7f,0x7e,0x57,0x88,0xc7,0xbf,0x94,
+  0xb9,0x27,0xe9,0x83,0xd9,0x1f,0xa4,0xc6,0xbf,0x84,0xe2,0x00,0xfe,0xf6,0x6d,0xfd,
+  0x79,0xcf,0x6c,0x2d,0x23,0x88,0xf3,0xff,0x55,0x99,0xab,0x35,0xf7,0x13,0x1e,0xb8,
+  0x2f,0x30,0xf0,0x04,0x59,0xf1,0xcf,0x2b,0xea,0x5e,0xc3,0x9e,0xe7,0x92,0xc8,0x0b,
+  0xb0,0x57,0x73,0x2b,0x19,0x0a,0x19,0x52,0x50,0x03,0x0e,0xe3,0x7e,0xcb,0x52,0xf7,
+  0x14,0xba,0x34,0xb3,0x35,0xfc,0xe4,0xf3,0xcc,0xf8,0x37,0xf5,0x52,0xd4,0xd7,0x6f,
+  0x7b,0x8e,0x9c,0xd3,0x46,0xa3,0x65,0xc3,0xc5,0x47,0x72,0x78,0x1a,0xce,0x0f,0xb4,
+  0x4c,0x1d,0x2d,0xa6,0x4b,0xe0,0x8c,0xa3,0xa0,0x9e,0x82,0x7f,0x14,0x5f,0xd4,0x61,
+  0x76,0x83,0xd5,0x2a,0x02,0x59,0x1d,0x3b,0x87,0xa4,0x4b,0xda,0x23,0xf7,0x65,0x75,
+  0x88,0x43,0xdc,0x10,0xab,0x77,0x74,0x4f,0xf5,0xff,0x68,0x55,0x86,0xfb,0x4d,0xf1,
+  0x3c,0x8a,0xf1,0x79,0x9c,0xd8,0x30,0x46,0x5e,0x35,0x4a,0x6b,0x1c,0x86,0xf0,0x3d,
+  0x76,0x15,0x4a,0x8f,0x22,0x10,0x4a,0xc6,0xbf,0x18,0xc7,0x3f,0x82,0x3b,0x86,0xf8,
+  0x1f,0xd1,0x8b,0x81,0x68,0x99,0x91,0x21,0x68,0xee,0x73,0x86,0xe4,0x8d,0xce,0x21,
+  0x65,0xef,0xca,0x05,0xf5,0xb8,0xff,0xaf,0x89,0x7f,0x85,0xe6,0xea,0x47,0x3b,0x18,
+  0x0f,0x7b,0xdd,0xd8,0x46,0x86,0x28,0xea,0xeb,0x7a,0x39,0x42,0x56,0xc1,0xe1,0x19,
+  0xce,0xb3,0x81,0x6e,0xbf,0x9a,0x82,0x7f,0x4a,0x55,0x37,0x50,0xd5,0xdf,0xe7,0xda,
+  0xab,0xae,0xce,0x90,0x55,0xef,0x49,0x10,0x40,0x0d,0xf0,0x46,0x21,0xa8,0xfa,0xe7,
+  0x18,0xf8,0x7f,0xc8,0x64,0xfc,0x1d,0xcc,0xf8,0x57,0x25,0x14,0x33,0xb1,0x83,0x5d,
+  0xd2,0x2a,0xfd,0x0e,0x86,0x62,0xf7,0x38,0x78,0xef,0x41,0xf9,0xb3,0x4a,0xba,0x04,
+  0x5d,0xac,0x30,0x26,0x26,0xe3,0x5f,0x1c,0xff,0x5c,0xd2,0xaa,0xe0,0x1f,0x38,0xed,
+  0xf9,0x52,0x1d,0xc2,0x42,0xa3,0x7a,0x0c,0x15,0x59,0x65,0x40,0xd6,0x4c,0x7e,0x4b,
+  0xa2,0x3f,0x1a,0x4b,0xe2,0x9f,0x61,0xf6,0x8a,0x5a,0x0a,0x59,0x01,0xb9,0x12,0xd1,
+  0x0e,0xc2,0x42,0xa3,0x71,0x3e,0x3b,0xc9,0x81,0x50,0xaf,0x98,0x80,0xd6,0xa9,0xfd,
+  0x41,0x94,0xdf,0x07,0x33,0x82,0xed,0x2a,0xea,0x77,0xde,0xb6,0xc3,0x09,0xb6,0x08,
+  0xc9,0xd7,0x36,0xb0,0xa2,0xb8,0xbc,0xde,0x6f,0xa6,0x86,0x25,0x42,0x63,0x49,0xf9,
+  0xd3,0xc7,0xdd,0xce,0xec,0xae,0x18,0xd4,0x0a,0x28,0x46,0x04,0x34,0x3c,0x01,0x25,
+  0x18,0xca,0x5b,0xf0,0x4f,0x86,0xc6,0x2c,0xfc,0xe7,0x19,0x9d,0x6a,0x8b,0xcd,0xb9,
+  0x07,0xd7,0xff,0x01,0x2e,0xbd,0x75,0x5b,0x24,0x7b,0x0e,0x34,0xf3,0x46,0x51,0xdd,
+  0x26,0x9f,0xdc,0xc4,0x93,0x49,0xfe,0xb3,0x3a,0xe3,0x13,0x78,0xa5,0xba,0x54,0xdf,
+  0xc8,0xc4,0x1f,0xc2,0x28,0xcb,0x29,0xb7,0xb7,0x8a,0x05,0xac,0x8f,0x03,0xa1,0x8d,
+  0xe2,0xd0,0x04,0x3e,0x3c,0x63,0xf1,0xff,0x30,0xf2,0x19,0x1c,0x61,0xcb,0xe2,0xe2,
+  0x6e,0x5c,0x8d,0x23,0x68,0xc8,0xdf,0x78,0x9a,0x5c,0x81,0xaa,0x1e,0xb3,0x70,0x3a,
+  0xc7,0x87,0x72,0xaa,0xff,0x67,0x57,0xee,0x89,0x2f,0x79,0xcf,0xd8,0xf7,0x88,0xc5,
+  0xe4,0x04,0xf7,0x36,0x77,0xc8,0x2e,0xde,0x98,0xc6,0xc8,0x0a,0x73,0xe0,0x9d,0xb8,
+  0xbf,0xd5,0xff,0xe3,0x92,0x5a,0x98,0xba,0x97,0x7a,0xb2,0x7f,0xa1,0x36,0x72,0x3c,
+  0xcc,0xc8,0x1c,0x75,0x34,0xc1,0x5f,0x9a,0x7c,0x7e,0x4b,0x7f,0xb4,0xb4,0x5a,0x60,
+  0x67,0xd5,0x28,0xcd,0x23,0x76,0x88,0x92,0x67,0x78,0xa3,0x10,0x3b,0x3d,0xc8,0x97,
+  0x65,0xb1,0xc9,0x87,0x5f,0x9d,0xa8,0xff,0x93,0xf4,0xff,0x5c,0x47,0x9a,0xa2,0xf9,
+  0x3b,0x02,0xcb,0xb3,0x7f,0xaa,0xfd,0xa8,0x61,0xee,0x2a,0xba,0x9c,0x5c,0xa7,0x71,
+  0x8f,0x90,0xfc,0x7d,0x1e,0xff,0x4a,0x20,0x84,0x24,0xff,0xb9,0x0e,0xf1,0xcf,0x71,
+  0xc5,0xc3,0x5c,0xf3,0x73,0xd2,0x10,0x08,0x95,0x87,0xdd,0xb7,0x8a,0x14,0xce,0x43,
+  0x65,0x6f,0x16,0x88,0x27,0xb9,0x47,0x88,0xfb,0x7f,0xde,0xb4,0xfa,0x7f,0xb4,0x2b,
+  0x6d,0xcf,0xf3,0x32,0xf2,0xc3,0xca,0x1f,0xa0,0x0c,0x97,0x65,0xda,0x05,0xf8,0x23,
+  0xae,0xcf,0x26,0x4b,0xfd,0x1f,0xab,0xff,0x67,0x00,0xd5,0xa2,0x87,0xa1,0xd9,0xfb,
+  0x01,0x4a,0x7b,0xdc,0x3f,0xfd,0x39,0xc3,0xc2,0x9d,0x30,0xcb,0x70,0x18,0x08,0x44,
+  0xff,0xe9,0x5a,0xff,0x4f,0x13,0x9e,0xe1,0x7c,0x86,0x20,0xe7,0x8c,0xb2,0x96,0x27,
+  0xa2,0x06,0xc9,0x69,0x61,0xbd,0xa7,0xd8,0xf8,0x3b,0x04,0x42,0xe3,0xf6,0xd4,0x14,
+  0xff,0xcf,0x3a,0x56,0xd0,0xe1,0x7a,0xd8,0xf4,0xf6,0xe4,0xeb,0xf4,0x61,0x72,0xc2,
+  0xbe,0xee,0xc7,0xf8,0x9a,0x94,0xcc,0x9a,0x78,0xdf,0x54,0xff,0x4f,0x18,0xd4,0xe7,
+  0x02,0xe5,0xa4,0x87,0x34,0x12,0xe7,0x51,0xd7,0x4c,0xf2,0x9e,0x6a,0x9a,0xb1,0x6d,
+  0x64,0xa2,0xd4,0x5b,0xaa,0xff,0x87,0x9c,0x82,0xbd,0x51,0x94,0x96,0x23,0xf0,0x52,
+  0xb8,0x74,0xb3,0xfd,0x43,0x1c,0x98,0x6e,0x9f,0x73,0x39,0x2e,0x7a,0xd1,0xf4,0xff,
+  0xa4,0xc4,0xbf,0x0c,0x3c,0x4d,0x47,0x14,0x47,0x93,0x10,0x57,0x47,0xa2,0xbc,0x2d,
+  0x9a,0x18,0x27,0x66,0xc7,0x90,0x71,0xfe,0xcf,0xb5,0xf1,0xaf,0x1e,0xe6,0xe1,0xde,
+  0x8c,0x73,0xb8,0x3f,0xbd,0xab,0xcc,0xc1,0xb1,0x24,0xd1,0xf7,0xcf,0xf8,0x7f,0x9a,
+  0x23,0x05,0xcb,0x71,0xff,0xbf,0xa7,0x1d,0xe4,0xd5,0xf8,0xa3,0xe4,0x9c,0xd2,0x12,
+  0x2f,0xe1,0x30,0x86,0x7b,0x78,0xb2,0xae,0xc5,0x3f,0x8f,0x4e,0x6f,0xaf,0x45,0xb3,
+  0x6b,0x40,0x3d,0xa8,0x98,0xdd,0xd3,0x06,0xfc,0x2d,0x6a,0x96,0x26,0x46,0xc7,0xf9,
+  0x2a,0x62,0x6a,0xfc,0x2b,0x17,0xd6,0x26,0x48,0x3e,0x2f,0x2a,0x7b,0x40,0xed,0x77,
+  0x71,0x1a,0x70,0x03,0xe1,0x44,0x44,0xdb,0x78,0x6a,0xd8,0x54,0xff,0xcf,0x49,0xee,
+  0x6d,0xd0,0xcd,0xb7,0xf3,0x24,0xf3,0xdf,0x4d,0xfe,0xcf,0xf8,0xfb,0x5a,0xf8,0xcf,
+  0x37,0xbd,0x47,0x78,0xda,0xfb,0x3c,0x4e,0xfb,0xb9,0x0c,0xe3,0xfe,0x9f,0xd1,0x04,
+  0xed,0x67,0xe0,0xcf,0xf8,0x7f,0x84,0x73,0xf0,0x8a,0x51,0x7a,0x57,0x6b,0xbf,0xb8,
+  0xb8,0xe9,0x33,0x58,0xc4,0xdb,0xa6,0xdc,0x0a,0xa6,0x5b,0xac,0x3f,0xb9,0x3e,0xe7,
+  0x52,0xfc,0x3f,0x11,0x85,0x67,0x7b,0x89,0x2b,0x58,0xb7,0x80,0x83,0x26,0xee,0xff,
+  0xe1,0x40,0x37,0xcc,0xf9,0x3f,0x7f,0xc6,0xff,0xa3,0x35,0xf0,0xfc,0x77,0x25,0xfb,
+  0x76,0x7c,0x3b,0xd7,0x72,0x9a,0x4b,0xd2,0xd6,0x99,0x6e,0xae,0xdc,0x0d,0xf8,0xbe,
+  0x92,0xfb,0x1a,0xff,0x0f,0x69,0x86,0xf6,0xaf,0xb8,0xda,0x50,0x7a,0x1f,0x54,0xd4,
+  0x7a,0xda,0xc6,0xfd,0x3f,0x8a,0xe9,0xf6,0x29,0x84,0x6b,0xfd,0x3f,0xb9,0x4f,0xc1,
+  0x31,0xee,0xf6,0x69,0x13,0x57,0xc1,0xe8,0x3d,0x15,0x9a,0x7b,0xdb,0x2d,0xb7,0xa8,
+  0x77,0xf2,0xc7,0xde,0x9c,0x7c,0xfe,0x41,0x4b,0xfe,0x57,0x13,0xfb,0xc4,0x5d,0x59,
+  0xb3,0x6c,0x4b,0xcd,0x7b,0x89,0xdf,0x66,0x0b,0xbd,0x51,0x73,0x90,0xd7,0x68,0xf1,
+  0xff,0x4c,0xcc,0x4f,0xe0,0x9f,0xb2,0xc4,0xb2,0x8f,0x80,0x97,0x98,0xf9,0x5f,0x7d,
+  0x56,0x46,0x7a,0xaa,0xff,0x47,0x2a,0x47,0xe9,0xb6,0x93,0xd1,0x07,0xc8,0x28,0x62,
+  0xd3,0x85,0x51,0xaa,0xe3,0xf7,0xd8,0x10,0x2f,0xe1,0xb4,0x67,0x0e,0xec,0xcd,0xd2,
+  0x88,0xc7,0x27,0x3e,0x2f,0xe2,0x9f,0x00,0xec,0x35,0x0a,0x83,0xd4,0x4b,0x5e,0x50,
+  0x71,0x3f,0x70,0x6b,0xf4,0x65,0xd8,0x19,0xb7,0x9b,0xfc,0x9f,0x89,0xf3,0x62,0xed,
+  0x0f,0x92,0x07,0x07,0xa8,0x6a,0x44,0xf0,0xd8,0xaa,0xbf,0x24,0xb3,0xa3,0x94,0x07,
+  0x86,0x9e,0xe6,0xc7,0xf6,0xbe,0xe4,0xf9,0xed,0xb3,0xe4,0x7f,0xf1,0x22,0x87,0xb7,
+  0x86,0xdc,0x6b,0x10,0xed,0x7c,0x86,0x6a,0x05,0x07,0x9f,0x23,0xb4,0x5f,0xcc,0xd3,
+  0xbe,0x4c,0x68,0xc4,0xfd,0x3f,0xc7,0x2d,0xfe,0x9f,0xce,0x89,0x45,0x30,0x1b,0x4f,
+  0x33,0x07,0x2f,0x3c,0xfb,0x46,0x60,0x82,0xff,0x93,0x90,0x27,0x96,0xfc,0xaf,0xcc,
+  0x8b,0xf0,0x2a,0x5b,0xc8,0xb3,0xbd,0xbc,0xf0,0x1e,0x5b,0xb4,0xc2,0x3e,0x2a,0x7e,
+  0x6e,0x02,0x21,0x93,0xff,0x73,0x35,0x6a,0xea,0x2f,0x0b,0xff,0x59,0xd8,0xc6,0xcb,
+  0x8e,0xf5,0x66,0xd6,0x8b,0x0f,0x6b,0x6b,0x95,0x7c,0xc8,0x7c,0x90,0x9c,0x36,0x78,
+  0xfd,0x0d,0xb9,0x9a,0x3f,0x3f,0xbb,0xc6,0xff,0xb3,0x8d,0x27,0xf5,0x6b,0x94,0xb7,
+  0xe0,0x7a,0x92,0xce,0xbd,0x8f,0xd6,0x67,0x9f,0x16,0x8e,0x04,0xf2,0x0d,0x59,0x23,
+  0xbc,0x14,0x92,0x39,0xbf,0x97,0x4d,0xac,0x7f,0x28,0xb7,0x0f,0x1a,0x0c,0x35,0x98,
+  0x91,0xef,0xe7,0xdd,0x40,0x54,0x63,0xee,0x02,0xf2,0x01,0x57,0xd2,0x5c,0xec,0xf3,
+  0x54,0x17,0x73,0x3d,0xdf,0xb4,0xe4,0x7f,0x75,0xc2,0xb1,0x07,0xbb,0x82,0xf6,0xce,
+  0x9c,0x62,0x76,0x36,0x58,0xa1,0xd9,0x0f,0x8a,0xf1,0xc2,0x8b,0x0d,0xa8,0xbf,0x7e,
+  0xc2,0xeb,0x1d,0x25,0xde,0xf7,0xb8,0x05,0xff,0x0c,0xe2,0xf7,0xac,0x08,0xa2,0xd1,
+  0xf1,0x21,0x1a,0xba,0xbe,0x26,0xde,0xed,0x4b,0xbd,0x68,0xf2,0x61,0x1a,0x77,0x4f,
+  0xcc,0xb7,0xe6,0x7f,0x9d,0xe1,0xd1,0x64,0xbf,0x3d,0x2e,0x9e,0x56,0x5f,0x01,0x4f,
+  0xc4,0x3e,0x4c,0x62,0xb0,0x94,0x99,0x62,0xbc,0x72,0xc2,0x1f,0x12,0xb7,0xf8,0x7f,
+  0xea,0xd0,0xbe,0x76,0xbb,0x5c,0x8c,0x7c,0xc4,0xde,0xca,0xde,0xd9,0x8d,0x82,0xe5,
+  0x5d,0x88,0x04,0xb2,0x78,0xd9,0xd8,0x84,0xab,0xc7,0x91,0xd2,0x1f,0x4d,0xa8,0x23,
+  0x2d,0xc6,0x03,0x21,0xba,0xd9,0xf9,0xae,0x62,0xd6,0xeb,0x88,0x91,0x77,0xd5,0x5d,
+  0x0a,0xce,0x8f,0xac,0x73,0x27,0xfd,0x3f,0x13,0xfb,0x87,0xe2,0x7f,0x28,0x8d,0xab,
+  0x51,0xdf,0xf5,0xc1,0xe3,0xb8,0xcd,0x5d,0xbc,0xcc,0x02,0x5a,0x28,0xc6,0x8d,0x90,
+  0xce,0x4b,0x03,0x25,0xf0,0x00,0x24,0x7f,0xea,0xf2,0x4e,0x98,0x65,0xf7,0x70,0xdb,
+  0x9b,0xf5,0x25,0x62,0x62,0x87,0xd4,0xc9,0x5f,0x93,0xf3,0x2b,0x2e,0xb9,0x12,0xfe,
+  0xae,0x64,0xfe,0xd7,0x8c,0x33,0x1c,0xe4,0x68,0xf3,0x34,0x5e,0xdf,0x0f,0xdf,0x6e,
+  0x19,0x77,0x73,0x9d,0x96,0x12,0xfc,0x1f,0x53,0x7f,0x65,0x0d,0x17,0x58,0xf2,0xbf,
+  0x1e,0x35,0x41,0x8e,0x81,0xf8,0xfc,0xdd,0xda,0x57,0x7e,0x54,0x5a,0x9b,0x89,0x6a,
+  0xae,0xe7,0x63,0x28,0xed,0x43,0xa0,0x58,0x09,0x1f,0x41,0x69,0x21,0x22,0x6a,0x8b,
+  0xff,0x87,0xfe,0x82,0xb3,0x9b,0x9e,0x95,0xf5,0x70,0x9c,0x35,0x3b,0x6d,0x11,0xdb,
+  0x58,0xf6,0xe5,0xfe,0x0d,0x75,0xce,0x61,0x79,0x37,0xf9,0x05,0x1c,0x32,0x9c,0x40,
+  0xb3,0xc3,0x96,0xfa,0x87,0xd2,0x49,0x01,0x3f,0x7a,0x83,0xec,0xcc,0xee,0x6b,0x8a,
+  0xa8,0x10,0xe0,0x81,0x30,0x68,0xc8,0x2d,0x7c,0x51,0x16,0x48,0x26,0x0f,0x35,0x66,
+  0x50,0x48,0xf7,0x0a,0x13,0xdf,0x37,0x51,0xff,0xa7,0x64,0x58,0xee,0x20,0x83,0x10,
+  0x11,0x8a,0x74,0xb3,0x10,0x01,0x13,0x9c,0xbc,0xfe,0xe4,0x6e,0x30,0x5d,0x4f,0x0d,
+  0x24,0x96,0x36,0xf1,0x3c,0x42,0x82,0x7f,0x3b,0xec,0xe8,0xa8,0x89,0x5f,0xdf,0xa3,
+  0x38,0x3d,0xad,0x31,0x71,0x88,0xec,0x22,0xb8,0x7f,0xf6,0x08,0x6e,0xf8,0xe0,0x2c,
+  0xda,0x5f,0xdb,0xc8,0xf4,0xc9,0xe7,0x6f,0x00,0x1e,0xff,0xc2,0xf3,0x15,0x17,0x87,
+  0xc9,0x65,0x66,0x1e,0xab,0x31,0xe5,0x72,0xf4,0x8a,0xe1,0xe8,0x46,0xc5,0x76,0x11,
+  0xaa,0x56,0x39,0xce,0x7c,0x3d,0x59,0xff,0x70,0x20,0x91,0xff,0x15,0xb4,0xff,0x42,
+  0x2e,0x52,0x02,0x50,0x71,0x9f,0x59,0x78,0xf3,0x98,0xe4,0xed,0x31,0x3d,0x96,0x17,
+  0x35,0x6f,0xad,0xbb,0x51,0xfe,0xde,0xa4,0xfc,0x89,0x4b,0xee,0xdc,0xc3,0x3c,0x1e,
+  0xb1,0x9b,0x14,0x41,0xa4,0x1f,0xf1,0xcf,0x08,0xe7,0xff,0x2c,0xc7,0x81,0x82,0x66,
+  0x4d,0x17,0x53,0x43,0xb4,0xc9,0x99,0xe4,0xff,0x18,0x13,0xfe,0xc0,0x05,0x64,0x76,
+  0x53,0xa3,0xd1,0xce,0x78,0x7f,0xc6,0xf4,0x06,0xc3,0x85,0x08,0xb9,0x88,0xb7,0xe9,
+  0x55,0x59,0x60,0x9f,0x7f,0x62,0x35,0x01,0xfa,0x21,0xa1,0xf4,0xe9,0x88,0xed,0x1f,
+  0x61,0xfd,0x33,0xf9,0x9d,0x74,0x0d,0x79,0xc7,0xc6,0xf4,0x7c,0x95,0xd6,0x91,0x27,
+  0xe8,0x7e,0xb6,0x43,0xc7,0x2b,0xc9,0xa2,0xed,0x01,0x30,0xf3,0xdf,0x0d,0xb7,0x27,
+  0x27,0x8b,0x1c,0xd7,0x3d,0xa3,0x8e,0xd2,0xc6,0x8f,0xa0,0x47,0xef,0xae,0x77,0xab,
+  0xa4,0x95,0x9e,0xa7,0x5d,0xcc,0xae,0x8a,0xd9,0xc9,0xfa,0xcf,0x89,0xf5,0x34,0x6e,
+  0xf1,0x08,0xad,0x70,0x31,0x5a,0xc6,0x1c,0x7b,0xbe,0x3c,0x04,0x23,0xd9,0x3e,0x6d,
+  0x53,0x27,0x9e,0xc7,0x8b,0xca,0x91,0xa6,0x79,0xbb,0xc4,0xe8,0xa4,0x7d,0x64,0xd6,
+  0xff,0x41,0xfb,0x37,0x2b,0x96,0x33,0x90,0xf0,0xff,0xec,0x17,0x3f,0xd4,0xdf,0x07,
+  0x6f,0xc3,0xa6,0x98,0xb8,0x5b,0xfb,0x14,0x70,0xa1,0x62,0x56,0xff,0x4f,0x9e,0xe9,
+  0x4f,0xd6,0x4c,0x6f,0x8f,0xe9,0x6d,0x7e,0x90,0x5c,0x86,0xb5,0x90,0xdf,0x20,0xf2,
+  0x42,0xb2,0xfb,0xb9,0x3d,0x55,0x4f,0xa6,0xd6,0x3f,0x2c,0xe6,0x49,0x5e,0x57,0xe0,
+  0x29,0x8e,0x76,0xfe,0x89,0x5c,0x69,0xfa,0x65,0x03,0xa7,0xfd,0xa4,0xbf,0x03,0xfb,
+  0x59,0x7e,0xdc,0xc5,0xf3,0xfd,0x27,0x9e,0x27,0xc0,0xeb,0xff,0x80,0xfb,0xe1,0x8c,
+  0x18,0x8f,0x2f,0x13,0xf7,0x19,0x33,0xd0,0xbc,0xd9,0x50,0x07,0x96,0xf0,0xc2,0xe3,
+  0x7b,0x83,0xce,0xd7,0xa8,0x9e,0x7d,0x43,0xb2,0x3e,0x55,0xa2,0x3f,0x2c,0x0f,0x72,
+  0xf5,0xc1,0x33,0x30,0x2f,0xba,0x8c,0xb3,0xdf,0x2f,0xea,0xde,0x06,0x47,0x07,0x0e,
+  0xf6,0xb3,0xae,0xe8,0x6a,0x5d,0xae,0x48,0xde,0x1f,0x12,0xf6,0x78,0x16,0xaa,0x21,
+  0x32,0xa6,0x3d,0x62,0xf6,0xeb,0x84,0x38,0xe5,0x86,0xc6,0x4e,0x33,0x23,0x9e,0xbb,
+  0x16,0x2d,0xfd,0x61,0xcd,0x7c,0xe7,0x4a,0x2d,0x93,0x6b,0xc3,0x63,0x70,0x6f,0x60,
+  0x69,0x74,0xfa,0x2a,0xf3,0x20,0x3b,0xa6,0x13,0x5e,0x0a,0xd8,0xcb,0x23,0x62,0x56,
+  0xfe,0x73,0x42,0xc9,0x06,0xb6,0x90,0x39,0xd0,0x13,0x57,0x43,0x8f,0xf2,0xc4,0xae,
+  0x66,0x20,0xda,0x12,0x8e,0x97,0xd0,0xe2,0x08,0x05,0xda,0xc8,0xc4,0x6c,0x5e,0x0f,
+  0x30,0x31,0x7f,0x6e,0x34,0xcb,0x07,0x8f,0xb2,0x0f,0x78,0x1b,0xf7,0x5e,0xd4,0xd7,
+  0xa2,0x76,0x63,0x3f,0xe9,0xa0,0xb7,0xf1,0x7c,0xf9,0x33,0xd6,0xfa,0xcf,0xb9,0x09,
+  0x90,0x43,0x73,0xd3,0x6f,0x85,0x47,0x35,0x57,0x10,0xed,0xd3,0xb5,0x28,0xb1,0x79,
+  0xfd,0x6d,0xc2,0x4b,0x25,0xe7,0x07,0xe9,0xfd,0xb6,0x64,0xfe,0xfb,0xf2,0x0c,0xce,
+  0xff,0xe1,0x65,0xf7,0x72,0x5c,0xc2,0x49,0xa1,0x88,0xb3,0x31,0x79,0xd8,0xab,0x0b,
+  0x5f,0x93,0x27,0x22,0x09,0x5e,0x58,0xaa,0xc9,0x96,0xfa,0xcf,0x33,0x06,0x72,0xcd,
+  0xfa,0x87,0xd1,0x2f,0xf7,0x92,0x3f,0xc2,0x42,0x5e,0xf6,0xe7,0x1b,0xca,0x67,0xb7,
+  0x9b,0xf5,0x7f,0x66,0x4b,0x97,0xab,0x7d,0xda,0x32,0x6b,0xfd,0xc3,0x3c,0x33,0x5f,
+  0x6c,0x31,0x47,0x3b,0xfb,0xe0,0x95,0xb4,0xf9,0x9c,0xff,0x33,0x9b,0x5d,0xce,0xf0,
+  0xfa,0xef,0xef,0x6f,0x1c,0x50,0xd1,0x34,0xab,0x75,0xfc,0x4a,0x2c,0x49,0xe2,0x13,
+  0xe0,0xcf,0x53,0x32,0x83,0xfb,0x7f,0xb8,0xb7,0x27,0x2f,0xc2,0x88,0x10,0xed,0x86,
+  0x32,0xc5,0xac,0x87,0x83,0x57,0xa8,0x4c,0x48,0xb2,0xfe,0x73,0xc8,0x8c,0x7f,0xb9,
+  0x34,0x5b,0xf4,0xe8,0x80,0xbe,0x8b,0x16,0xfa,0xa9,0x99,0xf8,0x5f,0x34,0xde,0x21,
+  0xae,0xc1,0xa4,0x42,0xa5,0xdf,0x3b,0x29,0x7f,0xba,0xd3,0x3a,0xc6,0xe3,0x89,0xf7,
+  0xae,0x82,0x5d,0x40,0x7a,0x80,0xd7,0xd3,0x3e,0x28,0x9a,0x6d,0xe6,0x3a,0xcc,0x8a,
+  0x4c,0xf2,0x02,0x72,0xc7,0xe4,0xf7,0x6a,0x97,0xf8,0xf7,0xad,0xf8,0x6a,0x56,0x74,
+  0xe5,0x4b,0xe4,0x2c,0xc4,0x96,0x17,0x46,0x73,0x0a,0xd1,0x7e,0x69,0x0f,0xa0,0x99,
+  0xdc,0x4b,0x8e,0x45,0xbc,0xf8,0xbe,0x72,0xdd,0xe4,0xfe,0x39,0x9e,0xd8,0x0f,0x9c,
+  0xff,0xdc,0xc1,0xcc,0x6a,0x87,0x8a,0x3c,0xa0,0x8c,0x3e,0xee,0xd3,0xe6,0x6d,0x11,
+  0x07,0xa4,0x51,0x17,0xf7,0xff,0x34,0x1e,0x9a,0xbc,0xbf,0x0d,0x26,0xf1,0x8f,0x0a,
+  0x67,0x6e,0x2f,0x51,0xb6,0x37,0xc8,0x2a,0xf4,0x09,0x95,0x8a,0x9d,0xd5,0xc4,0x69,
+  0x9f,0x86,0xeb,0xcf,0xe4,0x24,0xff,0x87,0xe6,0xf2,0xf8,0xd7,0x3c,0x46,0xbf,0x43,
+  0x6e,0xd3,0x36,0xde,0x8e,0x83,0xb3,0xc4,0x25,0x6d,0x64,0x25,0x0c,0x81,0xd0,0x08,
+  0xbc,0xae,0x39,0x3b,0x51,0x95,0x27,0xf3,0x8b,0x13,0xf1,0x88,0x42,0x46,0xdd,0x44,
+  0x86,0x2d,0x71,0xb7,0xb6,0xa1,0x92,0xb4,0x72,0x37,0x35,0x97,0x57,0x7d,0x14,0x55,
+  0x79,0x1c,0x07,0xfe,0x49,0xfd,0x25,0x40,0x22,0xff,0x9d,0xc6,0xc3,0xb7,0xc1,0xba,
+  0xac,0x62,0xcd,0x56,0x9f,0xfe,0x04,0x5b,0xaf,0x15,0x1b,0x10,0xc4,0x6d,0xf1,0xaf,
+  0x5a,0x7e,0x3c,0x12,0x0c,0x07,0x92,0x78,0x9b,0x71,0x90,0x73,0xab,0x6e,0x0f,0xdc,
+  0x98,0x0d,0xa7,0x1b,0x16,0x87,0x8a,0xd6,0x88,0x4f,0x84,0x5f,0x64,0x95,0x71,0xd7,
+  0x9a,0x69,0x6f,0xc2,0x8b,0x09,0x44,0x74,0xd7,0xa4,0xfc,0x29,0xca,0xe5,0xf2,0x64,
+  0x16,0x9b,0x07,0x5f,0x36,0x60,0x24,0xcd,0xa7,0x65,0x7a,0x0a,0x78,0x05,0x18,0x33,
+  0x0c,0x34,0x88,0xf6,0xda,0x11,0xae,0xf8,0xc2,0xc9,0xfa,0xcf,0xbc,0x3f,0x2c,0xab,
+  0xd2,0xb3,0x06,0x73,0x2e,0x4a,0x1f,0xb1,0x52,0x9e,0xf6,0x55,0xc5,0xcb,0x3e,0x0f,
+  0x38,0xce,0x88,0x17,0x4d,0x6a,0xd0,0xcd,0x97,0x72,0x92,0xf2,0xe1,0x19,0xb3,0xdf,
+  0x6b,0x31,0x77,0x82,0x5d,0x84,0x70,0x4c,0xbd,0x53,0xfe,0x8c,0x64,0xb1,0x86,0x0e,
+  0xfd,0xe4,0xac,0xe5,0xbc,0x51,0x2c,0xaf,0xff,0xfc,0xa5,0x0d,0x45,0x49,0xff,0x5e,
+  0x82,0x2f,0x1d,0xb6,0x05,0xd1,0xc8,0xda,0x0d,0xb3,0x83,0x2d,0xc3,0xc4,0xbe,0x6e,
+  0x5d,0x7e,0xb1,0x71,0x27,0xcf,0x77,0x7b,0x96,0x27,0x6e,0x3c,0xe4,0x94,0xac,0xf5,
+  0x0f,0xb9,0xfc,0x89,0x52,0x5e,0xe6,0x2e,0xcc,0x0a,0x43,0x66,0x20,0x3e,0xa2,0x15,
+  0x1a,0x4b,0xca,0x71,0x3d,0xf7,0x86,0x54,0x5e,0x91,0x43,0x99,0xac,0x7f,0x68,0xca,
+  0x4f,0xc9,0xc7,0x6c,0xbc,0x3a,0xc1,0x07,0x81,0xfd,0x6b,0x1c,0x31,0xb9,0x12,0x4e,
+  0x28,0x65,0xc6,0xb2,0x58,0xe3,0x20,0x1c,0xd6,0xba,0x0c,0xf9,0x39,0xd1,0x36,0x59,
+  0xff,0x90,0x25,0xf4,0x51,0xd8,0xc1,0x69,0xa8,0x97,0x68,0x05,0xe7,0x87,0x0f,0x09,
+  0x23,0xa4,0xc2,0xc8,0xea,0x12,0x07,0xa9,0x49,0x94,0x8a,0x4e,0x1b,0x4a,0xf6,0x87,
+  0x4d,0xe8,0x3b,0x96,0x85,0x66,0x69,0xa2,0x3f,0x5a,0x1c,0x81,0xed,0xab,0x88,0xf7,
+  0xec,0x17,0x11,0x21,0xec,0x81,0xad,0xa1,0x59,0x9f,0x6c,0x55,0x27,0xeb,0x1f,0xf6,
+  0x48,0x6e,0x5e,0x6d,0x8f,0xc9,0x1b,0xc9,0x0b,0x2c,0xf2,0x6e,0x49,0x61,0x96,0x4e,
+  0xdc,0x34,0x12,0x20,0x9c,0x91,0x82,0xcf,0xf3,0x7b,0x67,0xfc,0x46,0x46,0xf2,0xad,
+  0xfd,0x61,0xa5,0xc3,0x52,0x09,0x5b,0xd2,0x99,0xfd,0x01,0x6c,0x60,0x25,0x9a,0x6d,
+  0x0f,0xd9,0x4d,0x5b,0xa6,0xa7,0x27,0xe6,0x77,0x37,0x14,0xf5,0xc9,0x9c,0xb1,0x3c,
+  0x89,0x7f,0x24,0x3b,0xf7,0xc6,0x33,0x59,0x25,0x83,0xe1,0x70,0xbe,0x3b,0x68,0x53,
+  0xc8,0xa3,0x90,0x31,0xd7,0x0c,0x14,0xf6,0xf1,0x0a,0xe4,0x9a,0x0c,0x36,0xc2,0x26,
+  0x37,0x28,0x20,0x88,0xd2,0x10,0x06,0x23,0xfe,0x61,0x7d,0x2e,0x5f,0x34,0x2b,0x26,
+  0x3e,0x07,0x47,0xd5,0x32,0xc3,0xdd,0xd5,0xc8,0x89,0x2b,0xe6,0x0a,0xa8,0x4f,0x4d,
+  0x3e,0xcf,0x8f,0xc6,0xe0,0xaa,0x8b,0xe7,0x37,0x89,0x67,0xd5,0x61,0x5a,0x05,0x1b,
+  0x87,0xc5,0xef,0xd0,0x11,0x57,0xd5,0x51,0xdc,0x3f,0x1c,0x11,0x2d,0xd4,0x36,0x19,
+  0x29,0xf5,0x7f,0x46,0xa2,0x63,0xae,0xf9,0xbc,0x7f,0x5c,0x39,0x1b,0x73,0x56,0x09,
+  0x4b,0x7b,0xc5,0x61,0xfd,0x72,0xc8,0x8c,0x9f,0x8e,0xfb,0x7f,0x86,0x53,0xf8,0x3f,
+  0xef,0x43,0xb7,0xe1,0x55,0x5c,0xdb,0xc9,0x5c,0xe8,0x8e,0x96,0x78,0xe8,0x7a,0xf2,
+  0x7b,0x38,0x18,0x2c,0x8a,0x27,0xea,0xff,0xb0,0x12,0xde,0xff,0xdd,0x93,0xb4,0x7f,
+  0xd3,0x8e,0xe5,0xc6,0xd2,0x0b,0xa7,0xd7,0xe5,0x42,0x06,0x20,0x22,0x41,0x8c,0x48,
+  0x0c,0x38,0xa8,0x8e,0x33,0xa0,0xc6,0xfd,0x1b,0xde,0x14,0xff,0x4f,0x37,0x75,0x8a,
+  0x34,0xea,0x77,0xb9,0x51,0x10,0x91,0x0c,0xf6,0x6e,0x5c,0x3d,0x48,0x8b,0x8c,0x96,
+  0x58,0xf6,0xa4,0xff,0xc4,0x52,0xff,0x47,0x39,0x08,0x57,0xb4,0x03,0xd1,0xa5,0x71,
+  0xf9,0x36,0xb8,0x42,0xaa,0xa2,0xc5,0x03,0xe2,0xa8,0x74,0xd5,0xef,0x4d,0x30,0xc4,
+  0x4c,0x3c,0x5c,0x61,0xa9,0xff,0x70,0x16,0xa5,0xa7,0x99,0x04,0xa7,0xe2,0x6a,0x70,
+  0xc5,0x97,0xa5,0x8f,0x03,0xc5,0x44,0x3d,0x04,0x3e,0x18,0xcd,0xb1,0xf6,0xbf,0xd8,
+  0x05,0xc7,0x83,0xde,0xcd,0x4b,0xf5,0x2f,0xcf,0x55,0xfe,0x49,0xf1,0x46,0xed,0x1d,
+  0x8d,0x73,0xa5,0x4b,0x1a,0x87,0x9d,0x39,0xe3,0xf7,0xd7,0xad,0xfd,0x61,0x25,0x17,
+  0x0b,0x33,0xa7,0x4e,0xf5,0x9a,0x6f,0x4b,0x87,0xfb,0x55,0x16,0xe9,0x08,0x17,0x25,
+  0xf8,0xf0,0x08,0xe4,0x24,0xf3,0xf9,0x75,0xf2,0xb9,0xc5,0xff,0x73,0xb7,0xda,0x10,
+  0x77,0xae,0x09,0x28,0xe4,0x1e,0x29,0xc6,0x40,0xa3,0x33,0x51,0x7a,0x77,0x07,0xdc,
+  0x13,0xeb,0xe3,0x4e,0xad,0xff,0xbc,0x52,0xc8,0x12,0xd6,0x46,0x77,0x84,0x02,0xcb,
+  0xb3,0xbf,0xa6,0xed,0x0b,0xe7,0xaf,0xa2,0x7f,0x43,0xae,0x83,0x7d,0x11,0xd3,0x0d,
+  0x32,0xe9,0xff,0x19,0x9b,0x9c,0xcf,0xfd,0x3f,0x3d,0x8a,0xc7,0x6f,0x57,0xe4,0xa5,
+  0xa1,0x4f,0x20,0x56,0xeb,0x9e,0x2e,0x4b,0xfa,0x30,0x54,0xf6,0x3a,0x3c,0x13,0xfe,
+  0x1f,0x10,0x5f,0xb3,0xf6,0xbf,0xf0,0x7f,0xa6,0x54,0xd5,0xce,0x3b,0x23,0x8e,0x69,
+  0x97,0x95,0xc5,0xa8,0x7d,0x0a,0x2e,0xd0,0x91,0x68,0x62,0x7d,0xa4,0xab,0x3c,0x3f,
+  0xae,0xc7,0xd2,0xff,0x82,0xf3,0x7f,0x78,0xd8,0x71,0xa9,0x2e,0xbb,0xe1,0x68,0xa2,
+  0xda,0x8f,0x9b,0xfb,0x27,0x2d,0xeb,0x8f,0xf8,0x27,0x99,0xff,0x32,0x9d,0x57,0x3b,
+  0xc7,0xdd,0x1e,0xf2,0xdb,0x61,0x1d,0x31,0xb7,0xbd,0x9d,0x86,0xc7,0x3b,0x62,0x4c,
+  0xd8,0x8f,0x5e,0x4b,0xfd,0x81,0x27,0xe0,0x31,0x66,0x16,0x35,0xe2,0xfc,0x1f,0xb3,
+  0x10,0xe2,0xac,0x8c,0x75,0x89,0xb2,0xcf,0xef,0x98,0xa5,0x00,0xe4,0x3c,0x0b,0xfe,
+  0xe1,0xfd,0x61,0xb7,0xb2,0x76,0x83,0xce,0x43,0x6b,0xab,0x71,0x0b,0x4a,0xef,0xdb,
+  0x48,0x96,0x10,0x66,0xaa,0x65,0x3d,0xaf,0x23,0x37,0xa4,0xf8,0x7f,0xde,0xdc,0xd1,
+  0xd5,0xe9,0x1e,0x10,0xeb,0x78,0x7e,0x53,0xa7,0x5b,0x97,0x8b,0xc2,0xa7,0x74,0x5e,
+  0xf6,0xd9,0x24,0x86,0xe1,0xd1,0x1b,0x48,0xe9,0x7f,0x71,0xd6,0xcc,0xfe,0x76,0x68,
+  0x22,0xe3,0x6d,0x2f,0x12,0x44,0xa0,0xb1,0x84,0x19,0x3e,0x49,0x0d,0x4a,0xe9,0x7f,
+  0x01,0xbf,0x02,0xb3,0x9a,0x0d,0xc7,0x3f,0xa6,0x23,0x48,0x82,0x1e,0xd5,0x6b,0x76,
+  0x40,0x48,0x98,0xba,0xdb,0x2c,0xf8,0x47,0x87,0x2f,0x86,0x9a,0x35,0x27,0xea,0x6b,
+  0xf1,0x9b,0xd0,0x1c,0x6f,0x0f,0xd1,0xed,0xe1,0x39,0x09,0xb5,0x9b,0xc8,0xc8,0xe6,
+  0xa5,0x81,0x2c,0xf8,0xa7,0x5c,0x2a,0x14,0xff,0x25,0xaf,0x40,0xa3,0xfd,0xa4,0x90,
+  0x3d,0xaa,0x16,0x04,0xe8,0x6b,0xb6,0x05,0xec,0x51,0x6a,0x9d,0xbf,0xd9,0x5a,0xff,
+  0x07,0xd2,0x60,0xad,0x90,0x1f,0xbc,0x2b,0x38,0xe7,0x76,0x0e,0x3b,0x35,0x7a,0x1f,
+  0x49,0x78,0x84,0xc6,0xeb,0xff,0xb8,0x35,0x39,0x3b,0x4c,0x92,0xf9,0xef,0x94,0x67,
+  0x1b,0x75,0x81,0xdd,0xe0,0x6a,0x37,0x51,0xf6,0x59,0xe5,0x85,0xbb,0x2c,0xef,0x1b,
+  0xb6,0xe2,0x9f,0x9b,0xde,0xe3,0x4d,0xde,0x83,0x8e,0xdc,0x1a,0xee,0x08,0x32,0x61,
+  0xcf,0x7b,0x13,0x6d,0xdf,0xc7,0xdf,0xf7,0xb5,0xad,0x49,0xfc,0xb3,0x2d,0xed,0x73,
+  0xf6,0x4a,0x47,0x69,0x9d,0xfd,0x4d,0xb1,0x0c,0x5e,0xe9,0xc4,0xc1,0xdb,0x9c,0xff,
+  0xb3,0xad,0x54,0x5b,0x9a,0x08,0x0c,0xe1,0x7c,0xde,0xff,0x22,0xe9,0xff,0x41,0x90,
+  0xa3,0x39,0x29,0xda,0xa7,0xf9,0x64,0x83,0xe6,0x04,0x57,0x13,0x0e,0x22,0x9a,0x73,
+  0x3c,0xff,0x3d,0xe1,0xff,0x49,0x4f,0xae,0x50,0xda,0x8b,0x7a,0x43,0xb5,0xca,0xf9,
+  0x3f,0x69,0x7a,0x03,0xe8,0x41,0x9a,0x4d,0x24,0x48,0x78,0x84,0xc6,0xdf,0x77,0xc9,
+  0x75,0xfe,0x64,0xff,0x8b,0x84,0xff,0x87,0xa3,0x9d,0xec,0x42,0x73,0xd9,0x23,0x88,
+  0x7f,0x72,0x13,0x57,0x26,0xd6,0xb3,0xcd,0x9a,0xff,0x95,0xdb,0x81,0x18,0xc9,0xa4,
+  0x75,0x2d,0x80,0x63,0x26,0x9b,0x5d,0xe6,0x1f,0x7a,0xa2,0xfe,0x8f,0xf9,0x7d,0x2d,
+  0xfd,0x2f,0x22,0xd0,0xe1,0xe1,0x78,0x18,0x41,0xd1,0x00,0x3c,0x48,0x2b,0x79,0x35,
+  0x80,0x5e,0xf8,0x44,0xb2,0xae,0xcf,0x4c,0xf1,0xa2,0xd5,0xff,0x43,0xcf,0xa8,0x5e,
+  0xc9,0xc4,0x3f,0x7d,0xc1,0xae,0x04,0x11,0xa8,0x4f,0xf5,0x5a,0xd6,0x3f,0xa5,0xff,
+  0x45,0x53,0x05,0x6c,0x64,0x05,0x3a,0xea,0x77,0x17,0x6c,0xe4,0xd1,0xc0,0x41,0x3e,
+  0x30,0x6e,0xe5,0x6e,0x9f,0x41,0x38,0x44,0x50,0xb5,0x0d,0x26,0xcb,0xed,0x80,0x2b,
+  0x6d,0x35,0x44,0xfb,0x55,0x9d,0xaa,0x59,0x6e,0x68,0xd4,0xd4,0xf8,0xb6,0x99,0x24,
+  0x0b,0x1a,0x98,0xca,0x92,0xe7,0x65,0x71,0xb6,0xa5,0xff,0x85,0x30,0x9d,0xfb,0x6f,
+  0x79,0x91,0xc3,0x99,0xdc,0x91,0xd2,0x4f,0xeb,0xc3,0x37,0x41,0x13,0x9d,0xcd,0x92,
+  0xe7,0xd7,0x93,0x52,0xff,0xc7,0x07,0xaf,0xb3,0x98,0xee,0xae,0xcb,0x5e,0x18,0x7e,
+  0x81,0x79,0xe2,0x68,0x91,0x64,0xa1,0x6a,0x9d,0xaf,0x8f,0xd7,0xff,0x31,0xfd,0x3f,
+  0xb6,0x49,0xf9,0x43,0x6f,0xea,0x20,0x23,0x02,0x0a,0x0d,0x75,0x42,0x7a,0x70,0xb7,
+  0xcf,0x95,0x84,0x23,0xe8,0xcf,0xf9,0x7f,0xd2,0xae,0xd0,0xb1,0x86,0x2a,0xdd,0x3d,
+  0x88,0xda,0xea,0x55,0x4e,0xe4,0xe0,0x6e,0x9f,0xcb,0xbc,0x63,0xec,0xa4,0xfe,0x1a,
+  0x91,0xf3,0x2c,0xf1,0xaf,0x36,0xd8,0xc7,0xeb,0x6f,0xac,0x08,0x8f,0x69,0xeb,0xf9,
+  0x8b,0x18,0xf8,0x22,0xcf,0x51,0xd3,0x23,0x9d,0xa8,0xff,0x23,0x0f,0x93,0x24,0xfe,
+  0xd9,0x06,0x7c,0x7e,0x31,0xbb,0x21,0x64,0xda,0x6b,0xb3,0x35,0xaa,0xe1,0xfc,0x67,
+  0x21,0x9f,0x65,0x58,0xe4,0x95,0x94,0xec,0x7f,0x91,0xdb,0xab,0xf0,0x6c,0x26,0x5b,
+  0x91,0x7f,0x08,0x05,0x5d,0xa1,0xe6,0xe2,0x69,0x17,0x87,0x41,0x65,0x19,0x49,0x79,
+  0x6e,0x4b,0xe2,0x9f,0xf2,0x19,0xbb,0x61,0x98,0xf8,0x7a,0xb2,0x76,0x8b,0x43,0x26,
+  0xdb,0x19,0xf7,0x8f,0x5d,0x1a,0xf5,0x77,0xb1,0xe2,0xc9,0xf7,0xd5,0xe5,0x2c,0x0b,
+  0xfe,0xe9,0xe5,0x1f,0xbd,0x3f,0x4d,0xcd,0x31,0xe3,0x5f,0x89,0xb4,0xaf,0x11,0x8e,
+  0x70,0x26,0xe7,0xab,0x72,0xb2,0xfe,0x73,0x83,0x32,0x06,0x27,0xa5,0xd2,0xb8,0x3d,
+  0x8e,0xfb,0xf3,0x55,0xee,0xd6,0xe8,0x17,0x1f,0x66,0xaf,0xd2,0x52,0x96,0xd4,0x77,
+  0x86,0xa5,0xfe,0x4f,0x4f,0xd3,0xff,0xd8,0x10,0x89,0xef,0xe8,0x47,0xb4,0x5c,0x06,
+  0x8d,0x86,0x33,0x2e,0x47,0x36,0x94,0xc0,0x99,0x08,0x1a,0xe6,0xb1,0x89,0xf8,0x45,
+  0x33,0x29,0xb4,0xe0,0x9f,0x12,0x1a,0x69,0x70,0x9e,0xc1,0xf9,0x6e,0xd6,0x12,0x71,
+  0xf2,0x6e,0x29,0x6e,0x68,0x66,0x4e,0xcb,0xfc,0xd8,0x94,0xfa,0x3f,0x9c,0xed,0xe3,
+  0x52,0x89,0xc9,0x76,0x36,0x64,0xe0,0x81,0x0f,0x5c,0x9f,0x1b,0x2d,0xeb,0x93,0xc4,
+  0x3f,0x8c,0xae,0xa2,0x7d,0x92,0xd7,0x08,0xf0,0x68,0xa0,0xc9,0x6f,0xe1,0x82,0x14,
+  0x05,0x91,0x75,0x3f,0xc8,0xea,0xba,0x49,0xff,0xcf,0x4d,0x17,0x12,0x4d,0xa8,0xe3,
+  0xe2,0x05,0xb8,0xc0,0xc3,0x3a,0xdc,0xed,0x33,0xc6,0xdb,0x18,0x4d,0xbe,0xef,0xb0,
+  0x38,0xe8,0x9f,0x90,0x27,0x00,0xa4,0xd1,0x33,0xde,0x7d,0x6f,0x3d,0x1f,0x7c,0x77,
+  0x62,0xa0,0xd9,0x66,0x1e,0xfd,0xff,0x6d,0x3f,0xc4,0x69,0x1e,0x1c,0x7c,0x77,0x62,
+  0xa0,0x99,0x6d,0xf8,0xfe,0xcc,0xfd,0x59,0xc2,0x12,0x04,0xda,0xe8,0x9d,0x3a,0x98,
+  0xf8,0x95,0xf5,0xe7,0xff,0xbd,0x7e,0x88,0xa2,0x67,0xea,0xe0,0xcf,0xfd,0xfc,0x47,
+  0x6d,0x10,0xc1,0x32,0xf8,0x4b,0xd6,0x7f,0xc5,0xc4,0x20,0xff,0x2f,0x5b,0xff,0x15,
+  0x13,0x83,0xfc,0xff,0xb4,0x1f,0xa2,0x96,0xda,0x06,0xd1,0xbc,0xc2,0xff,0xa1,0x6b,
+  0xee,0x3f,0xd3,0xb8,0xf6,0x1f,0x5a,0xef,0xc1,0xc1,0x77,0xf1,0x57,0x7f,0x66,0xfd,
+  0x95,0x94,0x85,0x44,0x81,0x40,0xf3,0xfc,0x92,0x79,0x36,0xe8,0x94,0xef,0x9b,0x98,
+  0xa4,0xa4,0x2c,0x7b,0x13,0x0e,0xf2,0xb4,0x26,0x7e,0x25,0x65,0xff,0x24,0xfb,0x21,
+  0xda,0xad,0xff,0x28,0x3e,0x36,0xe0,0xf3,0x9b,0x1f,0xa2,0x14,0xec,0x3d,0xff,0xa7,
+  0x1f,0xe2,0x7f,0x91,0xfe,0x83,0xff,0xf5,0xe6,0x93,0x26,0x65,0x07,0x75,0xf9,0x33,
+  0x38,0x01,0xe8,0x2f,0xeb,0x4f,0xea,0xc2,0x43,0x57,0x0d,0x0a,0xfb,0x4b,0xe5,0xa1,
+  0x94,0x4f,0xa9,0x5f,0x50,0xb4,0xff,0x48,0x1e,0x3a,0xa7,0xdc,0x3f,0x57,0xa0,0xff,
+  0x0b,0xf2,0x36,0x21,0xf4,0x88,0x13,0x22,0x93,0x82,0xf1,0x9a,0x41,0xca,0xfb,0x9a,
+  0xe7,0x49,0xa0,0x76,0xff,0x5f,0x2a,0x0f,0xf1,0xf0,0x48,0x84,0xd8,0xd9,0x5f,0x2a,
+  0x0f,0xf1,0xef,0x25,0x22,0x68,0x6c,0xea,0x4a,0xff,0xf9,0x1f,0xd2,0x24,0xed,0x40,
+  0xdc,0x60,0x5d,0xf6,0xf5,0x9e,0xd4,0xf5,0x4f,0x91,0x27,0x1e,0x73,0x11,0xfc,0xff,
+  0x0b,0xeb,0xcf,0x17,0xb9,0x3a,0xfd,0x3f,0x5e,0xff,0x29,0xf2,0x50,0x92,0x50,0x7a,
+  0x3c,0x04,0x33,0xd9,0xb5,0xf2,0xf0,0x3f,0xec,0x0f,0x9b,0xa7,0x09,0x7f,0xa9,0xbe,
+  0xf3,0x9a,0x2b,0x2a,0x64,0xfc,0xa5,0xeb,0xaf,0x30,0xbb,0x4a,0xe9,0x5f,0xba,0xfe,
+  0x5c,0x1e,0x4a,0x53,0xbf,0xe0,0x35,0x3f,0xd6,0xfe,0xb0,0x1e,0x48,0x3a,0x8b,0xff,
+  0xe7,0x3f,0x95,0x95,0xf8,0x0f,0xb0,0xa9,0x4b,0x3c,0xf5,0xc7,0x2a,0x0f,0xc5,0x9e,
+  0xc6,0x1e,0xf6,0x97,0xff,0x03,0xb8,0x21,0x74,0xab,0x3b,0xe8,0x7f,0xfa,0x93,0xeb,
+  0x92,0x5c,0xff,0x99,0xbe,0x9d,0xfa,0xf3,0x5f,0x4d,0xfe,0xfc,0x17,0x9b,0xbf,0xb6,
+  0x5a,0xa8,0xd7,0xde,0x56,0x16,0x42,0x66,0x03,0x31,0x07,0xb9,0x99,0x2f,0xa6,0x3f,
+  0x58,0x7b,0x7f,0x70,0x61,0xee,0x4d,0x2f,0x4e,0x7b,0x50,0xbb,0x3f,0xf8,0x57,0xd2,
+  0x0c,0x63,0xfe,0xe4,0xfc,0xdb,0x6b,0xd3,0x1e,0x14,0xee,0xd7,0xfe,0x5a,0x81,0xde,
+  0xb4,0x07,0xd3,0xf8,0x60,0x46,0xef,0x8c,0x07,0x1b,0xee,0x0f,0xe1,0xe0,0xa4,0x90,
+  0xf8,0x15,0xce,0x9f,0xc0,0xc3,0xd0,0x43,0x04,0x95,0x05,0xd4,0x6c,0x2a,0x85,0x27,
+  0x06,0xe9,0x38,0xd0,0xd4,0xec,0x3c,0x69,0x23,0xbf,0x12,0xc2,0x2b,0x93,0xe1,0x65,
+  0x1e,0xc0,0x13,0x42,0xb0,0x1c,0xae,0x83,0x1f,0x31,0x3e,0x10,0xae,0x53,0xd2,0x58,
+  0xda,0x0a,0x21,0x4f,0xbb,0x8e,0xce,0x60,0xc2,0x8a,0x86,0xe5,0xf0,0x55,0x48,0x63,
+  0xaa,0x36,0x31,0xbf,0x77,0xb9,0x54,0x26,0xdc,0xcd,0xbe,0x5c,0x2d,0xf5,0xa5,0x3d,
+  0x24,0xdc,0xcf,0xfe,0xda,0x35,0xe3,0xb8,0x60,0x0e,0xd4,0x34,0xf3,0x8a,0xfe,0xd7,
+  0x6a,0xae,0xe5,0x79,0x7a,0x35,0x4d,0x55,0x28,0xca,0x2b,0x3c,0x4c,0x21,0xc8,0x83,
+  0x74,0x10,0x26,0x07,0xe1,0xc9,0x2b,0xf9,0x93,0xcf,0xf3,0x62,0x40,0x5a,0x29,0xe4,
+  0xb1,0x3b,0x54,0x68,0x96,0x9c,0x02,0x35,0xfc,0xaa,0x12,0x41,0x2b,0x91,0x32,0xff,
+  0x02,0x68,0xc0,0x73,0x4d,0xc1,0xaf,0x28,0x2c,0xb9,0x3e,0x2f,0xde,0x95,0x76,0x6f,
+  0xc3,0x7d,0xfa,0x57,0x5c,0x52,0x20,0xcd,0xdf,0x10,0x8c,0xdd,0xe7,0x9a,0x61,0x43,
+  0xd9,0x18,0xd4,0x6b,0x5d,0x69,0xe9,0x69,0x38,0x50,0x73,0xed,0x33,0xb4,0xe4,0xf3,
+  0xb0,0x99,0xc2,0x5f,0xc3,0x57,0x8c,0x19,0x41,0x69,0xa9,0x39,0x98,0x5e,0x9f,0x76,
+  0xbf,0xf0,0x65,0x76,0x9f,0x31,0xc3,0x83,0x03,0x11,0x70,0x50,0x9e,0x34,0xbf,0x70,
+  0xbe,0x5a,0x1b,0x00,0xde,0xe3,0x09,0x85,0x8d,0x26,0x29,0x21,0x01,0x45,0xa0,0x52,
+  0xc3,0xc5,0x98,0x22,0xd8,0x11,0x73,0xa1,0x98,0x54,0x94,0x9e,0xe4,0xfc,0x17,0x43,
+  0x68,0xad,0x86,0xd1,0xfe,0xc8,0x53,0xcd,0x01,0x1a,0x82,0xea,0xf8,0x15,0xea,0x4a,
+  0x1f,0x1f,0x54,0x27,0x9f,0xe7,0xc5,0x60,0xda,0x2a,0xe1,0x6f,0xe0,0x3a,0x6d,0x06,
+  0x4b,0x5b,0x05,0x7c,0xf0,0x95,0x68,0x1a,0xf7,0x91,0x7c,0x15,0x66,0x44,0xd3,0x54,
+  0xe1,0x0c,0xfc,0x23,0xcc,0xb0,0xbc,0xef,0x5a,0x6d,0x1a,0xff,0x6d,0x19,0x8c,0x17,
+  0x6e,0xf9,0x47,0x3e,0x58,0x29,0x2c,0x4f,0x5c,0x59,0x09,0xcb,0xd9,0x75,0x29,0xf3,
+  0x6f,0xf7,0x4b,0x9e,0x06,0xbb,0x5a,0x43,0x69,0x78,0x7c,0xa0,0x1c,0x9d,0x1c,0xc0,
+  0xf8,0xc0,0x98,0x3e,0xf9,0x3c,0x02,0x97,0x58,0x76,0x10,0xb9,0xf0,0x1b,0x1f,0x18,
+  0x53,0x06,0xaa,0x66,0xd9,0xd4,0x8c,0x08,0x1e,0xb6,0x54,0xcd,0xa1,0xd2,0x51,0x73,
+  0xf0,0x65,0x73,0x60,0x98,0x57,0x5e,0x10,0x3c,0x3d,0x4b,0x3d,0x5f,0x76,0xe7,0x1a,
+  0x96,0xf5,0xf1,0x0b,0xa1,0x86,0xe5,0xea,0x57,0x69,0x5a,0x38,0x2d,0x31,0x98,0x81,
+  0x83,0x9e,0x3c,0x3e,0x68,0x14,0xd4,0x9e,0xe5,0x9e,0xaf,0xda,0x67,0x58,0x9e,0xe7,
+  0x45,0x3f,0x5f,0x30,0x5c,0x42,0x21,0x3c,0x3e,0x30,0x97,0xd0,0x8e,0x03,0x2d,0x2c,
+  0xf1,0x81,0x48,0x05,0xeb,0xfb,0x12,0x08,0x35,0xe4,0xa9,0x77,0x04,0x60,0x8b,0x14,
+  0x6a,0xb8,0x5e,0xbd,0x83,0x4e,0x0f,0x4b,0xab,0xf0,0x35,0xef,0x08,0x4c,0xdf,0x22,
+  0xa9,0xfc,0x7d,0x03,0x8a,0x75,0xbf,0x85,0x84,0xe5,0xc2,0x57,0xe1,0x2b,0x2c,0x2d,
+  0x24,0xe1,0xee,0xc7,0xb5,0x9b,0x11,0x4a,0x5b,0x2e,0xdc,0x81,0x57,0xa6,0x87,0xd2,
+  0x28,0xdc,0x01,0xd3,0x99,0x64,0xd9,0x3f,0xc6,0x1d,0x69,0x5f,0x62,0xf7,0x85,0x66,
+  0x6c,0x13,0xd2,0xa1,0x9a,0x05,0x43,0xb9,0x79,0x69,0xe9,0x42,0x35,0x53,0x26,0x06,
+  0xe6,0x15,0x48,0x9e,0x97,0x06,0x92,0x78,0x6c,0x0d,0xb2,0xf1,0x08,0x54,0x27,0xce,
+  0x82,0x84,0xe7,0x51,0x09,0x48,0xfc,0x0a,0x1f,0xe4,0x82,0x9a,0x3c,0x2f,0x77,0x90,
+  0xe9,0xac,0x29,0x94,0xaf,0xc0,0x1d,0xe2,0x74,0x76,0x3a,0x74,0x6b,0x5e,0xe6,0x1d,
+  0xe2,0x97,0xc6,0x07,0xd3,0xc6,0x07,0xda,0xfc,0xc9,0xfb,0xaf,0xbd,0x23,0xc3,0x94,
+  0x06,0x79,0xb3,0x5f,0x4a,0x9b,0x8f,0x83,0x2f,0xe6,0xcd,0x78,0x49,0x7a,0x30,0xfc,
+  0x36,0x5e,0x99,0xfe,0x52,0xda,0x83,0x0d,0x6f,0x87,0xfe,0x47,0xde,0x0c,0x23,0x99,
+  0xff,0x72,0xfb,0x1d,0xe2,0x83,0xec,0xed,0xd0,0x42,0x9c,0xc6,0x07,0x2b,0x16,0xe6,
+  0x65,0xbe,0x34,0xed,0xc1,0x86,0x99,0x78,0x45,0x78,0x89,0x3c,0x98,0xb8,0x83,0x31,
+  0xdd,0x32,0x5f,0x30,0xef,0xbf,0x1c,0xf8,0xdd,0xee,0x5f,0xf1,0xd7,0xf8,0x87,0x38,
+  0xb0,0xe3,0xfd,0xd3,0x5e,0x82,0xf9,0x38,0x10,0xf3,0xa6,0x1b,0xc2,0xe4,0xf3,0xe3,
+  0x0e,0x52,0x81,0x9f,0x98,0xb4,0x84,0xfc,0x51,0x12,0x82,0xe8,0x7e,0x53,0x22,0x01,
+  0x1f,0xfc,0x15,0xca,0x9f,0xe4,0xfd,0x21,0x5d,0x58,0xc1,0x96,0x87,0xd2,0xf3,0x6e,
+  0x5f,0x67,0x0e,0xae,0xcb,0x4b,0xc3,0x41,0xd3,0xf8,0x20,0x9f,0x2d,0x5f,0x71,0x5d,
+  0x9e,0xc4,0x92,0xd3,0x6f,0xd7,0xd2,0x3c,0xf9,0x4b,0xe9,0x97,0xa1,0x89,0xa5,0xd5,
+  0x0b,0xf7,0xc3,0x5f,0x43,0xae,0x21,0xd4,0x03,0x1f,0xe0,0x6b,0x7a,0xcc,0x2b,0xd3,
+  0x2d,0xfb,0xe7,0x76,0x3f,0x53,0x75,0xea,0x22,0x36,0x54,0xe3,0x21,0x3c,0x94,0xe6,
+  0x11,0x4c,0x0c,0x84,0x30,0xda,0x47,0xe6,0xc0,0xf2,0x3c,0xb7,0xfb,0x9b,0x42,0x3b,
+  0x70,0xff,0xd8,0x00,0x77,0x57,0x03,0x55,0xfd,0xb8,0x7f,0xb8,0xdb,0x00,0x07,0x4a,
+  0x18,0x77,0x94,0x39,0xb0,0xce,0xaf,0x99,0x1d,0xec,0xb9,0xcf,0xf3,0x15,0xee,0x10,
+  0xd4,0x1a,0x82,0xea,0x7d,0xf6,0x19,0xfe,0xc4,0x80,0xce,0x10,0xd3,0x82,0x89,0x01,
+  0x24,0x9f,0x07,0x44,0x21,0x68,0xdc,0xe7,0x99,0x41,0xa5,0x1a,0x3e,0x50,0x67,0xd8,
+  0xd3,0x6a,0x12,0x57,0xec,0x69,0xfe,0xf1,0x5f,0xa5,0x4d,0x7e,0x5d,0x04,0x1c,0x9a,
+  0xa6,0x29,0x0a,0x62,0x26,0x05,0x25,0x9f,0xa4,0x34,0x20,0x04,0xa3,0x09,0x74,0xa6,
+  0xa2,0x20,0xc2,0x01,0x0a,0x45,0xcb,0x6a,0xc2,0xed,0x77,0x01,0x61,0x4c,0x57,0xef,
+  0x34,0xc2,0x04,0x18,0x53,0x55,0x17,0x62,0x1b,0x73,0x80,0x40,0x26,0x9d,0x0f,0x80,
+  0x52,0xcb,0xf3,0xe0,0x7a,0xe2,0x09,0x80,0xeb,0x44,0x14,0xfb,0x7c,0xc0,0xa5,0xbd,
+  0x10,0x22,0xdb,0x70,0x70,0x3d,0xbf,0x92,0x90,0x3f,0xc9,0x7f,0x61,0xad,0x96,0xd0,
+  0x17,0x38,0x5f,0x9c,0x10,0x44,0x39,0x21,0xe9,0x7e,0x98,0x83,0x03,0xfc,0xf4,0xf7,
+  0xc3,0x34,0xc8,0xb5,0x7c,0x2f,0x18,0x97,0x27,0x02,0x63,0x92,0x47,0xb0,0x03,0x8a,
+  0x4e,0x03,0x07,0x79,0xe6,0x40,0xe1,0xf4,0xaf,0x3b,0x40,0xb1,0xce,0x97,0x12,0xf3,
+  0x35,0x94,0x3f,0xf3,0xc1,0xae,0xe1,0xe0,0x34,0x2c,0x80,0x0c,0x7e,0xe5,0xb4,0x56,
+  0xc8,0xb3,0xfd,0xf9,0xaf,0x92,0x3f,0xd3,0x84,0xf9,0xda,0xd2,0x60,0x4e,0x34,0xf7,
+  0x45,0x61,0xbe,0xb1,0x54,0xcb,0xc9,0x95,0x70,0x70,0x3b,0x5e,0xc9,0x95,0x7a,0x85,
+  0xfc,0xea,0xa5,0xc1,0x2f,0x2b,0xd6,0xfd,0x03,0xb7,0xa4,0xd5,0xf5,0xfc,0xad,0xe7,
+  0xab,0x11,0x69,0x67,0xda,0xb7,0x70,0x70,0x6f,0xeb,0x8c,0xa7,0x13,0x57,0x70,0x20,
+  0x8c,0x0f,0xac,0xf3,0x69,0x02,0xe8,0x6b,0x09,0x30,0x18,0x24,0x21,0xd8,0x0c,0xe3,
+  0x8f,0xb1,0x59,0xfa,0x33,0xcf,0x03,0xab,0x42,0xd3,0xf3,0xa4,0x3b,0x04,0x88,0xd4,
+  0x72,0x45,0xe6,0x17,0xa6,0x47,0xa4,0x95,0xd3,0xf3,0x9a,0xee,0xc8,0x9f,0xce,0x6a,
+  0x27,0x06,0xd6,0xf9,0xb7,0x07,0xa7,0xdf,0x27,0x7d,0x45,0x90,0x20,0x8d,0x0f,0x6e,
+  0x17,0xbe,0xa2,0xdd,0x8e,0x4a,0x4b,0xfa,0x0a,0xcc,0xc0,0x81,0x72,0x9f,0x34,0x43,
+  0x98,0x61,0xd9,0x0f,0xdc,0xbf,0x80,0x92,0x4f,0xc1,0xbd,0x99,0xef,0xa7,0xc1,0x70,
+  0xae,0x9a,0x16,0x10,0x70,0xc0,0x70,0x40,0x57,0xdc,0x9b,0x17,0xdc,0x90,0xab,0xae,
+  0xb5,0xde,0xde,0x26,0x11,0x5e,0x17,0xc9,0x25,0xd9,0x04,0xc2,0x34,0x5d,0xb9,0x76,
+  0xe0,0xce,0xb5,0xce,0xb7,0xa7,0xe7,0x08,0x4d,0xc6,0x0a,0xcf,0xf5,0x4b,0xc5,0x2f,
+  0xc3,0x69,0xe3,0x56,0x4f,0xc6,0xc4,0x20,0x73,0x29,0x2a,0x01,0x73,0x60,0x7d,0x9e,
+  0x8c,0xb4,0x87,0xaa,0xef,0x8f,0xfe,0xb5,0x7a,0x53,0x9f,0x84,0xda,0x3f,0xf2,0xd7,
+  0xea,0x0c,0x84,0x01,0xf0,0x36,0xfb,0x22,0x0e,0xee,0x78,0x48,0x78,0x9b,0xfd,0xfd,
+  0x9c,0x19,0x86,0x65,0xbe,0xfc,0xb7,0xfe,0xd7,0xa3,0xcf,0x76,0x14,0x67,0x7c,0xe1,
+  0x2e,0x1c,0xec,0xeb,0x28,0xbe,0x53,0xbe,0xf7,0xae,0xfe,0x2d,0xcf,0x16,0xfe,0x3c,
+  0x43,0xf6,0xdf,0x75,0xda,0x1c,0x58,0x9f,0x67,0xd1,0xd5,0x7b,0xae,0xfe,0xfa,0xf9,
+  0x0b,0x1f,0x8e,0x56,0xfd,0x10,0x07,0x07,0x2e,0x7c,0x3c,0xba,0xe8,0xca,0xb2,0xdf,
+  0x6d,0xbd,0x3a,0x70,0x79,0x74,0xd1,0x23,0xcb,0xae,0x9a,0x03,0xf8,0xdf,0xf8,0xf1,
+  0x3d,0x9e,0x31,0xc7,0x7f,0x67,0x74,0xcb,0xaa,0xd9,0xa3,0x8e,0xa7,0x6a,0xae,0x46,
+  0xb7,0xfc,0xb3,0xef,0x5f,0xef,0xfc,0xe1,0x6b,0x77,0x5e,0x78,0xec,0x72,0xd5,0xd5,
+  0x3b,0x6f,0xe1,0x83,0x01,0xeb,0xfc,0xaa,0x47,0xee,0xf9,0xdd,0xd6,0x03,0x03,0x1f,
+  0x4e,0x3c,0xc6,0x87,0x97,0x27,0x1e,0x0c,0xe7,0xdf,0xf3,0x3b,0xf3,0x09,0xad,0xf3,
+  0xff,0xef,0xf6,0xce,0x2f,0xb6,0xa9,0x2a,0x8e,0xe3,0xbf,0xdb,0x9e,0x96,0x96,0xb5,
+  0xe3,0x5e,0xe8,0xa0,0xe0,0xb2,0x74,0xeb,0xd8,0xa6,0x12,0x73,0xc1,0x8d,0x3f,0xc1,
+  0xb0,0xb3,0xb5,0xdd,0xca,0xe4,0x4f,0x27,0xa0,0x40,0x8c,0xe9,0x90,0xa8,0xf1,0x69,
+  0xc3,0x17,0x13,0x03,0xdc,0x42,0x21,0xc4,0x40,0xb2,0xcc,0xa9,0xd3,0x4c,0x1d,0x89,
+  0x1a,0x62,0x40,0x63,0x8c,0xc6,0xc4,0x98,0x5c,0x88,0x08,0x84,0x87,0x2d,0x06,0x12,
+  0xa3,0x89,0x40,0xdc,0x8b,0x09,0x09,0x7b,0x20,0x31,0x3e,0xcc,0xf9,0xfb,0x9d,0x7b,
+  0xdb,0x9e,0x62,0x84,0x88,0xdc,0x17,0x73,0xbe,0x4f,0xdf,0x9d,0x9d,0xfe,0x76,0x7a,
+  0xfa,0xbb,0xbf,0xfb,0xf9,0xdd,0xdb,0x76,0xc9,0x03,0xd9,0x6b,0x23,0x6b,0xa6,0x8f,
+  0x0f,0xac,0xa7,0x07,0x7e,0x3e,0x7d,0x02,0x97,0xbd,0xe5,0x97,0x45,0x14,0x21,0x19,
+  0x27,0x53,0xbc,0x39,0x20,0xcf,0xd7,0x0e,0x0d,0x66,0xea,0xf5,0xd6,0xba,0x7e,0xbb,
+  0x69,0x90,0x8f,0x43,0x6b,0x2c,0x7c,0x1e,0x41,0x71,0x5c,0x6f,0x65,0xda,0x79,0xdf,
+  0x90,0x8d,0xa6,0x5e,0x93,0xf7,0x93,0x1d,0x19,0x02,0xc1,0x87,0xc5,0x23,0x2e,0x0d,
+  0x7e,0xe7,0x12,0x63,0xc0,0x31,0x29,0x3d,0x20,0xcf,0xf7,0x3b,0x58,0x18,0x65,0x87,
+  0x0a,0x2e,0x1f,0x5a,0x58,0x66,0x85,0x39,0x2a,0x0c,0xd5,0xe7,0xaa,0x1d,0xca,0xe3,
+  0x41,0x1a,0xd4,0x0b,0x2e,0xb6,0xc5,0x4b,0xd8,0x16,0x77,0x40,0xce,0x17,0xd4,0xbb,
+  0xe4,0xf9,0xa1,0xf4,0x3e,0xfa,0xa7,0x0e,0x35,0x70,0x6c,0xef,0x2a,0xad,0xbe,0xd8,
+  0x9b,0x30,0x2e,0x32,0x34,0x56,0x6f,0xb3,0x71,0x19,0x33,0x04,0x4d,0xc2,0xa8,0x5a,
+  0x3f,0xe4,0xf5,0xd0,0x51,0x5f,0x80,0x4e,0x85,0x10,0xd7,0x89,0x06,0x39,0xd2,0x53,
+  0x15,0x28,0xca,0xf1,0x23,0xac,0x89,0xbe,0xcb,0x69,0x10,0x8e,0x23,0x28,0x22,0x16,
+  0xe6,0xf5,0x31,0xf6,0x02,0x99,0x41,0x7d,0x9c,0x35,0x6b,0x61,0xab,0x9b,0x57,0xd5,
+  0x93,0x47,0x59,0x9f,0xb5,0xf8,0x54,0xe6,0x53,0x78,0x84,0xed,0x2e,0x2c,0x9c,0x48,
+  0x9f,0x32,0xd0,0x9c,0x75,0x4d,0x9f,0x33,0x22,0xad,0xde,0x8e,0xc2,0x22,0x88,0xfd,
+  0x18,0x78,0x57,0xdf,0x44,0x66,0x0a,0xda,0xb5,0x4d,0xb0,0x0d,0x98,0x1d,0x30,0xd1,
+  0xf4,0xc3,0x62,0x3b,0x00,0x1a,0xaf,0x3c,0x00,0x5b,0x55,0x3d,0x81,0x34,0xd8,0x0f,
+  0x74,0xcf,0x01,0xdb,0x36,0xea,0x54,0xd3,0xf8,0xac,0x58,0x4e,0x18,0x03,0x10,0x2b,
+  0xca,0xb7,0xaf,0x31,0xbe,0x68,0x57,0x87,0x13,0xe0,0x5c,0x29,0xd0,0x13,0x4c,0x34,
+  0x98,0x45,0x71,0x87,0x80,0x2a,0x35,0x24,0x12,0x50,0x35,0x9f,0xe5,0xb5,0x31,0x2c,
+  0x92,0x71,0xaa,0xf8,0x71,0x2c,0xfd,0xc8,0x23,0x79,0x51,0x36,0xd7,0x55,0x4c,0x79,
+  0xbe,0xae,0x81,0x8f,0x36,0xad,0xc5,0xf9,0xc4,0xe7,0x18,0x9a,0xf0,0x1d,0xa6,0x15,
+  0xe8,0x8c,0xe6,0x8a,0x13,0x1f,0x5a,0x04,0x45,0x50,0xc5,0x87,0xcc,0x31,0xab,0x08,
+  0x9c,0xda,0xac,0xca,0xf9,0x94,0x63,0x67,0x4e,0x65,0xfc,0x4e,0x3e,0x64,0x15,0x3e,
+  0xf4,0xd1,0x5d,0xee,0xd2,0x0e,0x71,0xfc,0xd1,0x14,0x90,0x06,0xe7,0x24,0x53,0xac,
+  0x1a,0xc1,0x13,0x81,0xbc,0x1e,0xc1,0x6f,0x21,0x38,0xec,0x1a,0x83,0x4e,0xbb,0x3b,
+  0x4b,0x06,0x47,0x30,0x1f,0x2a,0xeb,0xd1,0xba,0x65,0x2c,0xfc,0x07,0x53,0xc9,0x87,
+  0x1c,0xb8,0xf1,0x23,0xd5,0xf1,0x23,0x52,0xfc,0x90,0x94,0x6f,0x3c,0xc3,0xf1,0x85,
+  0x8c,0x41,0x86,0x88,0xdf,0x31,0x06,0x67,0x83,0x25,0xe3,0x8c,0x68,0xdd,0x7a,0x69,
+  0x3d,0x59,0x4e,0x58,0x58,0x9f,0x9f,0x17,0x47,0x3e,0xec,0x47,0x2c,0x64,0x55,0xa6,
+  0xcb,0x31,0x50,0xe6,0xb1,0x2c,0x11,0x37,0x65,0xbe,0xb8,0x04,0x4c,0x8d,0x3f,0xf2,
+  0x21,0x08,0x2c,0x24,0x50,0xc4,0xc6,0xcd,0xd4,0x43,0xd2,0xd5,0x10,0x9e,0x79,0x1a,
+  0x69,0x90,0xe5,0x1b,0x73,0xb0,0x18,0x41,0xf1,0xaa,0xc0,0x42,0x5f,0x19,0x14,0x87,
+  0xac,0x2b,0xbc,0x23,0x1e,0xe0,0x12,0xcf,0xf7,0xb0,0xa1,0xc3,0x3b,0x11,0xea,0x0c,
+  0xc4,0x42,0xc4,0x3c,0xc7,0x58,0xf5,0xd2,0xc8,0xce,0x75,0x76,0x25,0xbe,0xd6,0xe3,
+  0x1b,0xb2,0xc6,0xf3,0xad,0x88,0x85,0x41,0x9a,0xf6,0x62,0x3c,0x4c,0x58,0x48,0x23,
+  0x64,0xc4,0xaf,0x58,0x65,0x7e,0x2e,0xd3,0x13,0x70,0xf8,0x93,0x1f,0x9d,0x37,0x64,
+  0x3d,0x4b,0xb4,0xf9,0xbd,0xd3,0x9f,0x3a,0xa0,0x48,0xe8,0xc8,0xce,0x55,0x5e,0x2f,
+  0xa0,0x7b,0xa3,0xc8,0x87,0x69,0x36,0x8c,0xcf,0x6e,0xa3,0x53,0x7f,0x9a,0xa9,0xfe,
+  0x64,0xd9,0x88,0x53,0x9a,0xb2,0x4c,0xda,0x7f,0xcc,0xdb,0x01,0x2b,0x9e,0x0f,0x8e,
+  0x19,0x1f,0xa3,0x59,0x86,0xa0,0xa8,0x1d,0x85,0x81,0x42,0xdc,0x35,0x56,0x7c,0x40,
+  0x14,0xa2,0xb2,0x32,0x79,0xf6,0xaa,0x56,0x0b,0x29,0x0b,0x26,0xac,0xb5,0x5a,0x03,
+  0xf8,0x2d,0xfd,0x3a,0x23,0xd3,0x6b,0x19,0x65,0x23,0xe5,0xb3,0xf6,0x14,0x7d,0x45,
+  0x4e,0x9b,0x2f,0x0b,0x6f,0x58,0x09,0x6b,0xa9,0x29,0xd2,0xa6,0x99,0xb0,0x30,0xab,
+  0x8d,0x38,0xa0,0x98,0x95,0xf3,0x41,0xeb,0x66,0x89,0x93,0x22,0x3f,0x5f,0xb7,0x90,
+  0x06,0x27,0x82,0x4e,0xda,0xb8,0x7c,0x98,0x70,0xf9,0xb0,0xea,0xf8,0xe2,0x85,0xd8,
+  0xaa,0x0c,0x1e,0x8e,0x90,0x2b,0xe8,0x66,0x20,0x62,0xa4,0x58,0x0e,0x8f,0xfb,0x74,
+  0xc8,0x20,0x3e,0x14,0x06,0xa4,0xfd,0xc1,0x96,0xf2,0x62,0x0c,0xa7,0xc1,0x93,0x60,
+  0xda,0xb1,0x09,0x2d,0xa2,0xa5,0x00,0xcf,0xee,0x38,0x42,0xc6,0x16,0x86,0x57,0x8e,
+  0x17,0x2c,0x1f,0x66,0x8c,0xf8,0x10,0xbd,0x0f,0x2b,0x8e,0x56,0xbe,0x7a,0x97,0x90,
+  0x8d,0xb4,0x9e,0xa6,0x85,0xc4,0x87,0x11,0xcb,0xdf,0x84,0xc7,0x45,0x53,0x63,0x5b,
+  0x68,0xbe,0xcb,0x87,0x65,0x63,0x49,0xeb,0xd1,0x20,0x24,0x8a,0x0c,0x66,0x69,0xd1,
+  0xa9,0x36,0xe5,0xfa,0x43,0x26,0x80,0xf5,0xd9,0xb7,0x4b,0xde,0x1f,0xf0,0xed,0x85,
+  0xa5,0xd0,0xd2,0x35,0x35,0x7c,0x28,0x0f,0xef,0x40,0x0b,0xdf,0x38,0x5c,0xaa,0x3f,
+  0xc3,0x41,0x61,0x7c,0x61,0xab,0x7c,0x49,0x8c,0x67,0xf2,0xa3,0x6b,0x81,0x5e,0xaf,
+  0x63,0x13,0xc5,0xb5,0x5a,0x6d,0x38,0xe5,0xbc,0x5e,0x34,0xa2,0x5f,0x0f,0x0a,0x53,
+  0x90,0xfa,0xd3,0x1c,0x3e,0xd1,0x75,0xb9,0xda,0x41,0xff,0x5b,0xf0,0x11,0xbd,0xfb,
+  0x41,0xf7,0x33,0xb8,0x51,0x32,0x67,0x4b,0x46,0xaa,0x3f,0x8c,0x41,0x07,0x8f,0xe6,
+  0xfc,0xbb,0xad,0x2b,0xb0,0x92,0x47,0xe9,0x9f,0xd6,0x5f,0x25,0xb0,0xcc,0xf9,0x63,
+  0x64,0xb8,0x30,0x95,0xf7,0x87,0xf3,0x4c,0x8a,0x61,0x37,0x6a,0xf6,0x00,0xd5,0x07,
+  0x32,0x11,0xa3,0xda,0x60,0xe9,0x30,0xe4,0xfa,0xc3,0x21,0x89,0x55,0xda,0x2d,0xe1,
+  0x58,0xcb,0xe9,0x8a,0xb0,0x7b,0xd5,0xd0,0x31,0xa2,0x54,0x56,0xf6,0x27,0x9b,0x76,
+  0xf9,0xd0,0xda,0xbb,0x47,0x18,0x09,0x0b,0x85,0x49,0xc9,0x7c,0x88,0xf5,0x27,0xbd,
+  0xbd,0xbf,0x2e,0x98,0x49,0x41,0x6c,0x7b,0xce,0x88,0x21,0x1f,0x1a,0x3c,0x2d,0x0c,
+  0xd6,0x1f,0x20,0xd3,0x85,0x46,0xca,0x1f,0x4a,0x40,0xaa,0x7c,0x05,0xaa,0x7c,0xfa,
+  0xa1,0x40,0x42,0xcb,0x62,0x8e,0x53,0x6e,0x62,0xe3,0xe0,0x1a,0x90,0x84,0x10,0x88,
+  0x7c,0x08,0x2b,0xf4,0x12,0x16,0xd2,0x48,0xd1,0xe1,0x43,0x70,0x41,0x11,0x34,0xbd,
+  0xbc,0x9e,0xcd,0xfe,0x6d,0x5d,0xc5,0xa9,0xc6,0xd5,0xb0,0xd9,0xb7,0x88,0x5f,0x99,
+  0x6a,0x6c,0x0f,0x6d,0xf6,0x6d,0x43,0xd3,0xd1,0x1e,0x75,0x46,0x3a,0xda,0x23,0xd2,
+  0x7a,0xf0,0xf9,0xee,0xeb,0xaa,0x1f,0xee,0x6d,0x32,0x2e,0x35,0xef,0xc1,0xb3,0xff,
+  0xe1,0x84,0x71,0x29,0xe0,0x62,0xc0,0x45,0x97,0x07,0x62,0x52,0x7f,0x0a,0x02,0x0b,
+  0x89,0x0f,0x6b,0xfa,0xfa,0x64,0x3e,0xfc,0xb0,0xc4,0x87,0x7b,0xab,0xf9,0x50,0xd0,
+  0x17,0xf1,0xe1,0xfa,0x83,0x5b,0x65,0x3e,0xbc,0xfd,0x80,0xf8,0x50,0x60,0xe1,0x6f,
+  0xc3,0x73,0xb3,0x9d,0x7f,0x38,0xa0,0xb8,0xbf,0xf9,0x03,0xc2,0xc2,0xe1,0xb7,0x67,
+  0x97,0xcf,0xb9,0x46,0x9e,0x2f,0xfe,0xfa,0xef,0xd3,0x38,0xff,0x4f,0x07,0x14,0x67,
+  0xd7,0x1f,0x24,0x2c,0x9c,0xbe,0x35,0xbb,0x7e,0xce,0x35,0x55,0xf3,0x1b,0x5c,0x3e,
+  0x4c,0x36,0x6c,0xb9,0x36,0xb2,0x12,0xf9,0x30,0x79,0x60,0xcb,0x05,0x41,0x98,0x49,
+  0x81,0x9a,0xc5,0x5b,0xff,0x61,0xfd,0x26,0x24,0x34,0x7a,0x7b,0xaa,0x09,0xa9,0xc8,
+  0xfd,0x47,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0xfa,0xbf,0x4b,
+  0xf4,0x0e,0x4c,0xf5,0x0e,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
+  0x77,0x97,0xe8,0x1d,0x82,0xaa,0x77,0x50,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
+  0x52,0x52,0xba,0xbb,0x44,0xef,0x10,0x12,0xbd,0x03,0xfe,0x14,0x58,0xfb,0xdc,0x2e,
+  0xde,0xb9,0xe1,0xb5,0x5d,0x1e,0xfd,0xb5,0xb6,0x0b,0xb0,0x82,0x27,0xd3,0x10,0xb3,
+  0xbd,0x89,0xcf,0xe6,0xbf,0xf4,0x8e,0x55,0x53,0xf7,0x4d,0xd6,0x9b,0xf0,0xd0,0x39,
+  0x49,0xeb,0xe7,0xd0,0x69,0x7b,0x13,0x9f,0x25,0x46,0x4f,0xda,0xcb,0xae,0x9c,0x38,
+  0xe6,0x4d,0x78,0x30,0x27,0xcd,0x9b,0x3c,0x39,0x68,0x9b,0xb6,0x37,0xf1,0xa3,0x6b,
+  0xf6,0x1f,0xb1,0xeb,0x3f,0x7b,0x7e,0xab,0x37,0xe1,0x71,0xff,0x9d,0xf5,0x7b,0xb5,
+  0xff,0x91,0xd6,0x71,0x0b,0x9e,0x58,0x32,0xe1,0xdd,0xfe,0x2f,0xc0,0xfc,0xd9,0x0a,
+  0x5e,0xed,0x7f,0x6d,0xcb,0xd7,0x33,0xf0,0xd0,0x8e,0x2f,0x37,0x7a,0x13,0x1e,0xf7,
+  0xdf,0x59,0xbf,0x67,0xf9,0xff,0x58,0xdd,0x27,0xbc,0xe6,0x95,0xd1,0x7b,0x7d,0xe6,
+  0xff,0x7e,0x65,0x4e,0x76,0x62,0xfe,0x1c,0xf4,0x2e,0xff,0x75,0x6d,0x35,0x2c,0x0f,
+  0x3f,0xec,0x5d,0xfe,0x3b,0xeb,0xf7,0x6a,0xff,0xa3,0x8d,0xe9,0x1e,0x58,0x75,0xbb,
+  0xc5,0xab,0xfc,0x31,0xe7,0x6c,0xaa,0x9f,0xe6,0x8c,0xed,0x4d,0x7c,0x16,0x1a,0x7a,
+  0xd3,0x5e,0xfd,0xc5,0xa8,0x67,0xf5,0xdf,0x5d,0xff,0xdf,0xbf,0x99,0xe0,0xc1,0x88,
+  0x25,0x47,0xcf,0xd8,0xc9,0x25,0x23,0x9e,0xd5,0x9f,0xb9,0x19,0xaa,0x9f,0x33,0x5e,
+  0xed,0xff,0x82,0x0d,0xbf,0xde,0xb2,0x3b,0x7e,0x7a,0x66,0xd2,0x9b,0xf0,0xb8,0xff,
+  0xce,0xfa,0x3d,0xdb,0xff,0x0d,0xc7,0xdf,0xb7,0x1e,0x5f,0x72,0x3a,0x7c,0xef,0xa9,
+  0xf7,0x25,0x73,0x6e,0x92,0xea,0xa7,0x67,0xf9,0x1f,0x6c,0x38,0xf3,0xb2,0xd5,0xf2,
+  0xed,0xcf,0x69,0x6f,0xc2,0xe3,0xfe,0x3b,0xeb,0xf7,0x6c,0xff,0x97,0xef,0xf8,0x0a,
+  0x12,0x75,0xef,0x79,0x57,0x7f,0xe6,0xa8,0x7e,0x7a,0x97,0xff,0xcb,0x02,0x8d,0x7c,
+  0xc3,0xe9,0xe8,0x65,0x6f,0xc2,0xd3,0x97,0x9c,0x88,0xf5,0x7b,0xb3,0xff,0xa6,0xf8,
+  0x46,0x8a,0x1b,0x3f,0x98,0x60,0xd1,0x67,0x44,0xfc,0x26,0xf0,0x7f,0x7d,0x3f,0xc1,
+  0x7d,0x6c,0xc0,0x84,0x09,0x4d,0x8a,0xb9,0xfb,0xce,0x79,0x7f,0x01,0xf4,0xb7,0xc1,
+  0xde,0xf0,0x33,0x01,0x00,
index 64690ac1b0f1e60bb22fe03827f3520178728e5e..9c582b121c6e439da88f6c73a1c3e394a2f01299 100644 (file)
@@ -2,6 +2,9 @@
  * (C) Copyright 2001-2004
  * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
  *
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
 #include <asm/processor.h>
 #include <command.h>
 #include <malloc.h>
+#include <pci.h>
+#include <sm501.h>
+
+
+#ifdef CONFIG_VIDEO_SM501
+
+#define SWAP32(x)       ((((x) & 0x000000ff) << 24) | (((x) & 0x0000ff00) << 8)|\
+                         (((x) & 0x00ff0000) >>  8) | (((x) & 0xff000000) >> 24) )
+
+#ifdef CONFIG_VIDEO_SM501_8BPP
+#error CONFIG_VIDEO_SM501_8BPP not supported.
+#endif /* CONFIG_VIDEO_SM501_8BPP */
+
+#ifdef CONFIG_VIDEO_SM501_16BPP
+#define BPP    16
+
+/*
+ * 800x600 display B084SN03: PCLK = 40MHz
+ * => 2*PCLK = 80MHz
+ * 336/4 = 84MHz
+ * => PCLK = 84MHz
+ */
+static const SMI_REGS init_regs_800x600 [] =
+{
+#if 1 /* test-only */
+       {0x0005c, SWAP32(0xffffffff)}, /* set endianess to big endian */
+#else
+       {0x0005c, SWAP32(0x00000000)}, /* set endianess to little endian */
+#endif
+       {0x00004, SWAP32(0x00000000)},
+       /* clocks for pm1... */
+       {0x00048, SWAP32(0x00021807)},
+       {0x0004C, SWAP32(0x221a0a01)},
+       {0x00054, SWAP32(0x00000001)},
+       /* clocks for pm0... */
+       {0x00040, SWAP32(0x00021807)},
+       {0x00044, SWAP32(0x221a0a01)},
+       {0x00054, SWAP32(0x00000000)},
+       /* panel control regs... */
+       {0x80000, SWAP32(0x0f013105)}, /* panel display control: 16-bit RGB 5:6:5 mode */
+       {0x80004, SWAP32(0xc428bb17)}, /* panel panning control ??? */
+       {0x8000C, SWAP32(0x00000000)}, /* panel fb address */
+       {0x80010, SWAP32(0x06400640)}, /* panel fb offset/window width */
+       {0x80014, SWAP32(0x03200000)}, /* panel fb width (0x320=800) */
+       {0x80018, SWAP32(0x02580000)}, /* panel fb height (0x258=600) */
+       {0x8001C, SWAP32(0x00000000)}, /* panel plane tl location */
+       {0x80020, SWAP32(0x02580320)}, /* panel plane br location */
+       {0x80024, SWAP32(0x041f031f)}, /* panel horizontal total */
+       {0x80028, SWAP32(0x00800347)}, /* panel horizontal sync */
+       {0x8002C, SWAP32(0x02730257)}, /* panel vertical total */
+       {0x80030, SWAP32(0x00040258)}, /* panel vertical sync */
+       {0x80200, SWAP32(0x00010000)}, /* crt display control */
+       {0, 0}
+};
+
+/*
+ * 1024x768 display G150XG02: PCLK = 65MHz
+ * => 2*PCLK = 130MHz
+ * 288/2 = 144MHz
+ * => PCLK = 72MHz
+ */
+static const SMI_REGS init_regs_1024x768 [] =
+{
+       {0x00004, SWAP32(0x00000000)},
+       /* clocks for pm1... */
+       {0x00048, SWAP32(0x00021807)},
+       {0x0004C, SWAP32(0x011a0a01)},
+       {0x00054, SWAP32(0x00000001)},
+       /* clocks for pm0... */
+       {0x00040, SWAP32(0x00021807)},
+       {0x00044, SWAP32(0x011a0a01)},
+       {0x00054, SWAP32(0x00000000)},
+       /* panel control regs... */
+       {0x80000, SWAP32(0x0f013105)}, /* panel display control: 16-bit RGB 5:6:5 mode */
+       {0x80004, SWAP32(0xc428bb17)}, /* panel panning control ??? */
+       {0x8000C, SWAP32(0x00000000)}, /* panel fb address */
+       {0x80010, SWAP32(0x08000800)}, /* panel fb offset/window width */
+       {0x80014, SWAP32(0x04000000)}, /* panel fb width (0x400=1024) */
+       {0x80018, SWAP32(0x03000000)}, /* panel fb height (0x300=768) */
+       {0x8001C, SWAP32(0x00000000)}, /* panel plane tl location */
+       {0x80020, SWAP32(0x03000400)}, /* panel plane br location */
+       {0x80024, SWAP32(0x053f03ff)}, /* panel horizontal total */
+       {0x80028, SWAP32(0x0140040f)}, /* panel horizontal sync */
+       {0x8002C, SWAP32(0x032502ff)}, /* panel vertical total */
+       {0x80030, SWAP32(0x00260301)}, /* panel vertical sync */
+       {0x80200, SWAP32(0x00010000)}, /* crt display control */
+       {0, 0}
+};
 
-/* ------------------------------------------------------------------------- */
+#endif /* CONFIG_VIDEO_SM501_16BPP */
+
+#ifdef CONFIG_VIDEO_SM501_32BPP
+#define BPP    32
+
+/*
+ * 800x600 display B084SN03: PCLK = 40MHz
+ * => 2*PCLK = 80MHz
+ * 336/4 = 84MHz
+ * => PCLK = 84MHz
+ */
+static const SMI_REGS init_regs_800x600 [] =
+{
+#if 0 /* test-only */
+       {0x0005c, SWAP32(0xffffffff)}, /* set endianess to big endian */
+#else
+       {0x0005c, SWAP32(0x00000000)}, /* set endianess to little endian */
+#endif
+       {0x00004, SWAP32(0x00000000)},
+       /* clocks for pm1... */
+       {0x00048, SWAP32(0x00021807)},
+       {0x0004C, SWAP32(0x221a0a01)},
+       {0x00054, SWAP32(0x00000001)},
+       /* clocks for pm0... */
+       {0x00040, SWAP32(0x00021807)},
+       {0x00044, SWAP32(0x221a0a01)},
+       {0x00054, SWAP32(0x00000000)},
+       /* panel control regs... */
+       {0x80000, SWAP32(0x0f013106)}, /* panel display control: 32-bit RGB 8:8:8 mode */
+       {0x80004, SWAP32(0xc428bb17)}, /* panel panning control ??? */
+       {0x8000C, SWAP32(0x00000000)}, /* panel fb address */
+       {0x80010, SWAP32(0x0c800c80)}, /* panel fb offset/window width */
+       {0x80014, SWAP32(0x03200000)}, /* panel fb width (0x320=800) */
+       {0x80018, SWAP32(0x02580000)}, /* panel fb height (0x258=600) */
+       {0x8001C, SWAP32(0x00000000)}, /* panel plane tl location */
+       {0x80020, SWAP32(0x02580320)}, /* panel plane br location */
+       {0x80024, SWAP32(0x041f031f)}, /* panel horizontal total */
+       {0x80028, SWAP32(0x00800347)}, /* panel horizontal sync */
+       {0x8002C, SWAP32(0x02730257)}, /* panel vertical total */
+       {0x80030, SWAP32(0x00040258)}, /* panel vertical sync */
+       {0x80200, SWAP32(0x00010000)}, /* crt display control */
+       {0, 0}
+};
+
+/*
+ * 1024x768 display G150XG02: PCLK = 65MHz
+ * => 2*PCLK = 130MHz
+ * 288/2 = 144MHz
+ * => PCLK = 72MHz
+ */
+static const SMI_REGS init_regs_1024x768 [] =
+{
+       {0x00004, SWAP32(0x00000000)},
+       /* clocks for pm1... */
+       {0x00048, SWAP32(0x00021807)},
+       {0x0004C, SWAP32(0x011a0a01)},
+       {0x00054, SWAP32(0x00000001)},
+       /* clocks for pm0... */
+       {0x00040, SWAP32(0x00021807)},
+       {0x00044, SWAP32(0x011a0a01)},
+       {0x00054, SWAP32(0x00000000)},
+       /* panel control regs... */
+       {0x80000, SWAP32(0x0f013106)}, /* panel display control: 32-bit RGB 8:8:8 mode */
+       {0x80004, SWAP32(0xc428bb17)}, /* panel panning control ??? */
+       {0x8000C, SWAP32(0x00000000)}, /* panel fb address */
+       {0x80010, SWAP32(0x10001000)}, /* panel fb offset/window width */
+       {0x80014, SWAP32(0x04000000)}, /* panel fb width (0x400=1024) */
+       {0x80018, SWAP32(0x03000000)}, /* panel fb height (0x300=768) */
+       {0x8001C, SWAP32(0x00000000)}, /* panel plane tl location */
+       {0x80020, SWAP32(0x03000400)}, /* panel plane br location */
+       {0x80024, SWAP32(0x053f03ff)}, /* panel horizontal total */
+       {0x80028, SWAP32(0x0140040f)}, /* panel horizontal sync */
+       {0x8002C, SWAP32(0x032502ff)}, /* panel vertical total */
+       {0x80030, SWAP32(0x00260301)}, /* panel vertical sync */
+       {0x80200, SWAP32(0x00010000)}, /* crt display control */
+       {0, 0}
+};
+
+#endif /* CONFIG_VIDEO_SM501_32BPP */
+
+#endif /* CONFIG_VIDEO_SM501 */
 
 #if 0
 #define FPGA_DEBUG
@@ -92,7 +263,7 @@ unsigned char logo_bmp_1024[] =
 au_image_t au_image[] = {
        {"hh405/preinst.img", 0, -1, AU_SCRIPT},
        {"hh405/u-boot.img", 0xfff80000, 0x00080000, AU_FIRMWARE},
-       {"hh405/pImage_$(bd_type)", 0x00000000, 0x00100000, AU_NAND},
+       {"hh405/pImage_${bd_type}", 0x00000000, 0x00100000, AU_NAND},
        {"hh405/pImage.initrd", 0x00100000, 0x00200000, AU_NAND},
        {"hh405/yaffsmt2.img", 0x00300000, 0x01c00000, AU_NAND},
        {"hh405/postinst.img", 0, 0, AU_SCRIPT},
@@ -134,14 +305,15 @@ int board_revision(void)
 
        if (value & 0x80000000) {
                /* Revision 1.0 or 1.1 detected */
-               return 1;
+               return 0x0101;
        } else {
                if (value & 0x00400000) {
-                       /* Revision 1.3 detected */
-                       return 3;
+                       /* unused */
+                       return 0x0103;
                } else {
-                       /* Revision 1.2 detected */
-                       return 2;
+                       /* Revision >= 2.0 detected */
+                       /* rev. 2.x uses four SM501 GPIOs for revision coding */
+                       return 0x0200;
                }
        }
 }
@@ -261,10 +433,15 @@ int misc_init_r (void)
         * Write Board revision into FPGA
         */
        *fpga_ctrl |= gd->board_type & 0x0003;
-       if (gd->board_type >= 2) {
+       if (gd->board_type >= 0x0200) {
                *fpga_ctrl |= CFG_FPGA_CTRL_CF_BUS_EN;
        }
 
+       /*
+        * Setup and enable EEPROM write protection
+        */
+       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_EEPROM_WP);
+
        /*
         * Set NAND-FLASH GPIO signals to default
         */
@@ -301,6 +478,7 @@ int misc_init_r (void)
        /*
         * Init lcd interface and display logo
         */
+
        str = getenv("bd_type");
        if (strcmp(str, "ppc230") == 0) {
                /*
@@ -375,9 +553,29 @@ int misc_init_r (void)
                         regs_13704_320_240_4bpp,
                         sizeof(regs_13704_320_240_4bpp)/sizeof(regs_13704_320_240_4bpp[0]),
                         logo_bmp_320, sizeof(logo_bmp_320));
+#ifdef CONFIG_VIDEO_SM501
        } else {
-               printf("Unsupported bd_type defined (%s) -> No display configured!\n", str);
-               return 0;
+               pci_dev_t devbusfn;
+
+               /*
+                * Is SM501 connected (ppc221/ppc231)?
+                */
+               devbusfn = pci_find_device(PCI_VENDOR_SM, PCI_DEVICE_SM501, 0);
+               if (devbusfn != -1) {
+                       puts("VGA:   SM501 with 8 MB ");
+                       if (strcmp(str, "ppc221") == 0) {
+                               printf("(800*600, %dbpp)\n", BPP);
+                       } else if (strcmp(str, "ppc231") == 0) {
+                               printf("(1024*768, %dbpp)\n", BPP);
+                       } else {
+                               printf("Unsupported bd_type defined (%s) -> No display configured!\n", str);
+                               return 0;
+                       }
+               } else {
+                       printf("Unsupported bd_type defined (%s) -> No display configured!\n", str);
+                       return 0;
+               }
+#endif /* CONFIG_VIDEO_SM501 */
        }
 
        return (0);
@@ -392,7 +590,7 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
@@ -410,7 +608,9 @@ int checkboard (void)
        }
 
        gd->board_type = board_revision();
-       printf(", Rev 1.%ld)\n", gd->board_type);
+       printf(", Rev %ld.%ld)\n",
+              (gd->board_type >> 8) & 0xff,
+              gd->board_type & 0xff);
 
        /*
         * Disable sleep mode in LXT971
@@ -420,7 +620,6 @@ int checkboard (void)
        return 0;
 }
 
-/* ------------------------------------------------------------------------- */
 
 long int initdram (int board_type)
 {
@@ -437,7 +636,6 @@ long int initdram (int board_type)
        return (4*1024*1024 << ((val & 0x000e0000) >> 17));
 }
 
-/* ------------------------------------------------------------------------- */
 
 int testdram (void)
 {
@@ -447,7 +645,6 @@ int testdram (void)
        return (0);
 }
 
-/* ------------------------------------------------------------------------- */
 
 #ifdef CONFIG_IDE_RESET
 void ide_set_reset(int on)
@@ -479,3 +676,202 @@ void nand_init(void)
        }
 }
 #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 GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO_SINT2. */
+                       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_EEPROM_WP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in32(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) */
+
+
+#ifdef CONFIG_VIDEO_SM501
+#ifdef CONFIG_CONSOLE_EXTRA_INFO
+/*
+ * Return text to be printed besides the logo.
+ */
+void video_get_info_str (int line_number, char *info)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       char str[64];
+       char str2[64];
+       int i = getenv_r("serial#", str2, sizeof(str));
+
+       if (line_number == 1) {
+               sprintf(str, " Board: ");
+
+               if (i == -1) {
+                       strcat(str, "### No HW ID - assuming HH405");
+               } else {
+                       strcat(str, str2);
+               }
+
+               if (getenv_r("bd_type", str2, sizeof(str2)) != -1) {
+                       strcat(str, " (");
+                       strcat(str, str2);
+               } else {
+                       strcat(str, " (Missing bd_type!");
+               }
+
+               sprintf(str2, ", Rev %ld.%ld)",
+                      (gd->board_type >> 8) & 0xff, gd->board_type & 0xff);
+               strcat(str, str2);
+               strcpy(info, str);
+       } else {
+               info [0] = '\0';
+       }
+}
+#endif /* CONFIG_CONSOLE_EXTRA_INFO */
+
+/*
+ * Returns SM501 register base address. First thing called in the driver.
+ */
+unsigned int board_video_init (void)
+{
+       pci_dev_t devbusfn;
+       u32 addr;
+
+       /*
+        * Is SM501 connected (ppc221/ppc231)?
+        */
+       devbusfn = pci_find_device(PCI_VENDOR_SM, PCI_DEVICE_SM501, 0);
+       if (devbusfn != -1) {
+               pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_1, (u32 *)&addr);
+               return (addr & 0xfffffffe);
+       }
+
+       return 0;
+}
+
+/*
+ * Returns SM501 framebuffer address
+ */
+unsigned int board_video_get_fb (void)
+{
+       pci_dev_t devbusfn;
+       u32 addr;
+
+       /*
+        * Is SM501 connected (ppc221/ppc231)?
+        */
+       devbusfn = pci_find_device(PCI_VENDOR_SM, PCI_DEVICE_SM501, 0);
+       if (devbusfn != -1) {
+               pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_0, (u32 *)&addr);
+               return (addr & 0xfffffffe);
+       }
+
+       return 0;
+}
+
+/*
+ * Called after initializing the SM501 and before clearing the screen.
+ */
+void board_validate_screen (unsigned int base)
+{
+}
+
+/*
+ * Return a pointer to the initialization sequence.
+ */
+const SMI_REGS *board_get_regs (void)
+{
+       char *str;
+
+       str = getenv("bd_type");
+       if (strcmp(str, "ppc221") == 0) {
+               return init_regs_800x600;
+       } else {
+               return init_regs_1024x768;
+       }
+}
+
+int board_get_width (void)
+{
+       char *str;
+
+       str = getenv("bd_type");
+       if (strcmp(str, "ppc221") == 0) {
+               return 800;
+       } else {
+               return 1024;
+       }
+}
+
+int board_get_height (void)
+{
+       char *str;
+
+       str = getenv("bd_type");
+       if (strcmp(str, "ppc221") == 0) {
+               return 600;
+       } else {
+               return 768;
+       }
+}
+
+#endif /* CONFIG_VIDEO_SM501 */
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index bbd8555ead441f6e5d8e9ea5c81deca2dc16aa3c..e77dba8a869c1ac9d4961fcafec20fe8f6c1e696 100644 (file)
@@ -210,7 +210,7 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index ba555501ed4c02ad465130cd0a47e7e6aea0228d..98338e9351575749055ebe1e90e80ea27261dd13 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index 881d1799f09fdde651922fdeffb8f8bbda9ddfe0..ffbb4adddcd5e9ae4a1daa0d5f90a19748dffd6d 100644 (file)
 #include <common.h>
 #include <command.h>
 #include <pci.h>
+#include <pci_ids.h>
 #include <405gp_pci.h>
 
 
 #if (CONFIG_COMMANDS & CFG_CMD_BSP)
 
-#define IBM_VENDOR_ID    0x1014
-#define PPC405_DEVICE_ID 0x0156
-
-
 /*
  * Set device number on pci board
  */
@@ -43,7 +40,7 @@ int do_setdevice(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        u32 addr;
 
        while (bdf >= 0) {
-               if ((bdf = pci_find_device(IBM_VENDOR_ID, PPC405_DEVICE_ID, idx++)) < 0) {
+               if ((bdf = pci_find_device(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_405GP, idx++)) < 0) {
                        break;
                }
                printf("Found device nr %d at %x!\n", idx-1, bdf);
index ac032ef0ad2125fb670c96637f1b018fd366ee85..261b8a54d022bbe55c0c108b7683d124d96b114c 100644 (file)
@@ -74,7 +74,7 @@ int misc_init_f (void)
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index 251a4cce9a5c1d3b2bb31493c462c0755a05bc53..476b4a055026d3f080603c73d6610437c818e985 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index e1ca5839692e3f6c4fd087f60008b4f308c31a7a..0315c3d97bac2a6e0c2932168d4247a70afb8552 100644 (file)
@@ -91,7 +91,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        pci_read_config_dword(PCIDEVID_405GP, i, ptr++);
                }
                ptr = (unsigned int *)PCI_REGS_ADDR;
-               *ptr = crc32(0, (char *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4);
+               *ptr = crc32(0, (uchar *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4);
 
                printf("\nStoring PCI Configuration Regs...\n");
        } else {
@@ -874,7 +874,7 @@ int do_savepci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                pci_read_config_dword(PCIDEVID_405GP, i, ptr++);
        }
        ptr = (unsigned int *)PCI_REGS_ADDR;
-       *ptr = crc32(0, (char *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4);
+       *ptr = crc32(0, (uchar *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4);
 
        printf("\nStoring PCI Configuration Regs...\n");
 
@@ -896,7 +896,7 @@ int do_restorepci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
         * Rewrite pci config regs (only after soft-reset with magic set)
         */
        ptr = (unsigned int *)PCI_REGS_ADDR;
-       if (crc32(0, (char *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4) == *ptr) {
+       if (crc32(0, (uchar *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4) == *ptr) {
                puts("Restoring PCI Configurations Regs!\n");
                ptr = (unsigned int *)PCI_REGS_ADDR + 1;
                for (i=0; i<0x40; i+=4) {
index d1b680768cbaecd19599429f6ca89f4e6c868303..4be4d7e7d9eb352b97ea4e0a05fe37cbee7546c7 100644 (file)
@@ -275,7 +275,7 @@ int misc_init_r (void)
                 * Rewrite pci config regs (only after soft-reset with magic set)
                 */
                ptr = (unsigned int *)PCI_REGS_ADDR;
-               if (crc32(0, (char *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4) == *ptr) {
+               if (crc32(0, (uchar *)PCI_REGS_ADDR+4, PCI_REGS_LEN-4) == *ptr) {
                        puts("Restoring PCI Configurations Regs!\n");
                        ptr = (unsigned int *)PCI_REGS_ADDR + 1;
                        for (i=0; i<0x40; i+=4) {
@@ -322,7 +322,7 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
diff --git a/board/esd/pf5200/Makefile b/board/esd/pf5200/Makefile
new file mode 100644 (file)
index 0000000..603bbe2
--- /dev/null
@@ -0,0 +1,53 @@
+
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+# Objects for Xilinx JTAG programming (CPLD)
+# CPLD  = ../common/xilinx_jtag/lenval.o \
+#        ../common/xilinx_jtag/micro.o \
+#        ../common/xilinx_jtag/ports.o
+
+# OBJS = $(BOARD).o flash.o $(CPLD)
+OBJS   = $(BOARD).o flash.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/esd/pf5200/config.mk b/board/esd/pf5200/config.mk
new file mode 100644 (file)
index 0000000..07b5de1
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# IceCube board:
+#
+#      Valid values for TEXT_BASE are:
+#
+#      0xFFF00000   boot high (standard configuration)
+#      0xFF000000   boot low for 16 MiB boards
+#      0xFF800000   boot low for  8 MiB boards
+#      0x00100000   boot from RAM (for testing only)
+#
+
+sinclude $(TOPDIR)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+## Standard: boot high
+TEXT_BASE = 0xFFF00000
+## For testing: boot from RAM
+# TEXT_BASE = 0x00100000
+endif
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board
diff --git a/board/esd/pf5200/flash.c b/board/esd/pf5200/flash.c
new file mode 100644 (file)
index 0000000..53afbc0
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips */
+
+typedef unsigned short FLASH_PORT_WIDTH;
+typedef volatile unsigned short FLASH_PORT_WIDTHV;
+
+#define FLASH_ID_MASK           0x00FF
+
+#define FPW                     FLASH_PORT_WIDTH
+#define FPWV                    FLASH_PORT_WIDTHV
+
+#define FLASH_CYCLE1            0x0555
+#define FLASH_CYCLE2            0x0aaa
+#define FLASH_ID1               0x00
+#define FLASH_ID2               0x01
+#define FLASH_ID3               0x0E
+#define FLASH_ID4               0x0F
+
+/*-----------------------------------------------------------------------
+ * 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;
+       int i = 0;
+       extern void flash_preinit(void);
+       extern void flash_afterinit(uint, ulong, ulong);
+
+       ulong flashbase = CFG_FLASH_BASE;
+
+       flash_preinit();
+
+       /* There is only ONE FLASH device */
+       memset(&flash_info[i], 0, sizeof(flash_info_t));
+       flash_info[i].size = flash_get_size((FPW *) flashbase, &flash_info[i]);
+       size += flash_info[i].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
+
+       flash_afterinit(i, flash_info[i].start[0], flash_info[i].size);
+       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;
+       char *fmt;
+
+       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;
+       default:
+               printf("Unknown Vendor ");
+               break;
+       }
+
+       switch (info->flash_id & FLASH_TYPEMASK) {
+       case FLASH_AMLV256U:
+               fmt = "29LV256M (256 Mbit)\n";
+               break;
+       default:
+               fmt = "Unknown Chip Type\n";
+               break;
+       }
+
+       printf(fmt);
+       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) {
+               ulong size;
+               int erased;
+               ulong *flash = (unsigned long *)info->start[i];
+
+               if ((i % 5) == 0) {
+                       printf("\n   ");
+               }
+
+               /*
+                * Check if whole sector is erased
+                */
+               size =
+                   (i !=
+                    (info->sector_count - 1)) ? (info->start[i + 1] -
+                                                 info->start[i]) >> 2 : (info->
+                                                                         start
+                                                                         [0] +
+                                                                         info->
+                                                                         size -
+                                                                         info->
+                                                                         start
+                                                                         [i])
+                   >> 2;
+
+               for (flash = (unsigned long *)info->start[i], erased = 1;
+                    (flash != (unsigned long *)info->start[i] + size)
+                    && erased; flash++) {
+                       erased = *flash == ~0x0UL;
+               }
+               printf(" %08lX %s %s", info->start[i], erased ? "E" : " ",
+                      info->protect[i] ? "(RO)" : "    ");
+       }
+
+       printf("\n");
+}
+
+/*-----------------------------------------------------------------------
+ */
+
+/*
+ * The following code cannot be run from FLASH!
+ */
+
+ulong flash_get_size(FPWV * addr, flash_info_t * info) {
+       int i;
+
+       /* 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[FLASH_ID1] & 0x00ff) {
+       case (uchar) AMD_MANUFACT:
+               info->flash_id = FLASH_MAN_AMD;
+               break;
+       default:
+               printf("unknown vendor=%x ", addr[FLASH_ID1] & 0xff);
+               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[FLASH_ID2]) {
+               case (FPW) AMD_ID_MIRROR:
+                       /* MIRROR BIT FLASH, read more ID bytes */
+                       if ((FPW) addr[FLASH_ID3] == (FPW) AMD_ID_LV256U_2
+                           && (FPW) addr[FLASH_ID4] == (FPW) AMD_ID_LV256U_3) {
+                               /* attention: only the first 16 MB will be used in u-boot */
+                               info->flash_id += FLASH_AMLV256U;
+                               info->sector_count = 512;
+                               info->size = 0x02000000;
+                               for (i = 0; i < info->sector_count; i++) {
+                                       info->start[i] =
+                                           (ulong) addr + 0x10000 * i;
+                               }
+                               break;
+                       }
+                       /* fall thru to here ! */
+               default:
+                       printf("unknown AMD device=%x %x %x",
+                              (FPW) addr[FLASH_ID2], (FPW) addr[FLASH_ID3],
+                              (FPW) addr[FLASH_ID4]);
+                       info->flash_id = FLASH_UNKNOWN;
+                       info->sector_count = 0;
+                       info->size = 0x800000;
+                       break;
+               }
+
+               /* 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;
+       int flag, prot, sect;
+       int intel = (info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL;
+       ulong start, now, last;
+       int rcode = 0;
+
+       if ((s_first < 0) || (s_first > s_last)) {
+               if (info->flash_id == FLASH_UNKNOWN) {
+                       printf("- missing\n");
+               } else {
+                       printf("- no sectors to erase\n");
+               }
+               return 1;
+       }
+
+       switch (info->flash_id & FLASH_TYPEMASK) {
+       case FLASH_AMLV256U:
+               break;
+       case FLASH_UNKNOWN:
+       default:
+               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");
+       }
+
+       last = get_timer(0);
+
+       /* Start erase on unprotected sectors */
+       for (sect = s_first; sect <= s_last && rcode == 0; sect++) {
+               if (info->protect[sect] != 0) { /* protected, skip it */
+                       continue;
+               }
+               /* Disable interrupts which might cause a timeout here */
+               flag = disable_interrupts();
+
+               addr = (FPWV *) (info->start[sect]);
+               if (intel) {
+                       *addr = (FPW) 0x00500050;       /* clear status register */
+                       *addr = (FPW) 0x00200020;       /* erase setup */
+                       *addr = (FPW) 0x00D000D0;       /* erase confirm */
+               } else {
+                       /* must be AMD style if not Intel */
+                       FPWV *base;     /* first address in bank */
+
+                       base = (FPWV *) (info->start[0]);
+                       base[FLASH_CYCLE1] = (FPW) 0x00AA00AA;  /* unlock */
+                       base[FLASH_CYCLE2] = (FPW) 0x00550055;  /* unlock */
+                       base[FLASH_CYCLE1] = (FPW) 0x00800080;  /* erase mode */
+                       base[FLASH_CYCLE1] = (FPW) 0x00AA00AA;  /* unlock */
+                       base[FLASH_CYCLE2] = (FPW) 0x00550055;  /* unlock */
+                       *addr = (FPW) 0x00300030;       /* erase sector */
+               }
+
+               /* re-enable interrupts if necessary */
+               if (flag) {
+                       enable_interrupts();
+               }
+               start = get_timer(0);
+
+               /* wait at least 50us for AMD, 80us for Intel. */
+               /* Let's wait 1 ms.                            */
+               udelay(1000);
+
+               while ((*addr & (FPW) 0x00800080) != (FPW) 0x00800080) {
+                       if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+                               printf("Timeout\n");
+                               if (intel) {
+                                       /* suspend erase        */
+                                       *addr = (FPW) 0x00B000B0;
+                               }
+                               flash_reset(info);      /* reset to read mode */
+                               rcode = 1;      /* failed */
+                               break;
+                       }
+                       /* show that we're waiting */
+                       if ((get_timer(last)) > CFG_HZ) {
+                               /* every second */
+                               putc('.');
+                               last = get_timer(0);
+                       }
+               }
+               /* show that we're waiting */
+               if ((get_timer(last)) > CFG_HZ) {
+                       /* every second */
+                       putc('.');
+                       last = get_timer(0);
+               }
+               flash_reset(info);      /* reset to read mode */
+       }
+       printf(" done\n");
+       return (rcode);
+}
+
+/*-----------------------------------------------------------------------
+ * 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)
+{
+       FPW data = 0;           /* 16 or 32 bit word, matches flash bus width on MPC8XX */
+       int bytes;              /* number of bytes to program in current word         */
+       int left;               /* number of bytes left to program                    */
+       int i, res;
+
+       for (left = cnt, res = 0;
+            left > 0 && res == 0;
+            addr += sizeof(data), left -= sizeof(data) - bytes) {
+
+               bytes = addr & (sizeof(data) - 1);
+               addr &= ~(sizeof(data) - 1);
+
+               /* combine source and destination data so can program
+                * an entire word of 16 or 32 bits
+                */
+               for (i = 0; i < sizeof(data); i++) {
+                       data <<= 8;
+                       if (i < bytes || i - bytes >= left)
+                               data += *((uchar *) addr + i);
+                       else
+                               data += *src++;
+               }
+
+               /* write one word to the flash */
+               switch (info->flash_id & FLASH_VENDMASK) {
+               case FLASH_MAN_AMD:
+                       res = write_word_amd(info, (FPWV *) addr, data);
+                       break;
+               default:
+                       /* unknown flash type, error! */
+                       printf("missing or unknown FLASH type\n");
+                       res = 1;        /* not really a timeout, but gives error */
+                       break;
+               }
+       }
+       return (res);
+}
+
+/*-----------------------------------------------------------------------
+ * 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;
+       int res = 0;            /* result, assume success       */
+       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 (res == 0
+              && (*dest & (FPW) 0x00800080) != (data & (FPW) 0x00800080)) {
+               if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
+                       *dest = (FPW) 0x00F000F0;       /* reset bank */
+                       res = 1;
+               }
+       }
+       return (res);
+}
diff --git a/board/esd/pf5200/mt46v16m16-75.h b/board/esd/pf5200/mt46v16m16-75.h
new file mode 100644 (file)
index 0000000..22d0a55
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * (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      1       /* is DDR */
+
+#if defined(CONFIG_MPC5200)
+/* Settings for XLB = 132 MHz */
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x705f0f00
+#define SDRAM_CONFIG1  0x73722930
+#define SDRAM_CONFIG2  0x47770000
+#define SDRAM_TAPDELAY 0x10000000
+
+#else
+#error CONFIG_MPC5200 not defined
+#endif
diff --git a/board/esd/pf5200/pf5200.c b/board/esd/pf5200/pf5200.c
new file mode 100644 (file)
index 0000000..2b47012
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (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
+ */
+
+/*
+ * pf5200.c - main board support/init for the esd pf5200.
+ */
+
+#include <common.h>
+#include <mpc5xxx.h>
+#include <pci.h>
+#include <command.h>
+
+#include "mt46v16m16-75.h"
+
+void init_power_switch(void);
+
+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");
+
+       /* 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");
+
+       /* 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");
+}
+
+/*
+ * 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 test1, test2;
+
+       /* setup SDRAM chip selects */
+       *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0x0000001e; /* 2G at 0x0 */
+       *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x80000000; /* disabled */
+       __asm__ volatile ("sync");
+
+       /* setup config registers */
+       *(vu_long *) MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
+       *(vu_long *) MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
+       __asm__ volatile ("sync");
+
+       /* set tap delay */
+       *(vu_long *) MPC5XXX_CDM_PORCFG = SDRAM_TAPDELAY;
+       __asm__ volatile ("sync");
+
+       /* find RAM size using SDRAM CS0 only */
+       sdram_start(0);
+       test1 = get_ram_size((long *) CFG_SDRAM_BASE, 0x80000000);
+       sdram_start(1);
+       test2 = get_ram_size((long *) CFG_SDRAM_BASE, 0x80000000);
+
+       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;
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize + 0x0000001e;      /* 2G */
+       } else {
+#if 0
+               *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0;  /* disabled */
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize + 0x0000001e;      /* 2G */
+#else
+               *(vu_long *) MPC5XXX_SDRAM_CS0CFG =
+                   0x13 + __builtin_ffs(0x08000000 >> 20) - 1;
+               /* let SDRAM CS1 start right after CS0 */
+               *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x08000000 + 0x0000001e;    /* 2G */
+#endif
+       }
+
+#if 0
+       /* find RAM size using SDRAM CS1 only */
+       sdram_start(0);
+       get_ram_size((ulong *) (CFG_SDRAM_BASE + dramsize), 0x80000000);
+       sdram_start(1);
+       get_ram_size((ulong *) (CFG_SDRAM_BASE + dramsize), 0x80000000);
+       sdram_start(0);
+#endif
+       /* set SDRAM CS1 size according to the amount of RAM found */
+
+       *(vu_long *) MPC5XXX_SDRAM_CS1CFG = dramsize;   /* disabled */
+
+       init_power_switch();
+       return (dramsize);
+}
+
+int checkboard(void)
+{
+       puts("Board: esd ParaFinder (pf5200)\n");
+       return 0;
+}
+
+void flash_preinit(void)
+{
+       /*
+        * Now, when we are in RAM, enable flash write
+        * access for detection process.
+        * Note that CS_BOOT cannot be cleared when
+        * executing in flash.
+        */
+       *(vu_long *) MPC5XXX_BOOTCS_CFG &= ~0x1;        /* clear RO */
+}
+
+void flash_afterinit(ulong size)
+{
+       if (size == 0x02000000) {
+               /* adjust mapping */
+               *(vu_long *) MPC5XXX_BOOTCS_START =
+                   *(vu_long *) MPC5XXX_CS0_START =
+                   START_REG(CFG_BOOTCS_START | size);
+               *(vu_long *) MPC5XXX_BOOTCS_STOP =
+                   *(vu_long *) MPC5XXX_CS0_STOP =
+                   STOP_REG(CFG_BOOTCS_START | size, size);
+       }
+}
+
+#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 (CFG_CMD_IDE) && defined (CONFIG_IDE_RESET)
+
+#define GPIO_PSC1_4    0x01000000UL
+
+void init_ide_reset(void)
+{
+       debug("init_ide_reset\n");
+
+       /* Configure PSC1_4 as GPIO output for ATA reset */
+       *(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_PSC1_4;
+       *(vu_long *) MPC5XXX_WU_GPIO_DIR |= GPIO_PSC1_4;
+}
+
+void ide_set_reset(int idereset)
+{
+       debug("ide_reset(%d)\n", idereset);
+
+       if (idereset) {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA &= ~GPIO_PSC1_4;
+       } else {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA |= GPIO_PSC1_4;
+       }
+}
+#endif                         /* defined (CFG_CMD_IDE) && defined (CONFIG_IDE_RESET) */
+
+#define MPC5XXX_SIMPLEIO_GPIO_ENABLE       (MPC5XXX_GPIO + 0x0004)
+#define MPC5XXX_SIMPLEIO_GPIO_DIR          (MPC5XXX_GPIO + 0x000C)
+#define MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT  (MPC5XXX_GPIO + 0x0010)
+#define MPC5XXX_SIMPLEIO_GPIO_DATA_INPUT   (MPC5XXX_GPIO + 0x0014)
+
+#define MPC5XXX_INTERRUPT_GPIO_ENABLE      (MPC5XXX_GPIO + 0x0020)
+#define MPC5XXX_INTERRUPT_GPIO_DIR         (MPC5XXX_GPIO + 0x0028)
+#define MPC5XXX_INTERRUPT_GPIO_DATA_OUTPUT (MPC5XXX_GPIO + 0x002C)
+#define MPC5XXX_INTERRUPT_GPIO_STATUS      (MPC5XXX_GPIO + 0x003C)
+
+#define GPIO_WU6       0x40000000UL
+#define GPIO_USB0       0x00010000UL
+#define GPIO_USB9       0x08000000UL
+#define GPIO_USB9S      0x00080000UL
+
+void init_power_switch(void)
+{
+       debug("init_power_switch\n");
+
+       /* Configure GPIO_WU6 as GPIO output for ATA reset */
+       *(vu_long *) MPC5XXX_WU_GPIO_DATA |= GPIO_WU6;
+       *(vu_long *) MPC5XXX_WU_GPIO_ENABLE |= GPIO_WU6;
+       *(vu_long *) MPC5XXX_WU_GPIO_DIR |= GPIO_WU6;
+       __asm__ volatile ("sync");
+
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT &= ~GPIO_USB0;
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_ENABLE |= GPIO_USB0;
+       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DIR |= GPIO_USB0;
+       __asm__ volatile ("sync");
+
+       *(vu_long *) MPC5XXX_INTERRUPT_GPIO_DATA_OUTPUT &= ~GPIO_USB9;
+       *(vu_long *) MPC5XXX_INTERRUPT_GPIO_ENABLE &= ~GPIO_USB9;
+       __asm__ volatile ("sync");
+
+       if ((*(vu_long *) MPC5XXX_INTERRUPT_GPIO_STATUS & GPIO_USB9S) == 0) {
+               *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT |= GPIO_USB0;
+               __asm__ volatile ("sync");
+       }
+       *(vu_char *) CFG_CS1_START = 0x02;      /* Red Power LED on */
+       __asm__ volatile ("sync");
+
+       *(vu_char *) (CFG_CS1_START + 1) = 0x02;        /* Disable driver for KB11 */
+       __asm__ volatile ("sync");
+}
+
+void power_set_reset(int power)
+{
+       debug("ide_set_reset(%d)\n", power);
+
+       if (power) {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA &= ~GPIO_WU6;
+               *(vu_long *) MPC5XXX_INTERRUPT_GPIO_DATA_OUTPUT &= ~GPIO_USB9;
+       } else {
+               *(vu_long *) MPC5XXX_WU_GPIO_DATA |= GPIO_WU6;
+               if ((*(vu_long *) MPC5XXX_INTERRUPT_GPIO_STATUS & GPIO_USB9S) ==
+                   0) {
+                       *(vu_long *) MPC5XXX_SIMPLEIO_GPIO_DATA_OUTPUT |=
+                           GPIO_USB0;
+               }
+
+       }
+}
+
+int do_poweroff(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       power_set_reset(1);
+       return (0);
+}
+
+U_BOOT_CMD(poweroff, 1, 1, do_poweroff, "poweroff- Switch off power\n", NULL);
+
+int phypower(int flag)
+{
+       u32 addr;
+       vu_long *reg;
+       int status;
+       pci_dev_t dev;
+
+       dev = PCI_BDF(0, 0x18, 0);
+       status = pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &addr);
+       if (status == 0) {
+               reg = (vu_long *) (addr + 0x00000040);
+               *reg |= 0x40000000;
+               __asm__ volatile ("sync");
+
+               reg = (vu_long *) (addr + 0x001000c);
+               *reg |= 0x20000000;
+               __asm__ volatile ("sync");
+
+               reg = (vu_long *) (addr + 0x0010004);
+               if (flag != 0) {
+                       *reg &= ~0x20000000;
+               } else {
+                       *reg |= 0x20000000;
+               }
+               __asm__ volatile ("sync");
+       }
+       return (status);
+}
+
+int do_phypower(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       int status;
+
+       if (argv[1][0] == '0') {
+               status = phypower(0);
+       } else {
+               status = phypower(1);
+       }
+       return (0);
+}
+
+U_BOOT_CMD(phypower, 2, 2, do_phypower,
+          "phypower- Switch power of ethernet phy\n", NULL);
+
+int do_writepci(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int addr;
+       unsigned int size;
+       int i;
+       volatile unsigned long *ptr;
+
+       addr = simple_strtol(argv[1], NULL, 16);
+       size = simple_strtol(argv[2], NULL, 16);
+
+       printf("\nWriting at addr %08x, size %08x.\n", addr, size);
+
+       while (1) {
+               ptr = (volatile unsigned long *)addr;
+               for (i = 0; i < (size >> 2); i++) {
+                       *ptr++ = i;
+               }
+
+               /* Abort if ctrl-c was pressed */
+               if (ctrlc()) {
+                       puts("\nAbort\n");
+                       return 0;
+               }
+               putc('.');
+       }
+       return 0;
+}
+
+U_BOOT_CMD(writepci, 3, 1, do_writepci,
+          "writepci- Write some data to pcibus\n",
+          "<addr> <size>\n" "        - Write some data to pcibus.\n");
diff --git a/board/esd/pf5200/u-boot.lds b/board/esd/pf5200/u-boot.lds
new file mode 100644 (file)
index 0000000..f23432e
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+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)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x0FFF) & 0xFFFFF000;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(4096);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(4096);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index e3eff31fb7087b8a977add9b236e9367513028d7..5b9d0631f8e782140e4fd0a9e5f0c5d68f0a0cb5 100644 (file)
@@ -54,7 +54,7 @@ const unsigned char fpgadata[] =
 au_image_t au_image[] = {
        {"plu405/preinst.img", 0, -1, AU_SCRIPT},
        {"plu405/u-boot.img", 0xfffc0000, 0x00040000, AU_FIRMWARE},
-       {"plu405/pImage_$(bd_type)", 0x00000000, 0x00100000, AU_NAND},
+       {"plu405/pImage_${bd_type}", 0x00000000, 0x00100000, AU_NAND},
        {"plu405/pImage.initrd", 0x00100000, 0x00200000, AU_NAND},
        {"plu405/yaffsmt2.img", 0x00300000, 0x01c00000, AU_NAND},
        {"plu405/postinst.img", 0, 0, AU_SCRIPT},
@@ -203,7 +203,7 @@ int misc_init_r (void)
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..43f776579ef780a00497dc67bc4f6b9759373bc8 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +120,13 @@ SECTIONS
   _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 = .;
index 2c410a17ffa8f2d3610a2b2a1e5c77cf21f7fb79..741e4aacdcd4ede64069113dce79a5b480649118 100644 (file)
@@ -30,7 +30,7 @@ CPLD    = ../common/xilinx_jtag/lenval.o \
          ../common/xilinx_jtag/micro.o \
          ../common/xilinx_jtag/ports.o
 
-OBJS   = $(BOARD).o strataflash.o ../common/misc.o $(CPLD)
+OBJS   = $(BOARD).o ../common/misc.o ../common/cmd_loadpci.o $(CPLD)
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS)
index a72547d5ceff4dcbe561a56563a1183190979a91..f9e4d4377c6cc3e320903a9f2e1dc978666437f5 100644 (file)
@@ -1,6 +1,9 @@
 /*
  * (C) Copyright 2001-2003
- * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2005
+ * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -66,16 +69,27 @@ int board_early_init_f (void)
        mtebc (epcr, 0xa8400000);
 
        /*
-        * Setup GPIO pins (CS6+CS7 as GPIO)
+        * Setup GPIO pins
         */
-       mtdcr(cntrl0, mfdcr(cntrl0) | 0x00300000);
 
-       /*
-        * Configure GPIO pins
+       mtdcr(cntrl0, mfdcr(cntrl0) | ((CFG_FPGA_INIT | \
+                                       CFG_FPGA_DONE | \
+                                       CFG_XEREADY | \
+                                       CFG_NONMONARCH | \
+                                       CFG_REV1_2) << 5));
+
+       if (!(in32(GPIO0_IR) & CFG_REV1_2)) {
+               /* rev 1.2 boards */
+               mtdcr(cntrl0, mfdcr(cntrl0) | ((CFG_INTA_FAKE | \
+                                               CFG_SELF_RST) << 5));
+       }
+
+       out32(GPIO0_OR, 0);
+       out32(GPIO0_TCR, CFG_FPGA_PRG | CFG_FPGA_CLK | CFG_FPGA_DATA | CFG_XEREADY); /* setup for output */
+
+       /* - check if rev1_2 is low, then:
+        * - set/reset CFG_INTA_FAKE/CFG_SELF_RST in TCR to assert INTA# or SELFRST#
         */
-       out32(GPIO0_ODR, 0x00000000);                                /* no open drain pins */
-       out32(GPIO0_TCR, CFG_FPGA_PRG | CFG_FPGA_CLK | CFG_FPGA_DATA); /* setup for output */
-       out32(GPIO0_OR, 0);                                            /* outputs -> low   */
 
        return 0;
 }
@@ -83,11 +97,6 @@ int board_early_init_f (void)
 
 /* ------------------------------------------------------------------------- */
 
-int misc_init_f (void)
-{
-       return 0;  /* dummy implementation */
-}
-
 
 int misc_init_r (void)
 {
@@ -97,17 +106,31 @@ int misc_init_r (void)
        gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
        gd->bd->bi_flashoffset = 0;
 
+       out32(GPIO0_OR, in32(GPIO0_OR) | CFG_XEREADY); /* deassert EREADY# */
        return (0);
 }
 
+ushort pmc405_pci_subsys_deviceid(void)
+{
+       ulong val;
+       val = in32(GPIO0_IR);
+       if (!(val & CFG_REV1_2)) { /* low=rev1.2 */
+               if (val & CFG_NONMONARCH) { /* monarch# signal */
+                       return CFG_PCI_SUBSYS_DEVICEID_NONMONARCH;
+               }
+               return CFG_PCI_SUBSYS_DEVICEID_MONARCH;
+       }
+       return CFG_PCI_SUBSYS_DEVICEID_NONMONARCH;
+}
 
 /*
  * Check Board Identity:
  */
-
 int checkboard (void)
 {
-       unsigned char str[64];
+       ulong val;
+
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
@@ -118,12 +141,18 @@ int checkboard (void)
                puts(str);
        }
 
-       putc ('\n');
+       val = in32(GPIO0_IR);
+       if (!(val & CFG_REV1_2)) { /* low=rev1.2 */
+               puts(" rev1.2 (");
+               if (val & CFG_NONMONARCH) { /* monarch# signal */
+                       puts("non-");
+               }
+               puts("monarch)");
+       } else {
+               puts(" <=rev1.1");
+       }
 
-       /*
-        * Disable sleep mode in LXT971
-        */
-       lxt971_no_sleep();
+       putc ('\n');
 
        return 0;
 }
@@ -145,17 +174,19 @@ long int initdram (int board_type)
        return (4*1024*1024 << ((val & 0x000e0000) >> 17));
 }
 
-/* ------------------------------------------------------------------------- */
 
-int testdram (void)
+/* ------------------------------------------------------------------------- */
+void reset_phy(void)
 {
-       /* TODO: XXX XXX XXX */
-       printf ("test: 16 MB - ok\n");
+#ifdef CONFIG_LXT971_NO_SLEEP
 
-       return (0);
+       /*
+        * Disable sleep mode in LXT971
+        */
+       lxt971_no_sleep();
+#endif
 }
 
-/* ------------------------------------------------------------------------- */
 
 int do_cantest(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
index bfd71dbfcbe43f8098f67cdb787c4ab3a915504a..e84d69ebb7df33501b70df45508aa67c41922054 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +119,12 @@ SECTIONS
   _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 = .;
index f4aa16a72d64a7f78a40be7a2d9511a57c17f0ee..a803b1cbadca730106175efcbec1a32a8ec66878 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +112,13 @@ SECTIONS
   _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 = .;
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..43f776579ef780a00497dc67bc4f6b9759373bc8 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +120,13 @@ SECTIONS
   _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 = .;
index 9cea69f18c2a0f529d7ca0b44c98653527f63393..eda3fd9d9d8639d503a332281a1801d98a8e8c4b 100644 (file)
@@ -268,7 +268,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..f7a20d1da23d9099dc7b20ad17d3ba612d8501ba 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +119,13 @@ SECTIONS
   _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 = .;
index 70bc6db96c0c7c2f6f45b40fa2a8a7b0d0a376d5..bc5fa7c69b2b2f596254b2e1803c862c78d17613 100644 (file)
@@ -79,12 +79,6 @@ int board_early_init_f (void)
 
 /* ------------------------------------------------------------------------- */
 
-int misc_init_f (void)
-{
-       return 0;  /* dummy implementation */
-}
-
-
 int misc_init_r (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
@@ -103,7 +97,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
        int flashcnt;
        int delay;
@@ -132,11 +126,6 @@ int checkboard (void)
        }
        *led_reg = 0x40;
 
-       /*
-        * Disable sleep mode in LXT971
-        */
-       lxt971_no_sleep();
-
        return 0;
 }
 
@@ -159,10 +148,13 @@ long int initdram (int board_type)
 
 /* ------------------------------------------------------------------------- */
 
-int testdram (void)
+void reset_phy(void)
 {
-       /* TODO: XXX XXX XXX */
-       printf ("test: 16 MB - ok\n");
+#ifdef CONFIG_LXT971_NO_SLEEP
 
-       return (0);
+       /*
+        * Disable sleep mode in LXT971
+        */
+       lxt971_no_sleep();
+#endif
 }
index ba555501ed4c02ad465130cd0a47e7e6aea0228d..95854f29327d5a278db4ece3752dbb2999728b62 100644 (file)
@@ -67,7 +67,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +86,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +119,12 @@ SECTIONS
   _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 = .;
index 09c4d36a951e3a81556d5569e514658c1c45ded8..db24122c5ea7efb2860e4f35002cc55906226322 100644 (file)
@@ -193,7 +193,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index 5c3e9b42657b1a72e3c7aefc24c1cdbe15e9ffff..3959eead27205bfe37105464e561ef3cb65d80e7 100644 (file)
@@ -147,8 +147,8 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         *
         */
-       size_b0 = get_ram_size ((ulong *) SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
-       size_b1 = get_ram_size ((ulong *) SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
+       size_b0 = get_ram_size ( (long *)SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
+       size_b1 = get_ram_size ( (long *)SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        printf ("\nbank 0 size %lu\nbank 1 size %lu\n", size_b0, size_b1);
 
index 717c895482300f1580501fc93e8939d29b3d3f20..4c541bf5c29554e07fbafdc79f29ee4b30753f67 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index ab22203093bf89357e13c3c0c9f2c9228606988f..c742bcd24703bce0826ab99ae3b70d11549f2ad8 100644 (file)
@@ -67,6 +67,8 @@ SECTIONS
     . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -99,10 +101,12 @@ SECTIONS
   _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 = .;
index efe7cb21512dc74cf1631f664aee14dc13bcb8b6..dba3c1181e641d231b1be6d9467485b70fc40bac 100644 (file)
@@ -92,8 +92,8 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char *s = getenv ("serial#");
-       unsigned char *e;
+       char *s = getenv ("serial#");
+       char *e;
 
        puts ("Board: ");
 
@@ -186,7 +186,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, (long *) SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -194,7 +194,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
@@ -215,7 +215,7 @@ long int initdram (int board_type)
                 *  but then only half the real size will be used.]
                 */
                size_b1 =
-                               dram_size (memctl->memc_mamr, (ulong *) SDRAM_BASE3_PRELIM,
+                               dram_size (memctl->memc_mamr, (long *) SDRAM_BASE3_PRELIM,
                                                   SDRAM_MAX_SIZE);
 /*     debug ("SDRAM Bank 1: %ld MB\n", size8 >> 20);  */
        } else {
index 3d202e3f4eafeae6310ca0061d6721827ddf8031..c50db8f8c8bf184aa38d88ebed0d327f6477f939 100644 (file)
@@ -79,6 +79,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -111,11 +112,13 @@ SECTIONS
   _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 = .;
index 7cd68090bbd72d2e69e0ed5f8c80fb3b2b7788d0..e4d8b10913e7e589f317d90b7eade06ded26c8d1 100644 (file)
@@ -81,6 +81,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 98997904d480b6e1e10756a43788e7b0cf734476..5b70a40aab6f6267d375a42e330cd3a5724e54dc 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index f0743fa292e23a56fdb5701090ac0cd81c7027f5..eafa48bc6ea97ca837ff9fc5f2c64b82e8dd1377 100644 (file)
@@ -85,12 +85,17 @@ static const char ether_port_phy_addr[3]={0,1,2};
 static const char ether_port_phy_addr[3]={4,5,6};
 #endif
 
+/* MII PHY access routines are common for all i/f, use gal_ent0 */
+#define GT6426x_MII_DEVNAME    "gal_enet0"
+
+int gt6426x_miiphy_read(char *devname, unsigned char phy,
+               unsigned char reg, unsigned short *val);
 
 static inline unsigned short
 miiphy_read_ret(unsigned short phy, unsigned short reg)
 {
     unsigned short val;
-    miiphy_read(phy,reg,&val);
+    gt6426x_miiphy_read(GT6426x_MII_DEVNAME,phy,reg,&val);
     return val;
 }
 
@@ -182,7 +187,7 @@ gt6426x_eth_receive(struct eth_dev_s *p,unsigned int icr)
         */
 
        /* let the upper layer handle the packet */
-       NetReceive (eth_data, eth_len);
+       NetReceive ((uchar *)eth_data, eth_len);
 
        rx->buff_size_byte_count = GT6426x_ETH_BUF_SIZE<<16;
 
@@ -266,7 +271,7 @@ gt6426x_eth_transmit(void *v, volatile char *p, unsigned int s)
 #endif
        memcpy(dev->eth_tx_buffer, (char *) p, s);
 
-       tx->buff_pointer = dev->eth_tx_buffer;
+       tx->buff_pointer = (uchar *)dev->eth_tx_buffer;
        tx->bytecount_reserved = ((__u16)s) << 16;
 
        /*    31 - own
@@ -339,8 +344,8 @@ gt6426x_eth_disable(void *v)
 MII utilities - write: write to an MII register via SMI
 ***************************************************************************/
 int
-miiphy_write(unsigned char phy, unsigned char reg,
-    unsigned short data)
+gt6426x_miiphy_write(char *devname, unsigned char phy,
+               unsigned char reg, unsigned short data)
 {
     unsigned int temp= (reg<<21) | (phy<<16) | data;
 
@@ -354,8 +359,8 @@ miiphy_write(unsigned char phy, unsigned char reg,
 MII utilities - read: read from an MII register via SMI
 ***************************************************************************/
 int
-miiphy_read(unsigned char phy, unsigned char reg,
-                       unsigned short *val)
+gt6426x_miiphy_read(char *devname, unsigned char phy,
+               unsigned char reg, unsigned short *val)
 {
     unsigned int temp= (reg<<21) | (phy<<16) | 1<<26;
 
@@ -444,7 +449,7 @@ check_phy_state(struct eth_dev_s *p)
                if ((psr & 0x3) != want) {
                        printf("MII: GT thinks %x, PHY thinks %x, restarting autoneg..\n",
                                        psr & 0x3, want);
-                       miiphy_write(ether_port_phy_addr[p->dev],0,
+                       miiphy_write(GT6426x_MII_DEVNAME,ether_port_phy_addr[p->dev],0,
                                        miiphy_read_ret(ether_port_phy_addr[p->dev],0) | (1<<9));
                        udelay(10000);  /* the EVB's GT takes a while to notice phy
                                           went down and up */
@@ -490,7 +495,7 @@ gt6426x_eth_probe(void *v, bd_t *bis)
           led 2: 0xc=link/rxact
           led 3: 0x2=rxact (N/C)
           strch: 0,2=30 ms, enable */
-       miiphy_write(ether_port_phy_addr[p->dev], 20, 0x1c22);
+       miiphy_write(GT6426x_MII_DEVNAME,ether_port_phy_addr[p->dev], 20, 0x1c22);
 
        /* 2.7ns port rise time */
        /*miiphy_write(ether_port_phy_addr[p->dev], 30, 0x0<<10); */
@@ -583,7 +588,7 @@ gt6426x_eth_probe(void *v, bd_t *bis)
 
        /* Initialize Rx Side */
        for (temp = 0; temp < NR; temp++) {
-               p->eth_rx_desc[temp].buff_pointer = p->eth_rx_buffer[temp];
+               p->eth_rx_desc[temp].buff_pointer = (uchar *)p->eth_rx_buffer[temp];
                p->eth_rx_desc[temp].buff_size_byte_count = GT6426x_ETH_BUF_SIZE<<16;
 
                /* GT96100 Owner */
@@ -719,7 +724,8 @@ gt6426x_eth_initialize(bd_t *bis)
                dev->send = (void*)gt6426x_eth_transmit;
                dev->recv = (void*)gt6426x_eth_poll;
 
-               dev->priv = (void*)p = calloc( sizeof(*p), 1 );
+               p = calloc( sizeof(*p), 1 );
+               dev->priv = (void*)p;
                if (!p)
                {
                        printf( "%s: %s allocation failure, %s\n",
@@ -791,6 +797,11 @@ gt6426x_eth_initialize(bd_t *bis)
 
 
                eth_register(dev);
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+               miiphy_register(dev->name,
+                               gt6426x_miiphy_read, gt6426x_miiphy_write);
+#endif
        }
+
 }
 #endif /* CFG_CMD_NET && CONFIG_NET_MULTI */
index ecc376213a55c82781b5e5be24df75db09c4f2d5..beb6db16dfb93b3ee61ac27fb69fdaa2301d1499 100644 (file)
@@ -39,14 +39,14 @@ typedef struct eth0_tx_desc_struct {
        volatile struct eth0_tx_desc_struct * next_desc;
        /* Note - the following will not work for 64 bit addressing */
        volatile unsigned char * buff_pointer;
-} eth0_tx_desc_single __attribute__ ((packed));
+} __attribute__ ((packed)) eth0_tx_desc_single;
 
 typedef struct eth0_rx_desc_struct {
   volatile __u32 buff_size_byte_count;
   volatile __u32 command_status;
   volatile struct eth0_rx_desc_struct * next_desc;
   volatile unsigned char * buff_pointer;
-} eth0_rx_desc_single __attribute__ ((packed));
+} __attribute__ ((packed)) eth0_rx_desc_single;
 
 #define NT 20 /* Number of Transmit buffers */
 #define NR 20 /* Number of Receive buffers */
index 0abc7d453693b21067a38a0286107a5da5e38e4b..e8ef0e3e52ea415fc3b85a597bc3b2772171947f 100644 (file)
@@ -55,8 +55,9 @@ unsigned int initAddressTable (u32 port, u32 hashMode, u32 hashSizeSelector)
                int bytes =
                        hashLength[hashSizeSelector] * sizeof (addrTblEntry);
 
-               tableBase = (unsigned int) realAddrTableBase[port] =
+               realAddrTableBase[port] =
                        malloc (bytes + 64);
+               tableBase = (unsigned int)realAddrTableBase;
 
                if (!tableBase) {
                        printf ("%s: alloc memory failed \n", __FUNCTION__);
index 7ca6f0ae73d53127d35f34649211fbd8870b86a4..6ab23dce2f7be486a185e77c0d5934e02b632f92 100644 (file)
@@ -589,7 +589,7 @@ flash_get_size (int portwidth, vu_long *addr, flash_info_t *info)
 int
 flash_erase (flash_info_t *info, int s_first, int s_last)
 {
-       volatile unsigned char *addr = (char *)(info->start[0]);
+       volatile unsigned char *addr = (uchar *)(info->start[0]);
        int flag, prot, sect, l_sect;
        ulong start, now, last;
 
@@ -600,7 +600,7 @@ flash_erase (flash_info_t *info, int s_first, int s_last)
        if((info->flash_id & FLASH_TYPEMASK) == FLASH_RAM) {
            for (sect = s_first; sect<=s_last; sect++) {
                int sector_size=info->size/info->sector_count;
-               addr = (char *)(info->start[sect]);
+               addr = (uchar *)(info->start[sect]);
                memset((void *)addr, 0, sector_size);
            }
            return 0;
@@ -658,7 +658,7 @@ flash_erase (flash_info_t *info, int s_first, int s_last)
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect<=s_last; sect++) {
                if (info->protect[sect] == 0) { /* not protected */
-                       addr = (char *)(info->start[sect]);
+                       addr = (uchar *)(info->start[sect]);
                        flash_cmd(info->portwidth,addr,0,0x30);
                        l_sect = sect;
                }
@@ -794,7 +794,7 @@ write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
 static int
 write_word (flash_info_t *info, ulong dest, ulong data)
 {
-       volatile unsigned char *addr = (char *)(info->start[0]);
+       volatile unsigned char *addr = (uchar *)(info->start[0]);
        ulong start;
        int flag, i;
 
index 22cb8096c831c7a9d0de0c3edd0726e3e8cad062..c62b64729c12929167d2cf6e3befe34f77f396b5 100644 (file)
@@ -146,7 +146,7 @@ i2c_select_device(uchar dev_addr, uchar read, int ten_bit)
 static uchar
 i2c_get_data(uchar* return_data, int len) {
 
-       unsigned int data, status;
+       unsigned int data, status = 0;
        int count = 0;
 
        DP(puts("i2c_get_data\n"));
index 0dfa8c000549340ad410323b11575f1557f162ca..d89eb6cff2025c9af51772e660e593cfd215ec67 100644 (file)
@@ -74,6 +74,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -106,11 +107,13 @@ SECTIONS
   _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 = .;
index 5131339a6c90e415ebf26ce86efa05118eb52413..2b9a469f8d16e57a545f2113dd953e61cdf28469 100644 (file)
@@ -116,7 +116,7 @@ zuma_mbox_dump(void)
 static void
 zuma_mbox_setenv(void)
 {
-  unsigned char *data, buf[32];
+  char *data, buf[32];
   unsigned char save = 0;
 
   data = getenv("baudrate");
index 7dd539178efe6065f6f8f15a83ebd2f68ef7d26f..d5dea8238ef2839635e86ed2438c8c84859f0b84 100644 (file)
@@ -87,6 +87,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +121,12 @@ SECTIONS
   _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 = .;
index aff1b7efec2320045988e9a7e4813524ff8b6846..1127c7ff726f43330af519ad489a0f020d198647 100644 (file)
@@ -58,8 +58,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
     "dhcp;"                                                                    \
-    "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "                \
-    "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"       \
+    "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "                \
+    "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"       \
     "bootm"
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
index b8f463a19f6f2379ffd0e0f4f5f45ab1d0486ced..21a2d9e32a0f8de8492a3d56e419675ed58cbce6 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 0245f78fc8a8c28c9660a999fed9928ea7d2c839..650572d4d05d996a0385b36e536bebf4b5094019 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 87e323b6a4f2c565f6f023db56a9095fe2dc0bc1..04995ea756331f908f655718270cb55f452ba879 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index f6f7cf4fa5358e21bf43ce1e3da21968816c7034..3165d56345159f4f26a7a73c842a6d7c57c5eff3 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index e4ff3c37c50246069c427066fb424314574a7329..03a03d0af097f3f444b0e9c57b20de1da7daa043 100644 (file)
@@ -160,12 +160,12 @@ m88e6060_initialize( int devAddr )
 
        /*** reset all phys into powerdown ************************************/
        for (i=0, err=0; i<M88X_PHY_CNT; i++) {
-               err += miiphy_read( devAddr+phyTab[i],M88X_PHY_CNTL,&val );
+               err += bb_miiphy_read(NULL, devAddr+phyTab[i],M88X_PHY_CNTL,&val );
                /* keep SpeedLSB, Duplex */
                val &= 0x2100;
                /* set SWReset, AnegEn, PwrDwn, RestartAneg */
                val |= 0x9a00;
-               err += miiphy_write( devAddr+phyTab[i],M88X_PHY_CNTL,val );
+               err += bb_miiphy_write(NULL, devAddr+phyTab[i],M88X_PHY_CNTL,val );
        }
        if (err) {
                printf( "%s [ERR] reset phys\n",_f );
@@ -174,9 +174,9 @@ m88e6060_initialize( int devAddr )
 
        /*** disable all ports ************************************************/
        for (i=0, err=0; i<M88X_PRT_CNT; i++) {
-               err += miiphy_read( devAddr+prtTab[i],M88X_PRT_CNTL,&val );
+               err += bb_miiphy_read(NULL, devAddr+prtTab[i],M88X_PRT_CNTL,&val );
                val &= 0xfffc;
-               err += miiphy_write( devAddr+prtTab[i],M88X_PRT_CNTL,val );
+               err += bb_miiphy_write(NULL, devAddr+prtTab[i],M88X_PRT_CNTL,val );
        }
        if (err) {
                printf( "%s [ERR] disable ports\n",_f );
@@ -187,33 +187,33 @@ m88e6060_initialize( int devAddr )
        /* set switch mac addr */
 #define ea eth_get_dev()->enetaddr
        val = (ea[4] <<  8) | ea[5];
-       err = miiphy_write( devAddr+15,M88X_GLB_MAC45,val );
+       err = bb_miiphy_write(NULL, devAddr+15,M88X_GLB_MAC45,val );
        val = (ea[2] <<  8) | ea[3];
-       err += miiphy_write( devAddr+15,M88X_GLB_MAC23,val );
+       err += bb_miiphy_write(NULL, devAddr+15,M88X_GLB_MAC23,val );
        val = (ea[0] <<  8) | ea[1];
 #undef ea
        val &= 0xfeff;          /* clear DiffAddr */
-       err += miiphy_write( devAddr+15,M88X_GLB_MAC01,val );
+       err += bb_miiphy_write(NULL, devAddr+15,M88X_GLB_MAC01,val );
        if (err) {
                printf( "%s [ERR] switch mac address register\n",_f );
                return( -1 );
        }
 
        /* !DiscardExcessive, MaxFrameSize, CtrMode */
-       err = miiphy_read( devAddr+15,M88X_GLB_CNTL,&val );
+       err = bb_miiphy_read(NULL, devAddr+15,M88X_GLB_CNTL,&val );
        val &= 0xd870;
        val |= 0x0500;
-       err += miiphy_write( devAddr+15,M88X_GLB_CNTL,val );
+       err += bb_miiphy_write(NULL, devAddr+15,M88X_GLB_CNTL,val );
        if (err) {
                printf( "%s [ERR] switch global control register\n",_f );
                return( -1 );
        }
 
        /* LernDis off, ATUSize 1024, AgeTime 5min */
-       err = miiphy_read( devAddr+15,M88X_ATU_CNTL,&val );
+       err = bb_miiphy_read(NULL, devAddr+15,M88X_ATU_CNTL,&val );
        val &= 0x000f;
        val |= 0x2130;
-       err += miiphy_write( devAddr+15,M88X_ATU_CNTL,val );
+       err += bb_miiphy_write(NULL, devAddr+15,M88X_ATU_CNTL,val );
        if (err) {
                printf( "%s [ERR] atu control register\n",_f );
                return( -1 );
@@ -226,10 +226,10 @@ m88e6060_initialize( int devAddr )
                }
                while (p->reg != -1) {
                        err = 0;
-                       err += miiphy_read( devAddr+prtTab[i],p->reg,&val );
+                       err += bb_miiphy_read(NULL, devAddr+prtTab[i],p->reg,&val );
                        val &= p->msk;
                        val |= p->val;
-                       err += miiphy_write( devAddr+prtTab[i],p->reg,val );
+                       err += bb_miiphy_write(NULL, devAddr+prtTab[i],p->reg,val );
                        if (err) {
                                printf( "%s [ERR] config port %d register %d\n",_f,i,p->reg );
                                /* XXX what todo */
@@ -245,10 +245,10 @@ m88e6060_initialize( int devAddr )
                }
                while (p->reg != -1) {
                        err = 0;
-                       err += miiphy_read( devAddr+phyTab[i],p->reg,&val );
+                       err += bb_miiphy_read(NULL, devAddr+phyTab[i],p->reg,&val );
                        val &= p->msk;
                        val |= p->val;
-                       err += miiphy_write( devAddr+phyTab[i],p->reg,val );
+                       err += bb_miiphy_write(NULL, devAddr+phyTab[i],p->reg,val );
                        if (err) {
                                printf( "%s [ERR] config phy %d register %d\n",_f,i,p->reg );
                                /* XXX what todo */
index 098c0464cc86a14b7e4c025ae2dc718c4675c6e4..bf8048d27ec6dbb36eba28fe13baa39947586e97 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index 4acddefa508689a718112c27dbd0be265d6f82dd..97f81eefcfdbe53ef7f3a21bd1c6585453bcbc49 100644 (file)
@@ -198,7 +198,7 @@ void reset_phy (void)
        iop->pdat |= 0x00080000;
        for (i=0; i<100; i++) {
                udelay(20000);
-               if (miiphy_read( CFG_PHY_ADDR,2,&val ) == 0) {
+               if (bb_miiphy_read("FCC1 ETHERNET", CFG_PHY_ADDR,2,&val ) == 0) {
                        break;
                }
        }
index 5967e90e1ecd3fd97163ea6debbc952877e6b3d2..3f7875334defc0b6a7ec69eb13ab241ad63e3f36 100644 (file)
@@ -90,7 +90,7 @@ int misc_init_r (void)
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index 311a5fe7f2f0aaf346c04f5b62e47120c1ccadaa..43f776579ef780a00497dc67bc4f6b9759373bc8 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,11 +120,13 @@ SECTIONS
   _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 = .;
index f625b48c3a228e4f0aa2e93a57c582fee0280983..9900a57c0a05f6bbe90a98a214bcd1b0ea07b52b 100644 (file)
@@ -46,6 +46,7 @@ SECTIONS
        .got : { *(.got) }
 
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index f1d173ebc97729c68790c1d186a3547f3757ebe2..b7a1b56437aba5e19c6b13d71803c6962e5f0260 100644 (file)
@@ -128,8 +128,8 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char *s;
-       unsigned char buf[64];
+       char *s;
+       char buf[64];
        int i;
 
        i = getenv_r ("board_id", buf, sizeof (buf));
@@ -266,7 +266,7 @@ int misc_init_r (void)
 int last_stage_init (void)
 {
 #if !defined(CONFIG_SC)
-       unsigned char buf[256];
+       char buf[256];
        int i;
 
        /*
index f46c314327416c2c40ad60e7c6bf8eb01de2cbfd..7926a2e09d72eee84bba9c1fc911bd739e005370 100644 (file)
@@ -102,6 +102,12 @@ SECTIONS
   _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 = .;
index d4c258f96650d2f32f4da2e6af40c4da60cc6edc..1df481751c5a08b1b998eb824c4786bbf8bd6675 100644 (file)
@@ -67,6 +67,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -101,11 +102,13 @@ SECTIONS
   _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 = .;
index f12d0be552598830523578de19d280ccc9ab9763..1c1728bb4986f7fb2493e609b05881b7ada6da04 100644 (file)
@@ -188,12 +188,11 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
 #endif
        switch (value)
        {
-               case 0x01:
-               case AMD_MANUFACT:
+               case 0x1: /* AMD_MANUFACT */
                        info->flash_id = FLASH_MAN_AMD;
                break;
 
-               case FUJ_MANUFACT:
+               case 0x4: /* FUJ_MANUFACT */
                        info->flash_id = FLASH_MAN_FUJ;
                break;
 
index c19841ae792a76601ca4738a43a200a5a37937e8..5f8c8997e51dd7ddc9f946b135bf8a81529641d8 100644 (file)
@@ -187,14 +187,14 @@ long int initdram (int board_type)
        PrintState ();
 #endif
 /*    printf ("\nChecking bank1..."); */
-       size8 = dram_size (CFG_MBMR_8COL, (ulong *) SDRAM_BASE1_PRELIM,
+       size8 = dram_size (CFG_MBMR_8COL, (long *) SDRAM_BASE1_PRELIM,
                           SDRAM_MAX_SIZE);
 
        size_b0 = size8;
 
 /*    printf ("\nChecking bank2..."); */
        size_b1 =
-               dram_size (memctl->memc_mbmr, (ulong *) SDRAM_BASE2_PRELIM,
+               dram_size (memctl->memc_mbmr, (long *) SDRAM_BASE2_PRELIM,
                           SDRAM_MAX_SIZE);
 
        /*
index 276e2b445ef2b2afc80b153c8e4c7179113bca68..f48b9ad2a15170bea4933426c4be42022da42078 100644 (file)
@@ -76,6 +76,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -108,11 +109,13 @@ SECTIONS
   _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 = .;
index 749817da61584aaa9797bb551381bd0d2e282799..e843df6a02ca16af144aead3073c5cbb81988e69 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index c8b56fb96b24a0585e543402af50078075cf5a58..41a5c50b0fac45e5bcb988e6189bcb054443e299 100644 (file)
@@ -261,7 +261,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
 #if 0
        ulong base = (ulong)addr;
 #endif
-       uchar value;
+       ulong value;
 
        /* Write auto select command: read Manufacturer ID */
 #if 0
@@ -278,7 +278,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
 
        switch (value)
        {
-               case AMD_MANUFACT:case 0x01:
+               case AMD_MANUFACT:
                        info->flash_id = FLASH_MAN_AMD;
                break;
 
index 6f972ce8908785a72fe6f4d45681d0474d23b7e9..b1fcbf5cc36a2f49239aaf549ee4e24506a2d9b9 100644 (file)
@@ -589,7 +589,7 @@ int misc_init_r (void)
                (Rx[8] != ':') | (Rx[11] != ':') | (Rx[14] != ':')) {
                printf ("*** ethernet addr invalid, using default ***\n");
        } else {
-               setenv ("ethaddr", Rx);
+               setenv ("ethaddr", (char *)Rx);
        }
        return (0);
 }
index 50f41b53d2eb669ce64eb6e0e4e4ea7c7020392d..8ac4bdad0761832c962c01c0a10724d104925faa 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 163d58ccf536425f9be2486cc00cc44a4c0d64e2..2719a9585faa7e03006c1784f9662e197a5c23da 100644 (file)
@@ -320,7 +320,7 @@ unsigned long long pattern[] = {
 int mem_test_data (void)
 {
        unsigned long long *pmem = (unsigned long long *) CFG_SDRAM_BASE;
-       unsigned long long temp64;
+       unsigned long long temp64 = 0;
        int num_patterns = sizeof (pattern) / sizeof (pattern[0]);
        int i;
        unsigned int hi, lo;
@@ -427,7 +427,7 @@ int mem_march (volatile unsigned long long *base,
               unsigned long long wmask, short read, short write)
 {
        unsigned int i;
-       unsigned long long temp;
+       unsigned long long temp = 0;
        unsigned int hitemp, lotemp, himask, lomask;
 
        for (i = 0; i < size; i++) {
index 32e8f399a26bbbf27b9eedcda07e53ddd02e379a..ab65cb11fc262b0edb90eb66b7381f2ba60b6add 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 7490324cb0e7a5c86e2d57c5935b7cf1b96bf35a..e95d9ee3324d76c0773177617939f0b8a3a885a7 100644 (file)
@@ -107,8 +107,8 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char *s = getenv ("serial#");
-       unsigned char *e;
+       char *s = getenv ("serial#");
+       char *e;
 
        puts ("Board: ");
 
@@ -179,7 +179,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, (long *) SDRAM_BASE_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -187,7 +187,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
index 4dbf7a6e83f68a5bc3419b0f202eb4b1b77f84ed..ef53ab7a0a8d7248f30457359ae4eb0e9853e044 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 49e84c033d58a3d199e3e56cf024ca025761111b..a961fa47ba58b6c6e52f43e37ee8a4817a7768b7 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index db89a78fd0fc468196714887b919c717f6cef6e7..2a5cd2ebd9dc6661cc8a1c71e04ecaa5957c6bc4 100644 (file)
@@ -68,6 +68,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -100,11 +101,13 @@ SECTIONS
   _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 = .;
index fca11d0e7cd6cb64ae50b99e0047addaff423fc0..237e8631657d51f9c320f5e3db23d23a55482831 100644 (file)
@@ -30,6 +30,7 @@
 #include <common.h>
 #include <mpc5xxx.h>
 #include <pci.h>
+#include <malloc.h>
 
 #ifndef CFG_RAMBOOT
 static void sdram_start (int hi_addr)
@@ -156,8 +157,122 @@ int checkboard (void)
        return 0;
 }
 
-int misc_init_f (void)
+#ifdef CONFIG_PREBOOT
+
+static uchar kbd_magic_prefix[]                = "key_magic";
+static uchar kbd_command_prefix[]      = "key_cmd";
+
+#define S1_ROT 0xf0
+#define S2_Q   0x40
+#define S2_M   0x20
+
+struct kbd_data_t {
+       char s1;
+       char s2;
+};
+
+struct kbd_data_t* get_keys (struct kbd_data_t *kbd_data)
+{
+       kbd_data->s1 = *((volatile uchar*)(CFG_STATUS1_BASE));
+       kbd_data->s2 = *((volatile uchar*)(CFG_STATUS2_BASE));
+
+       return kbd_data;
+}
+
+static int compare_magic (const struct kbd_data_t *kbd_data, uchar *str)
 {
+       char s1 = str[0];
+       char s2;
+
+       if (s1 >= '0' && s1 <= '9')
+               s1 -= '0';
+       else if (s1 >= 'a' && s1 <= 'f')
+               s1 = s1 - 'a' + 10;
+       else if (s1 >= 'A' && s1 <= 'F')
+               s1 = s1 - 'A' + 10;
+       else
+               return -1;
+
+       if (((S1_ROT & kbd_data->s1) >> 4) != s1)
+               return -1;
+
+       s2 = (S2_Q | S2_M) & kbd_data->s2;
+
+       switch (str[1]) {
+       case 'q':
+       case 'Q':
+               if (s2 == S2_Q)
+                       return -1;
+               break;
+       case 'm':
+       case 'M':
+               if (s2 == S2_M)
+                       return -1;
+               break;
+       case '\0':
+               if (s2 == (S2_Q | S2_M))
+                       return 0;
+       default:
+               return -1;
+       }
+
+       if (str[2])
+               return -1;
+
+       return 0;
+}
+
+static uchar *key_match (const struct kbd_data_t *kbd_data)
+{
+       uchar magic[sizeof (kbd_magic_prefix) + 1];
+       uchar *suffix;
+       uchar *kbd_magic_keys;
+
+       /*
+        * The following string defines the characters that can be appended
+        * to "key_magic" to form the names of environment variables that
+        * hold "magic" key codes, i. e. such key codes that can cause
+        * pre-boot actions. If the string is empty (""), then only
+        * "key_magic" is checked (old behaviour); the string "125" causes
+        * checks for "key_magic1", "key_magic2" and "key_magic5", etc.
+        */
+       if ((kbd_magic_keys = getenv ("magic_keys")) == NULL)
+               kbd_magic_keys = "";
+
+       /* loop over all magic keys;
+        * use '\0' suffix in case of empty string
+        */
+       for (suffix = kbd_magic_keys; *suffix ||
+                    suffix == kbd_magic_keys; ++suffix) {
+               sprintf (magic, "%s%c", kbd_magic_prefix, *suffix);
+
+               if (compare_magic(kbd_data, getenv(magic)) == 0) {
+                       uchar cmd_name[sizeof (kbd_command_prefix) + 1];
+                       char *cmd;
+
+                       sprintf (cmd_name, "%s%c", kbd_command_prefix, *suffix);
+                       cmd = getenv (cmd_name);
+
+                       return (cmd);
+               }
+       }
+
+       return (NULL);
+}
+
+#endif /* CONFIG_PREBOOT */
+
+int misc_init_r (void)
+{
+#ifdef CONFIG_PREBOOT
+       struct kbd_data_t kbd_data;
+       /* Decode keys */
+       uchar *str = strdup (key_match (get_keys (&kbd_data)));
+       /* Set or delete definition */
+       setenv ("preboot", str);
+       free (str);
+#endif /* CONFIG_PREBOOT */
+
        return 0;
 }
 
index fda49773ea2c3bd0c2630d9698965e8d80ab1fb7..123a14c5aa01dc9c01b5312f3531270b669e44ef 100644 (file)
@@ -72,6 +72,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -104,11 +105,13 @@ SECTIONS
   _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 = .;
index 15eb48e103899c4c7e55da867c52d50471052d81..c9b9b181105b2ac49b210bbd792220e08281ce3d 100644 (file)
@@ -58,7 +58,7 @@ hymod_eeprom_load (int which, hymod_eeprom_t *ep)
        eeprom_read (dev_addr, offset, (uchar *)&crc, sizeof (ulong));
        offset += sizeof (ulong);
 
-       if (crc32 (crc32 (0, (char *)&hdr, sizeof hdr), data, len) != crc)
+       if (crc32 (crc32 (0, (uchar *)&hdr, sizeof hdr), data, len) != crc)
                return (0);
 
        ep->ver = hdr.ver;
@@ -260,7 +260,7 @@ uint_handler (eerec_map_t *rp, uchar *val, uchar *dp, uchar *edp)
        char *eval;
        ulong lval;
 
-       lval = simple_strtol (val, &eval, 10);
+       lval = simple_strtol ((char *)val, &eval, 10);
 
        if ((uchar *)eval == val || *eval != '\0') {
                printf ("%s rec (%s) is not a valid uint\n", rp->name, val);
@@ -315,12 +315,12 @@ static uchar *
 date_handler (eerec_map_t *rp, uchar *val, uchar *dp, uchar *edp)
 {
        hymod_date_t date;
-       uchar *p = val;
+       char *p = (char *)val;
        char *ep;
        ulong lval;
 
        lval = simple_strtol (p, &ep, 10);
-       if ((uchar *)ep == p || *ep++ != '-') {
+       if (ep == p || *ep++ != '-') {
 bad_date:
                printf ("%s rec (%s) is not a valid date\n", rp->name, val);
                return (NULL);
@@ -330,12 +330,12 @@ bad_date:
        date.year = lval;
 
        lval = simple_strtol (p = ep, &ep, 10);
-       if ((uchar *)ep == p || *ep++ != '-' || lval == 0 || lval > 12)
+       if (ep == p || *ep++ != '-' || lval == 0 || lval > 12)
                goto bad_date;
        date.month = lval;
 
        lval = simple_strtol (p = ep, &ep, 10);
-       if ((uchar *)ep == p || *ep != '\0' || lval == 0 || lval > 31)
+       if (ep == p || *ep != '\0' || lval == 0 || lval > 31)
                goto bad_date;
        date.day = lval;
 
@@ -359,7 +359,7 @@ string_handler (eerec_map_t *rp, uchar *val, uchar *dp, uchar *edp)
 {
        uint len;
 
-       if ((len = strlen (val)) > rp->maxlen) {
+       if ((len = strlen ((char *)val)) > rp->maxlen) {
                printf ("%s rec (%s) string is too long (%d>%d)\n",
                        rp->name, val, len, rp->maxlen);
                return (NULL);
@@ -387,7 +387,7 @@ bytes_handler (eerec_map_t *rp, uchar *val, uchar *dp, uchar *edp)
        for (nbytes = 0, p = val; *p != '\0'; p = (uchar *)ep) {
                ulong lval;
 
-               lval = simple_strtol (p, &ep, 10);
+               lval = simple_strtol ((char *)p, &ep, 10);
                if ((uchar *)ep == p || (*ep != '\0' && *ep != ',') || \
                    lval >= 256) {
                        printf ("%s rec (%s) byte array has invalid uint\n",
@@ -451,7 +451,7 @@ eerec_callback (uchar *name, uchar *val)
        eerec_map_t *rp;
 
        for (rp = eerec_map; rp < &eerec_map[neerecs]; rp++)
-               if (strcmp (name, rp->name) == 0)
+               if (strcmp ((char *)name, rp->name) == 0)
                        break;
 
        if (rp >= &eerec_map[neerecs])
index f58aec25709230209b6b291ed329f70adc229624..f9e14213ceb91b4826d3df3ec5ffd2fb6fcb983f 100644 (file)
@@ -38,7 +38,7 @@ env_callback (uchar *name, uchar *value)
        char ov[CFG_CBSIZE], nv[CFG_CBSIZE], *p, *q, *nn, c, *curver, *newver;
        int override = 1, append = 0, remove = 0, nnl, ovl, nvl;
 
-       nn = name;
+       nn = (char *)name;
 
        if (*nn == '-') {
                override = 0;
@@ -68,7 +68,7 @@ env_callback (uchar *name, uchar *value)
                return (0);
        }
 
-       p = value;
+       p = (char *)value;
        q = nv;
 
        while ((c = *p) == ' ' || c == '\t')
index 43cab1d1ce7de5edf9684af3faf609f05a6e5caf..f61d0807dfb772f480fdd40999f10e0fa4fe698a 100644 (file)
@@ -135,26 +135,26 @@ newboot=run fetchboot eraseboot copyboot cmpboot
 
 fetchlinux=tftp 100000 /hymod/linux.bin
 eraselinux=erase 1:2-4
-copylinux=cp.b 100000 40080000 $(filesize)
-cmplinux=cmp.b 100000 40080000 $(filesize)
+copylinux=cp.b 100000 40080000 ${filesize}
+cmplinux=cmp.b 100000 40080000 ${filesize}
 newlinux=run fetchlinux eraselinux copylinux cmplinux
 
 fetchaltlinux=tftp 100000 /hymod/altlinux.bin
 erasealtlinux=erase 1:5-7
-copyaltlinux=cp.b 100000 40140000 $(filesize)
-cmpaltlinux=cmp.b 100000 40140000 $(filesize)
+copyaltlinux=cp.b 100000 40140000 ${filesize}
+cmpaltlinux=cmp.b 100000 40140000 ${filesize}
 newaltlinux=run fetchaltlinux erasealtlinux copyaltlinux cmpaltlinux
 
 fetchroot=tftp 100000 /hymod/root.bin
 eraseroot=erase 1:8-47
-copyroot=cp.b 100000 40200000 $(filesize)
-cmproot=cmp.b 100000 40200000 $(filesize)
+copyroot=cp.b 100000 40200000 ${filesize}
+cmproot=cmp.b 100000 40200000 ${filesize}
 newroot=run fetchroot eraseroot copyroot cmproot
 
 fetchard=tftp 100000 /hymod/apprd.bin
 eraseard=erase 1:48-63
-copyard=cp.b 100000 40c00000 $(filesize)
-cmpard=cmp.b 100000 40c00000 $(filesize)
+copyard=cp.b 100000 40c00000 ${filesize}
+cmpard=cmp.b 100000 40c00000 ${filesize}
 newapprd=run fetchard eraseard copyard cmpard
 
 # pass above map to linux mtd driver
index 1e20425083e483dc176a7753acb63db2820b2f0f..337a3954d2de2a0f10692f76f4e0524bf8028c68 100644 (file)
@@ -79,6 +79,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -111,11 +112,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 4ae71e661ccb461dca65d7e42c97b5a5ba92e7e7..713011c972aa22fb299a7aa3b3813198a55261f7 100644 (file)
@@ -139,7 +139,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
index 7c9a92a913f6e4926b8ceaf045cc1faa7c5c6460..1f1a74ce33978a52451fc5a73b3bae87d9ab639d 100644 (file)
@@ -107,9 +107,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, 0x80000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        sdram_start(1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        if (test1 > test2) {
                sdram_start(0);
                dramsize = test1;
@@ -135,10 +135,10 @@ long int initdram (int board_type)
        /* find RAM size using SDRAM CS1 only */
        if (!dramsize)
                sdram_start(0);
-       test2 = test1 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+       test2 = test1 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        if (!dramsize) {
                sdram_start(1);
-               test2 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+               test2 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        }
        if (test1 > test2) {
                sdram_start(0);
@@ -207,9 +207,9 @@ long int initdram (int board_type)
 
        /* find RAM size */
        sdram_start(0);
-       test1 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        sdram_start(1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        if (test1 > test2) {
                sdram_start(0);
                dramsize = test1;
index d999dd16ad92f7d4ca9811b277f9c3fe933ea48a..f23432ecfa8016e4f41d47dd09e927ea6d29c9c2 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 6315bd95b1193a6a9317203c4e2b0d724271b03f..ca5bcf31af5c01607c69221f82c27a29765f0f88 100644 (file)
@@ -251,7 +251,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
 
        value = addr[1];                        /* device ID            */
 
-       switch (value) {
+       switch ((unsigned long)value) {
        case AMD_ID_F040B:
                info->flash_id += FLASH_AM040;
                info->sector_count = 8;
index b41ebae28b304b8db1e37b6ce9c86d7533573ea9..8da9d1c9a49f70882781c0b198c7e9c9a114573a 100644 (file)
@@ -143,7 +143,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE1_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE1_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -151,7 +151,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE1_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE1_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
index 84e9cbf2e5d9aedeb0b9c57adea675765011b276..4bc50c50cb540486f9e9954440c586d7a6551e85 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 7b84fd34877d0803429777004b7b9700470dd63e..87f228beed61ebd163d9e25dc2d4fdd6bdd4b524 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 39f71ff557ff3f8e2c808c35215c6facf80d0123..788aed3c6f1b38db159bdf5ca01e967fdf7dceac 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index 64d946c439210f6a58ece41c2838bea70d3a6498..1122d7521c43ed8247912246da5b541f63e20482 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 686f2e96fd0d45ad26c62556ae130959baed8b70..520514dea35a913af0ef0d3ff1734228ea500677 100644 (file)
@@ -190,7 +190,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
index eb6eaea27857c908f9bc173d8886968a2c777543..b5d9e0049270711adbd134a59f3841f2f9e326c7 100644 (file)
@@ -68,7 +68,7 @@ long int initdram(int board_type)
                {
                        *INCA_IP_SDRAM_MC_CFGPB0 = (0x14 << 8) |
                                                   (rows << 4) | cols;
-                       size = get_ram_size((ulong *)CFG_SDRAM_BASE,
+                       size = get_ram_size((long *)CFG_SDRAM_BASE,
                                                             max_sdram_size());
 
                        if (size > max_size)
index fb64ef419dee4a5a0d89ae879b1fb4f15cf0516e..14d738aa1a772b596419028db3cb3b23d714bad0 100644 (file)
@@ -66,6 +66,7 @@
        .globl  ebu_init
        .ent    ebu_init
 ebu_init:
+__ebu_init:
 
        li      t1, EBU_MODUL_BASE
        li      t2, 0xA0000041
@@ -118,6 +119,7 @@ ebu_init:
        .globl  cgu_init
        .ent    cgu_init
 cgu_init:
+__cgu_init:
 
        li      t1, CGU_MODUL_BASE
 
@@ -182,6 +184,7 @@ cgu_init:
        .globl  sdram_init
        .ent    sdram_init
 sdram_init:
+__sdram_init:
 
        li      t1, MC_MODUL_BASE
 
@@ -281,11 +284,11 @@ lowlevel_init:
        /* We rely on the fact that neither ebu_init() nor cgu_init() nor sdram_init()
         * modify t0 and a0.
         */
-       bal     cgu_init
+       bal     __cgu_init
        nop
-       bal     ebu_init
+       bal     __ebu_init
        nop
-       bal     sdram_init
+       bal     __sdram_init
        nop
        move    ra, t0
 
index a2d19a84c9eae9195799605bbd7b2f0338555b2f..10c99179864c752ad1309610c23eaab28cc03620 100644 (file)
@@ -54,6 +54,7 @@ SECTIONS
 
        .sdata  : { *(.sdata) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index fda49773ea2c3bd0c2630d9698965e8d80ab1fb7..123a14c5aa01dc9c01b5312f3531270b669e44ef 100644 (file)
@@ -72,6 +72,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -104,11 +105,13 @@ SECTIONS
   _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 = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 00336aa77914a81eec5f5741aa6fc48d80b23190..358df62519a52415411f0aa582c1f7362c74354c 100644 (file)
@@ -30,7 +30,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := integratorap.o flash.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o memsetup.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
index fb83c82c15a050f86c02bb8ff7a2c6dbd8e81af9..d4f61d6403d530f7139196c6ee523d367f5cb79d 100644 (file)
@@ -24,7 +24,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -36,7 +36,7 @@
 #include <common.h>
 
 #ifdef CONFIG_PCI
-#   include <pci.h>
+#include <pci.h>
 #endif
 
 void flash__init (void);
@@ -46,7 +46,7 @@ void peripheral_power_enable (void);
 #if defined(CONFIG_SHOW_BOOT_PROGRESS)
 void show_boot_progress(int progress)
 {
-    printf("Boot reached stage %d\n", progress);
+       printf("Boot reached stage %d\n", progress);
 }
 #endif
 
@@ -75,6 +75,11 @@ int board_init (void)
 
        gd->flags = 0;
 
+#ifdef CONFIG_CM_REMAP
+extern void cm_remap(void);
+       cm_remap();     /* remaps writeable memory to 0x00000000 */
+#endif
+
        icache_enable ();
 
        flash__init ();
@@ -109,17 +114,17 @@ static struct pci_config_table pci_integrator_config_table[] = {
 
 /* V3 access routines */
 #define _V3Write16(o,v) (*(volatile unsigned short *)(PCI_V3_BASE + (unsigned int)(o)) = (unsigned short)(v))
-#define _V3Read16(o)    (*(volatile unsigned short *)(PCI_V3_BASE + (unsigned int)(o)))
+#define _V3Read16(o)   (*(volatile unsigned short *)(PCI_V3_BASE + (unsigned int)(o)))
 
 #define _V3Write32(o,v) (*(volatile unsigned int *)(PCI_V3_BASE + (unsigned int)(o)) = (unsigned int)(v))
-#define _V3Read32(o)    (*(volatile unsigned int *)(PCI_V3_BASE + (unsigned int)(o)))
+#define _V3Read32(o)   (*(volatile unsigned int *)(PCI_V3_BASE + (unsigned int)(o)))
 
 /* Compute address necessary to access PCI config space for the given */
 /* bus and device. */
 #define PCI_CONFIG_ADDRESS( __bus, __devfn, __offset ) ({                              \
        unsigned int __address, __devicebit;                                            \
        unsigned short __mapaddress;                                                    \
-       unsigned int __dev = PCI_DEV (__devfn); /* FIXME to check!! (slot?) */          \
+       unsigned int __dev = PCI_DEV (__devfn); /* FIXME to check!! (slot?) */          \
                                                                                        \
        if (__bus == 0) {                                                               \
                /* local bus segment so need a type 0 config cycle */                   \
@@ -142,10 +147,10 @@ static struct pci_config_table pci_integrator_config_table[] = {
                /* A31-A24 are don't care (so clear to 0) */                            \
                __mapaddress = 0x000B;  /* 101=>config cycle, 1=>A1&A0 from PCI_CFG */  \
                __address = PCI_CONFIG_BASE;                                            \
-               __address |= ((__bus & 0xFF) << 16);    /* bits 23..16 = bus number     */  \
-               __address |= ((__dev & 0x1F) << 11);    /* bits 15..11 = device number  */  \
+               __address |= ((__bus & 0xFF) << 16);    /* bits 23..16 = bus number     */  \
+               __address |= ((__dev & 0x1F) << 11);    /* bits 15..11 = device number  */  \
                __address |= ((__devfn & 0x07) << 8);   /* bits 10..8  = function number */ \
-               __address |= __offset & 0xFF;   /* bits  7..0  = register number */     \
+               __address |= __offset & 0xFF;   /* bits  7..0  = register number */     \
        }                                                                               \
        _V3Write16 (V3_LB_MAP1, __mapaddress);                                          \
        __address;                                                                      \
@@ -463,7 +468,7 @@ void flash__init (void)
 /*************************************************************
  Routine:ether__init
  Description: take the Ethernet controller out of reset and wait
-                          for the EEPROM load to complete.
+                          for the EEPROM load to complete.
 *************************************************************/
 void ether__init (void)
 {
@@ -475,5 +480,172 @@ void ether__init (void)
 ******************************/
 int dram_init (void)
 {
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size  = PHYS_SDRAM_1_SIZE;
+
+#ifdef CONFIG_CM_SPD_DETECT
+       {
+extern void dram_query(void);
+       unsigned long cm_reg_sdram;
+       unsigned long sdram_shift;
+
+       dram_query();   /* Assembler accesses to CM registers */
+                       /* Queries the SPD values             */
+
+       /* Obtain the SDRAM size from the CM SDRAM register */
+
+       cm_reg_sdram = *(volatile ulong *)(CM_BASE + OS_SDRAM);
+       /*   Register         SDRAM size
+        *
+        *   0xXXXXXXbbb000bb    16 MB
+        *   0xXXXXXXbbb001bb    32 MB
+        *   0xXXXXXXbbb010bb    64 MB
+        *   0xXXXXXXbbb011bb   128 MB
+        *   0xXXXXXXbbb100bb   256 MB
+        *
+        */
+       sdram_shift              = ((cm_reg_sdram & 0x0000001C)/4)%4;
+       gd->bd->bi_dram[0].size  = 0x01000000 << sdram_shift;
+
+       }
+#endif /* CM_SPD_DETECT */
+
        return 0;
 }
+
+/* The Integrator/AP timer1 is clocked at 24MHz
+ * can be divided by 16 or 256
+ * and is a 16-bit counter
+ */
+/* U-Boot expects a 32 bit timer running at CFG_HZ*/
+static ulong timestamp;                /* U-Boot ticks since startup         */
+static ulong total_count = 0;  /* Total timer count                  */
+static ulong lastdec;          /* Timer reading at last call         */
+static ulong div_clock  = 256; /* Divisor applied to the timer clock */
+static ulong div_timer  = 1;   /* Divisor to convert timer reading
+                                * change to U-Boot ticks
+                                */
+/* CFG_HZ = CFG_HZ_CLOCK/(div_clock * div_timer) */
+
+#define TIMER_LOAD_VAL 0x0000FFFFL
+#define READ_TIMER ((*(volatile ulong *)(CFG_TIMERBASE+4)) & 0x0000FFFFL)
+
+/* all function return values in U-Boot ticks i.e. (1/CFG_HZ) sec
+ *  - unless otherwise stated
+ */
+
+/* starts a counter
+ * - the Integrator/AP timer issues an interrupt
+ *   each time it reaches zero
+ */
+int interrupt_init (void)
+{
+       /* Load timer with initial value */
+       *(volatile ulong *)(CFG_TIMERBASE + 0) = TIMER_LOAD_VAL;
+       /* Set timer to be
+        *      enabled           1
+        *      free-running      0
+        *      XX               00
+        *      divider 256      10
+        *      XX               00
+        */
+       *(volatile ulong *)(CFG_TIMERBASE + 8) = 0x00000088;
+       total_count = 0;
+       /* init the timestamp and lastdec value */
+       reset_timer_masked();
+
+       div_timer  = CFG_HZ_CLOCK / CFG_HZ;
+       div_timer /= div_clock;
+
+       return (0);
+}
+
+/*
+ * timer without interrupts
+ */
+void reset_timer (void)
+{
+       reset_timer_masked ();
+}
+
+ulong get_timer (ulong base_ticks)
+{
+       return get_timer_masked () - base_ticks;
+}
+
+void set_timer (ulong ticks)
+{
+       timestamp = ticks;
+       total_count = ticks * div_timer;
+       reset_timer_masked();
+}
+
+/* delay x useconds */
+void udelay (unsigned long usec)
+{
+       ulong tmo, tmp;
+
+       /* Convert to U-Boot ticks */
+       tmo  = usec * CFG_HZ;
+       tmo /= (1000000L);
+
+       tmp  = get_timer_masked();      /* get current timestamp */
+       tmo += tmp;                     /* wake up timestamp     */
+
+       while (get_timer_masked () < tmo) { /* loop till event */
+               /*NOP*/;
+       }
+}
+
+void reset_timer_masked (void)
+{
+       /* reset time */
+       lastdec   = READ_TIMER; /* capture current decrementer value   */
+       timestamp = 0;          /* start "advancing" time stamp from 0 */
+}
+
+/* converts the timer reading to U-Boot ticks         */
+/* the timestamp is the number of ticks since reset    */
+/* This routine does not detect wraps unless called regularly
+   ASSUMES a call at least every 16 seconds to detect every reload */
+ulong get_timer_masked (void)
+{
+       ulong now = READ_TIMER;         /* current count */
+
+       if (now > lastdec) {
+               /* Must have wrapped */
+               total_count += lastdec + TIMER_LOAD_VAL + 1 - now;
+       } else {
+               total_count += lastdec - now;
+       }
+       lastdec   = now;
+       timestamp = total_count/div_timer;
+
+       return timestamp;
+}
+
+/* waits specified delay value and resets timestamp */
+void udelay_masked (unsigned long usec)
+{
+       udelay(usec);
+}
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On ARM it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+       return get_timer(0);
+}
+
+/*
+ * Return the timebase clock frequency
+ * i.e. how often the timer decrements
+ */
+ulong get_tbclk (void)
+{
+       return CFG_HZ_CLOCK/div_clock;
+}
diff --git a/board/integratorap/lowlevel_init.S b/board/integratorap/lowlevel_init.S
new file mode 100644 (file)
index 0000000..ab9589c
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Board specific setup info
+ *
+ * (C) Copyright 2004, ARM Ltd.
+ * Philippe Robin, <philippe.robin@arm.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>
+
+       /* Reset using CM control register */
+.global reset_cpu
+reset_cpu:
+       mov     r0, #CM_BASE
+       ldr     r1,[r0,#OS_CTRL]
+       orr     r1,r1,#CMMASK_RESET
+       str     r1,[r0,#OS_CTRL]
+
+reset_failed:
+       b       reset_failed
+
+/* Set up the platform, once the cpu has been initialized */
+.globl lowlevel_init
+lowlevel_init:
+       /* If U-Boot has been run after the ARM boot monitor
+        * then all the necessary actions have been done
+        * otherwise we are running from user flash mapped to 0x00000000
+        * --- DO NOT REMAP BEFORE THE CODE HAS BEEN RELOCATED --
+        * Changes to the (possibly soft) reset defaults of the processor
+        * itself should be performed in cpu/arm<>/start.S
+        * This function affects only the core module or board settings
+        */
+
+#ifdef CONFIG_CM_INIT
+       /* CM has an initialization register
+        * - bits in it are wired into test-chip pins to force
+        *   reset defaults
+        * - may need to change its contents for U-Boot
+        */
+
+       /* set the desired CM specific value */
+       mov     r2,#CMMASK_LOWVEC       /* Vectors at 0x00000000 for all */
+
+#if defined (CONFIG_CM10200E) || defined (CONFIG_CM10220E)
+       orr     r2,r2,#CMMASK_INIT_102
+#else
+
+#if !defined (CONFIG_CM920T) && !defined (CONFIG_CM920T_ETM) && \
+     !defined (CONFIG_CM940T)
+
+#ifdef CONFIG_CM_MULTIPLE_SSRAM
+       /* set simple mapping                   */
+       and     r2,r2,#CMMASK_MAP_SIMPLE
+#endif /* #ifdef CONFIG_CM_MULTIPLE_SSRAM      */
+
+#ifdef CONFIG_CM_TCRAM
+       /* disable TCRAM                        */
+       and     r2,r2,#CMMASK_TCRAM_DISABLE
+#endif /* #ifdef CONFIG_CM_TCRAM               */
+
+#if defined (CONFIG_CM926EJ_S) || defined (CONFIG_CM1026EJ_S) || \
+     defined (CONFIG_CM1136JF_S)
+
+       and     r2,r2,#CMMASK_LE
+
+#endif /* cpu with little endian initialization */
+
+       orr     r2,r2,#CMMASK_CMxx6_COMMON
+
+#endif /* CMxx6 code */
+
+#endif /* ARM102xxE value */
+
+       /* read CM_INIT          */
+       mov     r0, #CM_BASE
+       ldr     r1, [r0, #OS_INIT]
+       /* check against desired bit setting */
+       and     r3,r1,r2
+       cmp     r3,r2
+       beq     init_reg_OK
+
+       /* lock for change */
+       mov     r3, #CMVAL_LOCK1
+       add     r3,r3,#CMVAL_LOCK2
+       str     r3, [r0, #OS_LOCK]
+       /* set desired value */
+       orr     r1,r1,r2
+       /* write & relock CM_INIT */
+       str     r1, [r0, #OS_INIT]
+       mov     r1, #CMVAL_UNLOCK
+       str     r1, [r0, #OS_LOCK]
+
+       /* soft reset so new values used */
+       b       reset_cpu
+
+init_reg_OK:
+
+#endif /* CONFIG_CM_INIT */
+
+       mov     pc, lr
+
+#ifdef CONFIG_CM_SPD_DETECT
+       /* Fast memory is available for the DRAM data
+        * - ensure it has been transferred, then summarize the data
+        *   into a CM register
+        */
+.globl dram_query
+dram_query:
+       stmfd   r13!,{r4-r6,lr}
+       /* set up SDRAM info                                    */
+       /* - based on example code from the CM User Guide */
+       mov     r0, #CM_BASE
+
+readspdbit:
+       ldr     r1, [r0, #OS_SDRAM]     /* read the SDRAM register      */
+       and     r1, r1, #0x20           /* mask SPD bit (5)             */
+       cmp     r1, #0x20               /* test if set                  */
+       bne     readspdbit
+
+setupsdram:
+       add     r0, r0, #OS_SPD         /* address the copy of the SDP data     */
+       ldrb    r1, [r0, #3]            /* number of row address lines          */
+       ldrb    r2, [r0, #4]            /* number of column address lines       */
+       ldrb    r3, [r0, #5]            /* number of banks                      */
+       ldrb    r4, [r0, #31]           /* module bank density                  */
+       mul     r5, r4, r3              /* size of SDRAM (MB divided by 4)      */
+       mov     r5, r5, ASL#2           /* size in MB                           */
+       mov     r0, #CM_BASE            /* reload for later code                */
+       cmp     r5, #0x10               /* is it 16MB?                          */
+       bne     not16
+       mov     r6, #0x2                /* store size and CAS latency of 2      */
+       b       writesize
+
+not16:
+       cmp     r5, #0x20               /* is it  32MB? */
+       bne     not32
+       mov     r6, #0x6
+       b       writesize
+
+not32:
+       cmp     r5, #0x40               /* is it  64MB? */
+       bne     not64
+       mov     r6, #0xa
+       b       writesize
+
+not64:
+       cmp     r5, #0x80               /* is it 128MB? */
+       bne     not128
+       mov     r6, #0xe
+       b       writesize
+
+not128:
+       /* if it is none of these sizes then it is either 256MB, or
+        * there is no SDRAM fitted so default to 256MB
+        */
+       mov     r6, #0x12
+
+writesize:
+       mov     r1, r1, ASL#8           /* row addr lines from SDRAM reg */
+       orr     r2, r1, r2, ASL#12      /* OR in column address lines    */
+       orr     r3, r2, r3, ASL#16      /* OR in number of banks         */
+       orr     r6, r6, r3              /* OR in size and CAS latency    */
+       str     r6, [r0, #OS_SDRAM]     /* store SDRAM parameters        */
+
+#endif /* #ifdef CONFIG_CM_SPD_DETECT */
+
+       ldmfd   r13!,{r4-r6,pc}                 /* back to caller */
+
+#ifdef CONFIG_CM_REMAP
+       /* CM remap bit is operational
+        * - use it to map writeable memory at 0x00000000, in place of flash
+        */
+.globl cm_remap
+cm_remap:
+       stmfd   r13!,{r4-r10,lr}
+
+       mov     r0, #CM_BASE
+       ldr     r1, [r0, #OS_CTRL]
+       orr     r1, r1, #CMMASK_REMAP   /* set remap and led bits */
+       str     r1, [r0, #OS_CTRL]
+
+       /* Now 0x00000000 is writeable, replace the vectors     */
+       ldr     r0, =_start     /* r0 <- start of vectors       */
+       ldr     r2, =_armboot_start     /* r2 <- past vectors   */
+       sub     r1,r1,r1                /* destination 0x00000000       */
+
+copy_vec:
+       ldmia   r0!, {r3-r10}           /* copy from source address [r0]        */
+       stmia   r1!, {r3-r10}           /* copy to       target address [r1]    */
+       cmp     r0, r2                  /* until source end address [r2]        */
+       ble     copy_vec
+
+       ldmfd   r13!,{r4-r10,pc}        /* back to caller                       */
+
+#endif /* #ifdef CONFIG_CM_REMAP */
similarity index 76%
rename from board/integratorap/platform.S
rename to board/integratorap/memsetup.S
index 480e040cd0d04f1d0e7350c092921ff7988e65aa..dfdc7848fd168652cb23f7167046fcca066a4c62 100644 (file)
@@ -1,8 +1,5 @@
 /*
- * Board specific setup info
- *
- * (C) Copyright 2004, ARM Ltd.
- * Philippe Robin, <philippe.robin@arm.com>
+ * Memory setup for integratorAP
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
+/*
+ *     Memory setup
+ *      - the reset defaults are assumed sufficient
+ */
 
-#include <config.h>
-#include <version.h>
-
-.globl platformsetup
-platformsetup:
-
-       /* All done by Integrator's boot monitor! */
-       mov pc, lr
+.globl memsetup
+memsetup:
+       mov     pc,lr
diff --git a/board/integratorap/split_by_variant.sh b/board/integratorap/split_by_variant.sh
new file mode 100755 (executable)
index 0000000..9f71bab
--- /dev/null
@@ -0,0 +1,116 @@
+#!/bin/sh
+# ---------------------------------------------------------
+# Set the platform defines
+# ---------------------------------------------------------
+echo -n        "/* Integrator configuration implied "   > tmp.fil
+echo   " by Makefile target */"                >> tmp.fil
+echo -n        "#define CONFIG_INTEGRATOR"             >> tmp.fil
+echo   " /* Integrator board */"               >> tmp.fil
+echo -n        "#define CONFIG_ARCH_INTEGRATOR"        >> tmp.fil
+echo   " 1 /* Integrator/AP     */"            >> tmp.fil
+# ---------------------------------------------------------
+#      Set the core module defines according to Core Module
+# ---------------------------------------------------------
+cpu="arm_intcm"
+variant="unknown core module"
+
+if [ "$1" == "" ]
+then
+       echo "$0:: No parameters - using arm_intcm"
+else
+       case "$1" in
+       ap7_config)
+       cpu="arm_intcm"
+       variant="unported core module CM7TDMI"
+       ;;
+
+       ap966)
+       cpu="arm_intcm"
+       variant="unported core module CM966E-S"
+       ;;
+
+       ap922_config)
+       cpu="arm_intcm"
+       variant="unported core module CM922T"
+       ;;
+
+       integratorap_config     |       \
+       ap_config)
+       cpu="arm_intcm"
+       variant="unspecified core module"
+       ;;
+
+       ap720t_config)
+       cpu="arm720t"
+       echo -n "#define CONFIG_CM720T"         >> tmp.fil
+       echo    " 1 /* CPU core is ARM720T */ " >> tmp.fil
+       variant="Core module CM720T"
+       ;;
+
+       ap922_XA10_config)
+       cpu="arm_intcm"
+       variant="unported core module CM922T_XA10"
+       echo -n "#define CONFIG_CM922T_XA10"            >> tmp.fil
+       echo    " 1 /* CPU core is ARM922T_XA10 */"     >> tmp.fil
+       ;;
+
+       ap920t_config)
+       cpu="arm920t"
+       variant="Core module CM920T"
+       echo -n "#define CONFIG_CM920T"                 >> tmp.fil
+       echo    " 1 /* CPU core is ARM920T */"          >> tmp.fil
+       ;;
+
+       ap926ejs_config)
+       cpu="arm926ejs"
+       variant="Core module CM926EJ-S"
+       echo -n "#define CONFIG_CM926EJ_S"              >> tmp.fil
+       echo    " 1 /* CPU core is ARM926EJ-S */ "      >> tmp.fil
+       ;;
+
+       ap946es_config)
+       cpu="arm946es"
+       variant="Core module CM946E-S"
+       echo -n "#define CONFIG_CM946E_S"               >> tmp.fil
+       echo    " 1 /* CPU core is ARM946E-S */ "       >> tmp.fil
+       ;;
+
+       *)
+       echo "$0:: Unknown core module"
+       variant="unknown core module"
+       cpu="arm_intcm"
+       ;;
+
+       esac
+fi
+
+if [ "$cpu" == "arm_intcm" ]
+then
+       echo "/* Core module undefined/not ported */"   >> tmp.fil
+       echo "#define CONFIG_ARM_INTCM 1"               >> tmp.fil
+       echo -n "#undef CONFIG_CM_MULTIPLE_SSRAM"       >> tmp.fil
+       echo -n "       /* CM may not have "            >> tmp.fil
+       echo    "multiple SSRAM mapping */"             >> tmp.fil
+       echo -n "#undef CONFIG_CM_SPD_DETECT "          >> tmp.fil
+       echo -n " /* CM may not support SPD "           >> tmp.fil
+       echo    "query */"                              >> tmp.fil
+       echo -n "#undef CONFIG_CM_REMAP "               >> tmp.fil
+       echo -n " /* CM may not support "               >> tmp.fil
+       echo    "remapping */"                          >> tmp.fil
+       echo -n "#undef CONFIG_CM_INIT  "               >> tmp.fil
+       echo -n " /* CM may not have    "               >> tmp.fil
+       echo    "initialization reg */"                 >> tmp.fil
+       echo -n "#undef CONFIG_CM_TCRAM "               >> tmp.fil
+       echo    " /* CM may not have TCRAM */"          >> tmp.fil
+fi
+mv tmp.fil ./include/config.h
+# ---------------------------------------------------------
+#      Ensure correct core object loaded first in U-Boot image
+# ---------------------------------------------------------
+sed -r 's/CPU_FILE/cpu\/'$cpu'\/start.o/; s/#.*//' board/integratorap/u-boot.lds.template > board/integratorap/u-boot.lds
+# ---------------------------------------------------------
+# Complete the configuration
+# ---------------------------------------------------------
+./mkconfig -a integratorap arm $cpu integratorap;
+echo "Variant:: $variant with core $cpu"
+
diff --git a/board/integratorap/u-boot.lds.template b/board/integratorap/u-boot.lds.template
new file mode 100644 (file)
index 0000000..0ec8087
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * (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
+ */
+# Template used during configuration to emsure the core module processor code,
+# from CPU_FILE, is placed at the start of the image */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+       . = ALIGN(4);
+       .text   :
+       {
+               CPU_FILE (.text)
+               *(.text)
+       }
+       .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 : { *(.bss) }
+       _end = .;
+}
index 9c97237e5e7ceb140e9df9fc84c4605da1808e7d..3d589fcd5ad5e824790bc1385b75323329fc4cca 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := integratorcp.o flash.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o memsetup.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
index 6fe8f05babb65e97a4de48ab0774595728117c81..216876b469db2bc18dad073f52dd0f160279b182 100644 (file)
@@ -24,7 +24,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -42,19 +42,12 @@ void peripheral_power_enable (void);
 #if defined(CONFIG_SHOW_BOOT_PROGRESS)
 void show_boot_progress(int progress)
 {
-    printf("Boot reached stage %d\n", progress);
+       printf("Boot reached stage %d\n", progress);
 }
 #endif
 
 #define COMP_MODE_ENABLE ((unsigned int)0x0000EAEF)
 
-static inline void delay (unsigned long loops)
-{
-       __asm__ volatile ("1:\n"
-               "subs %0, %1, #1\n"
-               "bne 1b":"=r" (loops):"0" (loops));
-}
-
 /*
  * Miscellaneous platform dependent initialisations
  */
@@ -71,6 +64,11 @@ int board_init (void)
 
        gd->flags = 0;
 
+#ifdef CONFIG_CM_REMAP
+extern void cm_remap(void);
+       cm_remap();     /* remaps writeable memory to 0x00000000 */
+#endif
+
        icache_enable ();
 
        flash__init ();
@@ -95,7 +93,7 @@ void flash__init (void)
 /*************************************************************
  Routine:ether__init
  Description: take the Ethernet controller out of reset and wait
-                          for the EEPROM load to complete.
+             for the EEPROM load to complete.
 *************************************************************/
 void ether__init (void)
 {
@@ -107,5 +105,172 @@ void ether__init (void)
 ******************************/
 int dram_init (void)
 {
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size  = PHYS_SDRAM_1_SIZE;
+
+#ifdef CONFIG_CM_SPD_DETECT
+    {
+extern void dram_query(void);
+       unsigned long cm_reg_sdram;
+       unsigned long sdram_shift;
+
+       dram_query();   /* Assembler accesses to CM registers */
+                       /* Queries the SPD values             */
+
+       /* Obtain the SDRAM size from the CM SDRAM register */
+
+       cm_reg_sdram = *(volatile ulong *)(CM_BASE + OS_SDRAM);
+       /*   Register         SDRAM size
+        *
+        *   0xXXXXXXbbb000bb    16 MB
+        *   0xXXXXXXbbb001bb    32 MB
+        *   0xXXXXXXbbb010bb    64 MB
+        *   0xXXXXXXbbb011bb   128 MB
+        *   0xXXXXXXbbb100bb   256 MB
+        *
+        */
+       sdram_shift              = ((cm_reg_sdram & 0x0000001C)/4)%4;
+       gd->bd->bi_dram[0].size  = 0x01000000 << sdram_shift;
+
+    }
+#endif /* CM_SPD_DETECT */
+
        return 0;
 }
+
+/* The Integrator/CP timer1 is clocked at 1MHz
+ * can be divided by 16 or 256
+ * and can be set up as a 32-bit timer
+ */
+/* U-Boot expects a 32 bit timer, running at CFG_HZ */
+/* Keep total timer count to avoid losing decrements < div_timer */
+static unsigned long long total_count = 0;
+static unsigned long long lastdec;      /* Timer reading at last call     */
+static unsigned long long div_clock = 1; /* Divisor applied to timer clock */
+static unsigned long long div_timer = 1; /* Divisor to convert timer reading
+                                         * change to U-Boot ticks
+                                         */
+/* CFG_HZ = CFG_HZ_CLOCK/(div_clock * div_timer) */
+static ulong timestamp;                /* U-Boot ticks since startup         */
+
+#define TIMER_LOAD_VAL ((ulong)0xFFFFFFFF)
+#define READ_TIMER (*(volatile ulong *)(CFG_TIMERBASE+4))
+
+/* all function return values in U-Boot ticks i.e. (1/CFG_HZ) sec
+ *  - unless otherwise stated
+ */
+
+/* starts up a counter
+ * - the Integrator/CP timer can be set up to issue an interrupt */
+int interrupt_init (void)
+{
+       /* Load timer with initial value */
+       *(volatile ulong *)(CFG_TIMERBASE + 0) = TIMER_LOAD_VAL;
+       /* Set timer to be
+        *      enabled           1
+        *      periodic          1
+        *      no interrupts     0
+        *      X                 0
+        *      divider 1        00 == less rounding error
+        *      32 bit            1
+        *      wrapping          0
+        */
+       *(volatile ulong *)(CFG_TIMERBASE + 8) = 0x000000C2;
+       /* init the timestamp */
+       total_count = 0ULL;
+       reset_timer_masked();
+
+       div_timer  = (unsigned long long)(CFG_HZ_CLOCK / CFG_HZ);
+       div_timer /= div_clock;
+
+       return (0);
+}
+
+/*
+ * timer without interrupts
+ */
+void reset_timer (void)
+{
+       reset_timer_masked ();
+}
+
+ulong get_timer (ulong base_ticks)
+{
+       return get_timer_masked () - base_ticks;
+}
+
+void set_timer (ulong ticks)
+{
+       timestamp   = ticks;
+       total_count = (unsigned long long)ticks * div_timer;
+}
+
+/* delay usec useconds */
+void udelay (unsigned long usec)
+{
+       ulong tmo, tmp;
+
+       /* Convert to U-Boot ticks */
+       tmo  = usec * CFG_HZ;
+       tmo /= (1000000L);
+
+       tmp  = get_timer_masked();      /* get current timestamp */
+       tmo += tmp;                     /* form target timestamp */
+
+       while (get_timer_masked () < tmo) {/* loop till event */
+               /*NOP*/;
+       }
+}
+
+void reset_timer_masked (void)
+{
+       /* capure current decrementer value    */
+       lastdec   = (unsigned long long)READ_TIMER;
+       /* start "advancing" time stamp from 0 */
+       timestamp = 0L;
+}
+
+/* converts the timer reading to U-Boot ticks         */
+/* the timestamp is the number of ticks since reset    */
+ulong get_timer_masked (void)
+{
+       /* get current count */
+       unsigned long long now = (unsigned long long)READ_TIMER;
+
+       if(now > lastdec) {
+               /* Must have wrapped */
+               total_count += lastdec + TIMER_LOAD_VAL + 1 - now;
+       } else {
+               total_count += lastdec - now;
+       }
+       lastdec   = now;
+       timestamp = (ulong)(total_count/div_timer);
+
+       return timestamp;
+}
+
+/* waits specified delay value and resets timestamp */
+void udelay_masked (unsigned long usec)
+{
+       udelay(usec);
+}
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On ARM it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+       return (unsigned long long)get_timer(0);
+}
+
+/*
+ * Return the timebase clock frequency
+ * i.e. how often the timer decrements
+ */
+ulong get_tbclk (void)
+{
+       return (ulong)(((unsigned long long)CFG_HZ_CLOCK)/div_clock);
+}
diff --git a/board/integratorcp/lowlevel_init.S b/board/integratorcp/lowlevel_init.S
new file mode 100644 (file)
index 0000000..18f7d2e
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Board specific setup info
+ *
+ * (C) Copyright 2003, ARM Ltd.
+ * Philippe Robin, <philippe.robin@arm.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>
+
+/* Reset using CM control register */
+.global reset_cpu
+reset_cpu:
+       mov     r0, #CM_BASE
+       ldr     r1,[r0,#OS_CTRL]
+       orr     r1,r1,#CMMASK_RESET
+       str     r1,[r0,#OS_CTRL]
+
+reset_failed:
+       b       reset_failed
+
+/* Set up the platform, once the cpu has been initialized */
+.globl lowlevel_init
+lowlevel_init:
+       /* If U-Boot has been run after the ARM boot monitor
+        * then all the necessary actions have been done
+        * otherwise we are running from user flash mapped to 0x00000000
+        * --- DO NOT REMAP BEFORE THE CODE HAS BEEN RELOCATED --
+        * Changes to the (possibly soft) reset defaults of the processor
+        * itself should be performed in cpu/arm<>/start.S
+        * This function affects only the core module or board settings
+        */
+
+#ifdef CONFIG_CM_INIT
+       /* CM has an initialization register
+        * - bits in it are wired into test-chip pins to force
+        *   reset defaults
+        * - may need to change its contents for U-Boot
+        */
+
+       /* set the desired CM specific value */
+       mov     r2,#CMMASK_LOWVEC       /* Vectors at 0x00000000 for all */
+
+#if defined (CONFIG_CM10200E) || defined (CONFIG_CM10220E)
+       orr     r2,r2,#CMMASK_INIT_102
+#else
+
+#if    !defined (CONFIG_CM920T) && !defined (CONFIG_CM920T_ETM) && \
+       !defined (CONFIG_CM940T)
+       /* CMxx6 code   */
+
+#ifdef CONFIG_CM_MULTIPLE_SSRAM
+       /* set simple mapping                   */
+       and     r2,r2,#CMMASK_MAP_SIMPLE
+#endif /* #ifdef CONFIG_CM_MULTIPLE_SSRAM      */
+
+#ifdef CONFIG_CM_TCRAM
+       /* disable TCRAM                        */
+       and     r2,r2,#CMMASK_TCRAM_DISABLE
+#endif /* #ifdef CONFIG_CM_TCRAM               */
+
+#if defined (CONFIG_CM926EJ_S) || defined (CONFIG_CM1026EJ_S) || \
+                       defined (CONFIG_CM1136JF_S)
+
+       and     r2,r2,#CMMASK_LE
+
+#endif /* cpu with little endian initialization */
+
+       orr     r2,r2,#CMMASK_CMxx6_COMMON
+
+#endif /* CMxx6 code */
+
+#endif /* ARM102xxE value */
+
+       /* read CM_INIT          */
+       mov     r0, #CM_BASE
+       ldr     r1, [r0, #OS_INIT]
+       /* check against desired bit setting */
+       and     r3,r1,r2
+       cmp     r3,r2
+       beq     init_reg_OK
+
+       /* lock for change */
+       mov     r3, #CMVAL_LOCK1
+       and     r3, r3, #CMVAL_LOCK2
+       str     r3, [r0, #OS_LOCK]
+       /* set desired value */
+       orr     r1,r1,r2
+       /* write & relock CM_INIT */
+       str     r1, [r0, #OS_INIT]
+       mov     r1, #CMVAL_UNLOCK
+       str     r1, [r0, #OS_LOCK]
+
+       /* soft reset so new values used */
+       b       reset_cpu
+
+init_reg_OK:
+
+#endif /* CONFIG_CM_INIT */
+
+       mov     pc, lr
+
+#ifdef CONFIG_CM_SPD_DETECT
+       /* Fast memory is available for the DRAM data
+        * - ensure it has been transferred, then summarize the data
+        *       into a CM register
+        */
+.globl dram_query
+dram_query:
+       stmfd   r13!,{r4-r6,lr}
+       /* set up SDRAM info                                    */
+       /* - based on example code from the CM User Guide */
+       mov     r0, #CM_BASE
+
+readspdbit:
+       ldr     r1, [r0, #OS_SDRAM]     /* read the SDRAM register */
+       and     r1, r1, #0x20           /* mask SPD bit (5)              */
+       cmp     r1, #0x20               /* test if set                   */
+       bne     readspdbit
+
+setupsdram:
+       add     r0, r0, #OS_SPD         /* address the copy of the SDP data     */
+       ldrb    r1, [r0, #3]            /* number of row address lines          */
+       ldrb    r2, [r0, #4]            /* number of column address lines       */
+       ldrb    r3, [r0, #5]            /* number of banks                      */
+       ldrb    r4, [r0, #31]           /* module bank density                  */
+       mul     r5, r4, r3              /* size of SDRAM (MB divided by 4)      */
+       mov     r5, r5, ASL#2           /* size in MB                           */
+       mov     r0, #CM_BASE            /* reload for later code                */
+       cmp     r5, #0x10               /* is it 16MB?                          */
+       bne     not16
+       mov     r6, #0x2                /* store size and CAS latency of 2      */
+       b       writesize
+
+not16:
+       cmp     r5, #0x20               /* is it  32MB? */
+       bne     not32
+       mov     r6, #0x6
+       b       writesize
+
+not32:
+       cmp     r5, #0x40               /* is it  64MB? */
+       bne     not64
+       mov     r6, #0xa
+       b       writesize
+
+not64:
+       cmp     r5, #0x80               /* is it 128MB? */
+       bne     not128
+       mov     r6, #0xe
+       b       writesize
+
+not128:
+       /* if it is none of these sizes then it is either 256MB, or
+        * there is no SDRAM fitted so default to 256MB
+        */
+       mov     r6, #0x12
+
+writesize:
+       mov     r1, r1, ASL#8           /* row addr lines from SDRAM reg */
+       orr     r2, r1, r2, ASL#12      /* OR in column address lines    */
+       orr     r3, r2, r3, ASL#16      /* OR in number of banks         */
+       orr     r6, r6, r3              /* OR in size and CAS latency    */
+       str     r6, [r0, #OS_SDRAM]     /* store SDRAM parameters        */
+
+#endif /* #ifdef CONFIG_CM_SPD_DETECT */
+
+       ldmfd   r13!,{r4-r6,pc}                 /* back to caller */
+
+#ifdef CONFIG_CM_REMAP
+       /* CM remap bit is operational
+        * - use it to map writeable memory at 0x00000000, in place of flash
+        */
+.globl cm_remap
+cm_remap:
+       stmfd   r13!,{r4-r10,lr}
+
+       mov     r0, #CM_BASE
+       ldr     r1, [r0, #OS_CTRL]
+       orr     r1, r1, #CMMASK_REMAP   /* set remap and led bits */
+       str     r1, [r0, #OS_CTRL]
+
+       /* Now 0x00000000 is writeable, replace the vectors     */
+       ldr     r0, =_start     /* r0 <- start of vectors       */
+       ldr     r2, =_armboot_start     /* r2 <- past vectors   */
+       sub     r1,r1,r1                /* destination 0x00000000       */
+
+copy_vec:
+       ldmia   r0!, {r3-r10}           /* copy from source address [r0]        */
+       stmia   r1!, {r3-r10}           /* copy to       target address [r1]    */
+       cmp     r0, r2                  /* until source end address [r2]        */
+       ble     copy_vec
+
+       ldmfd   r13!,{r4-r10,pc}        /* back to caller                       */
+
+#endif /* #ifdef CONFIG_CM_REMAP */
similarity index 76%
rename from board/integratorcp/platform.S
rename to board/integratorcp/memsetup.S
index c02051b50ae898c044b0b6872e76c7cafc89709e..dfdc7848fd168652cb23f7167046fcca066a4c62 100644 (file)
@@ -1,8 +1,5 @@
 /*
- * Board specific setup info
- *
- * (C) Copyright 2003, ARM Ltd.
- * Philippe Robin, <philippe.robin@arm.com>
+ * Memory setup for integratorAP
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
+/*
+ *     Memory setup
+ *      - the reset defaults are assumed sufficient
+ */
 
-#include <config.h>
-#include <version.h>
-
-.globl platformsetup
-platformsetup:
-
-       /* All done by IntegratorCP's boot monitor! */
-       mov pc, lr
+.globl memsetup
+memsetup:
+       mov     pc,lr
diff --git a/board/integratorcp/split_by_variant.sh b/board/integratorcp/split_by_variant.sh
new file mode 100755 (executable)
index 0000000..3a35433
--- /dev/null
@@ -0,0 +1,111 @@
+#!/bin/sh
+# ---------------------------------------------------------
+# Set the platform defines
+# ---------------------------------------------------------
+echo -n "/* Integrator configuration implied "   > tmp.fil
+echo    " by Makefile target */"               >> tmp.fil
+echo -n "#define CONFIG_INTEGRATOR"            >> tmp.fil
+echo    " /* Integrator board */"              >> tmp.fil
+echo -n "#define CONFIG_ARCH_CINTEGRATOR"      >> tmp.fil
+echo     " 1 /* Integrator/CP   */"            >> tmp.fil
+
+cpu="arm_intcm"
+variant="unknown core module"
+
+if [ "$1" == "" ]
+then
+       echo "$0:: No parameters - using arm_intcm"
+else
+       case "$1" in
+       ap966)
+       cpu="arm_intcm"
+       variant="unported core module CM966E-S"
+       ;;
+
+       ap922_config)
+       cpu="arm_intcm"
+       variant="unported core module CM922T"
+       ;;
+
+       integratorcp_config     |       \
+       cp_config)
+       cpu="arm_intcm"
+       variant="unspecified core module"
+       ;;
+
+       cp922_XA10_config)
+       cpu="arm_intcm"
+       variant="unported core module CM922T_XA10"
+       echo -n "#define CONFIG_CM922T_XA10"            >> tmp.fil
+       echo    " 1 /* CPU core is ARM922T_XA10 */"     >> tmp.fil
+       ;;
+
+       cp920t_config)
+       cpu="arm920t"
+       variant="Core module CM920T"
+       echo -n "#define CONFIG_CM920T"                 >> tmp.fil
+       echo    " 1 /* CPU core is ARM920T */"          >> tmp.fil
+       ;;
+
+       cp926ejs_config)
+       cpu="arm926ejs"
+       variant="Core module CM926EJ-S"
+       echo -n "#define CONFIG_CM926EJ_S"              >> tmp.fil
+       echo    " 1 /* CPU core is ARM926EJ-S */ "      >> tmp.fil
+       ;;
+
+
+       cp946es_config)
+       cpu="arm946es"
+       variant="Core module CM946E-S"
+       echo -n "#define CONFIG_CM946E_S"               >> tmp.fil
+       echo    " 1 /* CPU core is ARM946E-S */ "       >> tmp.fil
+       ;;
+
+       cp1136_config)
+       cpu="arm1136"
+       variant="Core module CM1136EJF-S"
+       echo -n "#define CONFIG_CM1136EJF_S"            >> tmp.fil
+       echo    " 1 /* CPU core is ARM1136JF-S */ "     >> tmp.fil
+       ;;
+
+       *)
+       echo "$0:: Unknown core module"
+       variant="unknown core module"
+       cpu="arm_intcm"
+       ;;
+
+       esac
+
+fi
+
+if [ "$cpu" == "arm_intcm" ]
+then
+       echo "/* Core module undefined/not ported */"   >> tmp.fil
+       echo "#define CONFIG_ARM_INTCM 1"               >> tmp.fil
+       echo -n "#undef CONFIG_CM_MULTIPLE_SSRAM"       >> tmp.fil
+       echo -n "  /* CM may not have "                 >> tmp.fil
+       echo    "multiple SSRAM mapping */"             >> tmp.fil
+       echo -n "#undef CONFIG_CM_SPD_DETECT "          >> tmp.fil
+       echo -n " /* CM may not support SPD "           >> tmp.fil
+       echo    "query */"                              >> tmp.fil
+       echo -n "#undef CONFIG_CM_REMAP  "              >> tmp.fil
+       echo -n " /* CM may not support "               >> tmp.fil
+       echo    "remapping */"                          >> tmp.fil
+       echo -n "#undef CONFIG_CM_INIT  "               >> tmp.fil
+       echo -n " /* CM may not have  "                 >> tmp.fil
+       echo    "initialization reg */"                 >> tmp.fil
+       echo -n "#undef CONFIG_CM_TCRAM  "              >> tmp.fil
+       echo    " /* CM may not have TCRAM */"          >> tmp.fil
+fi
+mv tmp.fil ./include/config.h
+# ---------------------------------------------------------
+#  Ensure correct core object loaded first in U-Boot image
+# ---------------------------------------------------------
+sed -r 's/CPU_FILE/cpu\/'$cpu'\/start.o/; s/#.*//' board/integratorcp/u-boot.lds.template > board/integratorcp/u-boot.lds
+# ---------------------------------------------------------
+# Complete the configuration
+# ---------------------------------------------------------
+./mkconfig -a integratorcp arm $cpu integratorcp;
+echo "Variant:: $variant with core $cpu"
+
diff --git a/board/integratorcp/u-boot.lds.template b/board/integratorcp/u-boot.lds.template
new file mode 100644 (file)
index 0000000..0ec8087
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * (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
+ */
+# Template used during configuration to emsure the core module processor code,
+# from CPU_FILE, is placed at the start of the image */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+       . = ALIGN(4);
+       .text   :
+       {
+               CPU_FILE (.text)
+               *(.text)
+       }
+       .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 : { *(.bss) }
+       _end = .;
+}
index 5b634e459f525b5f93acd09fa78df108cf435e2b..9dd809b67823784a80df0c171ae6b91e26f106b6 100644 (file)
@@ -114,10 +114,10 @@ int checkboard (void)
 
        puts ("Board: ");
 
-       i = getenv_r ("serial#", buf, sizeof (buf));
+       i = getenv_r ("serial#", (char *)buf, sizeof (buf));
        s = (i > 0) ? buf : NULL;
 
-       if (!s || strncmp (s, "IP860", 5)) {
+       if (!s || strncmp ((char *)s, "IP860", 5)) {
                puts ("### No HW ID - assuming IP860");
        } else {
                for (e = s; *e; ++e) {
@@ -190,9 +190,9 @@ long int initdram (int board_type)
         * Check SDRAM Memory Size
         */
        if (ip860_get_dram_size() == 16)
-               size = dram_size (refresh_val | 0x00804114, (ulong *)SDRAM_BASE, SDRAM_MAX_SIZE);
+               size = dram_size (refresh_val | 0x00804114, SDRAM_BASE, SDRAM_MAX_SIZE);
        else
-               size = dram_size (refresh_val | 0x00906114, (ulong *)SDRAM_BASE, SDRAM_MAX_SIZE);
+               size = dram_size (refresh_val | 0x00906114, SDRAM_BASE, SDRAM_MAX_SIZE);
 
        udelay (1000);
 
index d196731a8033e836d5cf4abc23f3526d33350072..8cb250443571690bbf4c497b858294bd21fe640d 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index b4d65792643d58812c77015db96f9410181e3d15..43d2b3bd60515add73e5b556bcba201cb59c96eb 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index e50250e4567799db43b8579781e25f31036a7f80..0ca9cf5137eac4e1c0a91736f12273fb4c6c8bdc 100644 (file)
@@ -342,7 +342,7 @@ int hwc_serial_number (void)
 {
        int sn = -1;
 
-       if (!seeprom_read (0xa0, (char *) &sn, sizeof (sn))) {
+       if (!seeprom_read (0xa0, (uchar *) &sn, sizeof (sn))) {
                sn = cpu_to_le32 (sn);
        }
        return sn;
@@ -351,7 +351,7 @@ int hwc_mac_address (char *str)
 {
        char mac[6];
 
-       if (!seeprom_read (0xb0, mac, sizeof (mac))) {
+       if (!seeprom_read (0xb0, (uchar *)mac, sizeof (mac))) {
                sprintf (str, "%02x:%02x:%02x:%02x:%02x:%02x\n",
                                 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
        } else {
index 61fb15c6a677caf1d221f57307f67e4521e2d99c..4ea01eab661037ffebe15d8c223cd66dc26e688e 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index fd3489962124ec43c2a18fe33dc558197887a250..d39b8cd53359fd54e375f89208ae358cf627e5c9 100644 (file)
@@ -290,7 +290,7 @@ static int hwc_serial_number (void)
 {
        int sn = -1;
 
-       if (!seeprom_read (0xa0, (char *) &sn, sizeof (sn))) {
+       if (!seeprom_read (0xa0, (uchar *) &sn, sizeof (sn))) {
                sn = cpu_to_le32 (sn);
        }
        return sn;
@@ -300,7 +300,7 @@ static int hwc_mac_address (char *str)
 {
        char mac[6];
 
-       if (!seeprom_read (0xb0, mac, sizeof (mac))) {
+       if (!seeprom_read (0xb0, (uchar *)mac, sizeof (mac))) {
                sprintf (str, "%02X:%02X:%02X:%02X:%02X:%02X",
                                 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
        } else {
index 098c0464cc86a14b7e4c025ae2dc718c4675c6e4..bf8048d27ec6dbb36eba28fe13baa39947586e97 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index cb661c9d28d9c712cc150a8668f54806d0f606fd..7927ea9a50289e16486071a73333f45bbb1f2395 100644 (file)
@@ -251,7 +251,7 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         */
        size_b0 =
-               dram_size (CFG_MBMR_8COL, (ulong *) SDRAM_BASE3_PRELIM,
+               dram_size (CFG_MBMR_8COL, (long *) SDRAM_BASE3_PRELIM,
                           SDRAM_MAX_SIZE);
 
        memctl->memc_mbmr = CFG_MBMR_8COL | MBMR_PTBE;
index ea4fc8f60ae910d5508e10b2364bd5fee414f3aa..fdeabc59e79005bd6acaa53434099b23c6cf610c 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 7b53217071b875dec0447ac8725a6eb1b91d24e1..3214f3f0c869946e795e193704ae107d94d3ebdc 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 80553ba015a9f572042b01d3df6a1889e795fb4c..c04626a34650ac64ca91b9576a9d5881aede3e9d 100644 (file)
@@ -75,6 +75,7 @@ int dram_init (void)
 /**********************************************************/
 
 extern struct pci_controller hose;
+extern void pci_ixp_init(struct pci_controller * hose);
 
 void pci_init_board(void)
 {
index 91ef0302b3af98fcba1753a87c09b760ca6c7d0f..e2ceac7227cbc320e87375020205585a5fdc539a 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 3e54af7d02014012445abbeea3ec16d9b6c8962e..60c111539d47c7956714cb9b1132145d1e8934b5 100644 (file)
@@ -79,6 +79,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -111,11 +112,13 @@ SECTIONS
   _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 = .;
diff --git a/board/kb9202/Makefile b/board/kb9202/Makefile
new file mode 100644 (file)
index 0000000..f36d88d
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+# Adapted for KwikByte KB920x boards - APR2005
+#
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   := kb9202.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/kb9202/config.mk b/board/kb9202/config.mk
new file mode 100644 (file)
index 0000000..9ce161e
--- /dev/null
@@ -0,0 +1 @@
+TEXT_BASE = 0x21f00000
diff --git a/board/kb9202/kb9202.c b/board/kb9202/kb9202.c
new file mode 100644 (file)
index 0000000..4a7cf77
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.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
+ */
+
+/*
+ * Adapted for KwikByte KB920x board from at91rm9200dk.c: 22APR2005
+ */
+
+#include <common.h>
+#include <asm/arch/AT91RM9200.h>
+#include <at91rm9200_net.h>
+#include <lxt971a.h>
+
+/* ------------------------------------------------------------------------- */
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+void lowlevel_init(void) {
+       /* Required by assembly functions - do nothing  */
+}
+
+int board_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* Enable Ctrlc */
+       console_init_f ();
+
+       /* memory and cpu-speed are setup before relocation */
+       /* so we do _nothing_ here */
+
+       gd->bd->bi_arch_number = MACH_TYPE_KB9200;
+
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       return 0;
+}
+
+int dram_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
+       return 0;
+}
+
+#ifdef CONFIG_DRIVER_ETHER
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+unsigned int lxt972_IsPhyConnected (AT91PS_EMAC p_mac);
+UCHAR lxt972_GetLinkSpeed (AT91PS_EMAC p_mac);
+UCHAR lxt972_InitPhy (AT91PS_EMAC p_mac);
+UCHAR lxt972_AutoNegotiate (AT91PS_EMAC p_mac, int *status);
+
+/*
+ * Name:
+ *     at91rm9200_GetPhyInterface
+ * Description:
+ *     Initialise the interface functions to the PHY
+ * Arguments:
+ *     None
+ * Return value:
+ *     None
+ */
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
+{
+       p_phyops->Init = lxt972_InitPhy;
+       p_phyops->IsPhyConnected = lxt972_IsPhyConnected;
+       p_phyops->GetLinkSpeed = lxt972_GetLinkSpeed;
+       p_phyops->AutoNegotiate = lxt972_AutoNegotiate;
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+#endif /* CONFIG_DRIVER_ETHER */
similarity index 91%
rename from board/integratorcp/u-boot.lds
rename to board/kb9202/u-boot.lds
index 33931be12773e399b6daf6c4cd627b2f8d8e567a..76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8 100644 (file)
  */
 
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
 OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
 {
        . = 0x00000000;
+
        . = ALIGN(4);
-       .text   :
+       .text      :
        {
-         cpu/arm926ejs/start.o (.text)
+         cpu/arm920t/start.o   (.text)
          *(.text)
        }
+
+       . = ALIGN(4);
        .rodata : { *(.rodata) }
+
        . = ALIGN(4);
        .data : { *(.data) }
+
        . = ALIGN(4);
        .got : { *(.got) }
 
index 39ee124ebc42ccd71a05ac31c85a28fb9a87f4c1..b7b74998578f3a992781e8c8be45f7f2ec39c917 100644 (file)
@@ -54,9 +54,9 @@
 void load_sernum_ethaddr (void)
 {
        unsigned char *hwi;
-       unsigned char *var;
+       char *var;
        unsigned char hwi_stack[CFG_HWINFO_SIZE];
-       unsigned char *p;
+       char *p;
 
        hwi = (unsigned char *) (CFG_FLASH_BASE + CFG_HWINFO_OFFSET);
        if (*((unsigned long *) hwi) != (unsigned long) CFG_HWINFO_MAGIC) {
@@ -68,11 +68,11 @@ void load_sernum_ethaddr (void)
        /*
         ** ethaddr
         */
-       var = strstr (hwi_stack, ETHADDR_TOKEN);
+       var = strstr ((char *)hwi_stack, ETHADDR_TOKEN);
        if (var) {
                var += sizeof (ETHADDR_TOKEN) - 1;
                p = strchr (var, '\r');
-               if (p < hwi + CFG_HWINFO_SIZE) {
+               if ((unsigned char *)p < hwi + CFG_HWINFO_SIZE) {
                        *p = '\0';
                        setenv ("ethaddr", var);
                        *p = '\r';
@@ -81,11 +81,11 @@ void load_sernum_ethaddr (void)
        /*
         ** lcd
         */
-       var = strstr (hwi_stack, LCD_TOKEN);
+       var = strstr ((char *)hwi_stack, LCD_TOKEN);
        if (var) {
                var += sizeof (LCD_TOKEN) - 1;
                p = strchr (var, '\r');
-               if (p < hwi + CFG_HWINFO_SIZE) {
+               if ((unsigned char *)p < hwi + CFG_HWINFO_SIZE) {
                        *p = '\0';
                        setenv ("lcd", var);
                        *p = '\r';
index c352c8b67172aca871cfdba13af60ea5f464ec81..e621c436ffd25837d4cd8332a7ea5c597cd13d22 100644 (file)
@@ -327,7 +327,7 @@ void lcd_logo (bd_t * bd)
        int r = 8, g = 8, b = 4;
        int r1, g1, b1;
        int n;
-       uchar tmp[64];          /* long enough for environment variables */
+       char tmp[64];           /* long enough for environment variables */
        int tft = 0;
 
        immr->im_cpm.cp_pbpar &= ~(PB_LCD_PWM);
@@ -453,7 +453,7 @@ void lcd_logo (bd_t * bd)
        }
 
        /* copy bitmap */
-       fb = (char *) (fb_info.VmemAddr);
+       fb = (uchar *) (fb_info.VmemAddr);
        memcpy (fb, (uchar *) CONFIG_KUP4K_LOGO, 320 * 240);
 }
 #endif /* CONFIG_KUP4K_LOGO */
index 233913633b969e6260f13efcdb1767de4041cb38..8625999df40b9d75b7706e4822f711d0be30030c 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 4e369d50ef0d69465a17ad1b71896e365d4d779e..c0cf1cb74762dedf9973f03b63affc40de9bbc1d 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 233913633b969e6260f13efcdb1767de4041cb38..8625999df40b9d75b7706e4822f711d0be30030c 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 4e369d50ef0d69465a17ad1b71896e365d4d779e..c0cf1cb74762dedf9973f03b63affc40de9bbc1d 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index aa96a16c5156c929b6b56b088646a30276b4f6c5..417dbbb05b0a669f4150e9a4e633fc5334866e15 100644 (file)
@@ -171,7 +171,7 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         */
        size_b0 = dram_size (CFG_MAMR_8COL,
-                            (ulong *) SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
+                            (long *) SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        memctl->memc_mamr = CFG_MAMR_8COL | MAMR_PTAE;
 
index 1f8581ca3d15c6f228388ed245888d5feef10de1..29ecabd9b31615d260086c677d992b1990375fa5 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index c64087dbe3deee5f3a1cc663571029e009f6e022..65b25b926a70c9d5be8284f2019437b03b5e98a9 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index bfb7c38cc89f799ab487fc80f65eb2140471c9d2..258bece23cf59813a511d23556e4da02ff940c25 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 719d8b19fd0adc6293b5a584b727313f7757558c..156b871e57bc854e0d17ae47ae422787ba7670e1 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 788c8644514332ad33a38bc6e5806ad97f030a8e..54f0aeb81fbd98fb658897bef1db9b9e9152e30a 100644 (file)
@@ -100,10 +100,10 @@ In U-Boot werden folgende Environment-Variablen gesetzt und abgespei-
 chert:
 
 (1)    => setenv magic_keys 01234#X
-(2)    => setenv key_cmd# setenv addfb setenv bootargs \\$(bootargs) console=tty0 console=ttyS1,\\$(baudrate)
-(3)    => setenv nfsargs setenv bootargs root=/dev/nfs rw nfsroot=\$(serverip):\$(rootpath)
-(4)    => setenv addip setenv bootargs \$(bootargs) ip=\$(ipaddr):\$(serverip):\$(gatewayip):\$(netmask):\$(hostname)::off panic=1
-(5)    => setenv addfb setenv bootargs \$(bootargs) console=ttyS1,\$(baudrate)
+(2)    => setenv key_cmd# setenv addfb setenv bootargs \\${bootargs} console=tty0 console=ttyS1,\\${baudrate}
+(3)    => setenv nfsargs setenv bootargs root=/dev/nfs rw nfsroot=\${serverip}:\${rootpath}
+(4)    => setenv addip setenv bootargs \${bootargs} ip=\${ipaddr}:\${serverip}:\${gatewayip}:\${netmask}:\${hostname}::off panic=1
+(5)    => setenv addfb setenv bootargs \${bootargs} console=ttyS1,\${baudrate}
 (6)    => setenv bootcmd bootp\;run nfsargs\;run addip\;run addfb\;bootm
 
 Hierbei wird die Linux Commandline (in der Variablen  "bootargs")  im
index 7cf57788b8b311eb5162a2fe88ff773f7ac41b04..a174b57b70edf09f81a1c3d710f6f3a607a8387d 100644 (file)
@@ -266,14 +266,14 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *)SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
+       size8 = dram_size (CFG_MAMR_8COL, (long *)SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        udelay (1000);
 
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *)SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
+       size9 = dram_size (CFG_MAMR_9COL, (long *)SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
                size_b0 = size9;
@@ -574,11 +574,11 @@ int misc_init_r (void)
        DECLARE_GLOBAL_DATA_PTR;
 
        uchar kbd_data[KEYBD_DATALEN];
-       uchar keybd_env[2 * KEYBD_DATALEN + 1];
+       char keybd_env[2 * KEYBD_DATALEN + 1];
        uchar kbd_init_status = gd->kbd_status >> 8;
        uchar kbd_status = gd->kbd_status;
        uchar val;
-       uchar *str;
+       char *str;
        int i;
 
        if (kbd_init_status) {
@@ -617,7 +617,7 @@ int misc_init_r (void)
        }
        setenv ("keybd", keybd_env);
 
-       str = strdup (key_match (kbd_data));    /* decode keys */
+       str = strdup ((char *)key_match (kbd_data));    /* decode keys */
 #ifdef KEYBD_SET_DEBUGMODE
        if (kbd_data[0] == KEYBD_SET_DEBUGMODE) {       /* set debug mode */
                if ((console_assign (stdout, "lcd") < 0) ||
@@ -649,11 +649,11 @@ static int compare_magic (uchar *kbd_data, uchar *str)
        /* Don't include modifier byte */
        memcpy (compare, kbd_data+1, KEYBD_DATALEN-1);
 
-       for (; str != NULL; str = (*nxt) ? nxt+1 : nxt) {
+       for (; str != NULL; str = (*nxt) ? (uchar *)(nxt+1) : (uchar *)nxt) {
                uchar c;
                int k;
 
-               c = (uchar) simple_strtoul (str, (char **) (&nxt), 16);
+               c = (uchar) simple_strtoul ((char *)str, (char **) (&nxt), 16);
 
                if (str == (uchar *)nxt) {      /* invalid character */
                        break;
@@ -719,9 +719,9 @@ V* Verification: dzu@denx.de
  ***********************************************************************/
 static uchar *key_match (uchar *kbd_data)
 {
-       uchar magic[sizeof (kbd_magic_prefix) + 1];
+       char magic[sizeof (kbd_magic_prefix) + 1];
        uchar *suffix;
-       uchar *kbd_magic_keys;
+       char *kbd_magic_keys;
 
        /*
         * The following string defines the characters that can pe appended
@@ -737,13 +737,13 @@ static uchar *key_match (uchar *kbd_data)
        /* loop over all magic keys;
         * use '\0' suffix in case of empty string
         */
-       for (suffix=kbd_magic_keys; *suffix || suffix==kbd_magic_keys; ++suffix) {
+       for (suffix=(uchar *)kbd_magic_keys; *suffix || suffix==(uchar *)kbd_magic_keys; ++suffix) {
                sprintf (magic, "%s%c", kbd_magic_prefix, *suffix);
 #if 0
                printf ("### Check magic \"%s\"\n", magic);
 #endif
-               if (compare_magic(kbd_data, getenv(magic)) == 0) {
-                       uchar cmd_name[sizeof (kbd_command_prefix) + 1];
+               if (compare_magic(kbd_data, (uchar *)getenv(magic)) == 0) {
+                       char cmd_name[sizeof (kbd_command_prefix) + 1];
                        char *cmd;
 
                        sprintf (cmd_name, "%s%c", kbd_command_prefix, *suffix);
@@ -754,7 +754,7 @@ static uchar *key_match (uchar *kbd_data)
                                        cmd_name, cmd ? cmd : "<<NULL>>");
 #endif
                        *kbd_data = *suffix;
-                       return (cmd);
+                       return ((uchar *)cmd);
                }
        }
 #if 0
@@ -863,7 +863,7 @@ V* Verification: dzu@denx.de
 int do_kbd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        uchar kbd_data[KEYBD_DATALEN];
-       uchar keybd_env[2 * KEYBD_DATALEN + 1];
+       char keybd_env[2 * KEYBD_DATALEN + 1];
        uchar val;
        int i;
 
@@ -1044,7 +1044,7 @@ static int key_pressed(void)
        i2c_write (kbd_addr, 0, 0, &val, 1);
        i2c_read (kbd_addr, 0, 0, kbd_data, KEYBD_DATALEN);
 
-       return (compare_magic(kbd_data, CONFIG_MODEM_KEY_MAGIC) == 0);
+       return (compare_magic(kbd_data, (uchar *)CONFIG_MODEM_KEY_MAGIC) == 0);
 }
 #endif /* CONFIG_MODEM_SUPPORT */
 
@@ -1063,6 +1063,6 @@ int post_hotkeys_pressed(void)
        i2c_write (kbd_addr, 0, 0, &val, 1);
        i2c_read (kbd_addr, 0, 0, kbd_data, KEYBD_DATALEN);
 
-       return (compare_magic(kbd_data, CONFIG_POST_KEY_MAGIC) == 0);
+       return (compare_magic(kbd_data, (uchar *)CONFIG_POST_KEY_MAGIC) == 0);
 }
 #endif
index fffa79eab114f20b4a61bf96a1c07319ee5583a4..6505d45561988ebeed27d0315782eaf8141a40d9 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 153286be44dd91d0ed3ef3e027fe58eba7645710..828afbbced10c8a199fb4b1cd2bd91d4334871be 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index f4aa16a72d64a7f78a40be7a2d9511a57c17f0ee..f7dc0709040af5dca7a1ae029497bca26d768c36 100644 (file)
@@ -110,11 +110,13 @@ SECTIONS
   _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 = .;
index d790018d2ddad4096dac0c80de372293b9219c01..c461d20e51817d053c2ae842f7dc46dc8b209a82 100644 (file)
@@ -110,10 +110,12 @@ SECTIONS
   _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 = .;
index c1ee544bf2cf666b67cf7cffe9c077cdc106590a..1400cea157e02241cc31ffc3049fecf539ffd14e 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 0245f78fc8a8c28c9660a999fed9928ea7d2c839..650572d4d05d996a0385b36e536bebf4b5094019 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 4f805a663b1e4d6504fbf54be52b05b3fc87c63e..87cb1ff18e1f76a4389c826bbe446442b526da86 100644 (file)
@@ -216,7 +216,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last) {
        return rc;
 }
 
-volatile static int write_word (flash_info_t *info, ulong dest, unsigned long long data) {
+static int write_word (flash_info_t *info, ulong dest, unsigned long long data) {
 
        volatile unsigned long long *addr=(unsigned long long *)dest;
        unsigned long long result;
index ff5f816796204388bba6a784bde765c515fefda5..f32e512d4f35ae6dbedb2dc5d11d57d1b41665d0 100644 (file)
@@ -30,8 +30,8 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
-       unsigned char *e;
+       char *s = getenv ("serial#");
+       char *e;
 
        if (!s || strncmp (s, "ML2", 9)) {
                printf ("### No HW ID - assuming ML2");
index 07275d3bd7a2513df4407d1edf926998bacf0908..f8e9e33748a5bedd92c57d26988920fba7456d74 100644 (file)
@@ -64,7 +64,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -84,6 +84,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -116,11 +117,13 @@ SECTIONS
   _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 = .;
index d483424ad6de09c5fff24218e17ad2797f004a38..1608f8cdaa38f02898160fe0bc028be7cdd51f20 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 98997904d480b6e1e10756a43788e7b0cf734476..5b70a40aab6f6267d375a42e330cd3a5724e54dc 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 61aacce5db0747e9b14006cecbfdc8015d0655ca..d5dda7a8e734e4bf1c0b09bc8b410725d8dc70a0 100644 (file)
@@ -132,7 +132,7 @@ pins 1-2 and follow the procedure below to FLASH a bootrom
 tftp 100000 u-boot.bin
 protect off FFF00000 FFF7FFFF
 erase FFF00000 FFF7FFFF
-cp.b 100000 FFF00000 \$(filesize)\
+cp.b 100000 FFF00000 \${filesize}\
 
 
 Here is an example:
@@ -169,7 +169,7 @@ into the onboard FLASH region (AMD29LV160DB 2MB FLASH):
 tftp 100000 u-boot.bin
 protect off FFF80000 FFFFFFFF
 erase FFF80000 FFFFFFFF
-cp.b 100000 FFF80000 \$(filesize)\
+cp.b 100000 FFF80000 \${filesize}\
 
 
 C. FLASH KERNEL REGION (960KB)
@@ -183,7 +183,7 @@ The following commands will FLASH a kernel image to 0xffe10000
 tftp 100000 vmlinux.img
 protect off FFE10000 FFEFFFFF
 erase FFE10000 FFEFFFFF
-cp.b 100000 FFE10000 \$(filesize)\
+cp.b 100000 FFE10000 \${filesize}\
 reset
 
 Here is an example:
index 82ef5fe15a3ee82e893ab85df8adbb09cad6cbac..57358b8a49dcb69640e30cf2a47be7ccc7e40078 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 9b46554b979fc8bdf99bad067f21eee9091c118e..5a5722e81a3b429b1b95d9b37bde66965173b16f 100644 (file)
@@ -70,6 +70,8 @@ SECTIONS
     . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
diff --git a/board/mp2usb/Makefile b/board/mp2usb/Makefile
new file mode 100644 (file)
index 0000000..b6ea3cf
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   := mp2usb.o flash.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/mp2usb/config.mk b/board/mp2usb/config.mk
new file mode 100644 (file)
index 0000000..e299bfd
--- /dev/null
@@ -0,0 +1,3 @@
+TEXT_BASE = 0x27F00000
+## For testing: load at 0x20100000 and "go" at 0x201000A4
+#TEXT_BASE = 0x20100000
similarity index 54%
rename from board/omap5912osk/flash.c
rename to board/mp2usb/flash.c
index fd6b9c0bbd69716c0a9bda17f96876f0ab62b5be..89ced163bb7aaf056f6aba012f2532576664329d 100644 (file)
@@ -2,16 +2,11 @@
  * (C) Copyright 2001
  * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
  *
- * (C) Copyright 2001-2004
+ * (C) Copyright 2001
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * (C) Copyright 2003
- * Texas Instruments, <www.ti.com>
- * Kshitij Gupta <Kshitij@ti.com>
-
- * (C) Copyright 2004
- * Texas Instruments <www.ti.com>
- * Rishi Bhattacharya
+ * Modified for the MP2USB by (C) Copyright 2005 Eric Benard
+ * ebenard@eukrea.com
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -23,7 +18,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
 #include <common.h>
 #include <linux/byteorder/swab.h>
 
-#define PHYS_FLASH_SECT_SIZE   0x00020000      /* 256 KB sectors (x2) */
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips    */
+#define CFG_MAX_FLASH_BANKS    1
+#define PHYS_FLASH_SECT_SIZE   0x00020000 /* 128 KB sectors (x1) */
 
-/* Board support for 1 or 2 flash devices */
-#undef FLASH_PORT_WIDTH32
-#define FLASH_PORT_WIDTH16
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips */
 
-#ifdef FLASH_PORT_WIDTH16
 #define FLASH_PORT_WIDTH       ushort
 #define FLASH_PORT_WIDTHV      vu_short
 #define SWAP(x)                        __swab16(x)
-#else
-#define FLASH_PORT_WIDTH       ulong
-#define FLASH_PORT_WIDTHV      vu_long
-#define SWAP(x)                        __swab32(x)
-#endif
 
-#define FPW    FLASH_PORT_WIDTH
-#define FPWV   FLASH_PORT_WIDTHV
+#define FPW                    FLASH_PORT_WIDTH
+#define FPWV                   FLASH_PORT_WIDTHV
 
 #define mb() __asm__ __volatile__ ("" : : : "memory")
 
-
-/* Flash Organization Structure */
-typedef struct OrgDef {
-       unsigned int sector_number;
-       unsigned int sector_size;
-} OrgDef;
-
-
-/* Flash Organizations */
-OrgDef OrgIntel_28F256L18T[] = {
-       {4, 32 * 1024},                         /* 4 * 32kBytes sectors */
-       {255, 128 * 1024},                      /* 255 * 128kBytes sectors */
-};
-
+/* Intel-compatible flash commands */
+#define INTEL_PROGRAM  0x00100010
+#define INTEL_ERASE    0x00200020
+#define INTEL_PROG     0x00400040
+#define INTEL_CLEAR    0x00500050
+#define INTEL_LOCKBIT  0x00600060
+#define INTEL_PROTECT  0x00010001
+#define INTEL_STATUS   0x00700070
+#define INTEL_READID   0x00900090
+#define INTEL_SUSPEND  0x00B000B0
+#define INTEL_CONFIRM  0x00D000D0
+#define INTEL_RESET    0xFFFFFFFF
+
+/* Intel-compatible flash status bits */
+#define INTEL_FINISHED 0x00800080
+#define INTEL_OK       0x00800080
 
 /*-----------------------------------------------------------------------
  * Functions
  */
-unsigned long flash_init (void);
-static ulong flash_get_size (FPW * addr, flash_info_t * info);
-static int write_data (flash_info_t * info, ulong dest, FPW data);
-static void flash_get_offsets (ulong base, flash_info_t * info);
+static ulong flash_get_size (FPW *addr, flash_info_t *info);
+static int write_data (flash_info_t *info, ulong dest, FPW data);
+static void flash_get_offsets (ulong base, flash_info_t *info);
 void inline spin_wheel (void);
-void flash_print_info (flash_info_t * info);
-void flash_unprotect_sectors (FPWV * addr);
-int flash_erase (flash_info_t * info, int s_first, int s_last);
-int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt);
 
 /*-----------------------------------------------------------------------
  */
@@ -92,6 +76,7 @@ unsigned long flash_init (void)
 {
        int i;
        ulong size = 0;
+
        for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
                switch (i) {
                case 0:
@@ -107,46 +92,39 @@ unsigned long flash_init (void)
 
        /* Protect monitor and environment sectors
         */
-       flash_protect (FLAG_PROTECT_SET,
+       flash_protect ( FLAG_PROTECT_SET,
                        CFG_FLASH_BASE,
-                       CFG_FLASH_BASE + monitor_flash_len - 1, &flash_info[0]);
+                       CFG_FLASH_BASE + monitor_flash_len - 1,
+                       &flash_info[0] );
 
-       flash_protect (FLAG_PROTECT_SET,
+       flash_protect ( FLAG_PROTECT_SET,
                        CFG_ENV_ADDR,
-                       CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
+                       CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0] );
 
        return size;
 }
 
 /*-----------------------------------------------------------------------
  */
-static void flash_get_offsets (ulong base, flash_info_t * info)
+static void flash_get_offsets (ulong base, flash_info_t *info)
 {
        int i;
-       OrgDef *pOrgDef;
 
-       pOrgDef = OrgIntel_28F256L18T;
        if (info->flash_id == FLASH_UNKNOWN) {
                return;
        }
 
        if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) {
                for (i = 0; i < info->sector_count; i++) {
-                       if (i > 255) {
-                               info->start[i] = base + (i * 0x8000);
-                               info->protect[i] = 0;
-                       } else {
-                               info->start[i] = base +
-                                               (i * PHYS_FLASH_SECT_SIZE);
-                               info->protect[i] = 0;
-                       }
+                       info->start[i] = base + (i * PHYS_FLASH_SECT_SIZE);
+                       info->protect[i] = 0;
                }
        }
 }
 
 /*-----------------------------------------------------------------------
  */
-void flash_print_info (flash_info_t * info)
+void flash_print_info (flash_info_t *info)
 {
        int i;
 
@@ -165,11 +143,11 @@ void flash_print_info (flash_info_t * info)
        }
 
        switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F256L18T:
-               printf ("FLASH 28F256L18T\n");
+       case FLASH_28F640J3A:
+               printf ("28F640J3A\n");
                break;
        case FLASH_28F128J3A:
-               printf ("FLASH 28F128J3A\n");
+               printf ("28F128J3A\n");
                break;
        default:
                printf ("Unknown Chip Type\n");
@@ -184,7 +162,8 @@ void flash_print_info (flash_info_t * info)
                if ((i % 5) == 0)
                        printf ("\n   ");
                printf (" %08lX%s",
-                       info->start[i], info->protect[i] ? " (RO)" : "     ");
+                       info->start[i],
+                       info->protect[i] ? " (RO)" : "     ");
        }
        printf ("\n");
        return;
@@ -193,7 +172,7 @@ void flash_print_info (flash_info_t * info)
 /*
  * The following code cannot be run from FLASH!
  */
-static ulong flash_get_size (FPW * addr, flash_info_t * info)
+static ulong flash_get_size (FPW *addr, flash_info_t *info)
 {
        volatile FPW value;
 
@@ -210,41 +189,31 @@ static ulong flash_get_size (FPW * addr, flash_info_t * info)
        case (FPW) INTEL_MANUFACT:
                info->flash_id = FLASH_MAN_INTEL;
                break;
-             case (FPW) MT2_MANUFACT:
-               info->flash_id = FLASH_MAN_INTEL;
-               break;
 
        default:
                info->flash_id = FLASH_UNKNOWN;
                info->sector_count = 0;
                info->size = 0;
-               addr[0] = (FPW) 0x00FF00FF;     /* restore read mode */
-               return (0);             /* no or unknown flash  */
+               addr[0] = (FPW) INTEL_RESET;    /* restore read mode */
+               return (0);                     /* no or unknown flash  */
        }
 
        mb ();
-       value = addr[1];        /* device ID        */
+       value = addr[1];                        /* device ID        */
+
        switch (value) {
 
-       case (FPW) (INTEL_ID_28F256L18T):
-               info->flash_id += FLASH_28F256L18T;
-               info->sector_count = 259;
-               info->size = 0x02000000;
-               break;                  /* => 32 MB     */
-
-             case (FPW) (INTEL_ID_28F256K3):
-               info->flash_id +=FLASH_28F256K3;
-               info->sector_count = 259;
-               info->size = 0x02000000;
-               debug ("Intel StrataFlash 28F256K3C device initialized\n");
-               break;                  /* => 32 MB     */
-
-       case (FPW) (INTEL_ID_28F128J3A):
-               info->flash_id +=FLASH_28F128J3A;
-               info->sector_count = 259;
-               info->size = 0x02000000;
-               debug ("Micron StrataFlash MT28F128J3 device initialized\n");
-               break;                  /* => 32 MB     */
+       case (FPW) INTEL_ID_28F640J3A:
+               info->flash_id += FLASH_28F640J3A;
+               info->sector_count = 64;
+               info->size = 0x00800000;
+               break;                          /* => 8 MB     */
+
+       case (FPW) INTEL_ID_28F128J3A:
+               info->flash_id += FLASH_28F128J3A;
+               info->sector_count = 128;
+               info->size = 0x01000000;
+               break;                          /* => 16 MB     */
 
        default:
                info->flash_id = FLASH_UNKNOWN;
@@ -253,47 +222,25 @@ static ulong flash_get_size (FPW * addr, flash_info_t * info)
 
        if (info->sector_count > CFG_MAX_FLASH_SECT) {
                printf ("** ERROR: sector count %d > max (%d) **\n",
-                               info->sector_count, CFG_MAX_FLASH_SECT);
+                       info->sector_count, CFG_MAX_FLASH_SECT);
                info->sector_count = CFG_MAX_FLASH_SECT;
        }
 
-       addr[0] = (FPW) 0x00FF00FF;     /* restore read mode */
+       addr[0] = (FPW) INTEL_RESET;            /* restore read mode */
 
        return (info->size);
 }
 
 
-/* unprotects a sector for write and erase
- * on some intel parts, this unprotects the entire chip, but it
- * wont hurt to call this additional times per sector...
- */
-void flash_unprotect_sectors (FPWV * addr)
-{
-#define PD_FINTEL_WSMS_READY_MASK    0x0080
-
-FPW status;
-
-       *addr = (FPW) 0x00500050;       /* clear status register */
-
-       /* this sends the clear lock bit command */
-       *addr = (FPW) 0x00600060;
-       *addr = (FPW) 0x00D000D0;
-
-             while (((status =*addr) & (FPW) 0x00800080) != (FPW) 0x00800080);
-
-             *addr = (FPW) 0x00FF00FF;
-
-}
-
-
 /*-----------------------------------------------------------------------
  */
 
-int flash_erase (flash_info_t * info, int s_first, int s_last)
+int flash_erase (flash_info_t *info, int s_first, int s_last)
 {
-       int flag, prot, sect;
+       int prot, sect;
        ulong type, start, last;
        int rcode = 0;
+       int cflag, iflag;
 
        if ((s_first < 0) || (s_first > s_last)) {
                if (info->flash_id == FLASH_UNKNOWN) {
@@ -307,7 +254,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
        type = (info->flash_id & FLASH_VENDMASK);
        if ((type != FLASH_MAN_INTEL)) {
                printf ("Can't erase unknown flash type %08lx - aborted\n",
-                               info->flash_id);
+                       info->flash_id);
                return 1;
        }
 
@@ -320,56 +267,64 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
 
        if (prot) {
                printf ("- Warning: %d protected sectors will not be erased!\n",
-                               prot);
+                       prot);
        } else {
                printf ("\n");
        }
 
-
        start = get_timer (0);
        last = start;
 
+       /*
+        * Disable interrupts which might cause a timeout
+        * here. Remember that our exception vectors are
+        * at address 0 in the flash, and we don't want a
+        * (ticker) exception to happen while the flash
+        * chip is in programming mode.
+        */
+       cflag = icache_status ();
+       icache_disable ();
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
+       iflag = disable_interrupts ();
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect <= s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
+               if (info->protect[sect] == 0) { /* not protected */
                        FPWV *addr = (FPWV *) (info->start[sect]);
                        FPW status;
 
                        printf ("Erasing sector %2d ... ", sect);
 
-                       flash_unprotect_sectors (addr);
-
                        /* arm simple, non interrupt dependent timer */
                        reset_timer_masked ();
 
-                       *addr = (FPW) 0x00500050;/* clear status register */
-                       *addr = (FPW) 0x00200020;/* erase setup */
-                       *addr = (FPW) 0x00D000D0;/* erase confirm */
+                       *addr = (FPW) INTEL_CLEAR;      /* clear status register */
+                       *addr = (FPW) INTEL_ERASE;      /* erase setup */
+                       *addr = (FPW) INTEL_CONFIRM;    /* erase confirm */
 
-                       while (((status =
-                               *addr) & (FPW) 0x00800080) !=
-                               (FPW) 0x00800080) {
-                                       if (get_timer_masked () >
-                                       CFG_FLASH_ERASE_TOUT) {
+                       while (((status = *addr) & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
+                               if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
                                        printf ("Timeout\n");
-                                       /* suspend erase     */
-                                       *addr = (FPW) 0x00B000B0;
-                                       /* reset to read mode */
-                                       *addr = (FPW) 0x00FF00FF;
+                                       *addr = (FPW) INTEL_SUSPEND;    /* suspend erase     */
+                                       *addr = (FPW) INTEL_RESET;      /* reset to read mode */
                                        rcode = 1;
                                        break;
                                }
                        }
 
-                       /* clear status register cmd.   */
-                       *addr = (FPW) 0x00500050;
-                       *addr = (FPW) 0x00FF00FF;/* resest to read mode */
+                       *addr = (FPWV)INTEL_CLEAR;      /* clear status register cmd.   */
+                       *addr = (FPWV)INTEL_RESET;      /* resest to read mode          */
+
                        printf (" done\n");
                }
        }
+
+       if (iflag)
+               enable_interrupts ();
+
+       if (cflag)
+               icache_enable ();
+
        return rcode;
 }
 
@@ -381,7 +336,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
  * 4 - Flash not identified
  */
 
-int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
+int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
 {
        ulong cp, wp;
        FPW data;
@@ -390,14 +345,10 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
        if (info->flash_id == FLASH_UNKNOWN) {
                return 4;
        }
-/* get lower word aligned address */
-#ifdef FLASH_PORT_WIDTH16
+
+       /* get lower word aligned address */
        wp = (addr & ~1);
        port_width = 2;
-#else
-       wp = (addr & ~3);
-       port_width = 4;
-#endif
 
        /*
         * handle unaligned start bytes
@@ -467,33 +418,51 @@ int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
  * 1 - write timeout
  * 2 - Flash not erased
  */
-static int write_data (flash_info_t * info, ulong dest, FPW data)
+static int write_data (flash_info_t *info, ulong dest, FPW data)
 {
        FPWV *addr = (FPWV *) dest;
        ulong status;
-       int flag;
+       int cflag, iflag;
 
        /* Check if Flash is (sufficiently) erased */
        if ((*addr & data) != data) {
-               printf ("not erased at %08lx (%x)\n", (ulong) addr, *addr);
+               printf ("not erased at %08lx (%lx)\n", (ulong) addr, *addr);
                return (2);
        }
+       /*
+        * Disable interrupts which might cause a timeout
+        * here. Remember that our exception vectors are
+        * at address 0 in the flash, and we don't want a
+        * (ticker) exception to happen while the flash
+        * chip is in programming mode.
+        */
+       cflag = icache_status ();
+       icache_disable ();
        /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
-       *addr = (FPW) 0x00400040;       /* write setup */
+       iflag = disable_interrupts ();
+
+       *addr = (FPW) INTEL_PROG;       /* write setup */
        *addr = data;
 
        /* arm simple, non interrupt dependent timer */
        reset_timer_masked ();
 
        /* wait while polling the status register */
-       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
+       while (((status = *addr) & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
                if (get_timer_masked () > CFG_FLASH_WRITE_TOUT) {
-                       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
+                       *addr = (FPW) INTEL_RESET;      /* restore read mode */
                        return (1);
                }
        }
-       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
+
+       *addr = (FPW) INTEL_RESET;      /* restore read mode */
+
+       if (iflag)
+               enable_interrupts ();
+
+       if (cflag)
+               icache_enable ();
+
        return (0);
 }
 
@@ -505,3 +474,79 @@ void inline spin_wheel (void)
        printf ("\010%c", w[p]);
        (++p == 3) ? (p = 0) : 0;
 }
+
+/*-----------------------------------------------------------------------
+ * Set/Clear sector's lock bit, returns:
+ * 0 - OK
+ * 1 - Error (timeout, voltage problems, etc.)
+ */
+int flash_real_protect(flash_info_t *info, long sector, int prot)
+{
+       int i;
+       int rc = 0;
+       FPWV *addr = (FPWV *)(info->start[sector]);
+       int flag = disable_interrupts();
+
+       *addr = (FPW) INTEL_CLEAR;      /* Clear status register */
+       if (prot) {                     /* Set sector lock bit */
+               *addr = (FPW) INTEL_LOCKBIT;    /* Sector lock bit */
+               *addr = (FPW) INTEL_PROTECT;    /* set */
+       }
+       else {                          /* Clear sector lock bit */
+               *addr = (FPW) INTEL_LOCKBIT;    /* All sectors lock bits */
+               *addr = (FPW) INTEL_CONFIRM;    /* clear */
+       }
+
+       reset_timer_masked ();
+
+       while ((*addr & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
+               if (get_timer_masked () > CFG_FLASH_UNLOCK_TOUT) {
+                       printf("Flash lock bit operation timed out\n");
+                       rc = 1;
+                       break;
+               }
+       }
+
+       if (*addr != (FPW) INTEL_OK) {
+               printf("Flash lock bit operation failed at %08X, CSR=%08X\n",
+                      (uint)addr, (uint)*addr);
+               rc = 1;
+       }
+
+       if (!rc)
+               info->protect[sector] = prot;
+
+       /*
+        * Clear lock bit command clears all sectors lock bits, so
+        * we have to restore lock bits of protected sectors.
+        */
+       if (!prot)
+       {
+               for (i = 0; i < info->sector_count; i++)
+               {
+                       if (info->protect[i])
+                       {
+                               reset_timer_masked ();
+                               addr = (FPWV *) (info->start[i]);
+                               *addr = (FPW) INTEL_LOCKBIT;    /* Sector lock bit */
+                               *addr = (FPW) INTEL_PROTECT;    /* set */
+                               while ((*addr & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED)
+                               {
+                                       if (get_timer_masked () > CFG_FLASH_UNLOCK_TOUT)
+                                       {
+                                               printf("Flash lock bit operation timed out\n");
+                                               rc = 1;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if (flag)
+               enable_interrupts();
+
+       *addr = (FPW) INTEL_RESET;              /* Reset to read array mode */
+
+       return rc;
+}
diff --git a/board/mp2usb/mp2usb.c b/board/mp2usb/mp2usb.c
new file mode 100644 (file)
index 0000000..e75be1e
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * Modified for the MP2USB by (C) Copyright 2005 Eric Benard
+ * ebenard@eukrea.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/arch/AT91RM9200.h>
+#include <at91rm9200_net.h>
+#include <dm9161.h>
+#include <asm/mach-types.h>
+
+/* ------------------------------------------------------------------------- */
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+int board_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* Enable Ctrlc */
+       console_init_f ();
+
+       /* memory and cpu-speed are setup before relocation */
+       /* so we do _nothing_ here */
+
+       /* arch number of MP2USB-Board. */
+       gd->bd->bi_arch_number = MACH_TYPE_MP2USB;
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       return 0;
+}
+
+int dram_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
+       return 0;
+}
+
+#ifdef CONFIG_DRIVER_ETHER
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+/*
+ * Name:
+ *     at91rm9200_GetPhyInterface
+ * Description:
+ *     Initialise the interface functions to the PHY
+ * Arguments:
+ *     None
+ * Return value:
+ *     None
+ */
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
+{
+       p_phyops->Init = dm9161_InitPhy;
+       p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
+       p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
+       p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+#endif /* CONFIG_DRIVER_ETHER */
diff --git a/board/mp2usb/u-boot.lds b/board/mp2usb/u-boot.lds
new file mode 100644 (file)
index 0000000..76df6b2
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * (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_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text      :
+       {
+         cpu/arm920t/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 : { *(.bss) }
+       _end = .;
+}
index fea9173cdd970df4f6858b44e06748f1cbd36e08..93550e2ad01be9730f7e4f2cd4ea51ba433afef7 100644 (file)
  * Yuli Barcohen <yuli@arabellasw.com>
  * Added support for SDRAM DIMMs SPD EEPROM, MII, Ethernet PHY init.
  *
+ * Copyright (c) 2005 MontaVista Software, Inc.
+ * Vitaly Bordug <vbordug@ru.mvista.com>
+ * Added support for PCI.
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -39,6 +43,9 @@
 #include <i2c.h>
 #include <spd.h>
 #include <miiphy.h>
+#ifdef CONFIG_PCI
+#include <pci.h>
+#endif
 
 /*
  * I/O Port configuration table
@@ -231,8 +238,9 @@ void reset_phy (void)
         * Do not bypass Rx/Tx (de)scrambler (fix configuration error)
         * Enable autonegotiation.
         */
-       miiphy_write(CFG_PHY_ADDR, 16, 0x610);
-       miiphy_write(CFG_PHY_ADDR, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+       bb_miiphy_write(NULL, CFG_PHY_ADDR, 16, 0x610);
+       bb_miiphy_write(NULL, CFG_PHY_ADDR, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
 #else
        /*
         * Ethernet PHY is configured (by means of configuration pins)
@@ -240,17 +248,36 @@ void reset_phy (void)
         * to advertise all capabilities, including 100Mb/s, and
         * restart autonegotiation.
         */
-       miiphy_write(CFG_PHY_ADDR, PHY_ANAR, 0x01E1); /* Advertise all capabilities */
-       miiphy_write(CFG_PHY_ADDR, PHY_DCR,  0x0000); /* Do not bypass Rx/Tx (de)scrambler */
-       miiphy_write(CFG_PHY_ADDR, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+
+       /* Advertise all capabilities */
+       bb_miiphy_write(NULL, CFG_PHY_ADDR, PHY_ANAR, 0x01E1);
+
+       /* Do not bypass Rx/Tx (de)scrambler */
+       bb_miiphy_write(NULL, CFG_PHY_ADDR, PHY_DCR,  0x0000);
+
+       bb_miiphy_write(NULL, CFG_PHY_ADDR, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
 #endif /* CONFIG_ADSTYPE == CFG_PQ2FADS */
 #endif /* CONFIG_MII */
 }
 
+#ifdef CONFIG_PCI
+typedef struct pci_ic_s {
+       unsigned long pci_int_stat;
+       unsigned long pci_int_mask;
+}pci_ic_t;
+#endif
+
 int board_early_init_f (void)
 {
        vu_long *bcsr = (vu_long *)CFG_BCSR;
 
+#ifdef CONFIG_PCI
+       volatile pci_ic_t* pci_ic = (pci_ic_t *) CFG_PCI_INT;
+
+       /* mask alll the PCI interrupts */
+       pci_ic->pci_int_mask |= 0xfff00000;
+#endif
 #if (CONFIG_CONS_INDEX == 1) || (CONFIG_KGDB_INDEX == 1)
        bcsr[1] &= ~RS232EN_1;
 #endif
@@ -506,3 +533,14 @@ int checkboard (void)
 #endif
        return 0;
 }
+
+#ifdef CONFIG_PCI
+struct pci_controller hose;
+
+extern void pci_mpc8250_init(struct pci_controller *);
+
+void pci_init_board(void)
+{
+       pci_mpc8250_init(&hose);
+}
+#endif
index 098c0464cc86a14b7e4c025ae2dc718c4675c6e4..bf8048d27ec6dbb36eba28fe13baa39947586e97 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index d0b1e041860d71cefd1aae259007ea6fb2c75c56..2220758cb93e429e926746b627e0f53d940ff079 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,10 +94,12 @@ SECTIONS
   _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 = .;
index 12c2d6f13debe9e1eefaead2c7b546da61354f8a..020cfa66f83762ee5d53b78c394496ee3e1bf150 100644 (file)
@@ -57,6 +57,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -89,11 +90,13 @@ SECTIONS
   _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 = .;
index 85852d59d3f269d7a3c50f153d483de0600f38df..e7a88cfa449c28f0769d5294d59002ef36fcb38d 100644 (file)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index 2479af1516ef9ade49f8847ede8e66d4a7545511..0755d0166b8defaa6cde6887bfd9e9505d5d509e 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,10 +111,12 @@ SECTIONS
   _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 = .;
index 9accc5cd333b67123b2325cd6f4b50f67df5c918..25f69a0bf5db8cfe3c257f8f892672adf249c897 100644 (file)
@@ -237,9 +237,14 @@ void reset_phy (void)
        udelay(1000);
 #endif
 #if defined(CONFIG_MII) && defined(CONFIG_ETHER_ON_FCC)
-       miiphy_reset(0x0);      /* reset PHY */
-       miiphy_write(0, PHY_MIPSCR, 0xf028); /* change PHY address to 0x02 */
-       miiphy_write(0x02, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+       /* reset PHY */
+       miiphy_reset("FCC1 ETHERNET", 0x0);
+
+       /* change PHY address to 0x02 */
+       bb_miiphy_write(NULL, 0, PHY_MIPSCR, 0xf028);
+
+       bb_miiphy_write(NULL, 0x02, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
 #endif /* CONFIG_MII */
 }
 
index c307d638526dfc3c4f4ed940679c8ea93827cc14..8dcee1f1015af2b5e91c0966bbb96bc3dd74d190 100644 (file)
@@ -91,6 +91,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -123,10 +124,12 @@ SECTIONS
   _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 = .;
index e14bccaced18fd639a5724a33fc3b1d8ef384c65..b331d6ec474234b1cedf7674e5d43e4cfa429d17 100644 (file)
@@ -163,7 +163,7 @@ mpl_prg(uchar *src, ulong size)
 #endif
        printf("flash erased, programming from 0x%lx 0x%lx Bytes\n",
                (ulong)src, size);
-       if ((rc = flash_write (src, start, size)) != 0) {
+       if ((rc = flash_write ((char *)src, start, size)) != 0) {
                puts("ERROR ");
                flash_perror(rc);
                return (1);
@@ -200,14 +200,14 @@ mpl_prg_image(uchar *ld_addr)
        len  = sizeof(image_header_t);
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
-       if (crc32 (0, (char *)data, len) != checksum) {
+       if (crc32 (0, (uchar *)data, len) != checksum) {
                puts("Bad Header Checksum\n");
                return 1;
        }
        data = ld_addr + sizeof(image_header_t);
        len  = ntohl(hdr->ih_size);
        puts("Verifying Checksum ... ");
-       if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) {
+       if (crc32 (0, (uchar *)data, len) != ntohl(hdr->ih_dcrc)) {
                puts("Bad Data CRC\n");
                return 1;
        }
@@ -376,8 +376,8 @@ void copy_old_env(ulong size)
                        } while(len > off);
                        name=&name_buf[0];
                        value=&value_buf[0];
-                       if(strncmp(name,"baudrate",8)!=0) {
-                               setenv(name,value);
+                       if(strncmp((char *)name,"baudrate",8)!=0) {
+                               setenv((char *)name,(char *)value);
                        }
 
                }
@@ -387,7 +387,7 @@ void copy_old_env(ulong size)
 
 void check_env(void)
 {
-       unsigned char *s;
+       char *s;
        int i=0;
        char buf[32];
        backup_t back;
@@ -592,7 +592,7 @@ void video_get_info_str (int line_number, char *info)
        char buf[64];
        char tmp[16];
        char cpustr[16];
-       unsigned char *s, *e, bc;
+       char *s, *e, bc;
        switch (line_number)
        {
        case 2:
index 793c34fe2fe1fba3762746e65ef0aa6263a4db97..51b2773c71a9ed19c76c3cc88cee384a134995e7 100644 (file)
@@ -155,7 +155,7 @@ void isa_write_table(SIO_LOGDEV_TABLE *ldt,unsigned char ldev)
 
 void isa_sio_loadtable(void)
 {
-       unsigned char *s = getenv("floppy");
+       char *s = getenv("floppy");
        /* setup Floppy device 0*/
        isa_write_table((SIO_LOGDEV_TABLE *)&sio_fdc,0);
        /* setup parallel port device 3 */
index 9bd1ff94d46dc1e5f0ba06015b9fa4a3b3a09809..7724e241d173994a587bd847507b61f958396bba 100644 (file)
@@ -613,7 +613,7 @@ char * kbd_initialize(void)
                              | KBD_MODE_DISABLE_MOUSE
                              | KBD_MODE_KCC);
 
-       /* ibm powerpc portables need this to use scan-code set 1 -- Cort */
+       /* AMCC powerpc portables need this to use scan-code set 1 -- Cort */
        kbd_write_command_w(KBD_CCMD_READ_MODE);
        if (!(kbd_wait_for_input() & KBD_MODE_KCC)) {
                /*
index a57b12156192e7f1e5ffebe94de24722bc9307c8..60008e2b240009a9387f171981dc03e5ebb41a16 100644 (file)
@@ -137,7 +137,7 @@ static struct pci_pip405_config_entry piix4_pmm_cntrl_f3[] = {
        { }                                         /* end of device table      */
 };
 /* PPC405 Dummy only used to prevent autosetup on this host bridge */
-static struct pci_pip405_config_entry ibm405_dummy[] = {
+static struct pci_pip405_config_entry ppc405_dummy[] = {
        { }                                         /* end of device table      */
 };
 
@@ -150,7 +150,7 @@ static struct pci_config_table pci_pip405_config_table[]={
         PCI_DEVICE_ID_IBM_405GP,
         PCI_ANY_ID,
         PCI_ANY_ID, PCI_ANY_ID, 0,
-        pci_pip405_write_regs, {(unsigned long) ibm405_dummy}},
+        pci_pip405_write_regs, {(unsigned long) ppc405_dummy}},
 
        {PCI_VENDOR_ID_INTEL,                   /* PIIX4 ISA Bridge Function 0 */
         PCI_DEVICE_ID_INTEL_82371AB_0,
index b1adde617cbbf8dad17d9d68c0bcbbfdea4bb2da..9c469b09ac964d2a652c257d0529b9a02ada4ba2 100644 (file)
@@ -585,15 +585,15 @@ void get_pcbrev_var(unsigned char *pcbrev, unsigned char *var)
 
 int checkboard (void)
 {
-       unsigned char s[50];
+       char s[50];
        unsigned char bc, var;
        int i;
        backup_t *b = (backup_t *) s;
 
        puts ("Board: ");
        get_pcbrev_var(&bc,&var);
-       i = getenv_r ("serial#", s, 32);
-       if ((i == 0) || strncmp (s, BOARD_NAME,sizeof(BOARD_NAME))) {
+       i = getenv_r ("serial#", (char *)s, 32);
+       if ((i == 0) || strncmp ((char *)s, BOARD_NAME,sizeof(BOARD_NAME))) {
                get_backup_values (b);
                if (strncmp (b->signature, "MPL\0", 4) != 0) {
                        puts ("### No HW ID - assuming " BOARD_NAME);
@@ -728,15 +728,15 @@ int last_stage_init (void)
 {
        unsigned long stop;
        struct rtc_time newtm;
-       unsigned char *s;
+       char *s;
        mem_test_reloc();
        /* write correct LED configuration */
-       if (miiphy_write (0x1, 0x14, 0x2402) != 0) {
+       if (miiphy_write("ppc_4xx_eth0", 0x1, 0x14, 0x2402) != 0) {
                printf ("Error writing to the PHY\n");
        }
        /* since LED/CFG2 is not connected on the -2,
         * write to correct capability information */
-       if (miiphy_write (0x1, 0x4, 0x01E1) != 0) {
+       if (miiphy_write("ppc_4xx_eth0", 0x1, 0x4, 0x01E1) != 0) {
                printf ("Error writing to the PHY\n");
        }
        print_mip405_rev ();
index bb0f122b57c864ab0426ce31a8d0de4c87eb7c9e..ad5f2739ca6cff9a6af56043d628fda400849059 100644 (file)
@@ -73,7 +73,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -93,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -125,11 +126,13 @@ SECTIONS
   _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 = .;
index 3188801081f1fe88b2698ef179e639eb7fc9eddf..5b03fef66c77ddac1bbbe0c032a0525b5752953b 100644 (file)
@@ -69,6 +69,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -101,11 +102,13 @@ SECTIONS
   _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 = .;
index 590bd20ff0f820cf191d9f513a04ab424550bd78..a398362f96aef4fad6eab5f3f77e22681ba831f0 100644 (file)
@@ -180,7 +180,7 @@ int board_early_init_f (void)
 {
        unsigned char dataout[1];
        unsigned char datain[128];
-       unsigned long sdram_size;
+       unsigned long sdram_size = 0;
        SDRAM_SETUP *t = (SDRAM_SETUP *) sdram_setup_table;
        unsigned long memclk;
        unsigned long tmemclk = 0;
@@ -574,15 +574,15 @@ int board_early_init_f (void)
 
 int checkboard (void)
 {
-       unsigned char s[50];
+       char s[50];
        unsigned char bc;
        int i;
        backup_t *b = (backup_t *) s;
 
        puts ("Board: ");
 
-       i = getenv_r ("serial#", s, 32);
-       if ((i == 0) || strncmp (s, "PIP405", 6)) {
+       i = getenv_r ("serial#", (char *)s, 32);
+       if ((i == 0) || strncmp ((char *)s, "PIP405", 6)) {
                get_backup_values (b);
                if (strncmp (b->signature, "MPL\0", 4) != 0) {
                        puts ("### No HW ID - assuming PIP405");
index 9b83ded4d7539a371f13f54678fb3246f2a0f615..11819a4fcb219a57e518810a454d10b97bb3e674 100644 (file)
@@ -69,7 +69,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -89,6 +88,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -121,11 +121,13 @@ SECTIONS
   _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 = .;
index d483424ad6de09c5fff24218e17ad2797f004a38..1608f8cdaa38f02898160fe0bc028be7cdd51f20 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..f4fbf969c3cf6445dd210053c319e591440dc3ae 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 9d949b5def57259ae9cab37cd3d7e35a219f3726..7c051095f842124071b3963586705f74ca949a8d 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index 9d949b5def57259ae9cab37cd3d7e35a219f3726..7c051095f842124071b3963586705f74ca949a8d 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index fb7547f349e73f2a9e5b1be450f605ef8937d541..f8a8cb7578b42ed8380c757f2a4d68e266907b29 100644 (file)
@@ -197,14 +197,14 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        udelay (1000);
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
index 87bf341a9df54a9a46a5919b4f12153fb25a957e..a04de3d85b1169040a03af79a13a28c70eb69915 100644 (file)
@@ -81,6 +81,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -113,11 +114,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 649216abda0c45bd8aeae56d9d9b7e250976f01b..8438f99f78b039286f979a3a0af5ef3fc620f371 100644 (file)
@@ -46,6 +46,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 5076303c7ef507e5479bf1b9299d989e26f01149..1d1669cdea0b7e910744eaddf74e24f6c1d56b25 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 2b08dd649a1290ea34c5af7f1406365706d67838..ca449181eba55d1a3e2562de635d34e5942a20dc 100644 (file)
@@ -65,6 +65,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -97,11 +98,13 @@ SECTIONS
   _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 = .;
index 1c3b7ddced453354a3f0b0b5107e322377d11c20..2228a2005a988388d0f841656838ed622e2f1b29 100644 (file)
@@ -64,6 +64,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 698115a319154296f5c7cdc968d88da44b3c230e..dd03e4bd5bdd490a8b0c5e8af9d669d418c5e90b 100644 (file)
 #include <watchdog.h>
 #endif
 
+int fec8xx_miiphy_read(char *devname, unsigned char addr,
+               unsigned char  reg, unsigned short *value);
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value);
+
 /****************************************************************/
 
 /* some sane bit macros */
@@ -483,12 +488,13 @@ void reset_phys(void)
        mii_init();
 
        for (phyno = 0; phyno < 32; ++phyno) {
-               miiphy_read(phyno, PHY_PHYIDR1, &v);
+               fec8xx_miiphy_read(NULL, phyno, PHY_PHYIDR1, &v);
                if (v == 0xFFFF)
                        continue;
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_POWD);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR, PHY_BMCR_POWD);
                udelay(10000);
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_RESET | PHY_BMCR_AUTON);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR,
+                               PHY_BMCR_RESET | PHY_BMCR_AUTON);
                udelay(10000);
        }
 }
index c3dac0ef4a5e0ff0582620bdf400e4469a4d3c6b..9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 21b7e6aabc085906046981889a887427f4d81e1d..004e7fd354aa0175b204d0621c0b1afcd5539d37 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 8b73e97598172954fe5d45fd46ef2b75796ee847..57a34c49576441ecf2e31b236c38809d6aa273aa 100644 (file)
@@ -9,3 +9,7 @@
 
 # XXX TEXT_BASE = 0x20012000
 TEXT_BASE = 0x13FC0000
+
+# Compile the new NAND code (needed iff #ifdef CONFIG_NEW_NAND_CODE)
+BOARDLIBS = drivers/nand/libnand.a
+
diff --git a/board/netstar/crcek b/board/netstar/crcek
new file mode 100755 (executable)
index 0000000..9593f89
Binary files /dev/null and b/board/netstar/crcek differ
diff --git a/board/netstar/crcit b/board/netstar/crcit
new file mode 100755 (executable)
index 0000000..98ae42e
Binary files /dev/null and b/board/netstar/crcit differ
diff --git a/board/netstar/eeprom b/board/netstar/eeprom
new file mode 100755 (executable)
index 0000000..c30c98b
Binary files /dev/null and b/board/netstar/eeprom differ
index e7024e52d3cc2711385384601fcf3de803a3656d..9194bfb9de37dd3e92de4e04b1746351068bbeac 100644 (file)
 #include <watchdog.h>
 #endif
 
+int fec8xx_miiphy_read(char *devname, unsigned char addr,
+               unsigned char  reg, unsigned short *value);
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value);
+
 /****************************************************************/
 
 /* some sane bit macros */
@@ -431,12 +436,13 @@ void reset_phys(void)
        mii_init();
 
        for (phyno = 0; phyno < 32; ++phyno) {
-               miiphy_read(phyno, PHY_PHYIDR1, &v);
+               fec8xx_miiphy_read(NULL, phyno, PHY_PHYIDR1, &v);
                if (v == 0xFFFF)
                        continue;
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_POWD);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR, PHY_BMCR_POWD);
                udelay(10000);
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_RESET | PHY_BMCR_AUTON);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR,
+                               PHY_BMCR_RESET | PHY_BMCR_AUTON);
                udelay(10000);
        }
 }
index c3dac0ef4a5e0ff0582620bdf400e4469a4d3c6b..9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 21b7e6aabc085906046981889a887427f4d81e1d..004e7fd354aa0175b204d0621c0b1afcd5539d37 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index f4ce7a4946ee3de038ed0439721fea799abd4b0f..c9b405145e5918d919a3f2f62d2680a68c7be76b 100644 (file)
 #include <watchdog.h>
 #endif
 
+int fec8xx_miiphy_read(char *devname, unsigned char addr,
+               unsigned char  reg, unsigned short *value);
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value);
+
 /****************************************************************/
 
 /* some sane bit macros */
@@ -481,12 +486,13 @@ void reset_phys(void)
        mii_init();
 
        for (phyno = 0; phyno < 32; ++phyno) {
-               miiphy_read(phyno, PHY_PHYIDR1, &v);
+               fec8xx_miiphy_read(NULL, phyno, PHY_PHYIDR1, &v);
                if (v == 0xFFFF)
                        continue;
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_POWD);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR, PHY_BMCR_POWD);
                udelay(10000);
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_RESET | PHY_BMCR_AUTON);
+               fec8xx_miiphy_write(NULL, phyno, PHY_BMCR,
+                               PHY_BMCR_RESET | PHY_BMCR_AUTON);
                udelay(10000);
        }
 }
index c3dac0ef4a5e0ff0582620bdf400e4469a4d3c6b..9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 21b7e6aabc085906046981889a887427f4d81e1d..004e7fd354aa0175b204d0621c0b1afcd5539d37 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 14d4ba099d15f4b5e069c02d7b7de0819d7c87be..dc69db6ad0cb40c947ea59161fbbf2ac39d34122 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 44eb2b6de0b9c0c9ff0b9298fce1774ac5b82247..96569bfd9ad669602cb15989294fa66693c5bba3 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index d2718cc683a531e65e76935f717b482616043304..fb4333c19c0277522186687009ee6706fcb79c9a 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := ns9750dev.o flash.o led.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS) $(SOBJS)
similarity index 99%
rename from board/ns9750dev/platform.S
rename to board/ns9750dev/lowlevel_init.S
index afcad15408248b4d69f0cc823bbc5939a1b72ee4..3a0978663a70c61b3d07f22cbb37eebda11de73b 100644 (file)
@@ -75,8 +75,8 @@ _CAS_LATENCY:
        .word   0x00022000      @ for CAS2 latency
 
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
 
        /* U-Boot may be linked to RAM at 0x780000. But this code will run in
           flash from 0x0. But in order to enable RAM we have to disable the
index 8a05892af9c43c148bf161a9dd91b74d6e6c5c23..8ebb6519fffc35241ecee27a0ddc4629416ced07 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+  . = .;
   __u_boot_cmd_start = .;
   .u_boot_cmd : { *(.u_boot_cmd) }
   __u_boot_cmd_end = .;
index cbcbab8945a87b70c9ebf33de4b9e2c0f2fd55ea..65d45c197f0053cc6ad9c4c1d4ca036a818f9167 100644 (file)
@@ -221,7 +221,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE1_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, (long *) SDRAM_BASE1_PRELIM,
                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -229,7 +229,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE1_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE1_PRELIM,
                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {    /* leave configuration at 9 columns     */
@@ -248,7 +248,7 @@ long int initdram (int board_type)
         * [9 column SDRAM may also be used in 8 column mode,
         *  but then only half the real size will be used.]
         */
-       size_b1 = dram_size (memctl->memc_mamr, (ulong *) SDRAM_BASE2_PRELIM,
+       size_b1 = dram_size (memctl->memc_mamr, (long *) SDRAM_BASE2_PRELIM,
                             SDRAM_MAX_SIZE);
 /*     debug ("SDRAM Bank 1: %ld MB\n", size8 >> 20);  */
 
index 526198cc51e3affe40b1d8871485be24065edcf9..7099fc40de6fe2d54e167a363011f38bba0791c5 100644 (file)
@@ -67,6 +67,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -99,11 +100,13 @@ SECTIONS
   _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 = .;
index f6f7cf4fa5358e21bf43ce1e3da21968816c7034..3165d56345159f4f26a7a73c842a6d7c57c5eff3 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
similarity index 86%
rename from board/tqm8560/Makefile
rename to board/o2dnt/Makefile
index 403ad2d8393435fd30eb54c416a94d0f1ad5365a..2eb4366bf71bd26d6ff8665dcb565695ceebea0b 100644 (file)
@@ -1,5 +1,6 @@
+
 #
-# (C) Copyright 2001
+# (C) Copyright 2005
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
@@ -12,7 +13,7 @@
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
@@ -25,15 +26,13 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+OBJS   := $(BOARD).o flash.o
 
-$(LIB): $(OBJS) $(SOBJS)
+$(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS)
 
 clean:
-       rm -f $(OBJS) $(SOBJS)
+       rm -f $(SOBJS) $(OBJS)
 
 distclean:     clean
        rm -f $(LIB) core *.bak .depend
diff --git a/board/o2dnt/config.mk b/board/o2dnt/config.mk
new file mode 100644 (file)
index 0000000..b873376
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# (C) Copyright 2005
+# 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
+#
+
+# boot low for 16 MiB boards
+TEXT_BASE = 0xFF000000
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board
diff --git a/board/o2dnt/flash.c b/board/o2dnt/flash.c
new file mode 100644 (file)
index 0000000..037d287
--- /dev/null
@@ -0,0 +1,587 @@
+/*
+ * (C) Copyright 2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * flash_real_protect() routine based on boards/alaska/flash.c
+ * (C) Copyright 2001
+ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.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
+ */
+
+#include <common.h>
+
+/* Intel-compatible flash commands */
+#define INTEL_ERASE    0x20
+#define INTEL_PROGRAM  0x40
+#define INTEL_CLEAR    0x50
+#define INTEL_LOCKBIT  0x60
+#define INTEL_PROTECT  0x01
+#define INTEL_STATUS   0x70
+#define INTEL_READID   0x90
+#define INTEL_READID   0x90
+#define INTEL_SUSPEND  0xB0
+#define INTEL_CONFIRM  0xD0
+#define INTEL_RESET    0xFF
+
+/* Intel-compatible flash status bits */
+#define INTEL_FINISHED 0x80
+#define INTEL_OK       0x80
+
+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_ID_MASK   0xFF
+
+#define ORMASK(size) ((-size) & OR_AM_MSK)
+
+#define FLASH_CYCLE1   0x0555
+#define FLASH_CYCLE2   0x02aa
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static ulong flash_get_size(FPWV *addr, flash_info_t *info);
+static void flash_reset(flash_info_t *info);
+static flash_info_t *flash_get_info(ulong base);
+static int write_data (flash_info_t *info, FPWV *dest, FPW data); /* O2D */
+static void flash_sync_real_protect (flash_info_t * info);
+static unsigned char intel_sector_protected (flash_info_t *info, ushort sector);
+
+/*-----------------------------------------------------------------------
+ * flash_init()
+ *
+ * sets up flash_info and returns size of FLASH (bytes)
+ */
+unsigned long flash_init (void)
+{
+       unsigned long size = 0;
+       int i;
+       extern void flash_preinit(void);
+       extern void flash_afterinit(ulong);
+
+       flash_preinit();
+
+       /* Init: no FLASHes known */
+       for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) {
+               memset(&flash_info[i], 0, sizeof(flash_info_t));
+               flash_info[i].flash_id = FLASH_UNKNOWN;
+       }
+
+       /* Query flash chip */
+       flash_info[0].size =
+               flash_get_size((FPW *)CFG_FLASH_BASE, &flash_info[0]);
+       size += flash_info[0].size;
+
+       /* get the h/w and s/w protection status in sync */
+       flash_sync_real_protect(&flash_info[0]);
+
+#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
+
+
+       flash_afterinit(size);
+       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) INTEL_RESET;      /* Intel 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;
+       uchar *boottype;
+       uchar *bootletter;
+       char *fmt;
+       uchar botbootletter[] = "B";
+       uchar topbootletter[] = "T";
+       uchar botboottype[] = "bottom boot sector";
+       uchar topboottype[] = "top boot sector";
+
+       if (info->flash_id == FLASH_UNKNOWN) {
+               printf ("missing or unknown FLASH type\n");
+               return;
+       }
+
+       switch (info->flash_id & FLASH_VENDMASK) {
+               case FLASH_MAN_INTEL:
+                       printf ("INTEL ");
+                       break;
+               default:
+                       printf ("Unknown Vendor ");
+                       break;
+       }
+
+       /* check for top or bottom boot, if it applies */
+       if (info->flash_id & FLASH_BTYPE) {
+               boottype = botboottype;
+               bootletter = botbootletter;
+       } else {
+               boottype = topboottype;
+               bootletter = topbootletter;
+       }
+
+       switch (info->flash_id & FLASH_TYPEMASK) {
+               case FLASH_28F128J3A:
+                       fmt = "28F128J3 (128 Mbit, uniform sectors)\n";
+                       break;
+               default:
+                       fmt = "Unknown Chip Type\n";
+                       break;
+       }
+
+       printf (fmt, bootletter, boottype);
+       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");
+}
+
+/*-----------------------------------------------------------------------
+ */
+
+/*
+ * The following code cannot be run from FLASH!
+ */
+ulong flash_get_size (FPWV *addr, flash_info_t *info)
+{
+       int i;
+
+       /* Write auto select command: read Manufacturer ID */
+       /* Write auto select command sequence and test FLASH answer */
+       addr[FLASH_CYCLE1] = (FPW) INTEL_READID;        /* 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)INTEL_MANUFACT:
+                       info->flash_id = FLASH_MAN_INTEL;
+                       break;
+               default:
+                       info->flash_id = FLASH_UNKNOWN;
+                       info->sector_count = 0;
+                       info->size = 0;
+                       break;
+       }
+
+       /* Strataflash is configurable to 8/16bit Bus,
+        * but the Query-Structure is Word-orientated */
+       if (info->flash_id != FLASH_UNKNOWN) {
+               switch ((FPW)addr[2]) {
+                       case (FPW)INTEL_ID_28F128J3:
+                               info->flash_id += FLASH_28F128J3A;
+                               info->sector_count = 128;
+                               info->size = 0x01000000;
+                               for( i = 0; i < info->sector_count; i++ )
+                                       info->start[i] = (ulong)addr + (i * 0x20000);
+                               break;                          /* => Intel Strataflash 16MB */
+                       default:
+                               printf("Flash_id != %xd\n", (FPW)addr[2]);
+                               info->flash_id = FLASH_UNKNOWN;
+                               info->sector_count = 0;
+                               info->size = 0;
+                               return (0);                     /* => no or unknown flash */
+               }
+       }
+
+       /* 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;
+       int flag, prot, sect;
+       ulong start, now, last;
+       int rcode = 0;
+
+       if ((s_first < 0) || (s_first > s_last)) {
+               if (info->flash_id == FLASH_UNKNOWN) {
+                       printf ("- missing\n");
+               } else {
+                       printf ("- no sectors to erase\n");
+               }
+               return 1;
+       }
+
+       switch (info->flash_id & FLASH_TYPEMASK) {
+               case FLASH_28F128J3A:
+                       break;
+               case FLASH_UNKNOWN:
+               default:
+                       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!",
+                               prot);
+
+       printf ("\n");
+       last = get_timer(0);
+
+       /* Start erase on unprotected sectors */
+       for (sect = s_first; sect <= s_last && rcode == 0; sect++) {
+
+               if (info->protect[sect] != 0)   /* protected, skip it */
+                       continue;
+
+               /* Disable interrupts which might cause a timeout here */
+               flag = disable_interrupts();
+
+               addr = (FPWV *)(info->start[sect]);
+               *addr = (FPW) INTEL_CLEAR; /* clear status register */
+               *addr = (FPW) INTEL_ERASE; /* erase setup */
+               *addr = (FPW) INTEL_CONFIRM; /* erase confirm */
+
+               /* re-enable interrupts if necessary */
+               if (flag)
+                       enable_interrupts();
+
+               start = get_timer(0);
+
+               /* wait at least 80us for Intel - let's wait 1 ms */
+               udelay (1000);
+
+               while ((*addr & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
+                       if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+                               printf ("Timeout\n");
+                               *addr = (FPW) INTEL_SUSPEND;/* suspend erase */
+                               flash_reset(info);      /* reset to read mode */
+                               rcode = 1;              /* failed */
+                               break;
+                       }
+
+                       /* show that we're waiting */
+                       if ((get_timer(last)) > CFG_HZ) { /* every second */
+                               putc ('.');
+                               last = get_timer(0);
+                       }
+               }
+
+               flash_reset(info);      /* reset to read mode */
+       }
+
+       printf (" done\n");
+       return rcode;
+}
+
+/*-----------------------------------------------------------------------
+ * 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)
+{
+       FPW data = 0;   /* 16 or 32 bit word, matches flash bus width on MPC8XX */
+       int bytes;      /* number of bytes to program in current word           */
+       int left;       /* number of bytes left to program                      */
+       int i, res;
+
+       for (left = cnt, res = 0;
+                       left > 0 && res == 0;
+                       addr += sizeof(data), left -= sizeof(data) - bytes) {
+
+               bytes = addr & (sizeof(data) - 1);
+               addr &= ~(sizeof(data) - 1);
+
+               /* combine source and destination data so can program
+                * an entire word of 16 or 32 bits  */
+               for (i = 0; i < sizeof(data); i++) {
+                       data <<= 8;
+                       if (i < bytes || i - bytes >= left )
+                               data += *((uchar *)addr + i);
+                       else
+                               data += *src++;
+               }
+
+               /* write one word to the flash */
+               switch (info->flash_id & FLASH_VENDMASK) {
+                       case FLASH_MAN_INTEL:
+                               res = write_data(info, (FPWV *)addr, data);
+                               break;
+                       default:
+                               /* unknown flash type, error! */
+                               printf ("missing or unknown FLASH type\n");
+                               res = 1;        /* not really a timeout, but gives error */
+                               break;
+               }
+       }
+
+       return (res);
+}
+
+/*-----------------------------------------------------------------------
+ * Write a word or halfword to Flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+static int write_data (flash_info_t *info, FPWV *dest, FPW data)
+{
+       FPWV *addr = dest;
+       ulong status;
+       ulong start;
+       int flag;
+
+       /* Check if Flash is (sufficiently) erased */
+       if ((*addr & data) != data) {
+               printf ("not erased at %08lx (%lx)\n", (ulong) addr, *addr);
+               return (2);
+       }
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts ();
+
+       *addr = (FPW) INTEL_PROGRAM;    /* write setup */
+       *addr = data;
+
+       /* arm simple, non interrupt dependent timer */
+       start = get_timer(0);
+
+       /* wait while polling the status register */
+       while (((status = *addr) & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
+               if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
+                       *addr = (FPW) INTEL_RESET;      /* restore read mode */
+                       return (1);
+               }
+       }
+
+       *addr = (FPW) INTEL_RESET;      /* restore read mode */
+       if (flag)
+               enable_interrupts();
+
+       return (0);
+}
+
+
+/*-----------------------------------------------------------------------
+ * Set/Clear sector's lock bit, returns:
+ * 0 - OK
+ * 1 - Error (timeout, voltage problems, etc.)
+ */
+int flash_real_protect (flash_info_t * info, long sector, int prot)
+{
+       ulong start;
+       int i;
+       int rc = 0;
+       FPWV *addr = (FPWV *) (info->start[sector]);
+       int flag = disable_interrupts ();
+
+       *addr = INTEL_CLEAR;    /* Clear status register    */
+       if (prot) {             /* Set sector lock bit      */
+               *addr = INTEL_LOCKBIT;  /* Sector lock bit          */
+               *addr = INTEL_PROTECT;  /* set                      */
+       } else {                /* Clear sector lock bit    */
+               *addr = INTEL_LOCKBIT;  /* All sectors lock bits    */
+               *addr = INTEL_CONFIRM;  /* clear                    */
+       }
+
+       start = get_timer (0);
+
+       while ((*addr & INTEL_FINISHED) != INTEL_FINISHED) {
+               if (get_timer (start) > CFG_FLASH_UNLOCK_TOUT) {
+                       printf ("Flash lock bit operation timed out\n");
+                       rc = 1;
+                       break;
+               }
+       }
+
+       if (*addr != INTEL_OK) {
+               printf ("Flash lock bit operation failed at %08X, CSR=%08X\n",
+                       (uint) addr, (uint) * addr);
+               rc = 1;
+       }
+
+       if (!rc)
+               info->protect[sector] = prot;
+
+       /*
+        * Clear lock bit command clears all sectors lock bits, so
+        * we have to restore lock bits of protected sectors.
+        */
+       if (!prot) {
+               for (i = 0; i < info->sector_count; i++) {
+                       if (info->protect[i]) {
+                               start = get_timer (0);
+                               addr = (FPWV *) (info->start[i]);
+                               *addr = INTEL_LOCKBIT;  /* Sector lock bit  */
+                               *addr = INTEL_PROTECT;  /* set              */
+                               while ((*addr & INTEL_FINISHED) !=
+                                      INTEL_FINISHED) {
+                                       if (get_timer (start) >
+                                           CFG_FLASH_UNLOCK_TOUT) {
+                                               printf ("Flash lock bit operation timed out\n");
+                                               rc = 1;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if (flag)
+               enable_interrupts ();
+
+       *addr = INTEL_RESET;    /* Reset to read array mode */
+
+       return rc;
+}
+
+
+/*
+ * This function gets the u-boot flash sector protection status
+ * (flash_info_t.protect[]) in sync with the sector protection
+ * status stored in hardware.
+ */
+static void flash_sync_real_protect (flash_info_t * info)
+{
+       int i;
+       switch (info->flash_id & FLASH_TYPEMASK) {
+       case FLASH_28F128J3A:
+               for (i = 0; i < info->sector_count; ++i) {
+                       info->protect[i] = intel_sector_protected(info, i);
+               }
+               break;
+       default:
+               /* no h/w protect support */
+               break;
+       }
+}
+
+
+/*
+ * checks if "sector" in bank "info" is protected. Should work on intel
+ * strata flash chips 28FxxxJ3x in 8-bit mode.
+ * Returns 1 if sector is protected (or timed-out while trying to read
+ * protection status), 0 if it is not.
+ */
+static unsigned char intel_sector_protected (flash_info_t *info, ushort sector)
+{
+       FPWV *addr;
+       FPWV *lock_conf_addr;
+       ulong start;
+       unsigned char ret;
+
+       /*
+        * first, wait for the WSM to be finished. The rationale for
+        * waiting for the WSM to become idle for at most
+        * CFG_FLASH_ERASE_TOUT is as follows. The WSM can be busy
+        * because of: (1) erase, (2) program or (3) lock bit
+        * configuration. So we just wait for the longest timeout of
+        * the (1)-(3), i.e. the erase timeout.
+        */
+
+       /* wait at least 35ns (W12) before issuing Read Status Register */
+       udelay(1);
+       addr = (FPWV *) info->start[sector];
+       *addr = (FPW) INTEL_STATUS;
+
+       start = get_timer (0);
+       while ((*addr & (FPW) INTEL_FINISHED) != (FPW) INTEL_FINISHED) {
+               if (get_timer (start) > CFG_FLASH_ERASE_TOUT) {
+                       *addr = (FPW) INTEL_RESET; /* restore read mode */
+                       printf("WSM busy too long, can't get prot status\n");
+                       return 1;
+               }
+       }
+
+       /* issue the Read Identifier Codes command */
+       *addr = (FPW) INTEL_READID;
+
+       /* wait at least 35ns (W12) before reading */
+       udelay(1);
+
+       /* Intel example code uses offset of 4 for 8-bit flash */
+       lock_conf_addr = (FPWV *) info->start[sector] + 4;
+       ret = (*lock_conf_addr & (FPW) INTEL_PROTECT) ? 1 : 0;
+
+       /* put flash back in read mode */
+       *addr = (FPW) INTEL_RESET;
+
+       return ret;
+}
diff --git a/board/o2dnt/o2dnt.c b/board/o2dnt/o2dnt.c
new file mode 100644 (file)
index 0000000..81a2700
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * (C) Copyright 2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <mpc5xxx.h>
+#include <pci.h>
+
+#define SDRAM_MODE      0x00CD0000
+#define SDRAM_CONTROL   0x504F0000
+#define SDRAM_CONFIG1   0xD2322800
+#define SDRAM_CONFIG2   0x8AD70000
+
+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");
+
+       /* 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");
+}
+
+/*
+ * 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;
+       ulong test1, test2;
+
+       /* setup SDRAM chip selects */
+       *(vu_long *)MPC5XXX_SDRAM_CS0CFG = 0x0000001e;/* 2G at 0x0 */
+       *(vu_long *)MPC5XXX_SDRAM_CS1CFG = 0x80000000;/* disabled */
+       __asm__ volatile ("sync");
+
+       /* setup config registers */
+       *(vu_long *)MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
+       *(vu_long *)MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
+       __asm__ volatile ("sync");
+
+       /* find RAM size using SDRAM CS0 only */
+       sdram_start(0);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
+       sdram_start(1);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
+       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 */
+
+       /* let SDRAM CS1 start right after CS0 */
+       *(vu_long *)MPC5XXX_SDRAM_CS1CFG = dramsize + 0x0000001e;/* 2G */
+
+       /* find RAM size using SDRAM CS1 only */
+       if (!dramsize)
+               sdram_start(0);
+
+       test2 = test1 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+
+       if (!dramsize) {
+               sdram_start(1);
+               test2 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+       }
+
+       if (test1 > test2) {
+               sdram_start(0);
+               dramsize2 = test1;
+       } else {
+               dramsize2 = test2;
+       }
+
+       /* memory smaller than 1MB is impossible */
+       if (dramsize2 < (1 << 20))
+               dramsize2 = 0;
+
+       /* set SDRAM CS1 size according to the amount of RAM found */
+       if (dramsize2 > 0) {
+               *(vu_long *)MPC5XXX_SDRAM_CS1CFG = dramsize
+                       | (0x13 + __builtin_ffs(dramsize2 >> 20) - 1);
+       } else {
+               *(vu_long *)MPC5XXX_SDRAM_CS1CFG = dramsize; /* disabled */
+       }
+
+       return dramsize + dramsize2;
+}
+
+int checkboard (void)
+{
+       puts ("Board: O2DNT\n");
+       return 0;
+}
+
+void flash_preinit(void)
+{
+       /*
+        * Now, when we are in RAM, enable flash write
+        * access for detection process.
+        * Note that CS_BOOT cannot be cleared when
+        * executing in flash.
+        */
+       *(vu_long *)MPC5XXX_BOOTCS_CFG &= ~0x1; /* clear RO */
+}
+
+void flash_afterinit(ulong size)
+{
+       if (size == 0x800000) { /* adjust mapping */
+               *(vu_long *)MPC5XXX_BOOTCS_START = *(vu_long *)MPC5XXX_CS0_START =
+                       START_REG(CFG_BOOTCS_START | size);
+
+               *(vu_long *)MPC5XXX_BOOTCS_STOP = *(vu_long *)MPC5XXX_CS0_STOP =
+                       STOP_REG(CFG_BOOTCS_START | size, size);
+       }
+}
+
+#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
diff --git a/board/o2dnt/u-boot.lds b/board/o2dnt/u-boot.lds
new file mode 100644 (file)
index 0000000..88dc118
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * (C) Copyright 2005
+ * 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
+{
+  /* 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)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x0FFF) & 0xFFFFF000;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(4096);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(4096);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index bd6285cb2317b06a7c767dad4c99a905d6ab6f0d..902b24ea1acda603bb67e6267e805e072f2e5fdc 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := omap1510innovator.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 99%
rename from board/omap1510inn/platform.S
rename to board/omap1510inn/lowlevel_init.S
index 8045e84b2dd84d28f7a3bc5012f1773eadd65b76..1c68e5b816e46b720f4683149e1cfd0eaa7f79e1 100644 (file)
@@ -39,8 +39,8 @@
 _TEXT_BASE:
        .word   TEXT_BASE        /* sdram load addr from config.mk */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
 
        /*
         * Configure 1510 pins functions to match our board.
index cb28b31b8a2bb20c74f7568ff5e9dfe19bf1e51e..b6d16190fcd7de1921375c319d48d7b8a90d4456 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 4a96b8334be2fd0b57ceedae6d3d7356c9fbadda..4560102327e9d786d965bb0e8c2b4035c97c0aad 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := omap1610innovator.o flash.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 99%
rename from board/omap1610inn/platform.S
rename to board/omap1610inn/lowlevel_init.S
index d694f94bb9d01b05d715f7f31980b7e37e6f7af2..eaf1742cc739e99fe13c439a6b14a75f9b65a8a8 100644 (file)
@@ -37,8 +37,8 @@
 _TEXT_BASE:
        .word   TEXT_BASE       /* sdram load addr from config.mk */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
 
 
        /*------------------------------------------------------*
index eee4813f383a26eec889ed6b7bf2bf36cba6d6bd..710b2a2d6e60df7b2ed55352a92a537654f4863e 100644 (file)
@@ -40,6 +40,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index deab6b6d1c946f580b79f08dce5c14fe6891fd18..ed4786879a1cc96f6c271512654c3fdba3a466f8 100644 (file)
@@ -25,8 +25,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := omap2420h4.o flash.o mem.o sys_info.o
-SOBJS  := platform.o
+OBJS   := omap2420h4.o mem.o sys_info.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
index e6aa75678d9d1c581cf8a02d0f53d9cb246458f8..3edcde01882d43983e41b79f1fb509ccfb30f6b0 100644 (file)
@@ -19,4 +19,10 @@ 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 = 0x40280000
+#TEXT_BASE = 0x40270000
+
+
+# Handy to get symbols to debug ROM version.
+#TEXT_BASE = 0x0
+#TEXT_BASE = 0x08000000
+#TEXT_BASE = 0x04000000
similarity index 99%
rename from board/omap2420h4/platform.S
rename to board/omap2420h4/lowlevel_init.S
index 73ba462857516a7ae143e39672726ad1c8477c24..9752fc488da88fb7f1b207ff48de12c7310dae23 100644 (file)
@@ -158,8 +158,8 @@ pll_div_add:
 pll_div_val:
     .word DPLL_VAL     /* DPLL setting (300MHz default) */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
        ldr     sp,     SRAM_STACK
        str     ip,     [sp]    /* stash old link register */
        mov     ip,     lr      /* save link reg across call */
index 9ae595b3cac212f31ad057e878b223b65d4b8612..62eb6e38a32e30cc883e1801bcbcb3fe72e9f3a4 100644 (file)
@@ -48,7 +48,7 @@ void sdelay (unsigned long loops)
  *********************************************************************************/
 void prcm_init(void)
 {
-       u32 rev,div;
+       u32 div;
        void (*f_lock_pll) (u32, u32, u32, u32);
        extern void *_end_vect, *_start;
 
@@ -64,11 +64,7 @@ void prcm_init(void)
        __raw_writel(DSP_DIV, CM_CLKSEL_DSP);   /* set dsp and iva dividers */
        __raw_writel(GFX_DIV, CM_CLKSEL_GFX);   /* set gfx dividers */
 
-       rev  = get_cpu_rev();
-       if (rev == CPU_2420_ES1 || rev ==  CPU_2422_ES1)
-               div = BUS_DIV_ES1;
-       else
-               div     = BUS_DIV;
+       div = BUS_DIV;
        __raw_writel(div, CM_CLKSEL1_CORE);/* set L3/L4/USB/Display/Vlnc/SSi dividers */
        sdelay(1000);
 
@@ -99,6 +95,23 @@ void prcm_init(void)
        sdelay(1000);
 }
 
+/**************************************************************************
+ * 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
@@ -122,6 +135,7 @@ u32 mem_ok(void)
                return(1);
 }
 
+
 /********************************************************
  *  sdrc_init() - init the sdrc chip selects CS0 and CS1
  *  - early init routines, called from flash or
@@ -148,28 +162,29 @@ void sdrc_init(void)
  **************************************************************************/
 void do_sdrc_init(u32 offset, u32 early)
 {
-       u32 cpu, bug=0, rev, common=0, cs0=0, pmask=0, pass_type;
+       u32 cpu, dllen=0, rev, common=0, cs0=0, pmask=0, pass_type, mtype;
        sdrc_data_t *sdata;      /* do not change type */
        u32 a, b, r;
 
        static const sdrc_data_t sdrc_2422 =
        {
                H4_2422_SDRC_SHARING, H4_2422_SDRC_MDCFG_0_DDR, 0 , H4_2422_SDRC_ACTIM_CTRLA_0,
-               H4_2422_SDRC_ACTIM_CTRLB_0, H4_2422_SDRC_RFR_CTRL_ES1, H4_2422_SDRC_MR_0_DDR,
-               0, H4_2422_SDRC_DLLA_CTRL, H4_2422_SDRC_DLLB_CTRL
+               H4_2422_SDRC_ACTIM_CTRLB_0, H4_2422_SDRC_RFR_CTRL, H4_2422_SDRC_MR_0_DDR,
+               0, H4_2422_SDRC_DLLAB_CTRL
        };
        static const sdrc_data_t sdrc_2420 =
        {
                H4_2420_SDRC_SHARING, H4_2420_SDRC_MDCFG_0_DDR, H4_2420_SDRC_MDCFG_0_SDR,
                H4_2420_SDRC_ACTIM_CTRLA_0, H4_2420_SDRC_ACTIM_CTRLB_0,
-               H4_2420_SDRC_RFR_CTRL_ES1, H4_2420_SDRC_MR_0_DDR, H4_2420_SDRC_MR_0_SDR,
-               H4_2420_SDRC_DLLA_CTRL, H4_2420_SDRC_DLLB_CTRL
+               H4_2420_SDRC_RFR_CTRL, H4_2420_SDRC_MR_0_DDR, H4_2420_SDRC_MR_0_SDR,
+               H4_2420_SDRC_DLLAB_CTRL
        };
 
        if (offset == SDRC_CS0_OSET)
                cs0 = common = 1;  /* int regs shared between both chip select */
 
        cpu = get_cpu_type();
+       rev = get_cpu_rev();
 
        /* warning generated, though code generation is correct. this may bite later,
         * but is ok for now. there is only so much C code you can do on stack only
@@ -197,9 +212,15 @@ void do_sdrc_init(u32 offset, u32 early)
                if(running_from_internal_boot())
                        sdata = (sdrc_data_t *)((u32)sdata + 0x4000);
        }
-       if (!early && (get_mem_type() == DDR_COMBO)) {/* combo part has a shared CKE signal, can't use feature */
-               pmask = BIT2;
-               pass_type = COMBO_DDR; /* CS1 config */
+
+       if (!early && (((mtype = get_mem_type()) == DDR_COMBO)||(mtype == DDR_STACKED))) {
+               if(mtype == DDR_COMBO){
+                       pmask = BIT2;/* combo part has a shared CKE signal, can't use feature */
+                       pass_type = COMBO_DDR; /* CS1 config */
+                       __raw_writel((__raw_readl(SDRC_POWER)) & ~pmask, SDRC_POWER);
+               }
+               if(rev != CPU_2420_2422_ES1)    /* for es2 and above smooth things out */
+                       make_cs1_contiguous();
        }
 
 next_mem_type:
@@ -208,11 +229,10 @@ next_mem_type:
                wait_on_value(BIT0, BIT0, SDRC_STATUS, 12000000);/* wait till reset done set */
                __raw_writel(0, SDRC_SYSCONFIG);                /* clear soft reset */
                __raw_writel(sdata->sdrc_sharing, SDRC_SHARING);
-               __raw_writel((__raw_readl(SDRC_POWER)) & ~pmask, SDRC_POWER);
 #ifdef POWER_SAVE
                __raw_writel(__raw_readl(SMS_SYSCONFIG)|SMART_IDLE, SMS_SYSCONFIG);
                __raw_writel(sdata->sdrc_sharing|SMART_IDLE, SDRC_SHARING);
-               __raw_writel((__raw_readl(SDRC_POWER)|BIT6) & ~pmask, SDRC_POWER);
+               __raw_writel((__raw_readl(SDRC_POWER)|BIT6), SDRC_POWER);
 #endif
        }
 
@@ -224,15 +244,16 @@ next_mem_type:
                __raw_writel(sdata->sdrc_mdcfg_0_sdr, SDRC_MCFG_0+offset);
        }
 
-       if(pass_type == IP_SDR){  /* SDRAM can run full speed only rated for 105MHz*/
-               a = H4_242X_SDRC_ACTIM_CTRLA_0_100MHz;
-               b = H4_242X_SDRC_ACTIM_CTRLB_0_100MHz;
-               r = H4_2420_SDRC_RFR_CTRL;
-       } else {
-               a = sdata->sdrc_actim_ctrla_0;
-               b = sdata->sdrc_actim_ctrlb_0;
-               r = sdata->sdrc_rfr_ctrl;
-       }
+       a = sdata->sdrc_actim_ctrla_0;
+       b = sdata->sdrc_actim_ctrlb_0;
+       r = sdata->sdrc_dllab_ctrl;
+
+       /* work around ES1 DDR issues */
+       if((pass_type != IP_SDR) && (rev == CPU_2420_2422_ES1)){
+               a = H4_242x_SDRC_ACTIM_CTRLA_0_ES1;
+               b = H4_242x_SDRC_ACTIM_CTRLB_0_ES1;
+               r = H4_242x_SDRC_RFR_CTRL_ES1;
+       }
 
        if (cs0) {
                __raw_writel(a, SDRC_ACTIM_CTRLA_0);
@@ -241,7 +262,6 @@ next_mem_type:
                __raw_writel(a, SDRC_ACTIM_CTRLA_1);
                __raw_writel(b, SDRC_ACTIM_CTRLB_1);
        }
-
        __raw_writel(r, SDRC_RFR_CTRL+offset);
 
        /* init sequence for mDDR/mSDR using manual commands (DDR is a bit different) */
@@ -263,18 +283,22 @@ next_mem_type:
                __raw_writel(sdata->sdrc_mr_0_ddr, SDRC_MR_0+offset);
 
        /* NOTE: ES1 242x _BUG_ DLL + External Bandwidth fix*/
-       rev  = get_cpu_rev();
-       if (rev == CPU_2420_ES1 || rev ==  CPU_2422_ES1){
-               bug = BIT0;
+       if (rev == CPU_2420_2422_ES1){
+               dllen = (BIT0|BIT3); /* es1 clear both bit0 and bit3 */
                __raw_writel((__raw_readl(SMS_CLASS_ARB0)|BURSTCOMPLETE_GROUP7)
                        ,SMS_CLASS_ARB0);/* enable bust complete for lcd */
        }
-       /* enable & load up DLL with good value for 75MHz, and set phase to 90% */
+       else
+               dllen = BIT0|BIT1; /* es2, clear bit0, and 1 (set phase to 72) */
+
+       /* enable & load up DLL with good value for 75MHz, and set phase to 90
+        * ES1 recommends 90 phase, ES2 recommends 72 phase.
+        */
        if (common && (pass_type != IP_SDR)) {
-               __raw_writel(sdata->sdrc_dlla_ctrl, SDRC_DLLA_CTRL);
-               __raw_writel(sdata->sdrc_dlla_ctrl & ~(BIT2|bug), SDRC_DLLA_CTRL);
-               __raw_writel(sdata->sdrc_dllb_ctrl, SDRC_DLLB_CTRL);
-               __raw_writel(sdata->sdrc_dllb_ctrl & ~(BIT2|bug) , SDRC_DLLB_CTRL);
+               __raw_writel(sdata->sdrc_dllab_ctrl, SDRC_DLLA_CTRL);
+               __raw_writel(sdata->sdrc_dllab_ctrl & ~(BIT2|dllen), SDRC_DLLA_CTRL);
+               __raw_writel(sdata->sdrc_dllab_ctrl, SDRC_DLLB_CTRL);
+               __raw_writel(sdata->sdrc_dllab_ctrl & ~(BIT2|dllen) , SDRC_DLLB_CTRL);
        }
        sdelay(90000);
 
@@ -291,12 +315,18 @@ next_mem_type:
  *****************************************************/
 void gpmc_init(void)
 {
-       u32 mux=0, mtype, mwidth;
+       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(0x1, GPMC_TIMEOUT_CONTROL);/* timeout disable */
+       __raw_writel(tval, GPMC_TIMEOUT_CONTROL);/* timeout disable */
 #ifdef CFG_NAND_BOOT
        __raw_writel(0x001, GPMC_CONFIG);       /* set nWP, disable limited addr */
 #else
index 8c7982d679ae866abb1213258156d3c2fce444e8..6ae1a490a500424ba1d198104028b3cdc91c612f 100644 (file)
@@ -36,7 +36,7 @@
 extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE];
 #endif
 
-static void wait_for_command_complete(unsigned int wd_base);
+ void wait_for_command_complete(unsigned int wd_base);
 
 /*******************************************************
  * Routine: delay
@@ -64,6 +64,21 @@ int board_init (void)
        return 0;
 }
 
+/**********************************************************
+ * Routine: try_unlock_sram()
+ * Description: If chip is GP type, unlock the SRAM for
+ *  general use.
+ ***********************************************************/
+void try_unlock_sram(void)
+{
+       /* if GP device unlock device SRAM for general use */
+       if (get_device_type() == GP_DEVICE) {
+               __raw_writel(0xFF, A_REQINFOPERM0);
+               __raw_writel(0xCFDE, A_READPERM0);
+               __raw_writel(0xCFDE, A_WRITEPERM0);
+       }
+}
+
 /**********************************************************
  * Routine: s_init
  * Description: Does early system init of muxing and clocks.
@@ -76,6 +91,7 @@ void s_init(void)
        watchdog_init();
        set_muxconf_regs();
        delay(100);
+       try_unlock_sram();
 
        if(!in_sdram)
                prcm_init();
@@ -102,20 +118,10 @@ int misc_init_r (void)
  *****************************************/
 void watchdog_init(void)
 {
-       int mode;
-       #define GP (BIT8|BIT9)
-
        /* There are 4 watch dogs.  1 secure, and 3 general purpose.
-        * I would expect that the ROM takes care of the secure one,
-        * but we will try also.  Of the 3 GP ones, 1 can reset us
-        * directly, the other 2 only generate MPU interrupts.
-        */
-       mode = (__raw_readl(CONTROL_STATUS) & (BIT8|BIT9));
-       if (mode == GP) {
-               __raw_writel(WD_UNLOCK1 ,WD1_BASE+WSPR);
-               wait_for_command_complete(WD1_BASE);
-               __raw_writel(WD_UNLOCK2 ,WD1_BASE+WSPR);
-       }
+       * 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);
@@ -135,7 +141,7 @@ void watchdog_init(void)
  * Routine: wait_for_command_complete
  * Description: Wait for posting to finish on watchdog
  ******************************************************/
-static void wait_for_command_complete(unsigned int wd_base)
+void wait_for_command_complete(unsigned int wd_base)
 {
        int pending = 1;
        do {
@@ -191,7 +197,7 @@ int dram_init (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
        unsigned int size0=0,size1=0;
-       u32 mtype, btype;
+       u32 mtype, btype, rev, cpu;
        u8 chg_on = 0x5; /* enable charge of back up battery */
        u8 vmode_on = 0x8C;
        #define NOT_EARLY 0
@@ -200,6 +206,8 @@ int dram_init (void)
 
        btype = get_board_type();
        mtype = get_mem_type();
+       rev = get_cpu_rev();
+       cpu = get_cpu_type();
 
        display_board_info(btype);
        if (btype == BOARD_H4_MENELAUS){
@@ -210,15 +218,16 @@ int dram_init (void)
 
        if ((mtype == DDR_COMBO) || (mtype == DDR_STACKED)) {
                do_sdrc_init(SDRC_CS1_OSET, NOT_EARLY); /* init other chip select */
-               size0 = size1 = SZ_32M;
-       } else if (mtype == SDR_DISCRETE)
-               size0 = SZ_128M;
-       else
-               size0 = SZ_64M;
+       }
+       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;
-       gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
+       if(rev == CPU_2420_2422_ES1) /* ES1's 128MB remap granularity isn't worth doing */
+               gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
+       else /* ES2 and above can remap at 32MB granularity */
+               gd->bd->bi_dram[1].start = PHYS_SDRAM_1+size0;
        gd->bd->bi_dram[1].size = size1;
 
        return 0;
index 121d67916df479e8ba380340bbe0d0ca30307df5..a9f72412a790fd57ebfce665f09ebf30fedc925a 100644 (file)
 #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.
@@ -40,6 +50,14 @@ 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;
        if (v == CPU_2420_CHIPID) {       /* currently 2420 and 2422 have same id */
@@ -61,6 +79,16 @@ u32 get_cpu_rev(void)
        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.
@@ -70,23 +98,39 @@ u32 get_cpu_rev(void)
  *************************************************************/
 u32 get_mem_type(void)
 {
-       volatile u32 *burst = (volatile u32 *)(SDRC_MR_0+SDRC_CS0_OSET);
+       u32 cpu, sdr = is_mem_sdr();
 
-       if (get_cpu_type() == CPU_2422)
+       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(*burst == H4_2420_SDRC_MR_0_SDR)
+               if(sdr)
                        return(SDR_DISCRETE);
                else
                        return(DDR_COMBO);
        else
-               if(*burst == H4_2420_SDRC_MR_0_SDR) /* SDP + SDR kit */
+               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.
@@ -104,7 +148,7 @@ u32 get_board_type(void)
 /******************************************************************
  * get_sysboot_value() - get init word settings (dip switch on h4)
  ******************************************************************/
-u32 get_sysboot_value(void)
+inline u32 get_sysboot_value(void)
 {
        return(0x00000FFF & __raw_readl(CONTROL_STATUS));
 }
@@ -193,22 +237,53 @@ u32 wait_on_value(u32 read_bit_mask, u32 match_value, u32 read_addr, u32 bound)
  *********************************************************************/
 void display_board_info(u32 btype)
 {
-       char cpu_2420[] = "2420";
+       char cpu_2420[] = "2420";   /* cpu type */
        char cpu_2422[] = "2422";
-       char db_men[] = "Menelaus";
-       char db_ip[]= "IP";
-       char *cpu_s, *db_s;
-       u32 cpu = get_cpu_type();
+       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[] = "?";
 
-       if(cpu == CPU_2420)
-               cpu_s = cpu_2420;
+       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;
-       printf("TI H4 SDP Base Board with OMAP%s %s Daughter Board\n",cpu_s, db_s);
+
+       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("TI H4 SDP Base Board + %s Daughter Board + %s \n", db_s, mem_s);
 }
 
 /*************************************************************************
@@ -230,7 +305,7 @@ u32 get_board_rev(void)
 /********************************************************
  *  get_base(); get upper addr of current execution
  *******************************************************/
-static u32 get_base(void)
+u32 get_base(void)
 {
        u32  val;
        __asm__ __volatile__("mov %0, pc \n" : "=r" (val) : : "memory");
@@ -242,7 +317,7 @@ static u32 get_base(void)
 /********************************************************
  *  get_base2(); get 2upper addr of current execution
  *******************************************************/
-static u32 get_base2(void)
+u32 get_base2(void)
 {
        u32  val;
        __asm__ __volatile__("mov %0, pc \n" : "=r" (val) : : "memory");
@@ -300,3 +375,13 @@ u32 running_from_internal_boot(void)
        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);
+}
index e9ff741ced518a1f07548441470716c52d68c678..1460adcdd802ba6c0cb965ca437b1242a2588e0e 100644 (file)
@@ -47,6 +47,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index ef60dd211672b23d818a6de3f5d731ed195a49de..4b564217b74799bc8c332a30122e08189c02ecee 100644 (file)
@@ -25,8 +25,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := omap5912osk.o flash.o
-SOBJS  := platform.o
+OBJS   := omap5912osk.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 99%
rename from board/omap5912osk/platform.S
rename to board/omap5912osk/lowlevel_init.S
index 33c72423ab09d00799df7543ad477e97f1113713..3b9633ad98842cb419caac8749950ea2cf13b67d 100644 (file)
@@ -38,8 +38,8 @@
 _TEXT_BASE:
        .word   TEXT_BASE       /* sdram load addr from config.mk */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
 
 
        /*------------------------------------------------------*
index 901f0809d3bcd1e76fc71ad0bde70288d8b58167..142450cdd5f5cc0617ab887bbd0ba7f822561269 100644 (file)
@@ -40,6 +40,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 10585080739caeaf1a625a04bd725fc3e068caff..29467ac39e6426de19a855f14118f869141f591d 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := omap730p2.o flash.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 99%
rename from board/omap730p2/platform.S
rename to board/omap730p2/lowlevel_init.S
index f30c2424ffbcd3cff1ff891b92d2cebd061bb6be..6c6f48240a22642444a33cfe72245fa37cd24c28 100644 (file)
@@ -43,8 +43,8 @@
 _TEXT_BASE:
        .word   TEXT_BASE       /* sdram load addr from config.mk */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
        /* Save callers address in r11 - r11 must never be modified */
        mov r11, lr
 
index eee4813f383a26eec889ed6b7bf2bf36cba6d6bd..710b2a2d6e60df7b2ed55352a92a537654f4863e 100644 (file)
@@ -40,6 +40,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index db89a78fd0fc468196714887b919c717f6cef6e7..2a5cd2ebd9dc6661cc8a1c71e04ecaa5957c6bc4 100644 (file)
@@ -68,6 +68,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -100,11 +101,13 @@ SECTIONS
   _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 = .;
diff --git a/board/pb1x00/Makefile b/board/pb1x00/Makefile
new file mode 100644 (file)
index 0000000..d1cdc6b
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o flash.o
+SOBJS  = memsetup.o
+
+$(LIB):        .depend $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/pb1x00/README b/board/pb1x00/README
new file mode 100644 (file)
index 0000000..b37ff36
--- /dev/null
@@ -0,0 +1,63 @@
+By Thomas.Lange@corelatus.se 2004-Oct-05
+----------------------------------------
+DbAu1xx0 are development boards from AMD containing
+an Alchemy AU1xx0 series cpu with mips32 core.
+Existing cpu:s are Au1000, Au1100, Au1500 and Au1550
+
+Limitations & comments
+----------------------
+Support was originally big endian only.
+I have not tested, but several u-boot users report working
+configurations in little endian mode.
+
+I named the board dbau1x00, to allow
+support for all three development boards
+( dbau1000, dbau1100 and dbau1500 ).
+Now there is a new board called dbau1550 also, which
+should be supported RSN.
+
+I only have a dbau1000, so my testing is limited
+to this board.
+
+The board has two different flash banks, that can
+be selected via dip switch. This makes it possible
+to test new bootloaders without thrashing the YAMON
+boot loader delivered with board.
+
+NOTE! When you switch between the two boot flashes, the
+base addresses will be swapped.
+Have this in mind when you compile u-boot. TEXT_BASE has
+to match the address where u-boot is located when you
+actually launch.
+
+Ethernet only supported for mac0.
+
+PCMCIA only supported for slot 0, only 3.3V.
+
+PCMCIA IDE tested with Sandisk Compact Flash and
+IBM microdrive.
+
+###################################
+########     NOTE!!!!!!   #########
+###################################
+If you partition a disk on another system (e.g. laptop),
+all bytes will be swapped on 16bit level when using
+PCMCIA and running cpu in big endian mode!!!!
+
+This is probably due to an error in Au1000 chip.
+
+Solution:
+
+a) Boot via network and partition disk directly from
+dbau1x00. The endian will then be correct.
+
+b) Partition disk on "laptop" and fill it with all files
+you need. Then write a simple program that endian swaps
+whole disk,
+
+Example:
+Original "laptop" byte order:
+B0 B1 B2 B3 B4 B5 B6 B7 B8 B9...
+
+Dbau1000 byte order will then be:
+B1 B0 B3 B2 B5 B4 B7 B6 B9 B8...
diff --git a/board/pb1x00/config.mk b/board/pb1x00/config.mk
new file mode 100644 (file)
index 0000000..396a045
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# AMD development board AMD Alchemy Pb1x00, MIPS32 core
+#
+
+# ROM version
+#TEXT_BASE = 0xbfc00000
+
+# SDRAM version
+TEXT_BASE = 0x83800000
diff --git a/board/pb1x00/flash.c b/board/pb1x00/flash.c
new file mode 100644 (file)
index 0000000..3cf29e8
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips */
+
+/*-----------------------------------------------------------------------
+ * flash_init()
+ *
+ * sets up flash_info and returns size of FLASH (bytes)
+ */
+unsigned long flash_init (void)
+{
+       printf ("Skipping flash_init\n");
+       return (0);
+}
+
+int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
+{
+       printf ("write_buff not implemented\n");
+       return (-1);
+}
diff --git a/board/pb1x00/memsetup.S b/board/pb1x00/memsetup.S
new file mode 100644 (file)
index 0000000..44f02b9
--- /dev/null
@@ -0,0 +1,392 @@
+/* Memory sub-system initialization code */
+
+#include <config.h>
+#include <version.h>
+#include <asm/regdef.h>
+#include <asm/au1x00.h>
+#include <asm/mipsregs.h>
+
+#define AU1500_SYS_ADDR                0xB1900000
+#define sys_endian             0x0038
+#define CP0_Config0            $16
+#define MEM_1MS                        ((396000000/1000000) * 1000)
+
+       .text
+       .set noreorder
+       .set mips32
+
+       .globl  memsetup
+memsetup:
+       /*
+        * Step 1) Establish CPU endian mode.
+        * NOTE: A fair amount of code is necessary on the Pb1000 to
+        * obtain the value of Switch S8.1 which is used to determine
+        * endian at run-time.
+        */
+
+       /* RCE1 */
+       li              t0, MEM_STCFG1
+       li              t1, 0x00000083
+       sw              t1, 0(t0)
+
+       li              t0, MEM_STTIME1
+       li              t1, 0x33030A10
+       sw              t1, 0(t0)
+
+       li              t0, MEM_STADDR1
+       li              t1, 0x11803E40
+       sw              t1, 0(t0)
+
+       /* Set DSTRB bits so switch will read correctly */
+       li              t1, 0xBE00000C
+       lw              t2, 0(t1)
+       or              t2, t2, 0x00000300
+       sw              t2, 0(t1)
+
+       /* Check switch setting */
+       li              t1, 0xBE000014
+       lw              t2, 0(t1)
+       and             t2, t2, 0x00000100
+       bne             t2, zero, big_endian
+       nop
+
+little_endian:
+
+       /* Change Au1 core to little endian */
+       li      t0, AU1500_SYS_ADDR
+       li      t1, 1
+       sw      t1, sys_endian(t0)
+       mfc0    t2, CP0_CONFIG
+       mtc0    t2, CP0_CONFIG
+       nop
+       nop
+
+       /* Big Endian is default so nothing to do but fall through */
+
+big_endian:
+
+       /*
+        * Step 2) Establish Status Register
+        * (set BEV, clear ERL, clear EXL, clear IE)
+        */
+       li      t1, 0x00400000
+       mtc0    t1, CP0_STATUS
+
+       /*
+        * Step 3) Establish CP0 Config0
+        * (set OD, set K0=3)
+        */
+       li      t1, 0x00080003
+       mtc0    t1, CP0_CONFIG
+
+       /*
+        * Step 4) Disable Watchpoint facilities
+        */
+       li t1, 0x00000000
+       mtc0    t1, CP0_WATCHLO
+       mtc0    t1, CP0_IWATCHLO
+       /*
+        * Step 5) Disable the performance counters
+        */
+       mtc0    zero, CP0_PERFORMANCE
+       nop
+
+       /*
+        * Step 6) Establish EJTAG Debug register
+        */
+       mtc0    zero, CP0_DEBUG
+       nop
+
+       /*
+        * Step 7) Establish Cause
+        * (set IV bit)
+        */
+       li      t1, 0x00800000
+       mtc0    t1, CP0_CAUSE
+
+       /* Establish Wired (and Random) */
+       mtc0    zero, CP0_WIRED
+       nop
+
+       /* First setup pll:s to make serial work ok */
+       /* We have a 12 MHz crystal */
+       li      t0, SYS_CPUPLL
+       li      t1, 0x21  /* 396 MHz */
+       sw      t1, 0(t0)
+       sync
+       nop
+       nop
+
+       /* wait 1mS for clocks to settle */
+       li      t1, MEM_1MS
+1:     add     t1, -1
+       bne     t1, zero, 1b
+       nop
+       /* Setup AUX PLL */
+       li      t0, SYS_AUXPLL
+       li      t1, 8 /* 96 MHz */
+       sw      t1, 0(t0) /* aux pll */
+       sync
+
+       /*  Static memory controller */
+
+       /* RCE0 8MB AMD29D323 Flash */
+       li      t0, MEM_STCFG0
+       li      t1, 0x00001403
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STTIME0
+       li      t1, 0xFFFFFFDD
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STADDR0
+       li      t1, 0x11F83FE0
+       sw      t1, 0(t0)
+
+       /* RCE1 CPLD Board Logic */
+       li      t0, MEM_STCFG1
+       li      t1, 0x00000083
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STTIME1
+       li      t1, 0x33030A10
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STADDR1
+       li      t1, 0x11803E40
+       sw      t1, 0(t0)
+
+       /* RCE2 CPLD Board Logic */
+       li      t0, MEM_STCFG2
+       li      t1, 0x00000004
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STTIME2
+       li      t1, 0x08061908
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STADDR2
+       li      t1, 0x12A03FC0
+       sw      t1, 0(t0)
+
+       /* RCE3 PCMCIA 250ns */
+       li      t0, MEM_STCFG3
+       li      t1, 0x00000002
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STTIME3
+       li      t1, 0x280E3E07
+       sw      t1, 0(t0)
+
+       li      t0, MEM_STADDR3
+       li      t1, 0x10000000
+       sw      t1, 0(t0)
+
+       sync
+
+       /* Set peripherals to a known state */
+       li      t0, IC0_CFG0CLR
+       li      t1, 0xFFFFFFFF
+       sw      t1, 0(t0)
+
+       li      t0, IC0_CFG0CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_CFG1CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_CFG2CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_SRCSET
+       sw      t1, 0(t0)
+
+       li      t0, IC0_ASSIGNSET
+       sw      t1, 0(t0)
+
+       li      t0, IC0_WAKECLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_RISINGCLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_FALLINGCLR
+       sw      t1, 0(t0)
+
+       li      t0, IC0_TESTBIT
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, IC1_CFG0CLR
+       li      t1, 0xFFFFFFFF
+       sw      t1, 0(t0)
+
+       li      t0, IC1_CFG0CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_CFG1CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_CFG2CLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_SRCSET
+       sw      t1, 0(t0)
+
+       li      t0, IC1_ASSIGNSET
+       sw      t1, 0(t0)
+
+       li      t0, IC1_WAKECLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_RISINGCLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_FALLINGCLR
+       sw      t1, 0(t0)
+
+       li      t0, IC1_TESTBIT
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, SYS_FREQCTRL0
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, SYS_FREQCTRL1
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, SYS_CLKSRC
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, SYS_PININPUTEN
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, 0xB1100100
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, 0xB1400100
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+
+       li      t0, SYS_WAKEMSK
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, SYS_WAKESRC
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       /* wait 1mS before setup */
+       li      t1, MEM_1MS
+1:     add     t1, -1
+       bne     t1, zero, 1b
+       nop
+
+       /*
+        * Skip memory setup if we are running from memory
+        */
+       li              t0, 0x90000000
+       sub             t0, ra, t0
+       bltz            t0, skip_memsetup
+       nop
+
+       /*
+        * SDCS0 - Not used, for SMROM
+        * SDCS1 - 32MB Micron 48LCBM16A2
+        * SDCS2 - 32MB Micron 48LCBM16A2
+        */
+       li      t0, MEM_SDMODE0
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, MEM_SDMODE1
+       li      t1, 0x00552229
+       sw      t1, 0(t0)
+
+       li      t0, MEM_SDMODE2
+       li      t1, 0x00552229
+       sw      t1, 0(t0)
+
+       li      t0, MEM_SDADDR0
+       li      t1, 0x00000000
+       sw      t1, 0(t0)
+
+       li      t0, MEM_SDADDR1
+       li      t1, 0x001003F8
+       sw      t1, 0(t0)
+
+       li      t0, MEM_SDADDR2
+       li      t1, 0x001023F8
+       sw      t1, 0(t0)
+
+       sync
+
+       li      t0, MEM_SDREFCFG
+       li      t1, 0x74000c30 /* Disable */
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, MEM_SDPRECMD
+       sw      zero, 0(t0)
+       sync
+
+       li      t0, MEM_SDAUTOREF
+       sw      zero, 0(t0)
+       sync
+       sw      zero, 0(t0)
+       sync
+
+       li      t0, MEM_SDREFCFG
+       li      t1, 0x76000c30 /* Enable */
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, MEM_SDWRMD0
+       li      t1, 0x00000023
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, MEM_SDWRMD1
+       li      t1, 0x00000023
+       sw      t1, 0(t0)
+       sync
+
+       li      t0, MEM_SDWRMD2
+       li      t1, 0x00000023
+       sw      t1, 0(t0)
+       sync
+
+       /* wait 1mS after setup */
+       li      t1, MEM_1MS
+1:     add     t1, -1
+       bne     t1, zero, 1b
+       nop
+
+skip_memsetup:
+
+       li      t0, SYS_PINFUNC
+       li      t1, 0/*0x00008080*/
+       sw      t1, 0(t0)
+
+       /*
+       li      t0, SYS_TRIOUTCLR
+       li      t1, 0x00001FFF
+       sw      t1, 0(t0)
+
+       li      t0, SYS_OUTPUTCLR
+       li      t1, 0x00008000
+       sw      t1, 0(t0)
+       */
+       sync
+
+       j       ra
+       nop
diff --git a/board/pb1x00/pb1x00.c b/board/pb1x00/pb1x00.c
new file mode 100644 (file)
index 0000000..40ac2a4
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * (C) Copyright 2003
+ * Thomas.Lange@corelatus.se
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/au1x00.h>
+#include <asm/mipsregs.h>
+
+long int initdram(int board_type)
+{
+       /* Sdram is setup by assembler code */
+       /* If memory could be changed, we should return the true value here */
+       return 64*1024*1024;
+}
+
+#define BCSR_PCMCIA_PC0DRVEN           0x0010
+#define BCSR_PCMCIA_PC0RST             0x0080
+
+/* In cpu/mips/cpu.c */
+void write_one_tlb( int index, u32 pagemask, u32 hi, u32 low0, u32 low1 );
+
+int checkboard (void)
+{
+       u16 status;
+       /* volatile u32 *pcmcia_bcsr = (u32*)(DB1000_BCSR_ADDR+0x10); */
+       volatile u32 *sys_counter = (volatile u32*)SYS_COUNTER_CNTRL;
+       u32 proc_id;
+
+       *sys_counter = 0x100; /* Enable 32 kHz oscillator for RTC/TOY */
+
+       proc_id = read_32bit_cp0_register(CP0_PRID);
+
+       switch (proc_id >> 24) {
+       case 0:
+               puts ("Board: Pb1000\n");
+               printf ("CPU: Au1000 396 MHz, id: 0x%02x, rev: 0x%02x\n",
+                       (proc_id >> 8) & 0xFF, proc_id & 0xFF);
+               break;
+       case 1:
+               puts ("Board: Pb1500\n");
+               printf ("CPU: Au1500, id: 0x%02x, rev: 0x%02x\n",
+                       (proc_id >> 8) & 0xFF, proc_id & 0xFF);
+               break;
+       case 2:
+               puts ("Board: Pb1100\n");
+               printf ("CPU: Au1100, id: 0x%02x, rev: 0x%02x\n",
+                       (proc_id >> 8) & 0xFF, proc_id & 0xFF);
+               break;
+       default:
+               printf ("Unsupported cpu %d, proc_id=0x%x\n", proc_id >> 24, proc_id);
+       }
+#if defined(CONFIG_IDE_PCMCIA) && 0
+       /* Enable 3.3 V on slot 0 ( VCC )
+          No 5V */
+       status = 4;
+       *pcmcia_bcsr = status;
+
+       status |= BCSR_PCMCIA_PC0DRVEN;
+       *pcmcia_bcsr = status;
+       au_sync();
+
+       udelay(300*1000);
+
+       status |= BCSR_PCMCIA_PC0RST;
+       *pcmcia_bcsr = status;
+       au_sync();
+
+       udelay(100*1000);
+
+       /* PCMCIA is on a 36 bit physical address.
+          We need to map it into a 32 bit addresses */
+
+#if 0
+       /* We dont need theese unless we run whole pcmcia package */
+       write_one_tlb(20,                 /* index */
+                     0x01ffe000,         /* Pagemask, 16 MB pages */
+                     CFG_PCMCIA_IO_BASE, /* Hi */
+                     0x3C000017,         /* Lo0 */
+                     0x3C200017);        /* Lo1 */
+
+       write_one_tlb(21,                   /* index */
+                     0x01ffe000,           /* Pagemask, 16 MB pages */
+                     CFG_PCMCIA_ATTR_BASE, /* Hi */
+                     0x3D000017,           /* Lo0 */
+                     0x3D200017);          /* Lo1 */
+#endif /* 0 */
+       write_one_tlb(22,                   /* index */
+                     0x01ffe000,           /* Pagemask, 16 MB pages */
+                     CFG_PCMCIA_MEM_ADDR,  /* Hi */
+                     0x3E000017,           /* Lo0 */
+                     0x3E200017);          /* Lo1 */
+#endif /* CONFIG_IDE_PCMCIA */
+
+       return 0;
+}
diff --git a/board/pb1x00/u-boot.lds b/board/pb1x00/u-boot.lds
new file mode 100644 (file)
index 0000000..a2d19a8
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk Engineering, <wd@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
+*/
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips")
+OUTPUT_ARCH(mips)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text       :
+       {
+         *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata  : { *(.rodata) }
+
+       . = ALIGN(4);
+       .data  : { *(.data) }
+
+       . = ALIGN(4);
+       .sdata  : { *(.sdata) }
+
+       _gp = ALIGN(16);
+
+       __got_start = .;
+       .got  : { *(.got) }
+       __got_end = .;
+
+       .sdata  : { *(.sdata) }
+
+       __u_boot_cmd_start = .;
+       .u_boot_cmd : { *(.u_boot_cmd) }
+       __u_boot_cmd_end = .;
+
+       uboot_end_data = .;
+       num_got_entries = (__got_end - __got_start) >> 2;
+
+       . = ALIGN(4);
+       .sbss  : { *(.sbss) }
+       .bss  : { *(.bss) }
+       uboot_end = .;
+}
index 6e9e3395c1b22c9154c9afb62f95dfb862b5f2e4..8c01415faed614cae2e74daf075303a5361fc999 100644 (file)
@@ -136,7 +136,7 @@ static ulong flash_get_size (ulong addr, flash_info_t *info)
 
        DEBUGF("Device ID @ 0x%08lx: 0x%08x\n", addr+1, value);
 
-       switch (value) {
+       switch ((ulong)value) {
                case AMD_ID_F040B:
                        DEBUGF("Am29F040B\n");
                        info->flash_id += FLASH_AM040;
index 6ead7f2b0d95472119138795d640063f7225ae5e..5c8cd5a882b6aa7d41e500598418c545c55c4ed0 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 386822179d8a0f4fe3b5b1de8a8abbfb4ee592e7..38f579bc5964d8352ac40facc8f2ab12cda5d836 100644 (file)
@@ -168,6 +168,10 @@ void flash_print_info (flash_info_t *info)
        }
 
        switch (info->flash_id & FLASH_TYPEMASK) {
+       case FLASH_28F256J3A:
+               printf ("28F256J3A\n");
+               break;
+
        case FLASH_28F128J3A:
                printf ("28F128J3A\n");
                break;
@@ -236,25 +240,33 @@ static ulong flash_get_size (FPW *addr, flash_info_t *info)
 
        switch (value) {
 
+       case (FPW) INTEL_ID_28F256J3A:
+               info->flash_id += FLASH_28F256J3A;
+               /* In U-Boot we support only 32 MB (no bank-switching) */
+               info->sector_count = 256 / 2;
+               info->size =  0x04000000 / 2;
+               info->start[0] = CFG_FLASH_BASE + 0x02000000;
+               break;                          /* => 32 MB     */
+
        case (FPW) INTEL_ID_28F128J3A:
                info->flash_id += FLASH_28F128J3A;
                info->sector_count = 128;
                info->size = 0x02000000;
-               info->start[0] = CFG_FLASH_BASE;
+               info->start[0] = CFG_FLASH_BASE + 0x02000000;
                break;                          /* => 32 MB     */
 
        case (FPW) INTEL_ID_28F640J3A:
                info->flash_id += FLASH_28F640J3A;
                info->sector_count = 64;
                info->size = 0x01000000;
-               info->start[0] = CFG_FLASH_BASE + 0x01000000;
+               info->start[0] = CFG_FLASH_BASE + 0x03000000;
                break;                          /* => 16 MB     */
 
        case (FPW) INTEL_ID_28F320J3A:
                info->flash_id += FLASH_28F320J3A;
                info->sector_count = 32;
                info->size = 0x800000;
-               info->start[0] = CFG_FLASH_BASE + 0x01800000;
+               info->start[0] = CFG_FLASH_BASE + 0x03800000;
                break;                          /* => 8 MB     */
 
        default:
@@ -285,6 +297,7 @@ static void flash_sync_real_protect (flash_info_t * info)
 
        switch (info->flash_id & FLASH_TYPEMASK) {
 
+       case FLASH_28F256J3A:
        case FLASH_28F128J3A:
        case FLASH_28F640J3A:
        case FLASH_28F320J3A:
index 619df59c90dd9d3fd593b07a4a97ca249c937b0a..d4cc5cb56170131aa137a8b300c6bda3b71d597d 100644 (file)
@@ -107,9 +107,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, 0x80000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        sdram_start(1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        if (test1 > test2) {
                sdram_start(0);
                dramsize = test1;
@@ -135,10 +135,10 @@ long int initdram (int board_type)
        /* find RAM size using SDRAM CS1 only */
        if (!dramsize)
                sdram_start(0);
-       test2 = test1 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+       test2 = test1 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        if (!dramsize) {
                sdram_start(1);
-               test2 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+               test2 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        }
        if (test1 > test2) {
                sdram_start(0);
index 672a250cf2b530313bd5fcf307886d7526aad735..3cc2968487bb9563ba3d26ca5e27b86543c82d85 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index ce6c4540d075028597ec0db06ed81c9121a74827..05f29c6ed08047d8226c6eea40aca4ee246759bb 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index e19137066feae79c007e7d31a63521458757419d..928c1cf3932810bcc76d824c1d87ac463c22655d 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index 4db6b342bd6074c2e3315ee2012b6d6ad4e4aecb..fbfc65a1e82257843c3ab9f59a5d0927f92c290a 100644 (file)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index dae8347d83591932b94ba4886a12332642b409e2..e946a8e512e224b0152193759f0176b2ce79133a 100644 (file)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index 025224027e8edc2fc997c076230dd13ecd1bfe05..377aaa8bca3a48dda99a4a98413ba35931e1df66 100644 (file)
@@ -167,7 +167,7 @@ static int get_serial_number (char *string, int size)
        if (size < I2155X_VPD_SN_SIZE)
                size = I2155X_VPD_SN_SIZE;
        for (i = 0; i < (size - 1); i++) {
-               i2155x_read_vpd (I2155X_VPD_SN_START + i, 1, &c);
+               i2155x_read_vpd (I2155X_VPD_SN_START + i, 1, (uchar *)&c);
                if (c == '\0')
                        break;
                string[i] = c;
index 98584dcf0a54641b69699391f79e61eba8367848..eaee3fdefc6b1011d14de252053f7531878187b0 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index e92ad8f96ba7bed929d9714e1b4a8d7cc0d2627a..2b20c26f17478a43e56e108bf95df67b57865813 100644 (file)
@@ -285,7 +285,7 @@ int misc_init_r (void)
        int res;
 
        if ((ds != 0) && (ds != 0xff)) {
-               res = getenv_r ("ethaddr", tmp, sizeof (tmp));
+               res = getenv_r ("ethaddr", (char *)tmp, sizeof (tmp));
                if (res > 0) {
                        ss = ((ds >> 4) & 0x0f);
                        ss += ss < 0x0a ? '0' : ('a' - 10);
@@ -296,7 +296,7 @@ int misc_init_r (void)
                        tmp[16] = ss;
 
                        tmp[17] = '\0';
-                       setenv ("ethaddr", tmp);
+                       setenv ("ethaddr", (char *)tmp);
                        /* set the led to show the address */
                        *((unsigned char *) (CFG_LED_BASE + 1)) = ds;
                }
index 492033e2e79ce497ac740ef015cf96e1aeaa88e1..84d4b78b9ec523bbeac7c91618ed5d83a928b6a7 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
diff --git a/board/prodrive/p3p440/Makefile b/board/prodrive/p3p440/Makefile
new file mode 100644 (file)
index 0000000..47116d3
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# (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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o
+SOBJS  = init.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/board/prodrive/p3p440/config.mk b/board/prodrive/p3p440/config.mk
new file mode 100644 (file)
index 0000000..e5722dd
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (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
+#
+
+#
+# esd ADCIOP boards
+#
+
+#TEXT_BASE = 0xFFFE0000
+
+ifeq ($(ramsym),1)
+TEXT_BASE = 0x07FD0000
+else
+TEXT_BASE = 0xFFFC0000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_440=1
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
+
+ifeq ($(dbcr),1)
+PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000
+endif
diff --git a/board/prodrive/p3p440/init.S b/board/prodrive/p3p440/init.S
new file mode 100644 (file)
index 0000000..ee6b706
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * 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|SA_G|SA_I )
+    tlbentry( CFG_PCI_BASE, SZ_256M, 0x00000000, 2, AC_R|AC_W|SA_G|SA_I )
+    tlbentry( CFG_PCI_MEMBASE, SZ_256M, 0x00000000, 3, AC_R|AC_W|SA_G|SA_I )
+    tlbtab_end
diff --git a/board/prodrive/p3p440/p3p440.c b/board/prodrive/p3p440/p3p440.c
new file mode 100644 (file)
index 0000000..d42a643
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * 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 <common.h>
+#include <asm/processor.h>
+#include <command.h>
+
+#include "p3p440.h"
+
+void set_led(int color)
+{
+       switch (color) {
+       case LED_OFF:
+               out32(GPIO0_OR,  in32(GPIO0_OR) & ~CFG_LED_GREEN & ~CFG_LED_RED);
+               break;
+
+       case LED_GREEN:
+               out32(GPIO0_OR,  (in32(GPIO0_OR) | CFG_LED_GREEN) & ~CFG_LED_RED);
+               break;
+
+       case LED_RED:
+               out32(GPIO0_OR,  (in32(GPIO0_OR) | CFG_LED_RED) & ~CFG_LED_GREEN);
+               break;
+
+       case LED_ORANGE:
+               out32(GPIO0_OR,  in32(GPIO0_OR) | CFG_LED_GREEN | CFG_LED_RED);
+               break;
+       }
+}
+
+static int is_monarch(void)
+{
+       out32(GPIO0_OR,  in32(GPIO0_OR) & ~CFG_GPIO_RDY);
+       udelay(1000);
+
+       if (in32(GPIO0_IR) & CFG_MONARCH_IO)
+               return 0;
+       else
+               return 1;
+}
+
+static void wait_for_pci_ready(void)
+{
+       /*
+        * Configure EREADY_IO as input
+        */
+       out32(GPIO0_TCR, in32(GPIO0_TCR) & ~CFG_EREADY_IO);
+       udelay(1000);
+
+       for (;;) {
+               if (in32(GPIO0_IR) & CFG_EREADY_IO)
+                       return;
+       }
+
+}
+
+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 */
+
+       /*--------------------------------------------------------------------
+        * Setup pin multiplexing (GPIO/IRQ...)
+        *-------------------------------------------------------------------*/
+       mtdcr(cpc0_gpio, 0x03F01F80);
+
+       out32(GPIO0_ODR, 0x00000000);   /* no open drain pins      */
+       out32(GPIO0_TCR, CFG_GPIO_RDY | CFG_EREADY_IO | CFG_LED_RED | CFG_LED_GREEN);
+       out32(GPIO0_OR,  CFG_GPIO_RDY);
+
+       /*--------------------------------------------------------------------
+        * Setup the interrupt controller polarities, triggers, etc.
+        *-------------------------------------------------------------------*/
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000001);      /* UIC1 crit is 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)
+{
+       char *s = getenv("serial#");
+
+       printf("Board: P3P440");
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+
+       if (is_monarch()) {
+               puts(", Monarch");
+       } else {
+               puts(", None-Monarch");
+       }
+
+       putc('\n');
+
+       return (0);
+}
+
+int misc_init_r (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /*
+        * Adjust flash start and offset to detected values
+        */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       /*
+        * Check if only one FLASH bank is available
+        */
+       if (gd->bd->bi_flashsize != CFG_MAX_FLASH_BANKS * (0 - CFG_FLASH0)) {
+               mtebc(pb1cr, 0);                        /* disable cs */
+               mtebc(pb1ap, 0);
+               mtebc(pb2cr, 0);                        /* disable cs */
+               mtebc(pb2ap, 0);
+               mtebc(pb3cr, 0);                        /* disable cs */
+               mtebc(pb3ap, 0);
+       }
+
+       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) && defined(CFG_PCI_PRE_INIT)
+int pci_pre_init(struct pci_controller *hose)
+{
+       unsigned long strap;
+
+       /*--------------------------------------------------------------------------+
+        *      The P3P440 board is always configured as the host & requires the
+        *      PCI arbiter to be disabled because it's an PMC module.
+        *--------------------------------------------------------------------------*/
+       strap = mfdcr(cpc0_strp1);
+       if (strap & 0x00100000) {
+               printf("PCI: CPC0_STRP1[PAE] set.\n");
+               return 0;
+       }
+
+       return 1;
+}
+#endif                         /* defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT) */
+
+/*************************************************************************
+ *  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)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /*--------------------------------------------------------------------------+
+        * Disable everything
+        *--------------------------------------------------------------------------*/
+       out32r(PCIX0_PIM0SA, 0);        /* disable */
+       out32r(PCIX0_PIM1SA, 0);        /* disable */
+       out32r(PCIX0_PIM2SA, 0);        /* disable */
+       out32r(PCIX0_EROMBA, 0);        /* disable expansion rom */
+
+       /*--------------------------------------------------------------------------+
+        * Map all of SDRAM to PCI address 0x0000_0000. Note that the 440 strapping
+        * options to not support sizes such as 128/256 MB.
+        *--------------------------------------------------------------------------*/
+       out32r(PCIX0_PIM0LAL, CFG_SDRAM_BASE);
+       out32r(PCIX0_PIM0LAH, 0);
+       out32r(PCIX0_PIM0SA, ~(gd->ram_size - 1) | 1);
+
+       out32r(PCIX0_BAR0, 0);
+
+       /*--------------------------------------------------------------------------+
+        * Program the board's subsystem id/vendor id
+        *--------------------------------------------------------------------------*/
+       out16r(PCIX0_SBSYSVID, CFG_PCI_SUBSYS_VENDORID);
+       out16r(PCIX0_SBSYSID, CFG_PCI_SUBSYS_DEVICEID);
+
+       out16r(PCIX0_CMD, in16r(PCIX0_CMD) | PCI_COMMAND_MEMORY);
+}
+#endif                         /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+
+/*************************************************************************
+ *  is_pci_host
+ *
+ *     This routine is called to determine if a pci scan should be
+ *     performed. With various hardware environments (especially cPCI and
+ *     PPMC) it's insufficient to depend on the state of the arbiter enable
+ *     bit in the strap register, or generic host/adapter assumptions.
+ *
+ *     Rather than hard-code a bad assumption in the general 440 code, the
+ *     440 pci code requires the board to decide at runtime.
+ *
+ *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ *
+ *
+ ************************************************************************/
+#if defined(CONFIG_PCI)
+int is_pci_host(struct pci_controller *hose)
+{
+       if (is_monarch()) {
+               wait_for_pci_ready();
+               return 1;               /* return 1 for host controller */
+       } else {
+               return 0;               /* return 0 for adapter controller */
+       }
+}
+#endif                         /* defined(CONFIG_PCI) */
diff --git a/board/prodrive/p3p440/p3p440.h b/board/prodrive/p3p440/p3p440.h
new file mode 100644 (file)
index 0000000..e4e87d1
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+#ifndef __P3P440_H__
+#define __P3P440_H__
+
+#define CFG_GPIO_RDY   (0x80000000 >> 11)
+#define CFG_MONARCH_IO (0x80000000 >> 18)
+#define CFG_EREADY_IO  (0x80000000 >> 20)
+#define CFG_LED_GREEN  (0x80000000 >> 21)
+#define CFG_LED_RED    (0x80000000 >> 22)
+
+#define LED_OFF                1
+#define LED_GREEN      2
+#define LED_RED                3
+#define LED_ORANGE     4
+
+long int fixed_sdram(void);
+
+#endif /* __P3P440_H__ */
diff --git a/board/prodrive/p3p440/u-boot.lds b/board/prodrive/p3p440/u-boot.lds
new file mode 100644 (file)
index 0000000..92bb740
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * (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)
+    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)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index b99b82c826cf0062b4e3f2775123d1a229ecf46b..8f9cd8fa598f255a55a328f6302c20525756d168 100644 (file)
@@ -46,6 +46,7 @@ SECTIONS
         * the initialization code relocates the command table as
         * well -- admittedly, this is just pure laziness ;-)
         */
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd :
        {
index b99b82c826cf0062b4e3f2775123d1a229ecf46b..8f9cd8fa598f255a55a328f6302c20525756d168 100644 (file)
@@ -46,6 +46,7 @@ SECTIONS
         * the initialization code relocates the command table as
         * well -- admittedly, this is just pure laziness ;-)
         */
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd :
        {
index aeea5d475e4b33a3e1157e6d64387f388df0ac75..1bdac1f4a6faa64c02bdf17d00f973a24675ea8a 100644 (file)
@@ -64,6 +64,7 @@ SECTIONS
 
        .sdata  : { *(.sdata) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
diff --git a/board/pxa255_idp/Makefile b/board/pxa255_idp/Makefile
new file mode 100644 (file)
index 0000000..b5f352a
--- /dev/null
@@ -0,0 +1,48 @@
+
+#
+# (C) Copyright 2000-2005
+# 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    = lib$(BOARD).a
+
+OBJS   := pxa_idp.o
+SOBJS  := memsetup.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/pxa255_idp/README b/board/pxa255_idp/README
new file mode 100644 (file)
index 0000000..0cc2f2a
--- /dev/null
@@ -0,0 +1,11 @@
+Tested:
+
+- MMC
+- Ethernet
+- BL console (on serial port connector J5)
+- flash support
+
+Todo:
+
+- display support
+- PCMCIA support
diff --git a/board/pxa255_idp/config.mk b/board/pxa255_idp/config.mk
new file mode 100644 (file)
index 0000000..d2a2040
--- /dev/null
@@ -0,0 +1,3 @@
+#TEXT_BASE = 0xa1700000
+TEXT_BASE = 0xa3000000
+#TEXT_BASE = 0
diff --git a/board/pxa255_idp/idp_notes.txt b/board/pxa255_idp/idp_notes.txt
new file mode 100644 (file)
index 0000000..4746748
--- /dev/null
@@ -0,0 +1,46 @@
+Notes on the Vibren PXA255 IDP.
+
+Chip select usage:
+
+CS0 - flash
+CS1 - alt flash (Mdoc or main flash)
+CS2 - high speed expansion bus
+CS3 - Media Q, low speed exp bus
+CS4 - low speed exp bus
+CS5 - low speed exp bus
+  - IDE: offset 0x03000000 (abs: 0x17000000)
+  - Eth: offset 0x03400000 (abs: 0x17400000)
+  - core voltage latch: offset 0x03800000 (abs: 0x17800000)
+  - CPLD: offset 0x03C00000 (abs: 0x17C00000)
+
+PCMCIA Power control
+
+MAX1602EE w/ code pulled high (Cirrus code)
+vx = 5v
+vy = 3v
+
+                       Bit pattern
+                       PWR 3,2,1,0
+vcc         vpp        A1VCC  A0VCC   A1VPP   A0VPP
+=====================================================
+0           0            0      0       0       0      0x0
+3 (vy)      0            1      0       1       1      0xB
+3 (vy)      3 (vy)       1      0       0       1      0x9
+3 (vy)      12(12in)     1      0       1       0      0xA
+5 (vx)      0            0      1       1       1      0x7
+5 (vx)      5 (vx)       0      1       0       1      0x5
+5 (vx       12(12in)     0      1       1       0      0x6
+
+Display power sequencing:
+
+- VDD applied
+- within 1sec, activate scanning signals
+- wait at least 50mS - scanning signals must be active before activating DISP
+
+Signal mapping:
+Schematic            LV8V31 signal name
+=========================================
+LCD_ENAVLCD            DISP
+LCD_PWR                        Applies VDD to board
+
+Both of the above signals are controlled by the CPLD
diff --git a/board/pxa255_idp/memsetup.S b/board/pxa255_idp/memsetup.S
new file mode 100644 (file)
index 0000000..7e485a2
--- /dev/null
@@ -0,0 +1,496 @@
+/*
+ * Most of this taken from Redboot hal_platform_setup.h with cleanup
+ *
+ * NOTE: I haven't clean this up considerably, just enough to get it
+ * running. See hal_platform_setup.h for the source. See
+ * board/cradle/memsetup.S for another PXA250 setup that is
+ * much cleaner.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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/pxa-regs.h>
+
+DRAM_SIZE:  .long   CFG_DRAM_SIZE
+
+/* wait for coprocessor write complete */
+       .macro CPWAIT reg
+       mrc  p15,0,\reg,c2,c0,0
+       mov  \reg,\reg
+       sub  pc,pc,#4
+       .endm
+
+/*
+ *     Memory setup
+ */
+.globl memsetup
+memsetup:
+
+       mov      r10, lr
+
+#ifdef DEBUG_BLINK_ENABLE
+       /* 3rd blink */
+       bl      blink
+#endif
+
+       /* Set up GPIO pins first ----------------------------------------- */
+       ldr             r0,     =GPSR0
+       ldr             r1,     =CFG_GPSR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPSR1
+       ldr             r1,     =CFG_GPSR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPSR2
+       ldr             r1,     =CFG_GPSR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR0
+       ldr             r1,     =CFG_GPCR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR1
+       ldr             r1,     =CFG_GPCR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPCR2
+       ldr             r1,     =CFG_GPCR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR0
+       ldr             r1,     =CFG_GPDR0_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR1
+       ldr             r1,     =CFG_GPDR1_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GPDR2
+       ldr             r1,     =CFG_GPDR2_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR0_L
+       ldr             r1,     =CFG_GAFR0_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR0_U
+       ldr             r1,     =CFG_GAFR0_U_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR1_L
+       ldr             r1,     =CFG_GAFR1_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR1_U
+       ldr             r1,     =CFG_GAFR1_U_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR2_L
+       ldr             r1,     =CFG_GAFR2_L_VAL
+       str             r1,   [r0]
+
+       ldr             r0,     =GAFR2_U
+       ldr             r1,     =CFG_GAFR2_U_VAL
+       str             r1,   [r0]
+
+       ldr     r0,     =PSSR           /* enable GPIO pins */
+       ldr             r1,     =CFG_PSSR_VAL
+       str             r1,   [r0]
+
+#ifdef DEBUG_BLINK_ENABLE
+       /* 4th debug blink */
+       bl      blink
+#endif
+
+       /* ---------------------------------------------------------------- */
+       /* Enable memory interface                                          */
+       /*                                                                  */
+       /* The sequence below is based on the recommended init steps        */
+       /* detailed in the Intel PXA250 Operating Systems Developers Guide, */
+       /* Chapter 10.                                                      */
+       /* ---------------------------------------------------------------- */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 1: Wait for at least 200 microsedonds to allow internal     */
+       /*         clocks to settle. Only necessary after hard reset...     */
+       /*         FIXME: can be optimized later                            */
+       /* ---------------------------------------------------------------- */
+
+       ldr r3, =OSCR                   /* reset the OS Timer Count to zero */
+       mov r2, #0
+       str r2, [r3]
+       ldr r4, =0x300                  /* really 0x2E1 is about 200usec,   */
+                                       /* so 0x300 should be plenty        */
+1:
+       ldr r2, [r3]
+       cmp r4, r2
+       bgt 1b
+
+mem_init:
+
+       ldr     r1,  =MEMC_BASE         /* get memory controller base addr. */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2a: Initialize Asynchronous static memory controller        */
+       /* ---------------------------------------------------------------- */
+
+       /* MSC registers: timing, bus width, mem type                       */
+
+       /* MSC0: nCS(0,1)                                                   */
+       ldr     r2,   =CFG_MSC0_VAL
+       str     r2,   [r1, #MSC0_OFFSET]
+       ldr     r2,   [r1, #MSC0_OFFSET]        /* read back to ensure      */
+                                               /* that data latches        */
+       /* MSC1: nCS(2,3)                                                   */
+       ldr     r2,  =CFG_MSC1_VAL
+       str     r2,  [r1, #MSC1_OFFSET]
+       ldr     r2,  [r1, #MSC1_OFFSET]
+
+       /* MSC2: nCS(4,5)                                                   */
+       ldr     r2,  =CFG_MSC2_VAL
+       str     r2,  [r1, #MSC2_OFFSET]
+       ldr     r2,  [r1, #MSC2_OFFSET]
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2b: Initialize Card Interface                               */
+       /* ---------------------------------------------------------------- */
+
+       /* MECR: Memory Expansion Card Register                             */
+       ldr     r2,  =CFG_MECR_VAL
+       str     r2,  [r1, #MECR_OFFSET]
+       ldr     r2,     [r1, #MECR_OFFSET]
+
+       /* MCMEM0: Card Interface slot 0 timing                             */
+       ldr     r2,  =CFG_MCMEM0_VAL
+       str     r2,  [r1, #MCMEM0_OFFSET]
+       ldr     r2,     [r1, #MCMEM0_OFFSET]
+
+       /* MCMEM1: Card Interface slot 1 timing                             */
+       ldr     r2,  =CFG_MCMEM1_VAL
+       str     r2,  [r1, #MCMEM1_OFFSET]
+       ldr     r2,     [r1, #MCMEM1_OFFSET]
+
+       /* MCATT0: Card Interface Attribute Space Timing, slot 0            */
+       ldr     r2,  =CFG_MCATT0_VAL
+       str     r2,  [r1, #MCATT0_OFFSET]
+       ldr     r2,     [r1, #MCATT0_OFFSET]
+
+       /* MCATT1: Card Interface Attribute Space Timing, slot 1            */
+       ldr     r2,  =CFG_MCATT1_VAL
+       str     r2,  [r1, #MCATT1_OFFSET]
+       ldr     r2,     [r1, #MCATT1_OFFSET]
+
+       /* MCIO0: Card Interface I/O Space Timing, slot 0                   */
+       ldr     r2,  =CFG_MCIO0_VAL
+       str     r2,  [r1, #MCIO0_OFFSET]
+       ldr     r2,     [r1, #MCIO0_OFFSET]
+
+       /* MCIO1: Card Interface I/O Space Timing, slot 1                   */
+       ldr     r2,  =CFG_MCIO1_VAL
+       str     r2,  [r1, #MCIO1_OFFSET]
+       ldr     r2,     [r1, #MCIO1_OFFSET]
+
+#ifdef DEBUG_BLINK_ENABLE
+       /* 5th blink */
+       bl      blink
+#endif
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2c: Write FLYCNFG  FIXME: what's that???                    */
+       /* ---------------------------------------------------------------- */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 2d: Initialize Timing for Sync Memory (SDCLK0)              */
+       /* ---------------------------------------------------------------- */
+
+       /* Before accessing MDREFR we need a valid DRI field, so we set     */
+       /* this to power on defaults + DRI field.                           */
+
+       ldr     r3,     =CFG_MDREFR_VAL
+       ldr     r2,     =0xFFF
+       and     r3,     r3,  r2
+       ldr     r4,     =0x03ca4000
+       orr     r4,     r4,  r3
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,  [r1, #MDREFR_OFFSET]
+
+       /* Note: preserve the mdrefr value in r4                            */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 3: Initialize Synchronous Static Memory (Flash/Peripherals) */
+       /* ---------------------------------------------------------------- */
+
+       /* Initialize SXCNFG register. Assert the enable bits               */
+
+       /* Write SXMRS to cause an MRS command to all enabled banks of      */
+       /* synchronous static memory. Note that SXLCR need not be written   */
+       /* at this time.                                                    */
+
+       /* FIXME: we use async mode for now                                 */
+
+       /* ---------------------------------------------------------------- */
+       /* Step 4: Initialize SDRAM                                         */
+       /* ---------------------------------------------------------------- */
+
+       /* set MDREFR according to user define with exception of a few bits */
+
+       ldr     r4,     =CFG_MDREFR_VAL
+       orr     r4,     r4,     #(MDREFR_SLFRSH)
+       bic     r4,     r4,     #(MDREFR_E1PIN|MDREFR_E0PIN)
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,  [r1, #MDREFR_OFFSET]
+
+       /* Step 4b: de-assert MDREFR:SLFRSH.                                */
+
+       bic     r4,     r4,     #(MDREFR_SLFRSH)
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,  [r1, #MDREFR_OFFSET]
+
+       /* Step 4c: assert MDREFR:E1PIN and E0PIO as desired                */
+
+       ldr     r4,     =CFG_MDREFR_VAL
+       str     r4,     [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+       ldr     r4,     [r1, #MDREFR_OFFSET]
+
+
+       /* Step 4d: write MDCNFG with MDCNFG:DEx deasserted (set to 0), to  */
+       /*          configure but not enable each SDRAM partition pair.     */
+
+       ldr     r4,     =CFG_MDCNFG_VAL
+       bic     r4,     r4,     #(MDCNFG_DE0|MDCNFG_DE1)
+
+       str     r4,     [r1, #MDCNFG_OFFSET]    /* write back MDCNFG        */
+       ldr     r4,     [r1, #MDCNFG_OFFSET]
+
+       /* Step 4e: Wait for the clock to the SDRAMs to stabilize,          */
+       /*          100..200 Âµsec.                                          */
+
+       ldr r3, =OSCR                   /* reset the OS Timer Count to zero */
+       mov r2, #0
+           str r2, [r3]
+       ldr r4, =0x300                  /* really 0x2E1 is about 200usec,   */
+                                       /* so 0x300 should be plenty        */
+1:
+           ldr r2, [r3]
+           cmp r4, r2
+           bgt 1b
+
+       /* Step 4f: Trigger a number (usually 8) refresh cycles by          */
+       /*          attempting non-burst read or write accesses to disabled */
+       /*          SDRAM, as commonly specified in the power up sequence   */
+       /*          documented in SDRAM data sheets. The address(es) used   */
+       /*          for this purpose must not be cacheable.                 */
+
+       ldr     r3,     =CFG_DRAM_BASE
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+       str     r2,     [r3]
+
+       /* Step 4g: Write MDCNFG with enable bits asserted                  */
+       /*          (MDCNFG:DEx set to 1).                                  */
+
+       ldr     r3,  [r1, #MDCNFG_OFFSET]
+       orr     r3,     r3,     #(MDCNFG_DE0|MDCNFG_DE1)
+       str     r3,  [r1, #MDCNFG_OFFSET]
+
+       /* Step 4h: Write MDMRS.                                            */
+
+       ldr     r2,  =CFG_MDMRS_VAL
+       str     r2,  [r1, #MDMRS_OFFSET]
+
+       /* We are finished with Intel's memory controller initialisation    */
+#if 0
+       /* FIXME turn on serial ports */
+       /* look into moving this to board_init() */
+       ldr     r2, =(PXA_CS5_PHYS + 0x03C0002c)
+       mov     r3, #0x13
+       str     r3, [r2]
+#endif
+
+#ifdef DEBUG_BLINK_ENABLE
+       /* 6th blink */
+       bl      blink
+#endif
+
+       /* ---------------------------------------------------------------- */
+       /* Disable (mask) all interrupts at interrupt controller            */
+       /* ---------------------------------------------------------------- */
+
+initirqs:
+
+       mov     r1, #0          /* clear int. level register (IRQ, not FIQ) */
+       ldr     r2,  =ICLR
+       str     r1,  [r2]
+
+       ldr     r2,  =ICMR      /* mask all interrupts at the controller    */
+       str     r1,  [r2]
+
+       /* ---------------------------------------------------------------- */
+       /* Clock initialisation                                             */
+       /* ---------------------------------------------------------------- */
+
+initclks:
+
+       /* Disable the peripheral clocks, and set the core clock frequency  */
+       /* (hard-coding at 398.12MHz for now).                              */
+
+       /* Turn Off ALL on-chip peripheral clocks for re-configuration      */
+       /* Note: See label 'ENABLECLKS' for the re-enabling                 */
+#if 0
+       ldr     r1,  =CKEN
+       mov     r2,  #0
+       str     r2,  [r1]
+
+       /* default value in case no valid rotary switch setting is found    */
+       ldr     r2, =(CCCR_L27|CCCR_M2|CCCR_N10)  /* DEFAULT: {200/200/100} */
+
+       /* ... and write the core clock config register                     */
+       ldr     r1,  =CCCR
+       str     r2,  [r1]
+
+#endif
+
+#ifdef RTC
+       /* enable the 32Khz oscillator for RTC and PowerManager             */
+
+       ldr     r1,  =OSCC
+       mov     r2,  #OSCC_OON
+       str     r2,  [r1]
+
+       /* NOTE:  spin here until OSCC.OOK get set, meaning the PLL         */
+       /* has settled.                                                     */
+60:
+       ldr     r2, [r1]
+       ands    r2, r2, #1
+       beq     60b
+#endif
+
+       /* ---------------------------------------------------------------- */
+       /*                                                                  */
+       /* ---------------------------------------------------------------- */
+
+       /* Save SDRAM size */
+       ldr     r1, =DRAM_SIZE
+        str       r8, [r1]
+
+       /* Interrupt init: Mask all interrupts                              */
+       ldr     r0, =ICMR /* enable no sources */
+       mov r1, #0
+       str r1, [r0]
+
+       /* FIXME */
+
+#define NODEBUG
+#ifdef NODEBUG
+       /*Disable software and data breakpoints */
+       mov     r0,#0
+       mcr     p15,0,r0,c14,c8,0  /* ibcr0 */
+       mcr     p15,0,r0,c14,c9,0  /* ibcr1 */
+       mcr     p15,0,r0,c14,c4,0  /* dbcon */
+
+       /*Enable all debug functionality */
+       mov     r0,#0x80000000
+       mcr     p14,0,r0,c10,c0,0  /* dcsr */
+#endif
+
+       /* ---------------------------------------------------------------- */
+       /* End memsetup                                                     */
+       /* ---------------------------------------------------------------- */
+
+#ifdef DEBUG_BLINK_ENABLE
+       /* 7th blink */
+       bl      blink
+#endif
+
+endmemsetup:
+
+       mov     pc, r10
+
+
+#ifdef DEBUG_BLINK_ENABLE
+
+/* debug LED code */
+
+/* delay about 200ms */
+delay:
+
+       /* reset OSCR to 0 */
+       ldr     r8, =OSCR
+       mov     r9, #0
+       str     r9, [r8]
+
+       /* make sure new value has stuck */
+1:
+       ldr     r8, =OSCR
+       ldr     r9, [r8]
+       mov     r8, #0x10000
+       cmp     r9, r8
+       bgt     1b
+
+       /* now, wait for delay to expire */
+1:
+       ldr     r8, =OSCR
+       ldr     r9, [r8]
+       mov     r8, #0xd4000
+       cmp     r8, r9
+       bgt     1b
+
+       mov     pc, lr
+
+/* blink code -- trashes r7, r8, r9 */
+
+.globl blink
+blink:
+
+       mov     r7, lr
+
+       /* set GPIO10 as outout */
+       ldr     r8,  =GPDR0
+       ldr     r9,  [r8]
+       orr     r9,  r9, #(1<<10)
+       str     r9,  [r8]
+
+       /* turn LED off */
+       mov     r9,  #(1<<10)
+       ldr     r8,  =GPCR0
+       str     r9, [r8]
+       bl      delay
+
+       /* turn LED on */
+       mov     r9,  #(1<<10)
+       ldr     r8,  =GPSR0
+       str     r9, [r8]
+       bl      delay
+
+       /* turn LED off */
+       mov     r9,  #(1<<10)
+       ldr     r8,  =GPCR0
+       str     r9, [r8]
+
+       mov     pc, r7
+
+#endif
diff --git a/board/pxa255_idp/pxa_idp.c b/board/pxa255_idp/pxa_idp.c
new file mode 100644 (file)
index 0000000..d5b993a
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * (C) Copyright 2002
+ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2004
+ * BEC Systems <http://bec-systems.com>
+ * Cliff Brake <cliff.brake@gmail.com>
+ * Support for Accelent/Vibren PXA255 IDP
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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>
+
+/* ------------------------------------------------------------------------- */
+
+
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+int board_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /* memory and cpu-speed are setup before relocation */
+       /* so we do _nothing_ here */
+
+       /* arch number of Lubbock-Board */
+       gd->bd->bi_arch_number = MACH_TYPE_PXA_IDP;
+
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = 0xa0000100;
+
+       /* turn on serial ports */
+       *(volatile unsigned int *)(PXA_CS5_PHYS + 0x03C0002c) = 0x13;
+
+       /* set PWM for LCD */
+       /* a value that works is 60Hz, 77% duty cycle */
+       CKEN |= CKEN0_PWM0;
+       PWM_CTRL0 = 0x3f;
+       PWM_PERVAL0 = 0x3ff;
+       PWM_PWDUTY0 = 792;
+
+       /* clear reset to AC97 codec */
+       CKEN |= CKEN2_AC97;
+       GCR = GCR_COLD_RST;
+
+       /* enable LCD backlight */
+       /* *(volatile unsigned int *)(PXA_CS5_PHYS + 0x03C00030) = 0x7; */
+
+       /* test display */
+       /* lcd_puts("This is a test\nTest #2\n"); */
+
+       return 0;
+}
+
+int board_late_init(void)
+{
+       setenv("stdout", "serial");
+       setenv("stderr", "serial");
+       return 0;
+}
+
+
+int dram_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+       gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
+       gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
+       gd->bd->bi_dram[2].start = PHYS_SDRAM_3;
+       gd->bd->bi_dram[2].size = PHYS_SDRAM_3_SIZE;
+       gd->bd->bi_dram[3].start = PHYS_SDRAM_4;
+       gd->bd->bi_dram[3].size = PHYS_SDRAM_4_SIZE;
+
+       return 0;
+}
+
+
+#ifdef DEBUG_BLINKC_ENABLE
+
+void delay_c(void)
+{
+       /* reset OSCR to 0 */
+       OSCR = 0;
+       while(OSCR > 0x10000)
+               ;
+
+       while(OSCR < 0xd4000)
+               ;
+}
+
+void blink_c(void)
+{
+       int led_bit = (1<<10);
+
+       GPDR0 = led_bit;
+       GPCR0 = led_bit;
+       delay_c();
+       GPSR0 = led_bit;
+       delay_c();
+       GPCR0 = led_bit;
+}
+
+int do_idpcmd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       printf("IDPCMD started\n");
+       return 0;
+}
+
+U_BOOT_CMD(idpcmd, CFG_MAXARGS, 0, do_idpcmd,
+          "idpcmd    - custom IDP command\n",
+          "no args at this time\n"
+);
+
+#endif
diff --git a/board/pxa255_idp/pxa_reg_calcs.out b/board/pxa255_idp/pxa_reg_calcs.out
new file mode 100644 (file)
index 0000000..bda9946
--- /dev/null
@@ -0,0 +1,119 @@
+gafr0_l: 0x80001005
+gafr0_u: 0xa5128012
+gafr1_l: 0x699a9558
+gafr1_u: 0xaaa5aa6a
+gafr2_l: 0xaaaaaaaa
+gafr2_u: 0x2
+gpcr0: 0x1800400
+gpcr1: 0x0
+gpcr2: 0x0
+gpdr0: 0xc1818440
+gpdr1: 0xfcffab82
+gpdr2: 0x1ffff
+gpsr0: 0x8000
+gpsr1: 0x3f0002
+gpsr2: 0x1c000
+
+
+#define CFG_GAFR0_L_VAL        0x80001005
+#define CFG_GAFR0_U_VAL        0xa5128012
+#define CFG_GAFR1_L_VAL        0x699a9558
+#define CFG_GAFR1_U_VAL        0xaaa5aa6a
+#define CFG_GAFR2_L_VAL        0xaaaaaaaa
+#define CFG_GAFR2_U_VAL        0x2
+#define CFG_GPCR0_VAL  0x1800400
+#define CFG_GPCR1_VAL  0x0
+#define CFG_GPCR2_VAL  0x0
+#define CFG_GPDR0_VAL  0xc1818440
+#define CFG_GPDR1_VAL  0xfcffab82
+#define CFG_GPDR2_VAL  0x1ffff
+#define CFG_GPSR0_VAL  0x8000
+#define CFG_GPSR1_VAL  0x3f0002
+#define CFG_GPSR2_VAL  0x1c000
+
+
+GPIO: 0, dir=0, set=0, clr=0, alt=none, desc=USER_RESET#
+GPIO: 1, dir=0, set=0, clr=0, alt=gpio reset, desc=USER_RESET#
+GPIO: 2, dir=0, set=0, clr=0, alt=gpio, desc=BAT_DATA
+GPIO: 3, dir=0, set=0, clr=0, alt=gpio, desc=MQ_IRQ#
+GPIO: 4, dir=0, set=0, clr=0, alt=gpio, desc=IRQ_ETH
+GPIO: 5, dir=0, set=0, clr=0, alt=gpio, desc=IRQ_TOUCH#
+GPIO: 6, dir=1, set=0, clr=0, alt=MMC clk, desc=MMC_CLK
+GPIO: 7, dir=0, set=0, clr=0, alt=gpio, desc=PCC_S0_CD#
+GPIO: 8, dir=0, set=0, clr=0, alt=gpio, desc=PCC_S1_CD#
+GPIO: 9, dir=0, set=0, clr=0, alt=gpio, desc=MMC_CD#
+GPIO: 10, dir=1, set=0, clr=1, alt=gpio, desc=GPIO_10/RTC_CLK/debug LED
+GPIO: 11, dir=0, set=0, clr=0, alt=gpio, desc=3M6_CLK
+GPIO: 12, dir=0, set=0, clr=0, alt=gpio, desc=GPIO_12/32K_CLK
+GPIO: 13, dir=0, set=0, clr=0, alt=gpio, desc=MBGNT
+GPIO: 14, dir=0, set=0, clr=0, alt=gpio, desc=MBREQ
+GPIO: 15, dir=1, set=1, clr=0, alt=nCS_1, desc=CS1#
+GPIO: 16, dir=1, set=0, clr=0, alt=PWM0, desc=PWM0
+GPIO: 17, dir=0, set=0, clr=0, alt=gpio, desc=IRQ_AXB
+GPIO: 18, dir=0, set=0, clr=0, alt=RDY, desc=RDY
+GPIO: 19, dir=0, set=0, clr=0, alt=gpio, desc=XB_DREQ1, PCC_SO_IRQ_O#
+GPIO: 20, dir=0, set=0, clr=0, alt=gpio, desc=XB_DREQ0
+GPIO: 21, dir=0, set=0, clr=0, alt=gpio, desc=IRQ_IDE, PFI
+GPIO: 22, dir=0, set=0, clr=0, alt=gpio, desc=Consumer IR, PCC_S1_IRQ_O#
+GPIO: 23, dir=1, set=0, clr=1, alt=SSP SCLK, desc=SSP_SCLK
+GPIO: 24, dir=1, set=0, clr=1, alt=SSP SFRM, desc=SSP_SFRM
+GPIO: 25, dir=0, set=0, clr=0, alt=gpio, desc=SSP_TXD
+GPIO: 26, dir=0, set=0, clr=0, alt=SSP RXD, desc=SSP_RXD
+GPIO: 27, dir=0, set=0, clr=0, alt=gpio, desc=SSP_EXTCLK
+GPIO: 28, dir=0, set=0, clr=0, alt=AC97 bitclk in, I2S bitclock out, desc=AC_BITCLK
+GPIO: 29, dir=0, set=0, clr=0, alt=AC97 SDATA_IN0, desc=AUD_SDIN0
+GPIO: 30, dir=1, set=0, clr=0, alt=AC97 SDATA_OUT, desc=AC_SDOUT
+GPIO: 31, dir=1, set=0, clr=0, alt=AC97 SYNC, desc=AC_SYNC
+GPIO: 32, dir=0, set=0, clr=0, alt=gpio, desc=AUD_SDIN1
+GPIO: 33, dir=1, set=1, clr=0, alt=nCS_5, desc=CS5#
+GPIO: 34, dir=0, set=0, clr=0, alt=FF RXD, desc=FF_RXD
+GPIO: 35, dir=0, set=0, clr=0, alt=FF CTS, desc=FF_CTS
+GPIO: 36, dir=0, set=0, clr=0, alt=FF DCD, desc=FF_DCD
+GPIO: 37, dir=0, set=0, clr=0, alt=FF DSR, desc=FF_DSR
+GPIO: 38, dir=0, set=0, clr=0, alt=FF RI, desc=FF_RI
+GPIO: 39, dir=1, set=0, clr=0, alt=FF TXD, desc=FF_TXD
+GPIO: 40, dir=1, set=0, clr=0, alt=FF DTR, desc=FF_DTR
+GPIO: 41, dir=1, set=0, clr=0, alt=FF RTS, desc=FF_RTS
+GPIO: 42, dir=0, set=0, clr=0, alt=BT RXD, desc=BT_RXD
+GPIO: 43, dir=1, set=0, clr=0, alt=BT TXD, desc=BT_TXD
+GPIO: 44, dir=0, set=0, clr=0, alt=BT CTS, desc=BT_CTS
+GPIO: 45, dir=1, set=0, clr=0, alt=BT RTS, desc=BT_RTS
+GPIO: 46, dir=0, set=0, clr=0, alt=STD RXD, desc=IR_RXD
+GPIO: 47, dir=1, set=0, clr=0, alt=STD TXD, desc=IR_TXD
+GPIO: 48, dir=1, set=1, clr=0, alt=nPOE, desc=PCC_OE#
+GPIO: 49, dir=1, set=1, clr=0, alt=nPWE, desc=PCC_WE#
+GPIO: 50, dir=1, set=1, clr=0, alt=nPIOR, desc=PCC_IOR#
+GPIO: 51, dir=1, set=1, clr=0, alt=nPIOW, desc=PCC_IOW#
+GPIO: 52, dir=1, set=1, clr=0, alt=nPCE[1], desc=PCC_CE1#
+GPIO: 53, dir=1, set=1, clr=0, alt=nPCE[2], desc=PCC_CE2#
+GPIO: 54, dir=1, set=0, clr=0, alt=nPSKSEL, desc=PCC_SCKSEL
+GPIO: 55, dir=1, set=0, clr=0, alt=nPREG, desc=PCC_REG#
+GPIO: 56, dir=0, set=0, clr=0, alt=nPWAIT, desc=PCC_WAIT#
+GPIO: 57, dir=0, set=0, clr=0, alt=nIOIS16, desc=PCC_IOIS16#
+GPIO: 58, dir=1, set=0, clr=0, alt=LDD[0], desc=LDD0
+GPIO: 59, dir=1, set=0, clr=0, alt=LDD[1], desc=LDD1
+GPIO: 60, dir=1, set=0, clr=0, alt=LDD[2], desc=LDD2
+GPIO: 61, dir=1, set=0, clr=0, alt=LDD[3], desc=LDD3
+GPIO: 62, dir=1, set=0, clr=0, alt=LDD[4], desc=LDD4
+GPIO: 63, dir=1, set=0, clr=0, alt=LDD[5], desc=LDD5
+GPIO: 64, dir=1, set=0, clr=0, alt=LDD[6], desc=LDD6
+GPIO: 65, dir=1, set=0, clr=0, alt=LDD[7], desc=LDD7
+GPIO: 66, dir=1, set=0, clr=0, alt=LDD[8], desc=LDD8
+GPIO: 67, dir=1, set=0, clr=0, alt=LDD[9], desc=LDD9
+GPIO: 68, dir=1, set=0, clr=0, alt=LDD[10], desc=LDD10
+GPIO: 69, dir=1, set=0, clr=0, alt=LDD[11], desc=LDD11
+GPIO: 70, dir=1, set=0, clr=0, alt=LDD[12], desc=LDD12
+GPIO: 71, dir=1, set=0, clr=0, alt=LDD[13], desc=LDD13
+GPIO: 72, dir=1, set=0, clr=0, alt=LDD[14], desc=LDD14
+GPIO: 73, dir=1, set=0, clr=0, alt=LDD[15], desc=LDD15
+GPIO: 74, dir=1, set=0, clr=0, alt=LCD_FCLK, desc=FCLK
+GPIO: 75, dir=1, set=0, clr=0, alt=LCD_LCLK, desc=LCLK
+GPIO: 76, dir=1, set=0, clr=0, alt=LCD_PCLK, desc=PCLK
+GPIO: 77, dir=1, set=0, clr=0, alt=LCD_ACBIAS, desc=ACBIAS
+GPIO: 78, dir=1, set=1, clr=0, alt=nCS_2, desc=CS2#
+GPIO: 79, dir=1, set=1, clr=0, alt=nCS_3, desc=CS3#
+GPIO: 80, dir=1, set=1, clr=0, alt=nCS_4, desc=CS4#
+GPIO: 81, dir=0, set=0, clr=0, alt=gpio, desc=
+GPIO: 82, dir=0, set=0, clr=0, alt=gpio, desc=
+GPIO: 83, dir=0, set=0, clr=0, alt=gpio, desc=
+GPIO: 84, dir=0, set=0, clr=0, alt=gpio, desc=
diff --git a/board/pxa255_idp/pxa_reg_calcs.py b/board/pxa255_idp/pxa_reg_calcs.py
new file mode 100644 (file)
index 0000000..c4bcb4b
--- /dev/null
@@ -0,0 +1,311 @@
+#!/usr/bin/python
+
+# (C) Copyright 2004
+# BEC Systems <http://bec-systems.com>
+# Cliff Brake <cliff.brake@gmail.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
+
+# calculations for PXA255 registers
+
+class gpio:
+       dir = '0'
+       set = '0'
+       clr = '0'
+       alt = '0'
+       desc = ''
+
+       def __init__(self, dir=0, set=0, clr=0, alt=0, desc=''):
+               self.dir = dir
+               self.set = set
+               self.clr = clr
+               self.alt = alt
+               self.desc = desc
+               
+
+# the following is a dictionary of all GPIOs in the system
+# the key is the GPIO number
+
+
+pxa255_alt_func = {
+       0: ['gpio', 'none', 'none', 'none'],
+       1: ['gpio', 'gpio reset', 'none', 'none'],
+       2: ['gpio', 'none', 'none', 'none'],
+       3: ['gpio', 'none', 'none', 'none'],
+       4: ['gpio', 'none', 'none', 'none'],
+       5: ['gpio', 'none', 'none', 'none'],
+       6: ['gpio', 'MMC clk', 'none', 'none'],
+       7: ['gpio', '48MHz clock', 'none', 'none'],
+       8: ['gpio', 'MMC CS0', 'none', 'none'],
+       9: ['gpio', 'MMC CS1', 'none', 'none'],
+       10: ['gpio', 'RTC Clock', 'none', 'none'],
+       11: ['gpio', '3.6MHz', 'none', 'none'],
+       12: ['gpio', '32KHz', 'none', 'none'],
+       13: ['gpio', 'none', 'MBGNT', 'none'],
+       14: ['gpio', 'MBREQ', 'none', 'none'],
+       15: ['gpio', 'none', 'nCS_1', 'none'],
+       16: ['gpio', 'none', 'PWM0', 'none'],
+       17: ['gpio', 'none', 'PWM1', 'none'],
+       18: ['gpio', 'RDY', 'none', 'none'],
+       19: ['gpio', 'DREQ[1]', 'none', 'none'],
+       20: ['gpio', 'DREQ[0]', 'none', 'none'],
+       21: ['gpio', 'none', 'none', 'none'],
+       22: ['gpio', 'none', 'none', 'none'],
+       23: ['gpio', 'none', 'SSP SCLK', 'none'],
+       24: ['gpio', 'none', 'SSP SFRM', 'none'],
+       25: ['gpio', 'none', 'SSP TXD', 'none'],
+       26: ['gpio', 'SSP RXD', 'none', 'none'],
+       27: ['gpio', 'SSP EXTCLK', 'none', 'none'],
+       28: ['gpio', 'AC97 bitclk in, I2S bitclock out', 'I2S bitclock in', 'none'],
+       29: ['gpio', 'AC97 SDATA_IN0', 'I2S SDATA_IN', 'none'],
+       30: ['gpio', 'I2S SDATA_OUT', 'AC97 SDATA_OUT', 'none'],
+       31: ['gpio', 'I2S SYNC', 'AC97 SYNC', 'none'],
+       32: ['gpio', 'AC97 SDATA_IN1', 'I2S SYSCLK', 'none'],
+       33: ['gpio', 'none', 'nCS_5', 'none'],
+       34: ['gpio', 'FF RXD', 'MMC CS0', 'none'],
+       35: ['gpio', 'FF CTS', 'none', 'none'],
+       36: ['gpio', 'FF DCD', 'none', 'none'],
+       37: ['gpio', 'FF DSR', 'none', 'none'],
+       38: ['gpio', 'FF RI', 'none', 'none'],
+       39: ['gpio', 'MMC CS1', 'FF TXD', 'none'],
+       40: ['gpio', 'none', 'FF DTR', 'none'],
+       41: ['gpio', 'none', 'FF RTS', 'none'],
+       42: ['gpio', 'BT RXD', 'none', 'HW RXD'],
+       43: ['gpio', 'none', 'BT TXD', 'HW TXD'],
+       44: ['gpio', 'BT CTS', 'none', 'HW CTS'],
+       45: ['gpio', 'none', 'BT RTS', 'HW RTS'],
+       46: ['gpio', 'ICP_RXD', 'STD RXD', 'none'],
+       47: ['gpio', 'STD TXD', 'ICP_TXD', 'none'],
+       48: ['gpio', 'HW TXD', 'nPOE', 'none'],
+       49: ['gpio', 'HW RXD', 'nPWE', 'none'],
+       50: ['gpio', 'HW CTS', 'nPIOR', 'none'],
+       51: ['gpio', 'nPIOW', 'HW RTS', 'none'],
+       52: ['gpio', 'none', 'nPCE[1]', 'none'],
+       53: ['gpio', 'MMC CLK', 'nPCE[2]', 'none'],
+       54: ['gpio', 'MMC CLK', 'nPSKSEL', 'none'],
+       55: ['gpio', 'none', 'nPREG', 'none'],
+       56: ['gpio', 'nPWAIT', 'none', 'none'],
+       57: ['gpio', 'nIOIS16', 'none', 'none'],
+       58: ['gpio', 'none', 'LDD[0]', 'none'],
+       59: ['gpio', 'none', 'LDD[1]', 'none'],
+       60: ['gpio', 'none', 'LDD[2]', 'none'],
+       61: ['gpio', 'none', 'LDD[3]', 'none'],
+       62: ['gpio', 'none', 'LDD[4]', 'none'],
+       63: ['gpio', 'none', 'LDD[5]', 'none'],
+       64: ['gpio', 'none', 'LDD[6]', 'none'],
+       65: ['gpio', 'none', 'LDD[7]', 'none'],
+       66: ['gpio', 'MBREQ', 'LDD[8]', 'none'],
+       67: ['gpio', 'MMC CS0', 'LDD[9]', 'none'],
+       68: ['gpio', 'MMC CS1', 'LDD[10]', 'none'],
+       69: ['gpio', 'MMC CLK', 'LDD[11]', 'none'],
+       70: ['gpio', 'RTC CLK', 'LDD[12]', 'none'],
+       71: ['gpio', '3.6 MHz', 'LDD[13]', 'none'],
+       72: ['gpio', '32 KHz', 'LDD[14]', 'none'],
+       73: ['gpio', 'MBGNT', 'LDD[15]', 'none'],
+       74: ['gpio', 'none', 'LCD_FCLK', 'none'],
+       75: ['gpio', 'none', 'LCD_LCLK', 'none'],
+       76: ['gpio', 'none', 'LCD_PCLK', 'none'],
+       77: ['gpio', 'none', 'LCD_ACBIAS', 'none'],
+       78: ['gpio', 'none', 'nCS_2', 'none'],
+       79: ['gpio', 'none', 'nCS_3', 'none'],
+       80: ['gpio', 'none', 'nCS_4', 'none'],
+       81: ['gpio', 'NSSPSCLK', 'none', 'none'],
+       82: ['gpio', 'NSSPSFRM', 'none', 'none'],
+       83: ['gpio', 'NSSPTXD', 'NSSPRXD', 'none'],
+       84: ['gpio', 'NSSPTXD', 'NSSPRXD', 'none'],
+}
+
+
+#def __init__(self, dir=0, set=0, clr=0, alt=0, desc=''):
+
+gpio_list = []
+
+for i in range(0,85):
+       gpio_list.append(gpio())
+
+#chip select GPIOs
+gpio_list[18] = gpio(0, 0, 0, 1, 'RDY')
+gpio_list[33] = gpio(1, 1, 0, 2, 'CS5#')
+gpio_list[80] = gpio(1, 1, 0, 2, 'CS4#')
+gpio_list[79] = gpio(1, 1, 0, 2, 'CS3#')
+gpio_list[78] = gpio(1, 1, 0, 2, 'CS2#')
+gpio_list[15] = gpio(1, 1, 0, 2, 'CS1#')
+gpio_list[22] = gpio(0, 0, 0, 0, 'Consumer IR, PCC_S1_IRQ_O#')
+gpio_list[21] = gpio(0, 0, 0, 0, 'IRQ_IDE, PFI')
+gpio_list[19] = gpio(0, 0, 0, 0, 'XB_DREQ1, PCC_SO_IRQ_O#')
+gpio_list[20] = gpio(0, 0, 0, 0, 'XB_DREQ0')
+gpio_list[20] = gpio(0, 0, 0, 0, 'XB_DREQ0')
+gpio_list[17] = gpio(0, 0, 0, 0, 'IRQ_AXB')
+gpio_list[16] = gpio(1, 0, 0, 2, 'PWM0')
+
+# PCMCIA stuff
+gpio_list[57] = gpio(0, 0, 0, 1, 'PCC_IOIS16#')
+gpio_list[56] = gpio(0, 0, 0, 1, 'PCC_WAIT#')
+gpio_list[55] = gpio(1, 0, 0, 2, 'PCC_REG#')
+gpio_list[54] = gpio(1, 0, 0, 2, 'PCC_SCKSEL')
+gpio_list[53] = gpio(1, 1, 0, 2, 'PCC_CE2#')
+gpio_list[52] = gpio(1, 1, 0, 2, 'PCC_CE1#')
+gpio_list[51] = gpio(1, 1, 0, 1, 'PCC_IOW#')
+gpio_list[50] = gpio(1, 1, 0, 2, 'PCC_IOR#')
+gpio_list[49] = gpio(1, 1, 0, 2, 'PCC_WE#')
+gpio_list[48] = gpio(1, 1, 0, 2, 'PCC_OE#')
+
+# SSP port
+gpio_list[26] = gpio(0, 0, 0, 1, 'SSP_RXD')
+gpio_list[25] = gpio(0, 0, 0, 0, 'SSP_TXD')
+gpio_list[24] = gpio(1, 0, 1, 2, 'SSP_SFRM')
+gpio_list[23] = gpio(1, 0, 1, 2, 'SSP_SCLK')
+gpio_list[27] = gpio(0, 0, 0, 0, 'SSP_EXTCLK')
+
+# audio codec
+gpio_list[32] = gpio(0, 0, 0, 0, 'AUD_SDIN1')
+gpio_list[31] = gpio(1, 0, 0, 2, 'AC_SYNC')
+gpio_list[30] = gpio(1, 0, 0, 2, 'AC_SDOUT')
+gpio_list[29] = gpio(0, 0, 0, 1, 'AUD_SDIN0')
+gpio_list[28] = gpio(0, 0, 0, 1, 'AC_BITCLK')
+
+# serial ports
+gpio_list[39] = gpio(1, 0, 0, 2, 'FF_TXD')
+gpio_list[34] = gpio(0, 0, 0, 1, 'FF_RXD')
+gpio_list[41] = gpio(1, 0, 0, 2, 'FF_RTS')
+gpio_list[35] = gpio(0, 0, 0, 1, 'FF_CTS')
+gpio_list[40] = gpio(1, 0, 0, 2, 'FF_DTR')
+gpio_list[37] = gpio(0, 0, 0, 1, 'FF_DSR')
+gpio_list[38] = gpio(0, 0, 0, 1, 'FF_RI')
+gpio_list[36] = gpio(0, 0, 0, 1, 'FF_DCD')
+
+gpio_list[43] = gpio(1, 0, 0, 2, 'BT_TXD')
+gpio_list[42] = gpio(0, 0, 0, 1, 'BT_RXD')
+gpio_list[45] = gpio(1, 0, 0, 2, 'BT_RTS')
+gpio_list[44] = gpio(0, 0, 0, 1, 'BT_CTS')
+
+gpio_list[47] = gpio(1, 0, 0, 1, 'IR_TXD')
+gpio_list[46] = gpio(0, 0, 0, 2, 'IR_RXD')
+
+# misc GPIO signals
+gpio_list[14] = gpio(0, 0, 0, 0, 'MBREQ')
+gpio_list[13] = gpio(0, 0, 0, 0, 'MBGNT')
+gpio_list[12] = gpio(0, 0, 0, 0, 'GPIO_12/32K_CLK')
+gpio_list[11] = gpio(0, 0, 0, 0, '3M6_CLK')
+gpio_list[10] = gpio(1, 0, 1, 0, 'GPIO_10/RTC_CLK/debug LED')
+gpio_list[9] = gpio(0, 0, 0, 0, 'MMC_CD#')
+gpio_list[8] = gpio(0, 0, 0, 0, 'PCC_S1_CD#')
+gpio_list[7] = gpio(0, 0, 0, 0, 'PCC_S0_CD#')
+gpio_list[6] = gpio(1, 0, 0, 1, 'MMC_CLK')
+gpio_list[5] = gpio(0, 0, 0, 0, 'IRQ_TOUCH#')
+gpio_list[4] = gpio(0, 0, 0, 0, 'IRQ_ETH')
+gpio_list[3] = gpio(0, 0, 0, 0, 'MQ_IRQ#')
+gpio_list[2] = gpio(0, 0, 0, 0, 'BAT_DATA')
+gpio_list[1] = gpio(0, 0, 0, 1, 'USER_RESET#')
+gpio_list[0] = gpio(0, 0, 0, 1, 'USER_RESET#')
+
+# LCD GPIOs
+gpio_list[58] = gpio(1, 0, 0, 2, 'LDD0')
+gpio_list[59] = gpio(1, 0, 0, 2, 'LDD1')
+gpio_list[60] = gpio(1, 0, 0, 2, 'LDD2')
+gpio_list[61] = gpio(1, 0, 0, 2, 'LDD3')
+gpio_list[62] = gpio(1, 0, 0, 2, 'LDD4')
+gpio_list[63] = gpio(1, 0, 0, 2, 'LDD5')
+gpio_list[64] = gpio(1, 0, 0, 2, 'LDD6')
+gpio_list[65] = gpio(1, 0, 0, 2, 'LDD7')
+gpio_list[66] = gpio(1, 0, 0, 2, 'LDD8')
+gpio_list[67] = gpio(1, 0, 0, 2, 'LDD9')
+gpio_list[68] = gpio(1, 0, 0, 2, 'LDD10')
+gpio_list[69] = gpio(1, 0, 0, 2, 'LDD11')
+gpio_list[70] = gpio(1, 0, 0, 2, 'LDD12')
+gpio_list[71] = gpio(1, 0, 0, 2, 'LDD13')
+gpio_list[72] = gpio(1, 0, 0, 2, 'LDD14')
+gpio_list[73] = gpio(1, 0, 0, 2, 'LDD15')
+gpio_list[74] = gpio(1, 0, 0, 2, 'FCLK')
+gpio_list[75] = gpio(1, 0, 0, 2, 'LCLK')
+gpio_list[76] = gpio(1, 0, 0, 2, 'PCLK')
+gpio_list[77] = gpio(1, 0, 0, 2, 'ACBIAS')
+
+# calculate registers
+pxa_regs = {
+       'gpdr0':0, 'gpdr1':0, 'gpdr2':0,
+       'gpsr0':0, 'gpsr1':0, 'gpsr2':0,
+       'gpcr0':0, 'gpcr1':0, 'gpcr2':0,
+       'gafr0_l':0, 'gafr0_u':0,
+       'gafr1_l':0, 'gafr1_u':0,
+       'gafr2_l':0, 'gafr2_u':0,
+}
+
+# U-boot define names
+uboot_reg_names = {
+       'gpdr0':'CFG_GPDR0_VAL', 'gpdr1':'CFG_GPDR1_VAL', 'gpdr2':'CFG_GPDR2_VAL',
+       'gpsr0':'CFG_GPSR0_VAL', 'gpsr1':'CFG_GPSR1_VAL', 'gpsr2':'CFG_GPSR2_VAL',
+       'gpcr0':'CFG_GPCR0_VAL', 'gpcr1':'CFG_GPCR1_VAL', 'gpcr2':'CFG_GPCR2_VAL',
+       'gafr0_l':'CFG_GAFR0_L_VAL', 'gafr0_u':'CFG_GAFR0_U_VAL',
+       'gafr1_l':'CFG_GAFR1_L_VAL', 'gafr1_u':'CFG_GAFR1_U_VAL',
+       'gafr2_l':'CFG_GAFR2_L_VAL', 'gafr2_u':'CFG_GAFR2_U_VAL',
+}
+
+# bit mappings
+
+bit_mappings = [
+
+{ 'gpio':(0,32),  'shift':1, 'regs':{'dir':'gpdr0', 'set':'gpsr0', 'clr':'gpcr0'} },
+{ 'gpio':(32,64), 'shift':1, 'regs':{'dir':'gpdr1', 'set':'gpsr1', 'clr':'gpcr1'} },
+{ 'gpio':(64,85), 'shift':1, 'regs':{'dir':'gpdr2', 'set':'gpsr2', 'clr':'gpcr2'} },
+{ 'gpio':(0,16),  'shift':2, 'regs':{'alt':'gafr0_l'} },
+{ 'gpio':(16,32), 'shift':2, 'regs':{'alt':'gafr0_u'} },
+{ 'gpio':(32,48), 'shift':2, 'regs':{'alt':'gafr1_l'} },
+{ 'gpio':(48,64), 'shift':2, 'regs':{'alt':'gafr1_u'} },
+{ 'gpio':(64,80), 'shift':2, 'regs':{'alt':'gafr2_l'} },
+{ 'gpio':(80,85), 'shift':2, 'regs':{'alt':'gafr2_u'} },
+
+]
+
+def stuff_bits(bit_mapping, gpio_list):
+       gpios = range( bit_mapping['gpio'][0], bit_mapping['gpio'][1])
+
+       for gpio in gpios:
+               for reg in bit_mapping['regs'].keys():
+                       value = eval( 'gpio_list[gpio].%s' % (reg) )
+                       if ( value ):
+                               # we have a high bit
+                               bit_shift = (gpio - bit_mapping['gpio'][0]) * bit_mapping['shift']
+                               bit = value << (bit_shift)
+                               pxa_regs[bit_mapping['regs'][reg]] |= bit
+
+for i in bit_mappings:
+       stuff_bits(i, gpio_list)
+
+# now print out all regs
+registers = pxa_regs.keys()
+registers.sort()
+for reg in registers:
+       print '%s: 0x%x' % (reg, pxa_regs[reg])
+
+# print define to past right into U-Boot source code
+
+print 
+print 
+
+for reg in registers:
+       print '#define %s       0x%x' % (uboot_reg_names[reg], pxa_regs[reg])
+
+# print all GPIOS
+print
+print
+
+for i in range(len(gpio_list)):
+       gpio_i = gpio_list[i]
+       alt_func_desc = pxa255_alt_func[i][gpio_i.alt]
+       print 'GPIO: %i, dir=%i, set=%i, clr=%i, alt=%s, desc=%s' % (i, gpio_i.dir, gpio_i.set, gpio_i.clr, alt_func_desc, gpio_i.desc)
+
+
diff --git a/board/pxa255_idp/u-boot.lds b/board/pxa255_idp/u-boot.lds
new file mode 100644 (file)
index 0000000..20ce108
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * (C) Copyright 2000-2005
+ * 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_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text      :
+       {
+         cpu/pxa/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 : { *(.bss) }
+       _end = .;
+}
index 8a73448dc7ce7e320eee0970621278cab0b40303..2861bc3b166325274d121054e561e6e78ac28d11 100644 (file)
@@ -87,7 +87,7 @@ const uint sdram_table[] = {
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
+       char *s = getenv ("serial#");
 
        puts ("Board QUANTUM, Serial No: ");
 
@@ -136,7 +136,7 @@ long int initdram (int board_type)
        /* Check Bank 0 Memory Size,
         * 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE_PRELIM,
                           SDRAM_MAX_SIZE);
        /*
         * Final mapping:
@@ -162,7 +162,7 @@ static long int dram_size (long int mamr_value, long int *base,
 {
        volatile immap_t *immap = (immap_t *) CFG_IMMR;
        volatile memctl8xx_t *memctl = &immap->im_memctl;
-       volatile long int *addr;
+       volatile ulong *addr;
        ulong cnt, val, size;
        ulong save[32];         /* to make test non-destructive */
        unsigned char i = 0;
index 082d8b07cfb442db995dede4418dbb6a6f79f65b..049f9901f71c51a853dc6e83957b069073630196 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +111,13 @@ SECTIONS
   _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 = .;
index f34c2a4393751ab95fdf673a80f6d456c97e38e4..894b9bd25b7e9af166b295d8ffdfd242f34f671f 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 8ca08e25d1cb28db4efa43e5023e0e1068f7e652..ffb4c0ecf9f188d251bb5ad3bafd17ff96112114 100644 (file)
@@ -152,7 +152,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, (long *) SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        udelay (1000);
@@ -160,7 +160,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {            /* leave configuration at 9 columns */
@@ -287,21 +287,21 @@ static uchar *key_match (uchar *);
 
 int misc_init_r (void)
 {
-       uchar kbd_data[KEYBD_DATALEN];
-       uchar keybd_env[2 * KEYBD_DATALEN + 1];
-       uchar *str;
+       char kbd_data[KEYBD_DATALEN];
+       char keybd_env[2 * KEYBD_DATALEN + 1];
+       char *str;
        int i;
 
        i2c_init (CFG_I2C_SPEED, CFG_I2C_SLAVE);
 
-       i2c_read (CFG_I2C_KEY_ADDR, 0, 0, kbd_data, KEYBD_DATALEN);
+       i2c_read (CFG_I2C_KEY_ADDR, 0, 0, (uchar *)kbd_data, KEYBD_DATALEN);
 
        for (i = 0; i < KEYBD_DATALEN; ++i) {
                sprintf (keybd_env + i + i, "%02X", kbd_data[i]);
        }
        setenv ("keybd", keybd_env);
 
-       str = strdup (key_match (keybd_env));   /* decode keys */
+       str = strdup ((char *)key_match ((uchar *)keybd_env));  /* decode keys */
 
 #ifdef CONFIG_PREBOOT  /* automatically configure "preboot" command on key match */
        setenv ("preboot", str);        /* set or delete definition */
@@ -347,36 +347,36 @@ static uchar *key_match (uchar * kbd_str)
         * "key_magic" is checked (old behaviour); the string "125" causes
         * checks for "key_magic1", "key_magic2" and "key_magic5", etc.
         */
-       if ((kbd_magic_keys = getenv ("magic_keys")) != NULL) {
+       if ((kbd_magic_keys = (uchar *)getenv ("magic_keys")) != NULL) {
                /* loop over all magic keys;
                 * use '\0' suffix in case of empty string
                 */
                for (suffix = kbd_magic_keys;
                     *suffix || suffix == kbd_magic_keys;
                     ++suffix) {
-                       sprintf (magic, "%s%c", kbd_magic_prefix, *suffix);
+                       sprintf ((char *)magic, "%s%c", kbd_magic_prefix, *suffix);
 
 #if 0
                        printf ("### Check magic \"%s\"\n", magic);
 #endif
 
-                       if ((str = getenv (magic)) != 0) {
+                       if ((str = (uchar *)getenv ((char *)magic)) != 0) {
 
 #if 0
                                printf ("### Compare \"%s\" \"%s\"\n",
                                        kbd_str, str);
 #endif
-                               if (strcmp (kbd_str, str) == 0) {
-                                       sprintf (cmd_name, "%s%c",
+                               if (strcmp ((char *)kbd_str, (char *)str) == 0) {
+                                       sprintf ((char *)cmd_name, "%s%c",
                                                 kbd_command_prefix,
                                                 *suffix);
 
-                                       if ((cmd = getenv (cmd_name)) != 0) {
+                                       if ((cmd = getenv ((char *)cmd_name)) != 0) {
 #if 0
                                                printf ("### Set PREBOOT to $(%s): \"%s\"\n",
                                                        cmd_name, cmd);
 #endif
-                                               return (cmd);
+                                               return ((uchar *)cmd);
                                        }
                                }
                        }
@@ -404,11 +404,11 @@ int do_kbd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
        puts ("Keys:");
        for (i = 0; i < KEYBD_DATALEN; ++i) {
-               sprintf (keybd_env + i + i, "%02X", kbd_data[i]);
+               sprintf ((char *)(keybd_env + i + i), "%02X", kbd_data[i]);
                printf (" %02x", kbd_data[i]);
        }
        putc ('\n');
-       setenv ("keybd", keybd_env);
+       setenv ("keybd", (char *)keybd_env);
        return 0;
 }
 
index f64b32f795d9c2ac7c72a57388fd2ee04aed39c2..8b06af78e47a91a0858ff7a04bd2b572dbda8596 100644 (file)
@@ -75,6 +75,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -107,11 +108,13 @@ SECTIONS
   _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 = .;
index a0c086343bf999f2e30e11a85408f083db178822..522e6daa539a2b7be0d00f2b8adbf8bbbd38c1b5 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index f12d0be552598830523578de19d280ccc9ab9763..84ae5c1b5d633a45189ebe6622ddc4fe37a4851b 100644 (file)
@@ -188,12 +188,11 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
 #endif
        switch (value)
        {
-               case 0x01:
-               case AMD_MANUFACT:
+               case 0x01: /*AMD_MANUFACT*/
                        info->flash_id = FLASH_MAN_AMD;
                break;
 
-               case FUJ_MANUFACT:
+               case 0x04: /*FUJ_MANUFACT*/
                        info->flash_id = FLASH_MAN_FUJ;
                break;
 
index d0ceb4a7d5c29a23296b2ce94504d69536624d61..9e60c2b646978beb3193740a2bc537f4e0610aa9 100644 (file)
@@ -127,7 +127,7 @@ const uint static_table[] =
 
 int checkboard (void)
 {
-       unsigned char *s = getenv ("serial#");
+       char *s = getenv ("serial#");
 
        if (!s || strncmp (s, "TQM8", 4)) {
                printf ("### No HW ID - assuming RBC823\n");
@@ -193,14 +193,14 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE4_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, (long *) SDRAM_BASE4_PRELIM,
                           SDRAM_MAX_SIZE);
        udelay (1000);
 
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE4_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE4_PRELIM,
                           SDRAM_MAX_SIZE);
 
        if (size8 < size9) {    /* leave configuration at 9 columns     */
index 05f655571fb2d7b64129cbec4ce055b46eaadd9a..68ca85644ea60da218a81ec381b745f5f701abd6 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,10 +110,12 @@ SECTIONS
   _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 = .;
index cf00efc78b031dfcb06db59e752e9d2996ecb819..8cb03c7f8495ab05464e2fc753e5766207e49810 100644 (file)
@@ -127,7 +127,7 @@ long int initdram (int board_type)
         * 9 column mode
         */
 
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, (long *) SDRAM_BASE_PRELIM,
                           SDRAM_MAX_SIZE);
 
        /*
index 082d8b07cfb442db995dede4418dbb6a6f79f65b..049f9901f71c51a853dc6e83957b069073630196 100644 (file)
@@ -78,6 +78,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -110,11 +111,13 @@ SECTIONS
   _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 = .;
index f34c2a4393751ab95fdf673a80f6d456c97e38e4..894b9bd25b7e9af166b295d8ffdfd242f34f671f 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 44224cbdd089b61f9eb6ab19f97b82daf3ebf0ae..9e623d0b93425f3deb6267c49c48d49cc5d4665d 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index bdc75c13d7403031faa11274ab01513e61e12505..70fc3a5d2799034dbc00711a89a4fb91fe9c70bc 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 44224cbdd089b61f9eb6ab19f97b82daf3ebf0ae..9e623d0b93425f3deb6267c49c48d49cc5d4665d 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 858b38ceccd2e714b43b73a01be573f4b6bab80b..859dd7afe56bb1afbb7aa1b8341984098de5571f 100644 (file)
@@ -451,9 +451,9 @@ int i2c_write1 (uchar chip, uint addr, int alen, uchar * buffer, int len)
  */
 uchar i2c_reg_read1(uchar i2c_addr, uchar reg)
 {
-       char buf;
+       uchar buf;
 
-       i2c_read1(i2c_addr, reg, 1, &buf, 1);
+       i2c_read1(i2c_addr, reg, 1, &buf, (uchar)1);
 
        return(buf);
 }
index 3856a399a5451318abb1a6c4ad357b8aeff14cc8..2d71d3b2cc7280bb93ca25047b3726a0ce6c8e2d 100644 (file)
@@ -242,7 +242,7 @@ int checkboard (void)
        sys_info_t sysinfo;
        unsigned char brd_rev, brd_id;
        unsigned short sernum;
-       unsigned char scan_rev, scan_id, ofem_rev, ofem_id;
+       unsigned char scan_rev, scan_id, ofem_rev=0, ofem_id=0;
        unsigned char ofem_brd_rev, ofem_brd_id;
        KAREF_FPGA_REGS_ST *karef_ps;
        OFEM_FPGA_REGS_ST *ofem_ps;
@@ -305,12 +305,6 @@ int checkboard (void)
                printf("OFEM Board Rev:\t0x%02X\tID:   0x%02X\n", ofem_brd_id, ofem_brd_rev);
        }
 
-       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);
-
        /* Fix the ack in the bme 32 */
        udelay(5000);
        out32(CFG_BME32_BASE + 0x0000000C, 0x00000001);
@@ -349,7 +343,6 @@ int misc_init_r (void)
        char envstr[255];
        KAREF_FPGA_REGS_ST *karef_ps;
        OFEM_FPGA_REGS_ST *ofem_ps;
-       unsigned char ofem_id;
 
        if(NULL != getenv("secondserial")) {
                puts("secondserial is set, switching to second serial port\n");
index 779081950a1f98635470efa1dd5374a747c393b0..5de7cb51302f0fd331f3f40e51d2e40034033044 100644 (file)
@@ -57,7 +57,7 @@ typedef struct karef_fpga_regs_s
     volatile unsigned long brdout_enable_ul;  /* Read/Write */
     volatile unsigned long brdin_data_ul;     /* Read Only  */
     volatile unsigned long misc_ul;           /* Read/Write */
-} KAREF_FPGA_REGS_ST __attribute__((packed)), * KAREF_FPGA_REGS_PST;
+} __attribute__((packed)) KAREF_FPGA_REGS_ST , * KAREF_FPGA_REGS_PST;
 
 /* OFEM FPGA */
 typedef struct ofem_fpga_regs_s
@@ -70,7 +70,7 @@ typedef struct ofem_fpga_regs_s
     volatile unsigned long scrmask_ul;        /* Read/Write */
     volatile unsigned long control_ul;        /* Read/Write */
     volatile unsigned long mac_flow_ctrl_ul;  /* Read/Write */
-} OFEM_FPGA_REGS_ST __attribute__((packed)), * OFEM_FPGA_REGS_PST;
+} __attribute__((packed)) OFEM_FPGA_REGS_ST , * OFEM_FPGA_REGS_PST;
 
 
 #endif /* __KAREF_H__ */
index ff8658f2fcdb8bc794de7da7d319f1cd9b413d4c..9e9e99045ff5f51c9d440c624a81b74d709ee443 100644 (file)
@@ -75,7 +75,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -95,6 +95,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -127,11 +128,13 @@ SECTIONS
   _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 = .;
index c6522b939b3d9cbf636bfffb3c1588553ad2b359..47d80fae1b6bcfa5e0ea7541a46ac46745c54776 100644 (file)
@@ -65,7 +65,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -84,6 +84,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 869367dabaa4ce86135dffda81c3c9edc5d0ca05..86d259fac4a1e2d277472ffc1617c493ae2227ee 100644 (file)
@@ -272,13 +272,6 @@ int checkboard (void)
        printf ("OptoFPGA ID:\t0x%02X\tRev:  0x%02X\n", opto_id, opto_rev);
        printf ("Board Rev:\t0x%02X\tID:  %s\n", brd_rev, board_id_as[brd_id]);
 
-       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);
-
-
        /* Fix the ack in the bme 32 */
        udelay(5000);
        out32(CFG_BME32_BASE + 0x0000000C, 0x00000001);
index cb7a83ce32910763a0725367c415239e22bb3ca9..3f28f004423cdcaef20cc8d4b4943ccfbdbaa934 100644 (file)
@@ -40,6 +40,6 @@ typedef struct opto_fpga_regs_s {
        volatile unsigned long scrmask_ul;      /* Read/Write */
        volatile unsigned long control_ul;      /* Read/Write */
        volatile unsigned long boardinfo_ul;    /* Read Only  */
-} OPTO_FPGA_REGS_ST __attribute__ ((packed)), *OPTO_FPGA_REGS_PST;
+} __attribute__ ((packed)) OPTO_FPGA_REGS_ST , *OPTO_FPGA_REGS_PST;
 
 #endif /* __METROBOX_H__ */
index 0fdb166ed5828af3522a2fcc65ef6adb919fce91..a17401af92546b32297474fd0c17d23acee74c97 100644 (file)
@@ -75,7 +75,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -95,6 +95,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -127,11 +128,13 @@ SECTIONS
   _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 = .;
index 459a1d83af6a71bc6684d71e1223d9b3067cedaa..fef4c4220cbc69c5be396f5ac9c69e69ea7db987 100644 (file)
@@ -65,7 +65,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/440gx_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -84,6 +84,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index db89a78fd0fc468196714887b919c717f6cef6e7..2a5cd2ebd9dc6661cc8a1c71e04ecaa5957c6bc4 100644 (file)
@@ -68,6 +68,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -100,11 +101,13 @@ SECTIONS
   _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 = .;
index ef9bce18e0c01a980f38259bea1d1989bb44ee24..cad58731d3e812ee02495c1a767c7b9fedfb049c 100644 (file)
@@ -78,7 +78,7 @@ int misc_init_r (void)
 
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
index bfd71dbfcbe43f8098f67cdb787c4ab3a915504a..39fba61684ad513c0c7c5ce6a705769de8088666 100644 (file)
@@ -67,7 +67,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index 7e6053aaeccb583694345c126da238f750b1bdc1..7be85e4410aef2c9ea4b84f57ad51175e692da1e 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index 44224cbdd089b61f9eb6ab19f97b82daf3ebf0ae..9e623d0b93425f3deb6267c49c48d49cc5d4665d 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 7f7272da1f7f25105d47909c9b5ea1a2b09a3255..e8b9929e77118b1432c3185bb0dad7e4168d2953 100644 (file)
@@ -223,9 +223,14 @@ void reset_phy (void)
        udelay(1000);
 #endif
 #if defined(CONFIG_MII) && defined(CONFIG_ETHER_ON_FCC)
-       miiphy_reset(0x0);      /* reset PHY */
-       miiphy_write(0, PHY_MIPSCR, 0xf028); /* change PHY address to 0x02 */
-       miiphy_write(0x02, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+       /* reset PHY */
+       miiphy_reset("FCC1 ETHERNET", 0x0);
+
+       /* change PHY address to 0x02 */
+       bb_miiphy_write(NULL, 0, PHY_MIPSCR, 0xf028);
+
+       bb_miiphy_write(NULL, 0x02, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
 #endif /* CONFIG_MII */
 }
 
index a3ed1d5af69f9ca6a9ea4d112ac18b0d0adf04c1..48e19fe2a2212645caf8ba34b3f74bfc5f685e22 100644 (file)
@@ -94,6 +94,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,10 +127,12 @@ SECTIONS
   _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 = .;
index 9d2f71c33a8431f1fcf7bab56618a0fd18d645e3..72164a1c8e68eaba6f6ce5d1417183f7510d8104 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
        _i386boot_bios_size = SIZEOF(.bios);
 
 
+  . = .;
   __u_boot_cmd_start = .;
   .u_boot_cmd : { *(.u_boot_cmd) }
   __u_boot_cmd_end = .;
index da7ea18245cb11a0439b6a1bdb42b58377b8e212..127d707e6bf156389c26c77b2885f67972570713 100644 (file)
@@ -50,6 +50,7 @@ SECTIONS
        _i386boot_bss_size = SIZEOF(.bss);
 
 
+  . = .;
   __u_boot_cmd_start = .;
   .u_boot_cmd : { *(.u_boot_cmd) }
   __u_boot_cmd_end = .;
index 5076303c7ef507e5479bf1b9299d989e26f01149..1d1669cdea0b7e910744eaddf74e24f6c1d56b25 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index bfb7c38cc89f799ab487fc80f65eb2140471c9d2..258bece23cf59813a511d23556e4da02ff940c25 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 3ed1b754ca99491eff1dc6b61c3e7ed6d38ed154..5a32e45e289049fac4b92aa82231255404d234df 100644 (file)
@@ -102,7 +102,7 @@ int checkboard (void)
     unsigned char *s;
     unsigned char buf[64];
 
-    s = (getenv_r ("serial#", buf, sizeof(buf)) > 0) ? buf : NULL;
+    s = (getenv_r ("serial#", (char *)&buf, sizeof(buf)) > 0) ? buf : NULL;
 
     puts ("Board: Siemens CCM");
 
@@ -203,14 +203,14 @@ long int initdram (int board_type)
      *
      * try 8 column mode
      */
-    size8 = dram_size (CFG_MAMR_8COL, (ulong *)SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
+    size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
 
     udelay (1000);
 
     /*
      * try 9 column mode
      */
-    size9 = dram_size (CFG_MAMR_9COL, (ulong *)SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
+    size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
 
     if (size8 < size9) {               /* leave configuration at 9 columns     */
        size = size9;
index 86e587ff2fe776c3bc1e85ddbc8af584f9ef5bbb..cdf550f67b57f61612a53b23634c62db6a138554 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 4e677216db9b36bf2008bd551c6b8333c708610b..3b50272ea65b333a7bf2f19649bfd51ee370df20 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 52cd4e6fa75904ce4ab0ae26aba5984f7306b9b2..e498937b65f8b85e468cd3ac3285a94bce9941c8 100644 (file)
@@ -155,7 +155,7 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         *
         */
-       size = dram_size (CFG_MAMR, (ulong *) SDRAM_BASE_PRELIM,
+       size = dram_size (CFG_MAMR, (long *) SDRAM_BASE_PRELIM,
                          SDRAM_MAX_SIZE);
 
        udelay (1000);
index d2f2848788ca0488f77d79789d8dc1106d14d464..42e1b83b95aa7992ca8f9a986fc6748b7c2b39a4 100644 (file)
@@ -75,6 +75,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -107,11 +108,13 @@ SECTIONS
   _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 = .;
index d832edf8255b2b44405e89d03070ff34f073658b..d20688d5687133d8677c784f0e95070eebb96a92 100644 (file)
@@ -206,7 +206,7 @@ const iop_conf_t iop_conf_tab[4][32] = {
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index ce6c4540d075028597ec0db06ed81c9121a74827..05f29c6ed08047d8226c6eea40aca4ee246759bb 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
index d781903840416fb2fe50e2ffa6a0fb4a616adfe6..7f1c8cd62db9c36ae0bb0302f2eb1f50b2ad0444 100644 (file)
@@ -19,7 +19,7 @@ Die MTD-Partitionierung kann nun mittels "bootargs" ueber-
 geben werden:
 
   => printenv addmtd
-  addmtd=setenv bootargs $(bootargs)
+  addmtd=setenv bootargs ${bootargs}
     mtdparts=0:256k(U-Boot)ro,768k(Kernel),-(Rest)\;1:-(myJFFS2)
 
 Die Portierung auf SMC ist natuerlich noch nicht getestet.
index 169048e42fe6013e059432eb85e065a617df1dc7..e9941cda615b9236512cd764dea80d673f50cb81 100644 (file)
@@ -169,7 +169,7 @@ static int fpga_load (fpga_t* fpga, ulong addr, int checkall)
        }
     }
 
-    if (checkall && fpga_get_version(fpga, hdr.ih_name) < 0)
+    if (checkall && fpga_get_version(fpga, (char *)(hdr.ih_name)) < 0)
        return 1;
 
     /* align length */
@@ -341,7 +341,7 @@ int fpga_init (void)
        }
 
        hdr = (image_header_t *)addr;
-       if ((new_id = fpga_get_version(fpga, hdr->ih_name)) == -1)
+       if ((new_id = fpga_get_version(fpga, (char *)(hdr->ih_name))) == -1)
            return 1;
 
        do_load = 1;
index 6374513feccb41991fa77dc6d6e06d44250fa23d..3f05e4a6abc96fc392a508209837e32cadf76633 100644 (file)
@@ -241,9 +241,9 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         */
 #if PCU_E_WITH_SWAPPED_CS      /* XXX */
-       size_b0 = dram_size (CFG_MAMR, (ulong *) SDRAM_BASE5_PRELIM, SDRAM_MAX_SIZE);
+       size_b0 = dram_size (CFG_MAMR, (long *) SDRAM_BASE5_PRELIM, SDRAM_MAX_SIZE);
 #else  /* XXX */
-       size_b0 = dram_size (CFG_MAMR, (ulong *) SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
+       size_b0 = dram_size (CFG_MAMR, (long *) SDRAM_BASE2_PRELIM, SDRAM_MAX_SIZE);
 #endif /* XXX */
 
        memctl->memc_mamr = CFG_MAMR | MAMR_PTAE;
index fffa79eab114f20b4a61bf96a1c07319ee5583a4..6505d45561988ebeed27d0315782eaf8141a40d9 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 153286be44dd91d0ed3ef3e027fe58eba7645710..828afbbced10c8a199fb4b1cd2bd91d4334871be 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 4ab6c1bdc42538dda6d54643e6bdf2412de463c1..61d758085c238f3309ad1e0f92d2e5c0325f0d37 100644 (file)
@@ -196,7 +196,7 @@ void flash_print_info (flash_info_t *info)
        int i;
        uchar *boottype;
        uchar *bootletter;
-       uchar *fmt;
+       char *fmt;
        uchar botbootletter[] = "B";
        uchar topbootletter[] = "T";
        uchar botboottype[] = "bottom boot sector";
index c31ea539e2b0886861c24c50a7ffd4158c60c570..867589f918e36da26cd8bd7b81ac89d1689e744c 100644 (file)
@@ -356,7 +356,7 @@ void nand_init(void)
 static long ram_size(ulong *base, long maxsize)
 {
     volatile long      *test_addr;
-    volatile long      *base_addr = base;
+    volatile ulong     *base_addr = base;
     ulong              ofs;            /* byte offset from base_addr */
     ulong              save;           /* to make test non-destructive */
     ulong              save2;          /* to make test non-destructive */
index f35328a555ca5a6e3beb7940e0589d827bace5d3..1513a8517d92dc7a4d13dde17ddc30a506cafd08 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 6bd865e8cce12f9da4f9ff195074dcc72223b0ca..acb9ffda3b04c9bebed1fe83b4236c83a8d40ec4 100644 (file)
@@ -70,6 +70,8 @@ SECTIONS
     . = ALIGN(16);
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -102,10 +104,12 @@ SECTIONS
   _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 = .;
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..f4fbf969c3cf6445dd210053c319e591440dc3ae 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 76df6b2af1d39ec458525b35ebc7e8d83ef3ebf8..f4fbf969c3cf6445dd210053c319e591440dc3ae 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 105eeb8eb838b48bb4d343c5e80a1af3908bbf05..637f1250e90243f2cca004288d993c18327c1299 100644 (file)
@@ -89,8 +89,8 @@ const uint sdram_table[] =
 
 int checkboard (void)
 {
-       unsigned char *s, *e;
-       unsigned char buf[64];
+       char *s, *e;
+       char buf[64];
        int i;
 
        i = getenv_r("serial#", buf, sizeof(buf));
@@ -192,7 +192,7 @@ long int initdram (int board_type)
        * Check for 32M SDRAM Memory Size
        */
        size = dram_size(CFG_32M_MAMR|MAMR_PTAE,
-       (ulong *)SDRAM_BASE, SDRAM_32M_MAX_SIZE);
+       (long *)SDRAM_BASE, SDRAM_32M_MAX_SIZE);
        udelay (1000);
 
        /*
@@ -200,7 +200,7 @@ long int initdram (int board_type)
        */
        if (size != SDRAM_32M_MAX_SIZE) {
        size = dram_size(CFG_16M_MAMR|MAMR_PTAE,
-       (ulong *)SDRAM_BASE, SDRAM_16M_MAX_SIZE);
+       (long *)SDRAM_BASE, SDRAM_16M_MAX_SIZE);
        udelay (1000);
        }
 
index 61e10849e5333e643dc5e77cb0c6cda70d347921..cb3f456a0ef58f1bbf26a27160518180543a93e4 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 2a55157813bade2246d1c95dec2b1f24ba7054e3..a11d8630102cda1363b1a4cd486d753305d17be8 100644 (file)
@@ -89,8 +89,8 @@ const uint sdram_table[] =
 
 int checkboard (void)
 {
-       unsigned char *s, *e;
-       unsigned char buf[64];
+       char *s, *e;
+       char buf[64];
        int i;
 
        i = getenv_r("serial#", buf, sizeof(buf));
@@ -163,7 +163,7 @@ long int initdram (int board_type)
        */
        if (size != SDRAM_64M_MAX_SIZE) {
 #endif
-       size = dram_size (CFG_16M_MBMR, (ulong *)SDRAM_BASE, SDRAM_16M_MAX_SIZE);
+       size = dram_size (CFG_16M_MBMR, (long *)SDRAM_BASE, SDRAM_16M_MAX_SIZE);
        udelay (1000);
 #if 0
        }
index 61e10849e5333e643dc5e77cb0c6cda70d347921..cb3f456a0ef58f1bbf26a27160518180543a93e4 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index 6e4a060bb6ab4b19b22805a9f96c40422e20ca12..889bc77d2f820d3af5cb055013a307d0416a850e 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 9f52e339bab3a23472be66c1858f1ceee68cbec4..c79b9b0dd5ea65c05bede3f171c556616d8a7359 100644 (file)
@@ -205,7 +205,7 @@ long int initdram (int board_type)
         * Check Bank 0 Memory Size for re-configuration
         */
        size_b0 =
-               dram_size (CFG_MBMR_8COL, (ulong *) SDRAM_BASE3_PRELIM,
+               dram_size (CFG_MBMR_8COL, SDRAM_BASE3_PRELIM,
                           SDRAM_MAX_SIZE);
 
        memctl->memc_mbmr = CFG_MBMR_8COL | MBMR_PTBE;
index f801d3b194f4def847097ebcd9492c3b47cfb3eb..f9150ab3d1cd2a51e9236db01747372b85544d0f 100644 (file)
@@ -66,6 +66,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -98,11 +99,13 @@ SECTIONS
   _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 = .;
index 0245f78fc8a8c28c9660a999fed9928ea7d2c839..650572d4d05d996a0385b36e536bebf4b5094019 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index a7d35af3f7301fd8a77c50f4920ff3e50fbd67b7..8b01f45e551017863c96ec0aed87580a57028629 100644 (file)
@@ -50,6 +50,7 @@ SECTIONS
        . = ALIGN(4);
        __data_end = .;
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd :
        {
index 1dd9b2f17bc3f1b5923aa041e7bd35279bce5133..2b3949cd7b368802dae7328ef2c91e5630cc80ae 100644 (file)
@@ -239,9 +239,14 @@ reset_phy(void)
        udelay(1000);
 #endif
 #if defined(CONFIG_MII) && defined(CONFIG_ETHER_ON_FCC)
-       miiphy_reset(0x0);      /* reset PHY */
-       miiphy_write(0, PHY_MIPSCR, 0xf028); /* change PHY address to 0x02 */
-       miiphy_write(0x02, PHY_BMCR, PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+       /* reset PHY */
+       miiphy_reset("FCC1 ETHERNET", 0x0);
+
+       /* change PHY address to 0x02 */
+       bb_miiphy_write(NULL, 0, PHY_MIPSCR, 0xf028);
+
+       bb_miiphy_write(NULL, 0x02, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
 #endif /* CONFIG_MII */
 #endif
 }
index dae5acbc38bc869c750748faaab23331d58e0ad4..3bc615021dc7506fde5497cc33df8cbe603fa04e 100644 (file)
@@ -96,6 +96,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -128,10 +129,12 @@ SECTIONS
   _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 = .;
index 8c529a0611d101d868c380548d562a17edaecc23..11065cfd2c4e04ee7935dbdeb1f7d0bcbb6108a1 100644 (file)
@@ -25,11 +25,19 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   = $(BOARD).o
+OBJS   = $(BOARD).o oftree.o
 
 $(LIB):        .depend $(OBJS)
        $(AR) crv $@ $(OBJS)
 
+%.dtb: %.dts
+       dtc -f -V 0x10 -I dts -O dtb $< >$@
+
+%.c: %.dtb
+       xxd -i $< \
+          | sed -e "s/^unsigned char/const unsigned char/g" \
+          | sed -e "s/^unsigned int/const unsigned int/g" > $@
+
 #########################################################################
 
 .depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
diff --git a/board/stxxtc/oftree.dts b/board/stxxtc/oftree.dts
new file mode 100644 (file)
index 0000000..e3f3017
--- /dev/null
@@ -0,0 +1,52 @@
+/ {
+       model = "STXXTC V1";
+       compatible = "STXXTC";
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       cpus {
+               linux,phandle = <1>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+               PowerPC,MPC870@0 {
+                       linux,phandle = <3>;
+                       name = "PowerPC,MPC870";
+                       device_type = "cpu";
+                       reg = <0>;
+                       clock-frequency = <0>;          /* place-holder for runtime fillup */
+                       timebase-frequency = <0>;       /* dido */
+                       linux,boot-cpu;
+                       i-cache-size = <2000>;
+                       d-cache-size = <2000>;
+                       32-bit;
+               };
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <00000000 00000000 00000000 20000000>;
+       };
+
+       /* copy of the bd_t information (place-holders) */
+       bd_t {
+               memstart        = <0>;
+               memsize         = <0>;
+               flashstart      = <0>;
+               flashsize       = <0>;
+               flashoffset     = <0>;
+               sramstart       = <0>;
+               sramsize        = <0>;
+
+               immr_base       = <0>;
+
+               bootflags       = <0>;
+               ip_addr         = <0>;
+               enetaddr        = [ 00 00 00 00 00 00 ];
+               ethspeed        = <0>;
+               intfreq         = <0>;
+               busfreq         = <0>;
+
+               baudrate        = <0>;
+       };
+
+};
index b38b4bea47409f2880204f2ebef5f6d1861a4732..aa3d129f9c930cd34b5b85040a2c85e909c362cc 100644 (file)
@@ -481,12 +481,12 @@ void reset_phys(void)
        mii_init();
 
        for (phyno = 0; phyno < 32; ++phyno) {
-               miiphy_read(phyno, PHY_PHYIDR1, &v);
+               miiphy_read("FEC ETHERNET", phyno, PHY_PHYIDR1, &v);
                if (v == 0xFFFF)
                        continue;
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_POWD);
+               miiphy_write("FEC ETHERNET", phyno, PHY_BMCR, PHY_BMCR_POWD);
                udelay(10000);
-               miiphy_write(phyno, PHY_BMCR, PHY_BMCR_RESET | PHY_BMCR_AUTON);
+               miiphy_write("FEC ETHERNET", phyno, PHY_BMCR, PHY_BMCR_RESET | PHY_BMCR_AUTON);
                udelay(10000);
        }
 }
index c3dac0ef4a5e0ff0582620bdf400e4469a4d3c6b..9f2901c869b61b7b9374bbf3b6fcf0fa26cc9e0b 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 21b7e6aabc085906046981889a887427f4d81e1d..004e7fd354aa0175b204d0621c0b1afcd5539d37 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 1311ea9aaa5c5c0725f29174ba3e23e6a77be9f3..9bb9fd019f76f3b9c84a1c211426894979effd99 100644 (file)
@@ -77,7 +77,7 @@ const uint sdram_table[] =
 
 int checkboard (void)
 {
-    unsigned char *s = getenv("serial#");
+    char *s = getenv("serial#");
     int board_type;
 
     if (!s || strncmp(s, "SVM8", 4)) {
index 36e483613e43b2a98f23c8e8dc262fcaefc268f4..d7f7dc13292458e2f1f7e0c17bea9889ed0cc6f3 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -113,11 +114,13 @@ SECTIONS
   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 = .;
index f34c2a4393751ab95fdf673a80f6d456c97e38e4..894b9bd25b7e9af166b295d8ffdfd242f34f671f 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 8cd02d1411bac55833118e2715dc1fbc3561a571..8fbdf2a5e337c860e3079a7fe77c3554a4ace27a 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := sx1.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 99%
rename from board/sx1/platform.S
rename to board/sx1/lowlevel_init.S
index bd54df18c44c649ba2244a69682e4c462a10d9c5..bdf812e05af0a7ae2b10334112f67ade8c9dd039 100644 (file)
@@ -39,8 +39,8 @@
 _TEXT_BASE:
        .word   TEXT_BASE        /* sdram load addr from config.mk */
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
 
        /*
         * Configure 1510 pins functions to match our board.
index 670f4db7bc394198235f696d4565863a3d716f5f..d28155f4cb83b31f36efcfa4b49973f40bdf6198 100644 (file)
@@ -45,6 +45,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index a6429b6d83822979ae90bc0728139a91581c4408..30a2bc57eac50d9b3504b211ba2c96f362902e97 100644 (file)
@@ -54,6 +54,7 @@ SECTIONS
 
        .sdata  : { *(.sdata) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 367c826b8a3cad81e162602a4a7c601301fd511e..a1601f274d25e5e3c13c99a9ccd0f626749989f7 100644 (file)
@@ -102,9 +102,9 @@ long int mpc5xxx_sdram_init (sdram_conf_t *sdram_conf)
 
        /* find RAM size using SDRAM CS0 only */
        mpc5xxx_sdram_start(sdram_conf, 0);
-       test1 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        mpc5xxx_sdram_start(sdram_conf, 1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        if (test1 > test2) {
                mpc5xxx_sdram_start(sdram_conf, 0);
                dramsize = test1;
@@ -129,9 +129,9 @@ long int mpc5xxx_sdram_init (sdram_conf_t *sdram_conf)
 
        /* find RAM size using SDRAM CS1 only */
        mpc5xxx_sdram_start(sdram_conf, 0);
-       test1 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+       test1 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        mpc5xxx_sdram_start(sdram_conf, 1);
-       test2 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
+       test2 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x80000000);
        if (test1 > test2) {
                mpc5xxx_sdram_start(sdram_conf, 0);
                dramsize2 = test1;
@@ -199,9 +199,9 @@ long int mpc5xxx_sdram_init (sdram_conf_t *sdram_conf)
 
        /* find RAM size */
        mpc5xxx_sdram_start(sdram_conf, 0);
-       test1 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test1 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        mpc5xxx_sdram_start(sdram_conf, 1);
-       test2 = get_ram_size((ulong *)CFG_SDRAM_BASE, 0x80000000);
+       test2 = get_ram_size((long *)CFG_SDRAM_BASE, 0x80000000);
        if (test1 > test2) {
                mpc5xxx_sdram_start(sdram_conf, 0);
                dramsize = test1;
index 672a250cf2b530313bd5fcf307886d7526aad735..3cc2968487bb9563ba3d26ca5e27b86543c82d85 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 50ef578aaedf3f50032849c960cb950cf97cf1a3..c23433256638ef2de699315f323d15bf348363d6 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 #OBJS  := $(BOARD).o flash.o
-OBJS   := $(BOARD).o
+OBJS   := $(BOARD).o cmd_stk52xx.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $(OBJS)
diff --git a/board/tqm5200/cmd_stk52xx.c b/board/tqm5200/cmd_stk52xx.c
new file mode 100755 (executable)
index 0000000..8b9057f
--- /dev/null
@@ -0,0 +1,1221 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+/*
+ * SKT52XX specific functions
+ */
+/*#define DEBUG*/
+
+#include <common.h>
+#include <command.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_BSP)
+
+#define DEFAULT_VOL    45
+#define DEFAULT_FREQ   500
+#define DEFAULT_DURATION       200
+#define LEFT           1
+#define RIGHT          2
+#define LEFT_RIGHT     3
+#define BL_OFF         0
+#define BL_ON          1
+
+#define SM501_GPIO_CTRL_LOW            0x00000008UL
+#define SM501_GPIO_CTRL_HIGH           0x0000000CUL
+#define SM501_POWER_MODE0_GATE         0x00000040UL
+#define SM501_POWER_MODE1_GATE         0x00000048UL
+#define POWER_MODE_GATE_GPIO_PWM_I2C   0x00000040UL
+#define SM501_GPIO_DATA_LOW            0x00010000UL
+#define SM501_GPIO_DATA_HIGH           0x00010004UL
+#define SM501_GPIO_DATA_DIR_LOW                0x00010008UL
+#define SM501_GPIO_DATA_DIR_HIGH       0x0001000CUL
+#define SM501_PANEL_DISPLAY_CONTROL    0x00080000UL
+
+static int i2s_squarewave(unsigned long duration, unsigned int freq,
+                         unsigned int channel);
+static int i2s_sawtooth(unsigned long duration, unsigned int freq,
+                       unsigned int channel);
+static void spi_init(void);
+static int spi_transmit(unsigned char data);
+static void pcm1772_write_reg(unsigned char addr, unsigned char data);
+static void set_attenuation(unsigned char attenuation);
+
+#ifdef CONFIG_STK52XX
+static void spi_init(void)
+{
+       struct mpc5xxx_spi *spi = (struct mpc5xxx_spi*)MPC5XXX_SPI;
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO;
+
+       /* PSC3 as SPI and GPIOs */
+       gpio->port_config &= 0xFFFFF0FF;
+       gpio->port_config |= 0x00000800;
+       /*
+        * Its important to use the correct order when initializing the
+        * registers
+        */
+       spi->ddr = 0x0F; /* set all SPI pins as output */
+       spi->pdr = 0x08; /* set SS high */
+       spi->cr1 = 0x50; /* SPI is master, SS is general purpose output */
+       spi->cr2 = 0x00; /* normal operation */
+       spi->brr = 0xFF; /* baud rate: IPB clock / 2048 */
+}
+
+static int spi_transmit(unsigned char data)
+{
+       int dummy;
+       struct mpc5xxx_spi *spi = (struct mpc5xxx_spi*)MPC5XXX_SPI;
+
+       spi->dr = data;
+       /* wait for SPI transmission completed */
+       while(!(spi->sr & 0x80))
+       {
+               if (spi->sr & 0x40)     /* if write collision occured */
+               {
+                       /* do dummy read to clear status register */
+                       dummy = spi->dr;
+                       printf ("SPI write collision\n");
+                       return -1;
+               }
+       }
+       return (spi->dr);
+}
+
+static void pcm1772_write_reg(unsigned char addr, unsigned char data)
+{
+       struct mpc5xxx_spi *spi = (struct mpc5xxx_spi*)MPC5XXX_SPI;
+
+       spi->pdr = 0x00; /* Set SS low */
+       spi_transmit(addr);
+       spi_transmit(data);
+       /* wait some time to meet MS# hold time of PCM1772 */
+       udelay (1);
+       spi->pdr = 0x08; /* set SS high */
+}
+
+static void set_attenuation(unsigned char attenuation)
+{
+       pcm1772_write_reg(0x01, attenuation); /* left channel */
+       debug ("PCM1772 attenuation left set to %d.\n", attenuation);
+       pcm1772_write_reg(0x02, attenuation); /* right channel */
+       debug ("PCM1772 attenuation right set to %d.\n", attenuation);
+}
+
+void amplifier_init(void)
+{
+       static int init_done = 0;
+       int i;
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO;
+
+       /* Do this only once, because of the long time delay */
+       if (!init_done) {
+               /* configure PCM1772 audio format as I2S */
+               pcm1772_write_reg(0x03, 0x01);
+               /* enable audio amplifier */
+               gpio->sint_gpioe |=  0x02;      /* PSC3_5 as GPIO */
+               gpio->sint_ode &= ~0x02;        /* PSC3_5 is not open Drain */
+               gpio->sint_dvo &= ~0x02;        /* PSC3_5 is LOW */
+               gpio->sint_ddr |=  0x02;        /* PSC3_5 as output */
+               /*
+                * wait some time to allow amplifier to recover from shutdown
+                * mode.
+                */
+               for(i = 0; i < 350; i++)
+                       udelay(1000);
+               /*
+                * The used amplifier (LM4867) has a so called "pop and click"
+                * elmination filter. The input signal of the amplifier must
+                * exceed a certain level once after power up to activate the
+                * generation of the output signal. This is achieved by
+                * sending a low frequent (nearly inaudible) sawtooth with a
+                * sufficient signal level.
+                */
+               set_attenuation(50);
+               i2s_sawtooth (200, 5, LEFT_RIGHT);
+               init_done = 1;
+       }
+}
+
+static void i2s_init(void)
+{
+       unsigned long i;
+       struct mpc5xxx_psc *psc = (struct mpc5xxx_psc*)MPC5XXX_PSC2;;
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio*)MPC5XXX_GPIO;
+
+       gpio->port_config |= 0x00000070; /* PSC2 ports as Codec with MCLK */
+       psc->command = (PSC_RX_DISABLE | PSC_TX_DISABLE);
+       psc->sicr = 0x22E00000;         /* 16 bit data; I2S */
+
+       *(vu_long *)(CFG_MBAR + 0x22C) = 0x805d; /* PSC2 CDM MCLK config; MCLK
+                                                 * 5.617 MHz */
+       *(vu_long *)(CFG_MBAR + 0x214) |= 0x00000040; /* CDM clock enable
+                                                      * register */
+       psc->ccr = 0x1F03;      /* 16 bit data width; 5.617MHz MCLK */
+       psc->ctur = 0x0F;       /* 16 bit frame width */
+
+       for(i=0;i<128;i++)
+       {
+               psc->psc_buffer_32 = 0; /* clear tx fifo */
+       }
+}
+
+static int i2s_play_wave(unsigned long addr, unsigned long len)
+{
+       unsigned long i;
+       unsigned char *wave_file = (uchar *)addr + 44;  /* quick'n dirty: skip
+                                                        * wav header*/
+       unsigned char swapped[4];
+       struct mpc5xxx_psc *psc = (struct mpc5xxx_psc*)MPC5XXX_PSC2;
+
+       /*
+        * play wave file in memory; bytes/words are be swapped
+        */
+       psc->command = (PSC_RX_ENABLE | PSC_TX_ENABLE);
+
+       for(i = 0;i < (len / 4); i++) {
+               swapped[3]=*wave_file++;
+               swapped[2]=*wave_file++;
+               swapped[1]=*wave_file++;
+               swapped[0]=*wave_file++;
+               psc->psc_buffer_32 =  *((unsigned long*)swapped);
+               while (psc->tfnum > 400) {
+                       if(ctrlc())
+                               return 0;
+               }
+       }
+       while (psc->tfnum > 0);         /* wait for fifo empty */
+       udelay (100);
+       psc->command = (PSC_RX_DISABLE | PSC_TX_DISABLE);
+       return 0;
+}
+
+static int i2s_sawtooth(unsigned long duration, unsigned int freq,
+                       unsigned int channel)
+{
+       long i,j;
+       unsigned long data;
+       struct mpc5xxx_psc *psc = (struct mpc5xxx_psc*)MPC5XXX_PSC2;
+
+       psc->command = (PSC_RX_ENABLE | PSC_TX_ENABLE);
+
+       /*
+        * Generate sawtooth. Start with middle level up to highest level. Then
+        * go to lowest level and back to middle level.
+        */
+       for(j = 0; j < ((duration * freq) / 1000); j++) {
+               for(i = 0; i <= 0x7FFF; i += (0x7FFF/(44100/(freq*4)))) {
+                       data = (i & 0xFFFF);
+                       /* data format: right data left data) */
+                       if (channel == LEFT_RIGHT)
+                               data |= (data<<16);
+                       if (channel == RIGHT)
+                               data = (data<<16);
+                       psc->psc_buffer_32 = data;
+                       while (psc->tfnum > 400);
+               }
+               for(i = 0x7FFF; i >= -0x7FFF; i -= (0xFFFF/(44100/(freq*2)))) {
+                       data = (i & 0xFFFF);
+                       /* data format: right data left data) */
+                       if (channel == LEFT_RIGHT)
+                               data |= (data<<16);
+                       if (channel == RIGHT)
+                               data = (data<<16);
+                       psc->psc_buffer_32 = data;
+                       while (psc->tfnum > 400);
+               }
+               for(i = -0x7FFF; i <= 0; i += (0x7FFF/(44100/(freq*4)))) {
+                       data = (i & 0xFFFF);
+                       /* data format: right data left data) */
+                       if (channel == LEFT_RIGHT)
+                               data |= (data<<16);
+                       if (channel == RIGHT)
+                               data = (data<<16);
+                       psc->psc_buffer_32 = data;
+                       while (psc->tfnum > 400);
+               }
+       }
+       while (psc->tfnum > 0);         /* wait for fifo empty */
+       udelay (100);
+       psc->command = (PSC_RX_DISABLE | PSC_TX_DISABLE);
+
+       return 0;
+}
+
+static int i2s_squarewave(unsigned long duration, unsigned int freq,
+                        unsigned int channel)
+{
+       long i,j;
+       unsigned long data;
+       struct mpc5xxx_psc *psc = (struct mpc5xxx_psc*)MPC5XXX_PSC2;
+
+       psc->command = (PSC_RX_ENABLE | PSC_TX_ENABLE);
+
+       /*
+        * Generate sqarewave. Start with high level, duty cycle 1:1.
+        */
+       for(j = 0; j < ((duration * freq) / 1000); j++) {
+               for(i = 0; i < (44100/(freq*2)); i ++) {
+                       data = 0x7FFF;
+                       /* data format: right data left data) */
+                       if (channel == LEFT_RIGHT)
+                               data |= (data<<16);
+                       if (channel == RIGHT)
+                               data = (data<<16);
+                       psc->psc_buffer_32 = data;
+                       while (psc->tfnum > 400);
+               }
+               for(i = 0; i < (44100/(freq*2)); i ++) {
+                       data = 0x8000;
+                       /* data format: right data left data) */
+                       if (channel == LEFT_RIGHT)
+                               data |= (data<<16);
+                       if (channel == RIGHT)
+                               data = (data<<16);
+                       psc->psc_buffer_32 = data;
+                       while (psc->tfnum > 400);
+               }
+       }
+       while (psc->tfnum > 0);         /* wait for fifo empty */
+       udelay (100);
+       psc->command = (PSC_RX_DISABLE | PSC_TX_DISABLE);
+
+       return 0;
+}
+
+static int cmd_sound(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned long reg, val, duration;
+       char *tmp;
+       unsigned int freq, channel;
+       unsigned char volume;
+       int rcode = 1;
+
+#ifdef CONFIG_STK52XX_REV100
+       printf ("Revision 100 of STK52XX not supported!\n");
+       return 1;
+#endif
+       spi_init();
+       i2s_init();
+       amplifier_init();
+
+       if ((tmp = getenv ("volume")) != NULL) {
+               volume = simple_strtoul (tmp, NULL, 10);
+       } else {
+               volume = DEFAULT_VOL;
+       }
+       set_attenuation(volume);
+
+       switch (argc) {
+       case 0:
+       case 1:
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       case 2:
+               if (strncmp(argv[1],"saw",3) == 0) {
+                       printf ("Play sawtooth\n");
+                       rcode = i2s_sawtooth (DEFAULT_DURATION, DEFAULT_FREQ,
+                                             LEFT_RIGHT);
+                       return rcode;
+               } else if (strncmp(argv[1],"squ",3) == 0) {
+                       printf ("Play squarewave\n");
+                       rcode = i2s_squarewave (DEFAULT_DURATION, DEFAULT_FREQ,
+                                               LEFT_RIGHT);
+                       return rcode;
+               }
+
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       case 3:
+               if (strncmp(argv[1],"saw",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       printf ("Play sawtooth\n");
+                       rcode = i2s_sawtooth (duration, DEFAULT_FREQ,
+                                             LEFT_RIGHT);
+                       return rcode;
+               } else if (strncmp(argv[1],"squ",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       printf ("Play squarewave\n");
+                       rcode = i2s_squarewave (duration, DEFAULT_FREQ,
+                                               LEFT_RIGHT);
+                       return rcode;
+               }
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       case 4:
+               if (strncmp(argv[1],"saw",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       freq = (unsigned int)simple_strtoul(argv[3], NULL, 10);
+                       printf ("Play sawtooth\n");
+                       rcode = i2s_sawtooth (duration, freq,
+                                             LEFT_RIGHT);
+                       return rcode;
+               } else if (strncmp(argv[1],"squ",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       freq = (unsigned int)simple_strtoul(argv[3], NULL, 10);
+                       printf ("Play squarewave\n");
+                       rcode = i2s_squarewave (duration, freq,
+                                               LEFT_RIGHT);
+                       return rcode;
+               } else if (strcmp(argv[1],"pcm1772") == 0) {
+                       reg = simple_strtoul(argv[2], NULL, 10);
+                       val = simple_strtoul(argv[3], NULL, 10);
+                       printf("Set PCM1772 %lu. %lu\n", reg, val);
+                       pcm1772_write_reg((uchar)reg, (uchar)val);
+                       return 0;
+               }
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       case 5:
+               if (strncmp(argv[1],"saw",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       freq = (unsigned int)simple_strtoul(argv[3], NULL, 10);
+                       if (strncmp(argv[4],"l",1) == 0)
+                               channel = LEFT;
+                       else if (strncmp(argv[4],"r",1) == 0)
+                               channel = RIGHT;
+                       else
+                               channel = LEFT_RIGHT;
+                       printf ("Play squarewave\n");
+                       rcode = i2s_sawtooth (duration, freq,
+                                             channel);
+                       return rcode;
+               } else if (strncmp(argv[1],"squ",3) == 0) {
+                       duration = simple_strtoul(argv[2], NULL, 10);
+                       freq = (unsigned int)simple_strtoul(argv[3], NULL, 10);
+                       if (strncmp(argv[4],"l",1) == 0)
+                               channel = LEFT;
+                       else if (strncmp(argv[4],"r",1) == 0)
+                               channel = RIGHT;
+                       else
+                               channel = LEFT_RIGHT;
+                       printf ("Play squarewave\n");
+                       rcode = i2s_squarewave (duration, freq,
+                                               channel);
+                       return rcode;
+               }
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+       printf ("Usage:\nsound cmd [arg1] [arg2] ...\n");
+       return 1;
+}
+
+static int cmd_wav(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned long length, addr;
+       unsigned char volume;
+       int rcode = 1;
+       char *tmp;
+
+#ifdef CONFIG_STK52XX_REV100
+       printf ("Revision 100 of STK52XX not supported!\n");
+       return 1;
+#endif
+       spi_init();
+       i2s_init();
+       amplifier_init();
+
+       switch (argc) {
+
+       case 3:
+               length = simple_strtoul(argv[2], NULL, 16);
+               addr = simple_strtoul(argv[1], NULL, 16);
+               break;
+
+       case 2:
+               if ((tmp = getenv ("filesize")) != NULL) {
+                       length = simple_strtoul (tmp, NULL, 16);
+               } else {
+                       puts ("No filesize provided\n");
+                       return 1;
+               }
+               addr = simple_strtoul(argv[1], NULL, 16);
+
+       case 1:
+               if ((tmp = getenv ("filesize")) != NULL) {
+                       length = simple_strtoul (tmp, NULL, 16);
+               } else {
+                       puts ("No filesize provided\n");
+                       return 1;
+               }
+               if ((tmp = getenv ("loadaddr")) != NULL) {
+                       addr = simple_strtoul (tmp, NULL, 16);
+               } else {
+                       puts ("No loadaddr provided\n");
+                       return 1;
+               }
+               break;
+
+       default:
+               printf("Usage:\nwav <addr> <length[s]\n");
+               return 1;
+               break;
+       }
+
+       if ((tmp = getenv ("volume")) != NULL) {
+               volume = simple_strtoul (tmp, NULL, 10);
+       } else {
+               volume = DEFAULT_VOL;
+       }
+       set_attenuation(volume);
+
+       printf("Play wave file at %#p with length %#x\n", addr, length);
+       rcode = i2s_play_wave(addr, length);
+
+       return rcode;
+}
+
+static int cmd_beep(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned char volume;
+       unsigned int channel;
+       int rcode;
+       char *tmp;
+
+#ifdef CONFIG_STK52XX_REV100
+       printf ("Revision 100 of STK52XX not supported!\n");
+       return 1;
+#endif
+       spi_init();
+       i2s_init();
+       amplifier_init();
+
+       switch (argc) {
+       case 0:
+       case 1:
+               channel = LEFT_RIGHT;
+               break;
+       case 2:
+               if (strncmp(argv[1],"l",1) == 0)
+                       channel = LEFT;
+               else if (strncmp(argv[1],"r",1) == 0)
+                       channel = RIGHT;
+               else
+                       channel = LEFT_RIGHT;
+               break;
+       default:
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       if ((tmp = getenv ("volume")) != NULL) {
+               volume = simple_strtoul (tmp, NULL, 10);
+       } else {
+               volume = DEFAULT_VOL;
+       }
+       set_attenuation(volume);
+
+       printf("Beep on ");
+       if (channel == LEFT)
+               printf ("left ");
+       else if (channel == RIGHT)
+               printf ("right ");
+       else
+               printf ("left and right ");
+       printf ("channel\n");
+
+       rcode = i2s_squarewave (DEFAULT_DURATION, DEFAULT_FREQ, channel);
+
+       return rcode;
+}
+
+void led_init(void)
+{
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
+       struct mpc5xxx_gpt_0_7 *gpt = (struct mpc5xxx_gpt_0_7 *)MPC5XXX_GPT;
+
+       /* configure PSC3 for SPI and GPIO */
+       gpio->port_config &= ~(0x00000F00);
+       gpio->port_config |=   0x00000800;
+
+       gpio->simple_gpioe &= ~(0x00000F00);
+       gpio->simple_gpioe |=   0x00000F00;
+
+       gpio->simple_ddr &= ~(0x00000F00);
+       gpio->simple_ddr |=   0x00000F00;
+
+       /* configure timer 4-7 for simple GPIO output */
+       gpt->gpt4.emsr |=  0x00000024;
+       gpt->gpt5.emsr |=  0x00000024;
+       gpt->gpt6.emsr |=  0x00000024;
+       gpt->gpt7.emsr |=  0x00000024;
+
+
+       /* enable SM501 GPIO control (in both power modes) */
+       *(vu_long *) (SM501_MMIO_BASE+SM501_POWER_MODE0_GATE) |=
+               POWER_MODE_GATE_GPIO_PWM_I2C;
+       *(vu_long *) (SM501_MMIO_BASE+SM501_POWER_MODE1_GATE) |=
+               POWER_MODE_GATE_GPIO_PWM_I2C;
+
+       /* configure SM501 gpio pins 24-27 as output */
+       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_CTRL_LOW) &= ~(0xF << 24);
+       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_DIR_LOW) |= (0xF << 24);
+
+       /* configure SM501 gpio pins 48-51 as output */
+       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_DIR_HIGH) |= (0xF << 16);
+}
+
+/*
+ * return 1 if led number unknown
+ * return 0 else
+ */
+int do_led(char *argv[])
+{
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
+       struct mpc5xxx_gpt_0_7 *gpt = (struct mpc5xxx_gpt_0_7 *)MPC5XXX_GPT;
+
+       switch  (simple_strtoul(argv[2], NULL, 10)) {
+
+       case 0:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpio->simple_dvo |=   (1 << 8);
+               } else {
+                       gpio->simple_dvo &= ~(1 << 8);
+               }
+               break;
+
+       case 1:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpio->simple_dvo |=   (1 << 9);
+               } else {
+                       gpio->simple_dvo &= ~(1 << 9);
+               }
+               break;
+
+       case 2:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpio->simple_dvo |=   (1 << 10);
+               } else {
+                       gpio->simple_dvo &= ~(1 << 10);
+               }
+               break;
+
+       case 3:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpio->simple_dvo |=   (1 << 11);
+               } else {
+                       gpio->simple_dvo &= ~(1 << 11);
+               }
+               break;
+
+       case 4:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpt->gpt4.emsr |=  (1 << 4);
+               } else {
+                       gpt->gpt4.emsr &=  ~(1 << 4);
+               }
+               break;
+
+       case 5:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpt->gpt5.emsr |=  (1 << 4);
+               } else {
+                       gpt->gpt5.emsr &=  ~(1 << 4);
+               }
+               break;
+
+       case 6:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpt->gpt6.emsr |=  (1 << 4);
+               } else {
+                       gpt->gpt6.emsr &=  ~(1 << 4);
+               }
+               break;
+
+       case 7:
+               if (strcmp (argv[3], "on") == 0) {
+                       gpt->gpt7.emsr |=  (1 << 4);
+               } else {
+                       gpt->gpt7.emsr &=  ~(1 << 4);
+               }
+               break;
+
+       case 24:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) |=
+                               (0x1 << 24);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) &=
+                               ~(0x1 << 24);
+               }
+               break;
+
+       case 25:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) |=
+                               (0x1 << 25);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) &=
+                               ~(0x1 << 25);
+               }
+               break;
+
+       case 26:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) |=
+                               (0x1 << 26);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) &=
+                               ~(0x1 << 26);
+               }
+               break;
+
+       case 27:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) |=
+                               (0x1 << 27);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_LOW) &=
+                               ~(0x1 << 27);
+               }
+               break;
+
+       case 48:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) |=
+                               (0x1 << 16);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) &=
+                               ~(0x1 << 16);
+               }
+               break;
+
+       case 49:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) |=
+                               (0x1 << 17);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) &=
+                               ~(0x1 << 17);
+               }
+               break;
+
+       case 50:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) |=
+                               (0x1 << 18);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) &=
+                               ~(0x1 << 18);
+               }
+               break;
+
+       case 51:
+               if (strcmp (argv[3], "on") == 0) {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) |=
+                               (0x1 << 19);
+               } else {
+                       *(vu_long *) (SM501_MMIO_BASE+SM501_GPIO_DATA_HIGH) &=
+                               ~(0x1 << 19);
+               }
+               break;
+
+       default:
+               printf ("%s: invalid led number %s\n", __FUNCTION__, argv[2]);
+               return 1;
+       }
+
+       return 0;
+}
+
+/*
+ * return 1 on CAN initialization failure
+ * return 0 if no failure
+ */
+int can_init(void)
+{
+       static int init_done = 0;
+       int i;
+       struct mpc5xxx_mscan *can1 =
+               (struct mpc5xxx_mscan *)(CFG_MBAR + 0x0900);
+       struct mpc5xxx_mscan *can2 =
+               (struct mpc5xxx_mscan *)(CFG_MBAR + 0x0980);
+
+       /* GPIO configuration of the CAN pins is done in TQM5200.h */
+
+       if (!init_done) {
+               /* init CAN 1 */
+               can1->canctl1 |= 0x80;  /* CAN enable */
+               udelay(100);
+
+               i = 0;
+               can1->canctl0 |= 0x02;  /* sleep mode */
+               /* wait until sleep mode reached */
+               while (!(can1->canctl1 & 0x02)) {
+                       udelay(10);
+               i++;
+               if (i == 10) {
+                       printf ("%s: CAN1 initialize error, "
+                               "can not enter sleep mode!\n",
+                               __FUNCTION__);
+                       return 1;
+               }
+               }
+               i = 0;
+               can1->canctl0 = 0x01;   /* enter init mode */
+               /* wait until init mode reached */
+               while (!(can1->canctl1 & 0x01)) {
+                       udelay(10);
+                       i++;
+                       if (i == 10) {
+                               printf ("%s: CAN1 initialize error, "
+                                       "can not enter init mode!\n",
+                                       __FUNCTION__);
+                               return 1;
+                       }
+               }
+               can1->canctl1 = 0x80;
+               can1->canctl1 |= 0x40;
+               can1->canbtr0 = 0x0F;
+               can1->canbtr1 = 0x7F;
+               can1->canidac &= ~(0x30);
+               can1->canidar1 = 0x00;
+               can1->canidar3 = 0x00;
+               can1->canidar5 = 0x00;
+               can1->canidar7 = 0x00;
+               can1->canidmr0 = 0xFF;
+               can1->canidmr1 = 0xFF;
+               can1->canidmr2 = 0xFF;
+               can1->canidmr3 = 0xFF;
+               can1->canidmr4 = 0xFF;
+               can1->canidmr5 = 0xFF;
+               can1->canidmr6 = 0xFF;
+               can1->canidmr7 = 0xFF;
+
+               i = 0;
+               can1->canctl0 &= ~(0x01);       /* leave init mode */
+               can1->canctl0 &= ~(0x02);
+               /* wait until init and sleep mode left */
+               while ((can1->canctl1 & 0x01) || (can1->canctl1 & 0x02)) {
+                       udelay(10);
+                       i++;
+                       if (i == 10) {
+                               printf ("%s: CAN1 initialize error, "
+                                       "can not leave init/sleep mode!\n",
+                                       __FUNCTION__);
+                               return 1;
+                       }
+               }
+
+               /* init CAN 2 */
+               can2->canctl1 |= 0x80;  /* CAN enable */
+               udelay(100);
+
+               i = 0;
+               can2->canctl0 |= 0x02;  /* sleep mode */
+               /* wait until sleep mode reached */
+               while (!(can2->canctl1 & 0x02)) {
+                       udelay(10);
+                       i++;
+                       if (i == 10) {
+                               printf ("%s: CAN2 initialize error, "
+                                       "can not enter sleep mode!\n",
+                                       __FUNCTION__);
+                               return 1;
+                       }
+               }
+               i = 0;
+               can2->canctl0 = 0x01;   /* enter init mode */
+               /* wait until init mode reached */
+               while (!(can2->canctl1 & 0x01)) {
+                       udelay(10);
+                       i++;
+                       if (i == 10) {
+                               printf ("%s: CAN2 initialize error, "
+                                       "can not enter init mode!\n",
+                                       __FUNCTION__);
+                               return 1;
+                       }
+               }
+               can2->canctl1 = 0x80;
+               can2->canctl1 |= 0x40;
+               can2->canbtr0 = 0x0F;
+               can2->canbtr1 = 0x7F;
+               can2->canidac &= ~(0x30);
+               can2->canidar1 = 0x00;
+               can2->canidar3 = 0x00;
+               can2->canidar5 = 0x00;
+               can2->canidar7 = 0x00;
+               can2->canidmr0 = 0xFF;
+               can2->canidmr1 = 0xFF;
+               can2->canidmr2 = 0xFF;
+               can2->canidmr3 = 0xFF;
+               can2->canidmr4 = 0xFF;
+               can2->canidmr5 = 0xFF;
+               can2->canidmr6 = 0xFF;
+               can2->canidmr7 = 0xFF;
+               can2->canctl0 &= ~(0x01);       /* leave init mode */
+               can2->canctl0 &= ~(0x02);
+
+               i = 0;
+               /* wait until init mode left */
+               while ((can2->canctl1 & 0x01) || (can2->canctl1 & 0x02)) {
+                       udelay(10);
+                       i++;
+                       if (i == 10) {
+                               printf ("%s: CAN2 initialize error, "
+                                       "can not leave init/sleep mode!\n",
+                                       __FUNCTION__);
+                               return 1;
+                       }
+               }
+               init_done = 1;
+       }
+       return 0;
+}
+
+/*
+ * return 1 on CAN failure
+ * return 0 if no failure
+ */
+int do_can(char *argv[])
+{
+       int i;
+       struct mpc5xxx_mscan *can1 =
+               (struct mpc5xxx_mscan *)(CFG_MBAR + 0x0900);
+       struct mpc5xxx_mscan *can2 =
+               (struct mpc5xxx_mscan *)(CFG_MBAR + 0x0980);
+
+       /* send a message on CAN1 */
+       can1->cantbsel = 0x01;
+       can1->cantxfg.idr[0] = 0x55;
+       can1->cantxfg.idr[1] = 0x00;
+       can1->cantxfg.idr[1] &= ~0x8;
+       can1->cantxfg.idr[1] &= ~0x10;
+       can1->cantxfg.dsr[0] = 0xCC;
+       can1->cantxfg.dlr = 1;
+       can1->cantxfg.tbpr = 0;
+       can1->cantflg = 0x01;
+
+       i = 0;
+       while ((can1->cantflg & 0x01) == 0) {
+               i++;
+               if (i == 10) {
+                       printf ("%s: CAN1 send timeout, "
+                               "can not send message!\n",
+                               __FUNCTION__);
+                       return 1;
+               }
+               udelay(1000);
+       }
+       udelay(1000);
+
+       i = 0;
+       while (!(can2->canrflg & 0x01)) {
+               i++;
+               if (i == 10) {
+                       printf ("%s: CAN2 receive timeout, "
+                               "no message received!\n",
+                               __FUNCTION__);
+                       return 1;
+               }
+               udelay(1000);
+       }
+
+       if (can2->canrxfg.dsr[0] != 0xCC) {
+               printf ("%s: CAN2 receive error, "
+                        "data mismatch!\n",
+                       __FUNCTION__);
+               return 1;
+       }
+
+       /* send a message on CAN2 */
+       can2->cantbsel = 0x01;
+       can2->cantxfg.idr[0] = 0x55;
+       can2->cantxfg.idr[1] = 0x00;
+       can2->cantxfg.idr[1] &= ~0x8;
+       can2->cantxfg.idr[1] &= ~0x10;
+       can2->cantxfg.dsr[0] = 0xCC;
+       can2->cantxfg.dlr = 1;
+       can2->cantxfg.tbpr = 0;
+       can2->cantflg = 0x01;
+
+       i = 0;
+       while ((can2->cantflg & 0x01) == 0) {
+               i++;
+               if (i == 10) {
+                       printf ("%s: CAN2 send error, "
+                               "can not send message!\n",
+                               __FUNCTION__);
+                       return 1;
+               }
+               udelay(1000);
+       }
+       udelay(1000);
+
+       i = 0;
+       while (!(can1->canrflg & 0x01)) {
+               i++;
+               if (i == 10) {
+                       printf ("%s: CAN1 receive timeout, "
+                               "no message received!\n",
+                               __FUNCTION__);
+                       return 1;
+               }
+               udelay(1000);
+       }
+
+       if (can1->canrxfg.dsr[0] != 0xCC) {
+               printf ("%s: CAN1 receive error 0x%02x\n",
+                       __FUNCTION__, (can1->canrxfg.dsr[0]));
+               return 1;
+       }
+
+       return 0;
+}
+
+/*
+ * return 1 if rs232 port unknown
+ * return 2 on txd/rxd failure (only rs232 2)
+ * return 3 on rts/cts failure
+ * return 0 if no failure
+ */
+int do_rs232(char *argv[])
+{
+       int error_status = 0;
+       struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5XXX_GPIO;
+       struct mpc5xxx_psc *psc1 = (struct mpc5xxx_psc *)MPC5XXX_PSC1;
+
+       switch  (simple_strtoul(argv[2], NULL, 10)) {
+
+       case 1:
+               /* check RTS <-> CTS loop */
+               /* set rts to 0 */
+               psc1->op1 |= 0x01;
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               /* check status at cts */
+               if ((psc1->ip & 0x01) != 0) {
+                       error_status = 3;
+                       printf ("%s: failure at rs232_1, cts status is %d "
+                               "(should be 0)\n",
+                               __FUNCTION__, (psc1->ip & 0x01));
+               }
+
+               /* set rts to 1 */
+               psc1->op0 |= 0x01;
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               /* check status at cts */
+               if ((psc1->ip & 0x01) != 1) {
+                       error_status = 3;
+                       printf ("%s: failure at rs232_1, cts status is %d "
+                               "(should be 1)\n",
+                               __FUNCTION__, (psc1->ip & 0x01));
+               }
+
+               break;
+
+       case 2:
+               /* set PSC3_0, PSC3_2 as output and PSC3_1, PSC3_3 as input */
+               gpio->simple_ddr &= ~(0x00000F00);
+               gpio->simple_ddr |=   0x00000500;
+
+               /* check TXD <-> RXD loop */
+               /* set TXD to 1 */
+               gpio->simple_dvo |=   (1 << 8);
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               if ((gpio->simple_ival & 0x00000200) != 0x00000200) {
+                       error_status = 2;
+                       printf ("%s: failure at rs232_2, rxd status is %d "
+                               "(should be 1)\n",
+                               __FUNCTION__,
+                               (gpio->simple_ival & 0x00000200) >> 9);
+               }
+
+               /* set TXD to 0 */
+               gpio->simple_dvo &= ~(1 << 8);
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               if ((gpio->simple_ival & 0x00000200) != 0x00000000) {
+                       error_status = 2;
+                       printf ("%s: failure at rs232_2, rxd status is %d "
+                               "(should be 0)\n",
+                               __FUNCTION__,
+                               (gpio->simple_ival & 0x00000200) >> 9);
+               }
+
+               /* check RTS <-> CTS loop */
+               /* set RTS to 1 */
+               gpio->simple_dvo |=   (1 << 10);
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               if ((gpio->simple_ival & 0x00000800) != 0x00000800) {
+                       error_status = 3;
+                       printf ("%s: failure at rs232_2, cts status is %d "
+                               "(should be 1)\n",
+                               __FUNCTION__,
+                               (gpio->simple_ival & 0x00000800) >> 11);
+               }
+
+               /* set RTS to 0 */
+               gpio->simple_dvo &= ~(1 << 10);
+
+               /* wait some time before requesting status */
+               udelay(10);
+
+               if ((gpio->simple_ival & 0x00000800) != 0x00000000) {
+                       error_status = 3;
+                       printf ("%s: failure at rs232_2, cts status is %d "
+                               "(should be 0)\n",
+                               __FUNCTION__,
+                               (gpio->simple_ival & 0x00000800) >> 11);
+               }
+
+               /* set PSC3_0, PSC3_1, PSC3_2 and PSC3_3 as output */
+               gpio->simple_ddr &= ~(0x00000F00);
+               gpio->simple_ddr |=   0x00000F00;
+               break;
+
+       default:
+               printf ("%s: invalid rs232 number %s\n", __FUNCTION__, argv[2]);
+               error_status = 1;
+               break;
+       }
+
+       return error_status;
+}
+
+static void sm501_backlight (unsigned int state)
+{
+       if (state == BL_ON) {
+               *(vu_long *)(SM501_MMIO_BASE+SM501_PANEL_DISPLAY_CONTROL) |=
+                       (1 << 26) | (1 << 27);
+       } else if (state == BL_OFF)
+               *(vu_long *)(SM501_MMIO_BASE+SM501_PANEL_DISPLAY_CONTROL) &=
+                       ~((1 << 26) | (1 << 27));
+}
+
+int cmd_fkt(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int rcode;
+
+#ifdef CONFIG_STK52XX_REV100
+       printf ("Revision 100 of STK52XX not supported!\n");
+       return 1;
+#endif
+       led_init();
+       can_init();
+
+       switch (argc) {
+
+       case 0:
+       case 1:
+               break;
+
+       case 2:
+               if (strncmp (argv[1], "can", 3) == 0) {
+                       rcode = do_can (argv);
+                       if (rcode == 0)
+                               printf ("OK\n");
+                       else
+                               printf ("Error\n");
+                       return rcode;
+               }
+               break;
+
+       case 3:
+               if (strncmp (argv[1], "rs232", 3) == 0) {
+                       rcode = do_rs232 (argv);
+                       if (rcode == 0)
+                               printf ("OK\n");
+                       else
+                               printf ("Error\n");
+                       return rcode;
+               } else if (strncmp (argv[1], "backlight", 4) == 0) {
+                       if (strncmp (argv[2], "on", 2) == 0) {
+                               sm501_backlight (BL_ON);
+                               return 0;
+                       }
+                       else if (strncmp (argv[2], "off", 3) == 0) {
+                               sm501_backlight (BL_OFF);
+                               return 0;
+                       }
+               }
+               break;
+
+       case 4:
+               if (strcmp (argv[1], "led") == 0) {
+                       return (do_led (argv));
+               }
+               break;
+
+       default:
+               break;
+       }
+
+       printf ("Usage:\nfkt cmd [arg1] [arg2] ...\n");
+       return 1;
+}
+
+
+U_BOOT_CMD(
+       sound ,    5,    1,     cmd_sound,
+       "sound   - Sound sub-system\n",
+       "saw [duration] [freq] [channel]\n"
+       "    - generate sawtooth for 'duration' ms with frequency 'freq'\n"
+       "      on left \"l\" or right \"r\" channel\n"
+       "sound square [duration] [freq] [channel]\n"
+       "    - generate squarewave for 'duration' ms with frequency 'freq'\n"
+       "      on left \"l\" or right \"r\" channel\n"
+       "pcm1772 reg val\n"
+);
+
+U_BOOT_CMD(
+       wav ,    3,    1,     cmd_wav,
+       "wav     - play wav file\n",
+       "[addr] [bytes]\n"
+       "    - play wav file at address 'addr' with length 'bytes'\n"
+);
+
+U_BOOT_CMD(
+       beep ,    2,    1,     cmd_beep,
+       "beep    - play short beep\n",
+       "[channel]\n"
+       "    - play short beep on \"l\"eft or \"r\"ight channel\n"
+);
+
+U_BOOT_CMD(
+       fkt ,   4,      1,      cmd_fkt,
+       "fkt     - Function test routines\n",
+       "led number on/off\n"
+       "     - 'number's like printed on SKT52XX board\n"
+       "fkt can\n"
+       "     - loopback plug for X83 required\n"
+       "fkt rs232 number\n"
+       "     - loopback plug(s) for X2 required\n"
+       "fkt backlight on/off\n"
+       "     - switch backlight on or off\n"
+);
+#endif /* CONFIG_STK52XX */
+#endif /* CFG_CMD_BSP */
index 90275ecd8e5639eed77e235be640fec099740854..6aad920edaad98adec418da0cfe9ee5803cbc144 100644 (file)
@@ -122,9 +122,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;
@@ -150,9 +150,9 @@ long int initdram (int board_type)
 
        /* find RAM size using SDRAM CS1 only */
        sdram_start(0);
-       test1 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x20000000);
+       test1 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x20000000);
        sdram_start(1);
-       test2 = get_ram_size((ulong *)(CFG_SDRAM_BASE + dramsize), 0x20000000);
+       test2 = get_ram_size((long *)(CFG_SDRAM_BASE + dramsize), 0x20000000);
        if (test1 > test2) {
                sdram_start(0);
                dramsize2 = test1;
@@ -425,7 +425,7 @@ int last_stage_init (void)
         * Check for SRAM and SRAM size
         */
 
-       /* save origianl SRAM content  */
+       /* save original SRAM content  */
        save = *(volatile u16 *)CFG_CS2_START;
        restore = 1;
 
@@ -447,8 +447,7 @@ int last_stage_init (void)
                *(vu_long *)MPC5XXX_CS2_STOP = 0x0000FFFF;
                restore = 0;
                __asm__ volatile ("sync");
-       }
-       else if (*(volatile u16 *)(CFG_CS2_START + (1<<19)) == 0xA5A5) {
+       } else if (*(volatile u16 *)(CFG_CS2_START + (1<<19)) == 0xA5A5) {
                /* make sure that we access a mirrored address */
                *(volatile u16 *)CFG_CS2_START = 0x1111;
                __asm__ volatile ("sync");
@@ -461,8 +460,7 @@ int last_stage_init (void)
                }
                else
                        puts ("!! possible error in SRAM detection\n");
-       }
-       else {
+       } else {
                puts ("SRAM:  1 MB\n");
        }
        /* restore origianl SRAM content  */
@@ -497,8 +495,7 @@ int last_stage_init (void)
                *(vu_long *)MPC5XXX_CS1_STOP = 0x0000FFFF;
                restore = 0;
                __asm__ volatile ("sync");
-       }
-       else {
+       } else {
                puts ("VGA:   SMI501 (Voyager) with 8 MB\n");
        }
        /* restore origianl FB content  */
@@ -598,11 +595,46 @@ void video_get_info_str (int line_number, char *info)
 #endif
 
 /*
- * Returns SM501 register base address. First thing called in the driver.
+ * Returns SM501 register base address. First thing called in the
+ * driver. Checks if SM501 is physically present.
  */
 unsigned int board_video_init (void)
 {
-       return SM501_MMIO_BASE;
+       u16 save, tmp;
+       int restore, ret;
+
+       /*
+        * Check for Grafic Controller
+        */
+
+       /* save origianl FB content  */
+       save = *(volatile u16 *)CFG_CS1_START;
+       restore = 1;
+
+       /* write test pattern to FB memory */
+       *(volatile u16 *)CFG_CS1_START = 0xA5A5;
+       __asm__ volatile ("sync");
+       /*
+        * Put a different pattern on the data lines: otherwise they may float
+        * long enough to read back what we wrote.
+        */
+       tmp = *(volatile u16 *)CFG_FLASH_BASE;
+       if (tmp == 0xA5A5)
+               puts ("!! possible error in grafic controller detection\n");
+
+       if (*(volatile u16 *)CFG_CS1_START != 0xA5A5) {
+               /* no grafic controller found */
+               restore = 0;
+               ret = 0;
+       } else {
+               ret = SM501_MMIO_BASE;
+       }
+
+       if (restore) {
+               *(volatile u16 *)CFG_CS1_START = save;
+               __asm__ volatile ("sync");
+       }
+       return ret;
 }
 
 /*
index 672a250cf2b530313bd5fcf307886d7526aad735..3cc2968487bb9563ba3d26ca5e27b86543c82d85 100644 (file)
@@ -61,6 +61,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -93,11 +94,13 @@ SECTIONS
   _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 = .;
index 22919873d1e9a11105ba5b23871559b29225b1c4..029863b7d9f80a5b8421d0ddb991a633b1fd22ff 100644 (file)
@@ -195,7 +195,7 @@ const iop_conf_t iop_conf_tab[4][32] = {
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof (str));
 
        puts ("Board: ");
index ce6c4540d075028597ec0db06ed81c9121a74827..05f29c6ed08047d8226c6eea40aca4ee246759bb 100644 (file)
@@ -62,6 +62,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -94,11 +95,13 @@ SECTIONS
   _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 = .;
diff --git a/board/tqm834x/Makefile b/board/tqm834x/Makefile
new file mode 100644 (file)
index 0000000..3ecc7d0
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# Copyright 2004 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
+
+LIB    = lib$(BOARD).a
+
+OBJS   = $(BOARD).o pci.o
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/tqm834x/config.mk b/board/tqm834x/config.mk
new file mode 100644 (file)
index 0000000..f172c4e
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# Copyright 2004 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
+#
+
+TEXT_BASE   =   0x80000000
diff --git a/board/tqm834x/pci.c b/board/tqm834x/pci.c
new file mode 100644 (file)
index 0000000..5a23e6c
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * (C) Copyright 2005
+ * 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 <asm/mmu.h>
+#include <common.h>
+#include <pci.h>
+
+#ifdef CONFIG_PCI
+
+/* 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_PCI_SYS_MEM_SIZE        (1024 * 1024 * 1024)
+
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_tqm834x_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_tqm834x_config_table,
+#endif
+};
+
+
+/**************************************************************************
+ * pci_init_board()
+ *
+ * NOTICE: MPC8349 internally has two PCI controllers (PCI1 and PCI2) but since
+ * per TQM834x design physical connections to external devices (PCI sockets)
+ * are routed only to the PCI1 we do not account for the second one - this code
+ * supports PCI1 module only. Should support for the PCI2 be required in the
+ * future it needs a separate pci_controller structure (above) and handling -
+ * please refer to other boards' implementation for dual PCI host controllers,
+ * for example board/Marvell/db64360/pci.c, pci_init_board()
+ *
+ */
+void
+pci_init_board(void)
+{
+       volatile immap_t *      immr;
+       volatile clk8349_t *    clk;
+       volatile law8349_t *    pci_law;
+       volatile pot8349_t *    pci_pot;
+       volatile pcictrl8349_t *        pci_ctrl;
+       volatile pciconf8349_t *        pci_conf;
+       u16 reg16;
+       u32 reg32;
+       struct  pci_controller * hose;
+
+       immr = (immap_t *)CFG_IMMRBAR;
+       clk = (clk8349_t *)&immr->clk;
+       pci_law = immr->sysconf.pcilaw;
+       pci_pot = immr->ios.pot;
+       pci_ctrl = immr->pci_ctrl;
+       pci_conf = immr->pci_conf;
+
+       hose = &pci1_hose;
+
+       /*
+        * Configure PCI controller and PCI_CLK_OUTPUT
+        */
+
+       /*
+        * WARNING! only PCI_CLK_OUTPUT1 is enabled here as this is the one
+        * line actually used for clocking all external PCI devices in TQM83xx.
+        * Enabling other PCI_CLK_OUTPUT lines may lead to board's hang for
+        * unknown reasons - particularly PCI_CLK_OUTPUT6 and PCI_CLK_OUTPUT7
+        * are known to hang the board; this issue is under investigation
+        * (13 oct 05)
+        */
+       reg32 = OCCR_PCICOE1;
+#if 0
+       /* enabling all PCI_CLK_OUTPUT lines HANGS the board... */
+       reg32 = 0xff000000;
+#endif
+       if (clk->spmr & SPMR_CKID) {
+               /* PCI Clock is half CONFIG_83XX_CLKIN so need to set up OCCR
+                * fields accordingly */
+               reg32 |= (OCCR_PCI1CR | OCCR_PCI2CR);
+
+               reg32 |= (OCCR_PCICD0 | OCCR_PCICD1 | OCCR_PCICD2 \
+                         | OCCR_PCICD3 | OCCR_PCICD4 | OCCR_PCICD5 \
+                         | OCCR_PCICD6 | OCCR_PCICD7);
+       }
+
+       clk->occr = reg32;
+       udelay(2000);
+
+       /*
+        * Release PCI RST Output signal
+        */
+       pci_ctrl[0].gcr = 0;
+       udelay(2000);
+       pci_ctrl[0].gcr = 1;
+       udelay(2000);
+
+       /*
+        * Configure PCI Local Access Windows
+        */
+       pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR;
+       pci_law[0].ar = LAWAR_EN | LAWAR_SIZE_512M;
+
+       pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR;
+       pci_law[1].ar = LAWAR_EN | LAWAR_SIZE_16M;
+
+       /*
+        * Configure PCI Outbound Translation Windows
+        */
+
+       /* PCI1 mem space */
+       pci_pot[0].potar = (CFG_PCI1_MEM_BASE >> 12) & POTAR_TA_MASK;
+       pci_pot[0].pobar = (CFG_PCI1_MEM_PHYS >> 12) & POBAR_BA_MASK;
+       pci_pot[0].pocmr = POCMR_EN | (POCMR_CM_512M & POCMR_CM_MASK);
+
+       /* PCI1 IO space */
+       pci_pot[1].potar = (CFG_PCI1_IO_BASE >> 12) & POTAR_TA_MASK;
+       pci_pot[1].pobar = (CFG_PCI1_IO_PHYS >> 12) & POBAR_BA_MASK;
+       pci_pot[1].pocmr = POCMR_EN | POCMR_IO | (POCMR_CM_16M & POCMR_CM_MASK);
+
+       /*
+        * Configure PCI Inbound Translation Windows
+        */
+
+       /* we need RAM mapped to PCI space for the devices to
+        * access main memory */
+       pci_ctrl[0].pitar1 = 0x0;
+       pci_ctrl[0].pibar1 = 0x0;
+       pci_ctrl[0].piebar1 = 0x0;
+       pci_ctrl[0].piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP | PIWAR_WTT_SNOOP | PIWAR_IWS_256M;
+
+       hose->first_busno = 0;
+       hose->last_busno = 0xff;
+
+       /* PCI memory space */
+       pci_set_region(hose->regions + 0,
+                      CFG_PCI1_MEM_BASE,
+                      CFG_PCI1_MEM_PHYS,
+                      CFG_PCI1_MEM_SIZE,
+                      PCI_REGION_MEM);
+
+       /* PCI IO space */
+       pci_set_region(hose->regions + 1,
+                      CFG_PCI1_IO_BASE,
+                      CFG_PCI1_IO_PHYS,
+                      CFG_PCI1_IO_SIZE,
+                      PCI_REGION_IO);
+
+       /* System memory space */
+       pci_set_region(hose->regions + 2,
+                      CONFIG_PCI_SYS_MEM_BUS,
+                      CONFIG_PCI_SYS_MEM_PHYS,
+                      CONFIG_PCI_SYS_MEM_SIZE,
+                      PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+       hose->region_count = 3;
+
+       pci_setup_indirect(hose,
+                          (CFG_IMMRBAR+0x8300),
+                          (CFG_IMMRBAR+0x8304));
+
+       pci_register_hose(hose);
+
+       /*
+        * Write to Command register
+        */
+       reg16 = 0xff;
+       pci_hose_read_config_word (hose, PCI_BDF(0,0,0), PCI_COMMAND,
+                                       &reg16);
+       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
+       pci_hose_write_config_word(hose, PCI_BDF(0,0,0), PCI_COMMAND,
+                                       reg16);
+
+       /*
+        * Clear non-reserved bits in status register.
+        */
+       pci_hose_write_config_word(hose, PCI_BDF(0,0,0), PCI_STATUS,
+                                       0xffff);
+       pci_hose_write_config_byte(hose, PCI_BDF(0,0,0), PCI_LATENCY_TIMER,
+                                       0x80);
+
+#ifdef CONFIG_PCI_SCAN_SHOW
+       printf("PCI:   Bus Dev VenId DevId Class Int\n");
+#endif
+       /*
+        * Hose scan.
+        */
+       hose->last_busno = pci_hose_scan(hose);
+}
+#endif /* CONFIG_PCI */
diff --git a/board/tqm834x/tqm834x.c b/board/tqm834x/tqm834x.c
new file mode 100644 (file)
index 0000000..dada673
--- /dev/null
@@ -0,0 +1,408 @@
+/*
+ * (C) Copyright 2005
+ * 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 <ioports.h>
+#include <mpc83xx.h>
+#include <asm/mpc8349_pci.h>
+#include <i2c.h>
+#include <spd.h>
+#include <miiphy.h>
+#include <asm-ppc/mmu.h>
+#include <pci.h>
+
+#define IOSYNC                 asm("eieio")
+#define ISYNC                  asm("isync")
+#define SYNC                   asm("sync")
+#define FPW                    FLASH_PORT_WIDTH
+#define FPWV                   FLASH_PORT_WIDTHV
+
+#define DDR_MAX_SIZE_PER_CS    0x20000000
+
+#if defined(DDR_CASLAT_20)
+#define TIMING_CASLAT          TIMING_CFG1_CASLAT_20
+#define MODE_CASLAT            DDR_MODE_CASLAT_20
+#else
+#define TIMING_CASLAT          TIMING_CFG1_CASLAT_25
+#define MODE_CASLAT            DDR_MODE_CASLAT_25
+#endif
+
+#define INITIAL_CS_CONFIG      (CSCONFIG_EN | CSCONFIG_ROW_BIT_12 | \
+                               CSCONFIG_COL_BIT_9)
+
+/* Global variable used to store detected number of banks */
+int tqm834x_num_flash_banks;
+
+/* External definitions */
+ulong flash_get_size (ulong base, int banknum);
+extern flash_info_t flash_info[];
+extern long spd_sdram (void);
+
+/* Local functions */
+static int detect_num_flash_banks(void);
+static long int get_ddr_bank_size(short cs, volatile long *base);
+static void set_cs_bounds(short cs, long base, long size);
+static void set_cs_config(short cs, long config);
+static void set_ddr_config(void);
+
+/* Local variable */
+static volatile immap_t *im = (immap_t *)CFG_IMMRBAR;
+
+/**************************************************************************
+ * Board initialzation after relocation to RAM. Used to detect the number
+ * of Flash banks on TQM834x.
+ */
+int board_early_init_r (void) {
+       /* sanity check, IMMARBAR should be mirrored at offset zero of IMMR */
+       if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32)im)
+               return 0;
+
+       /* detect the number of Flash banks */
+       return detect_num_flash_banks();
+}
+
+/**************************************************************************
+ * DRAM initalization and size detection
+ */
+long int initdram (int board_type)
+{
+       long bank_size;
+       long size;
+       int cs;
+
+       /* during size detection, set up the max DDRLAW size */
+       im->sysconf.ddrlaw[0].bar = CFG_DDR_BASE;
+       im->sysconf.ddrlaw[0].ar = (LAWAR_EN | LAWAR_SIZE_2G);
+
+       /* set CS bounds to maximum size */
+       for(cs = 0; cs < 4; ++cs) {
+               set_cs_bounds(cs,
+                       CFG_DDR_BASE + (cs * DDR_MAX_SIZE_PER_CS),
+                       DDR_MAX_SIZE_PER_CS);
+
+               set_cs_config(cs, INITIAL_CS_CONFIG);
+       }
+
+       /* configure ddr controller */
+       set_ddr_config();
+
+       udelay(200);
+
+       /* enable DDR controller */
+       im->ddr.sdram_cfg = (SDRAM_CFG_MEM_EN |
+               SDRAM_CFG_SREN |
+               SDRAM_CFG_SDRAM_TYPE_DDR);
+       SYNC;
+
+       /* size detection */
+       debug("\n");
+       size = 0;
+       for(cs = 0; cs < 4; ++cs) {
+               debug("\nDetecting Bank%d\n", cs);
+
+               bank_size = get_ddr_bank_size(cs,
+                       (volatile long*)(CFG_DDR_BASE + size));
+               size += bank_size;
+
+               debug("DDR Bank%d size: %d MiB\n\n", cs, bank_size >> 20);
+
+               /* exit if less than one bank */
+               if(size < DDR_MAX_SIZE_PER_CS) break;
+       }
+
+       return size;
+}
+
+/**************************************************************************
+ * checkboard()
+ */
+int checkboard (void)
+{
+       puts("Board: TQM834x\n");
+
+#ifdef CONFIG_PCI
+       DECLARE_GLOBAL_DATA_PTR;
+       volatile immap_t * immr;
+       u32 w, f;
+
+       immr = (immap_t *)CFG_IMMRBAR;
+       if (!(immr->reset.rcwh & RCWH_PCIHOST)) {
+               printf("PCI:   NOT in host mode..?!\n");
+               return 0;
+       }
+
+       /* get bus width */
+       w = 32;
+       if (immr->reset.rcwh & RCWH_PCI64)
+               w = 64;
+
+       /* get clock */
+       f = gd->pci_clk;
+
+       printf("PCI1:  %d bit, %d MHz\n", w, f / 1000000);
+#else
+       printf("PCI:   disabled\n");
+#endif
+       return 0;
+}
+
+
+/**************************************************************************
+ *
+ * Local functions
+ *
+ *************************************************************************/
+
+/**************************************************************************
+ * Detect the number of flash banks (1 or 2). Store it in
+ * a global variable tqm834x_num_flash_banks.
+ * Bank detection code based on the Monitor code.
+ */
+static int detect_num_flash_banks(void)
+{
+       typedef unsigned long FLASH_PORT_WIDTH;
+       typedef volatile unsigned long FLASH_PORT_WIDTHV;
+       FPWV *bank1_base;
+       FPWV *bank2_base;
+       FPW bank1_read;
+       FPW bank2_read;
+       ulong bank1_size;
+       ulong bank2_size;
+       ulong total_size;
+
+       tqm834x_num_flash_banks = 2;    /* assume two banks */
+
+       /* Get bank 1 and 2 information */
+       bank1_size = flash_get_size(CFG_FLASH_BASE, 0);
+       debug("Bank1 size: %lu\n", bank1_size);
+       bank2_size = flash_get_size(CFG_FLASH_BASE + bank1_size, 1);
+       debug("Bank2 size: %lu\n", bank2_size);
+       total_size = bank1_size + bank2_size;
+
+       if (bank2_size > 0) {
+               /* Seems like we've got bank 2, but maybe it's mirrored 1 */
+
+               /* Set the base addresses */
+               bank1_base = (FPWV *) (CFG_FLASH_BASE);
+               bank2_base = (FPWV *) (CFG_FLASH_BASE + bank1_size);
+
+               /* Put bank 2 into CFI command mode and read */
+               bank2_base[0x55] = 0x00980098;
+               IOSYNC;
+               ISYNC;
+               bank2_read = bank2_base[0x10];
+
+               /* Read from bank 1 (it's in read mode) */
+               bank1_read = bank1_base[0x10];
+
+               /* Reset Flash */
+               bank1_base[0] = 0x00F000F0;
+               bank2_base[0] = 0x00F000F0;
+
+               if (bank2_read == bank1_read) {
+                       /*
+                        * Looks like just one bank, but not sure yet. Let's
+                        * read from bank 2 in autosoelect mode.
+                        */
+                       bank2_base[0x0555] = 0x00AA00AA;
+                       bank2_base[0x02AA] = 0x00550055;
+                       bank2_base[0x0555] = 0x00900090;
+                       IOSYNC;
+                       ISYNC;
+                       bank2_read = bank2_base[0x10];
+
+                       /* Read from bank 1 (it's in read mode) */
+                       bank1_read = bank1_base[0x10];
+
+                       /* Reset Flash */
+                       bank1_base[0] = 0x00F000F0;
+                       bank2_base[0] = 0x00F000F0;
+
+                       if (bank2_read == bank1_read) {
+                               /*
+                                * In both CFI command and autoselect modes,
+                                * we got the some data reading from Flash.
+                                * There is only one mirrored bank.
+                                */
+                               tqm834x_num_flash_banks = 1;
+                               total_size = bank1_size;
+                       }
+               }
+       }
+
+       debug("Number of flash banks detected: %d\n", tqm834x_num_flash_banks);
+
+       /* set OR0 and BR0 */
+       im->lbus.bank[0].or = CFG_OR_TIMING_FLASH |
+               (-(total_size) & OR_GPCM_AM);
+       im->lbus.bank[0].br = (CFG_FLASH_BASE & BR_BA) |
+               (BR_MS_GPCM | BR_PS_32 | BR_V);
+
+       return (0);
+}
+
+/*************************************************************************
+ * Detect the size of a ddr bank. Sets CS bounds and CS config accordingly.
+ */
+static long int get_ddr_bank_size(short cs, volatile long *base)
+{
+       /* This array lists all valid DDR SDRAM configurations, with
+        * Bank sizes in bytes. (Refer to Table 9-27 in the MPC8349E RM).
+        * The last entry has to to have size equal 0 and is igonred during
+        * autodection. Bank sizes must be in increasing order of size
+        */
+       struct {
+               long row;
+               long col;
+               long size;
+       } conf[] = {
+               {CSCONFIG_ROW_BIT_12,   CSCONFIG_COL_BIT_8,     32 << 20},
+               {CSCONFIG_ROW_BIT_12,   CSCONFIG_COL_BIT_9,     64 << 20},
+               {CSCONFIG_ROW_BIT_12,   CSCONFIG_COL_BIT_10,    128 << 20},
+               {CSCONFIG_ROW_BIT_13,   CSCONFIG_COL_BIT_9,     128 << 20},
+               {CSCONFIG_ROW_BIT_13,   CSCONFIG_COL_BIT_10,    256 << 20},
+               {CSCONFIG_ROW_BIT_13,   CSCONFIG_COL_BIT_11,    512 << 20},
+               {CSCONFIG_ROW_BIT_14,   CSCONFIG_COL_BIT_10,    512 << 20},
+               {CSCONFIG_ROW_BIT_14,   CSCONFIG_COL_BIT_11,    1024 << 20},
+               {0,                     0,                      0}
+       };
+
+       int i;
+       int detected;
+       long size;
+
+       detected = -1;
+       for(i = 0; conf[i].size != 0; ++i) {
+
+               /* set sdram bank configuration */
+               set_cs_config(cs, CSCONFIG_EN | conf[i].col | conf[i].row);
+
+               debug("Getting RAM size...\n");
+               size = get_ram_size(base, DDR_MAX_SIZE_PER_CS);
+
+               if((size == conf[i].size) && (i == detected + 1))
+                       detected = i;
+
+               debug("Trying %ld x %ld (%ld MiB) at addr %p, detected: %ld MiB\n",
+                       conf[i].row,
+                       conf[i].col,
+                       conf[i].size >> 20,
+                       base,
+                       size >> 20);
+       }
+
+       if(detected == -1){
+               /* disable empty cs */
+               debug("\nNo valid configurations for CS%d, disabling...\n", cs);
+               set_cs_config(cs, 0);
+               return 0;
+       }
+
+       debug("\nDetected configuration %ld x %ld (%ld MiB) at addr %p\n",
+                       conf[detected].row, conf[detected].col, conf[detected].size >> 20, base);
+
+       /* configure cs ro detected params */
+       set_cs_config(cs, CSCONFIG_EN | conf[detected].row |
+                       conf[detected].col);
+
+       set_cs_bounds(cs, (long)base, conf[detected].size);
+
+       return(conf[detected].size);
+}
+
+/**************************************************************************
+ * Sets DDR bank CS bounds.
+ */
+static void set_cs_bounds(short cs, long base, long size)
+{
+       debug("Setting bounds %08x, %08x for cs %d\n", base, size, cs);
+       if(size == 0){
+               im->ddr.csbnds[cs].csbnds = 0x00000000;
+       } else {
+               im->ddr.csbnds[cs].csbnds =
+                       ((base >> CSBNDS_SA_SHIFT) & CSBNDS_SA) |
+                       (((base + size - 1) >> CSBNDS_EA_SHIFT) &
+                               CSBNDS_EA);
+       }
+       SYNC;
+}
+
+/**************************************************************************
+ * Sets DDR banks CS configuration.
+ * config == 0x00000000 disables the CS.
+ */
+static void set_cs_config(short cs, long config)
+{
+       debug("Setting config %08x for cs %d\n", config, cs);
+       im->ddr.cs_config[cs] = config;
+       SYNC;
+}
+
+/**************************************************************************
+ * Sets DDR clocks, timings and configuration.
+ */
+static void set_ddr_config(void) {
+       /* clock control */
+       im->ddr.sdram_clk_cntl = DDR_SDRAM_CLK_CNTL_SS_EN |
+               DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05;
+       SYNC;
+
+       /* timing configuration */
+       im->ddr.timing_cfg_1 =
+               (4 << TIMING_CFG1_PRETOACT_SHIFT) |
+               (7 << TIMING_CFG1_ACTTOPRE_SHIFT) |
+               (4 << TIMING_CFG1_ACTTORW_SHIFT)  |
+               (5 << TIMING_CFG1_REFREC_SHIFT)   |
+               (3 << TIMING_CFG1_WRREC_SHIFT)    |
+               (3 << TIMING_CFG1_ACTTOACT_SHIFT) |
+               (1 << TIMING_CFG1_WRTORD_SHIFT)   |
+               (TIMING_CFG1_CASLAT & TIMING_CASLAT);
+
+       im->ddr.timing_cfg_2 =
+               TIMING_CFG2_CPO_DEF |
+               (2 << TIMING_CFG2_WR_DATA_DELAY_SHIFT);
+       SYNC;
+
+       /* don't enable DDR controller yet */
+       im->ddr.sdram_cfg =
+               SDRAM_CFG_SREN |
+               SDRAM_CFG_SDRAM_TYPE_DDR;
+       SYNC;
+
+       /* Set SDRAM mode */
+       im->ddr.sdram_mode =
+               ((DDR_MODE_EXT_MODEREG | DDR_MODE_WEAK) <<
+                       SDRAM_MODE_ESD_SHIFT) |
+               ((DDR_MODE_MODEREG | DDR_MODE_BLEN_4) <<
+                       SDRAM_MODE_SD_SHIFT) |
+               ((DDR_MODE_CASLAT << SDRAM_MODE_SD_SHIFT) &
+                       MODE_CASLAT);
+       SYNC;
+
+       /* Set fast SDRAM refresh rate */
+       im->ddr.sdram_interval =
+               (DDR_REFINT_166MHZ_7US << SDRAM_INTERVAL_REFINT_SHIFT) |
+               (DDR_BSTOPRE << SDRAM_INTERVAL_BSTOPRE_SHIFT);
+       SYNC;
+}
diff --git a/board/tqm834x/u-boot.lds b/board/tqm834x/u-boot.lds
new file mode 100644 (file)
index 0000000..020cfa6
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2004 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: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    cpu/mpc83xx/start.o        (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+    . = ALIGN(16);
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x0FFF) & 0xFFFFF000;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+  __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(4096);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(4096);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
+ENTRY(_start)
diff --git a/board/tqm8540/init.S b/board/tqm8540/init.S
deleted file mode 100644 (file)
index d9f4d8f..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, sharen, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long TLB1_MAS0(0, 0, 0)
-       .long TLB1_MAS1(1, 0, 0, 0, 0)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR),
-                       0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(0, 0, 0)
-       .long TLB1_MAS1(1, 0, 0, 0, 0)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024),
-                       0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(0, 0, 0)
-       .long TLB1_MAS1(1, 0, 0, 0, 0)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024),
-                       0,0,0,0,0,1,0,1,0,1)
-
-       .long TLB1_MAS0(0, 0, 0)
-       .long TLB1_MAS1(1, 0, 0, 0, 0)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024),
-                       0,0,0,0,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024),
-                       0,0,0,0,0,1,0,1,0,1)
-
-
-       /*
-        * TLB 0, 1:    32M     Non-cacheable, guarded
-        * 0xfe000000   32M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .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 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)
-
-       /*
-        * 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)
-
-       /*
-        * 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)
-
-       /*
-        * 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)
-
-       /*
-        * 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)
-
-       /*
-        * 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)
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 7:       256M    DDR
-        * 0x00000000  256M     DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-       .long 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 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,0,0,0,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_DDR_SDRAM_BASE+0x10000000), 0,0,0,0,0,1,0,1,0,1)
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000    0x7fff_ffff     DDR                     2G
- * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000    0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000    0xe000_ffff     CCSR                    1M
- * 0xe200_0000    0xe2ff_ffff     PCI1 IO                 16M
- * 0xf800_0000    0xf80f_ffff     BCSR                    1M
- * 0xfe00_0000    0xffff_ffff     FLASH (boot bank)       32M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
-#else
-#define LAWBAR0 0
-#define LAWAR0 ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_LBC_FLASH_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_32M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/tqm8540/tqm8540.c b/board/tqm8540/tqm8540.c
deleted file mode 100644 (file)
index ee10d00..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright 2005 DENX Software Engineering
- * Copyright 2004 Freescale Semiconductor.
- * (C) Copyright 2002,2003, Motorola Inc.
- * Xianghua Xiao, (X.Xiao@motorola.com)
- *
- * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-
-#include <common.h>
-#include <pci.h>
-#include <asm/processor.h>
-#include <asm/immap_85xx.h>
-#include <spd.h>
-
-#if defined(CONFIG_DDR_ECC)
-extern void ddr_enable_ecc (unsigned int dram_size);
-#endif
-
-extern long int spd_sdram (void);
-
-void local_bus_init (void);
-long int fixed_sdram (void);
-
-
-int board_early_init_f (void)
-{
-       return 0;
-}
-
-int checkboard (void)
-{
-       puts ("Board: TQM8540\n");
-
-#ifdef CONFIG_PCI
-       printf ("PCI1:  32 bit, %d MHz (compiled)\n",
-               CONFIG_SYS_CLK_FREQ / 1000000);
-#else
-       printf ("PCI1:  disabled\n");
-#endif
-       /*
-        * Initialize local bus.
-        */
-       local_bus_init ();
-
-       return 0;
-}
-
-
-long int initdram (int board_type)
-{
-       long dram_size = 0;
-       extern long spd_sdram (void);
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-
-#if defined(CONFIG_DDR_DLL)
-       {
-               volatile ccsr_gur_t *gur = &immap->im_gur;
-               uint temp_ddrdll = 0;
-
-               /*
-                * Work around to stabilize DDR DLL
-                */
-               temp_ddrdll = gur->ddrdllcr;
-               gur->ddrdllcr = ((temp_ddrdll & 0xff) << 16) | 0x80000000;
-               asm ("sync;isync;msync");
-       }
-#endif
-
-#if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
-#else
-       dram_size = fixed_sdram ();
-#endif
-
-#if defined(CONFIG_DDR_ECC)
-       /*
-        * Initialize and enable DDR ECC.
-        */
-       ddr_enable_ecc (dram_size);
-#endif
-
-       return dram_size;
-}
-
-
-/*
- * Initialize Local Bus
- */
-
-void local_bus_init (void)
-{
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-       volatile ccsr_gur_t *gur = &immap->im_gur;
-       volatile ccsr_lbc_t *lbc = &immap->im_lbc;
-
-       uint clkdiv;
-       uint lbc_hz;
-       sys_info_t sysinfo;
-
-       /*
-        * Errata LBC11.
-        * Fix Local Bus clock glitch when DLL is enabled.
-        *
-        * If localbus freq is < 66Mhz, DLL bypass mode must be used.
-        * If localbus freq is > 133Mhz, DLL can be safely enabled.
-        * Between 66 and 133, the DLL is enabled with an override workaround.
-        */
-
-       get_sys_info (&sysinfo);
-       clkdiv = lbc->lcrr & 0x0f;
-       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
-
-       if (lbc_hz < 66) {
-               lbc->lcrr = CFG_LBC_LCRR | 0x80000000;  /* DLL Bypass */
-               lbc->ltedr = 0xa4c80000;        /* DK: !!! */
-
-       } else if (lbc_hz >= 133) {
-               lbc->lcrr = CFG_LBC_LCRR & (~0x80000000);       /* DLL Enabled */
-
-       } else {
-               /*
-                * On REV1 boards, need to change CLKDIV before enable DLL.
-                * Default CLKDIV is 8, change it to 4 temporarily.
-                */
-               uint pvr = get_pvr ();
-               uint temp_lbcdll = 0;
-
-               if (pvr == PVR_85xx_REV1) {
-                       /* FIXME: Justify the high bit here. */
-                       lbc->lcrr = 0x10000004;
-               }
-
-               lbc->lcrr = CFG_LBC_LCRR & (~0x80000000);       /* DLL Enabled */
-               udelay (200);
-
-               /*
-                * Sample LBC DLL ctrl reg, upshift it to set the
-                * override bits.
-                */
-               temp_lbcdll = gur->lbcdllcr;
-               gur->lbcdllcr = (((temp_lbcdll & 0xff) << 16) | 0x80000000);
-               asm ("sync;isync;msync");
-       }
-}
-
-
-#if defined(CFG_DRAM_TEST)
-int testdram (void)
-{
-       uint *pstart = (uint *) CFG_MEMTEST_START;
-       uint *pend = (uint *) CFG_MEMTEST_END;
-       uint *p;
-
-       printf ("SDRAM test phase 1:\n");
-       for (p = pstart; p < pend; p++)
-               *p = 0xaaaaaaaa;
-
-       for (p = pstart; p < pend; p++) {
-               if (*p != 0xaaaaaaaa) {
-                       printf ("SDRAM test fails at: %08x\n", (uint) p);
-                       return 1;
-               }
-       }
-
-       printf ("SDRAM test phase 2:\n");
-       for (p = pstart; p < pend; p++)
-               *p = 0x55555555;
-
-       for (p = pstart; p < pend; p++) {
-               if (*p != 0x55555555) {
-                       printf ("SDRAM test fails at: %08x\n", (uint) p);
-                       return 1;
-               }
-       }
-
-       printf ("SDRAM test passed.\n");
-       return 0;
-}
-#endif
-
-
-#if !defined(CONFIG_SPD_EEPROM)
-/*************************************************************************
- *  fixed sdram init -- doesn't use serial presence detect.
- ************************************************************************/
-long int fixed_sdram (void)
-{
-#ifndef CFG_RAMBOOT
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-       volatile ccsr_ddr_t *ddr = &immap->im_ddr;
-
-       ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
-       ddr->cs0_config = CFG_DDR_CS0_CONFIG;
-       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;
-       ddr->err_disable = 0x0000000D;
-#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);
-#endif
-       return get_ram_size (0, CFG_SDRAM_SIZE * 1024 * 1024);
-}
-#endif /* !defined(CONFIG_SPD_EEPROM) */
-
-
-#if defined(CONFIG_PCI)
-/*
- * Initialize PCI Devices, report devices found.
- */
-
-#ifndef CONFIG_PCI_PNP
-static struct pci_config_table pci_mpc85xxads_config_table[] = {
-       {PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
-        PCI_IDSEL_NUMBER, PCI_ANY_ID,
-        pci_cfgfunc_config_device, {PCI_ENET0_IOADDR,
-                                    PCI_ENET0_MEMADDR,
-                                    PCI_COMMAND_MEMORY |
-                                    PCI_COMMAND_MASTER}},
-       {}
-};
-#endif
-
-
-static struct pci_controller hose = {
-#ifndef CONFIG_PCI_PNP
-       config_table:pci_mpc85xxads_config_table,
-#endif
-};
-
-#endif /* CONFIG_PCI */
-
-
-void pci_init_board (void)
-{
-#ifdef CONFIG_PCI
-       extern void pci_mpc85xx_init (struct pci_controller *hose);
-
-       pci_mpc85xx_init (&hose);
-#endif /* CONFIG_PCI */
-}
similarity index 98%
rename from board/tqm8540/Makefile
rename to board/tqm85xx/Makefile
index 403ad2d8393435fd30eb54c416a94d0f1ad5365a..3933d46f0cabed6404e632c3f3b2414fac9099eb 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := $(BOARD).o
+OBJS   := $(BOARD).o sdram.o
 SOBJS  := init.o
 #SOBJS :=
 
similarity index 98%
rename from board/tqm8560/config.mk
rename to board/tqm85xx/config.mk
index 8aab1e2863e9fc7e0b5137c82d97fa70a4e47e28..52e84ad77231b4f3589c9d9b89f2b9c753e6ae52 100644 (file)
@@ -22,7 +22,7 @@
 #
 
 #
-# tqm8560 board
+# tqm85xx board
 # default CCARBAR is at 0xff700000
 # assume U-Boot is less than 256k
 #
similarity index 91%
rename from board/tqm8560/init.S
rename to board/tqm85xx/init.S
index d9f4d8f96c63bc33f20f6fc103e915f2e226299e..1f610385e6df1073e8a7f018ce5b5b49dc4d0ef4 100644 (file)
@@ -108,18 +108,18 @@ tlb1_entry:
 
 
        /*
-        * TLB 0, 1:    32M     Non-cacheable, guarded
-        * 0xfe000000   32M     FLASH
+        * TLB 0, 1:    128M    Non-cacheable, guarded
+        * 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_16M)
+       .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_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 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)
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
@@ -171,23 +171,21 @@ tlb1_entry:
        .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)
 
-#if !defined(CONFIG_SPD_EEPROM)
        /*
-        * TLB 7:       256M    DDR
-        * 0x00000000  256M     DDR System memory
+        * TLB 7+8:     512M    DDR, cache disabled (needed for memory test)
+        * 0x00000000  512M     DDR System memory
         * Without SPD EEPROM configured DDR, this must be setup manually.
         * Make sure the TLB count at the top of this table is correct.
         * Likely it needs to be increased by two for these entries.
         */
        .long 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_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,0,0,0,0)
+       .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)
-#endif
 
        entry_end
 
@@ -207,19 +205,14 @@ tlb1_entry:
  *    If flash is 8M at default position (last 8M), no LAW needed.
  */
 
-#if !defined(CONFIG_SPD_EEPROM)
 #define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
-#else
-#define LAWBAR0 0
-#define LAWAR0 ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
+#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M))
 
 #define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
 #define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
 
 #define LAWBAR2 ((CFG_LBC_FLASH_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_32M))
+#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_128M))
 
 #define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
 #define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
diff --git a/board/tqm85xx/sdram.c b/board/tqm85xx/sdram.c
new file mode 100644 (file)
index 0000000..9c1f087
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * (C) Copyright 2005
+ * 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 <asm/immap_85xx.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <spd.h>
+
+struct sdram_conf_s {
+       unsigned long size;
+       unsigned long reg;
+};
+
+typedef struct sdram_conf_s sdram_conf_t;
+
+sdram_conf_t ddr_cs_conf[] = {
+       {(512 << 20), 0x80000202},      /* 512MB, 14x10(4)      */
+       {(256 << 20), 0x80000102},      /* 256MB, 13x10(4)      */
+       {(128 << 20), 0x80000101},      /* 128MB, 13x9(4)       */
+       {(64  << 20), 0x80000001},      /* 64MB,  12x9(4)       */
+};
+
+#define        N_DDR_CS_CONF (sizeof(ddr_cs_conf) / sizeof(ddr_cs_conf[0]))
+
+int cas_latency(void);
+
+/*
+ * Autodetect onboard DDR SDRAM on 85xx platforms
+ *
+ * NOTE: Some of the hardcoded values are hardware dependant,
+ *       so this should be extended for other future boards
+ *       using this routine!
+ */
+long int sdram_setup(int casl)
+{
+       int i;
+       volatile immap_t *immap = (immap_t *) CFG_IMMR;
+       volatile ccsr_ddr_t *ddr = &immap->im_ddr;
+       unsigned long cfg_ddr_timing1;
+       unsigned long cfg_ddr_mode;
+
+       /*
+        * Disable memory controller.
+        */
+       ddr->cs0_config = 0;
+       ddr->sdram_cfg = 0;
+
+       switch (casl) {
+       case 20:
+               cfg_ddr_timing1 = 0x47405331 | (3 << 16);
+               cfg_ddr_mode = 0x40020002 | (2 << 4);
+               break;
+
+       case 25:
+               cfg_ddr_timing1 = 0x47405331 | (4 << 16);
+               cfg_ddr_mode = 0x40020002 | (6 << 4);
+               break;
+
+       case 30:
+       default:
+               cfg_ddr_timing1 = 0x47405331 | (5 << 16);
+               cfg_ddr_mode = 0x40020002 | (3 << 4);
+               break;
+       }
+
+       ddr->cs0_bnds = (ddr_cs_conf[0].size - 1) >> 24;
+       ddr->cs0_config = ddr_cs_conf[0].reg;
+       ddr->timing_cfg_1 = cfg_ddr_timing1;
+       ddr->timing_cfg_2 = 0x00000800;         /* P9-45,may need tuning */
+       ddr->sdram_mode = cfg_ddr_mode;
+       ddr->sdram_interval = 0x05160100;       /* autocharge,no open page */
+       ddr->err_disable = 0x0000000D;
+
+       asm ("sync;isync;msync");
+       udelay(1000);
+
+       ddr->sdram_cfg = 0xc2000000;            /* unbuffered,no DYN_PWR */
+       asm ("sync; isync; msync");
+       udelay(1000);
+
+       for (i=0; i<N_DDR_CS_CONF; i++) {
+               ddr->cs0_config = ddr_cs_conf[i].reg;
+
+               if (get_ram_size(0, ddr_cs_conf[i].size) == ddr_cs_conf[i].size) {
+                       /*
+                        * OK, size detected -> all done
+                        */
+                       return ddr_cs_conf[i].size;
+               }
+       }
+
+       return 0;                               /* nothing found !              */
+}
+
+void board_add_ram_info(int use_default)
+{
+       int casl;
+
+       if (use_default)
+               casl = CONFIG_DDR_DEFAULT_CL;
+       else
+               casl = cas_latency();
+
+       puts(" (CL=");
+       switch (casl) {
+       case 20:
+               puts("2)");
+               break;
+
+       case 25:
+               puts("2.5)");
+               break;
+
+       case 30:
+               puts("3)");
+               break;
+       }
+}
+
+long int initdram (int board_type)
+{
+       long dram_size = 0;
+       int casl;
+
+#if defined(CONFIG_DDR_DLL)
+       /*
+        * This DLL-Override only used on TQM8540 and TQM8560
+        */
+       {
+               volatile immap_t *immap = (immap_t *) CFG_IMMR;
+               volatile ccsr_gur_t *gur= &immap->im_gur;
+               int i,x;
+
+               x = 10;
+
+               /*
+                * Work around to stabilize DDR DLL
+                */
+               gur->ddrdllcr = 0x81000000;
+               asm("sync;isync;msync");
+               udelay (200);
+               while (gur->ddrdllcr != 0x81000100) {
+                       gur->devdisr = gur->devdisr | 0x00010000;
+                       asm("sync;isync;msync");
+                       for (i=0; i<x; i++)
+                               ;
+                       gur->devdisr = gur->devdisr & 0xfff7ffff;
+                       asm("sync;isync;msync");
+                       x++;
+               }
+       }
+#endif
+
+       casl = cas_latency();
+       dram_size = sdram_setup(casl);
+       if ((dram_size == 0) && (casl != CONFIG_DDR_DEFAULT_CL)) {
+               /*
+                * Try again with default CAS latency
+                */
+               puts("Problem with CAS lantency");
+               board_add_ram_info(1);
+               puts(", using default CL!\n");
+               casl = CONFIG_DDR_DEFAULT_CL;
+               dram_size = sdram_setup(casl);
+               puts("       ");
+       }
+
+       return dram_size;
+}
+
+#if defined(CFG_DRAM_TEST)
+int testdram (void)
+{
+       uint *pstart = (uint *) CFG_MEMTEST_START;
+       uint *pend = (uint *) CFG_MEMTEST_END;
+       uint *p;
+
+       printf ("SDRAM test phase 1:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0xaaaaaaaa;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf ("SDRAM test phase 2:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0x55555555;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf ("SDRAM test passed.\n");
+       return 0;
+}
+#endif
similarity index 69%
rename from board/tqm8560/tqm8560.c
rename to board/tqm85xx/tqm85xx.c
index 5f2edd89ddbaea2779c043338622ff4baae5a4c5..13ea6f48ddebf624d133d6c76ff354b5609bc202 100644 (file)
@@ -1,5 +1,7 @@
 /*
- * Copyright 2005 DENX Software Engineering
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
  * Copyright 2004 Freescale Semiconductor.
  * (C) Copyright 2002,2003, Motorola Inc.
  * Xianghua Xiao, (X.Xiao@motorola.com)
 #include <asm/immap_85xx.h>
 #include <ioports.h>
 #include <spd.h>
+#include <flash.h>
 
-#if defined(CONFIG_DDR_ECC)
-extern void ddr_enable_ecc (unsigned int dram_size);
-#endif
-
-extern long int spd_sdram (void);
+extern flash_info_t flash_info[];      /* FLASH chips info */
 
 void local_bus_init (void);
 long int fixed_sdram (void);
+ulong flash_get_size (ulong base, int banknum);
 
+#ifdef CONFIG_CPM2
 /*
  * I/O Port configuration table
  *
@@ -53,24 +54,24 @@ const iop_conf_t iop_conf_tab[4][32] = {
 
     /* Port A configuration */
     {   /*            conf ppar psor pdir podr pdat */
-       /* PA31 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxENB */
-       /* PA30 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 TxClav   */
-       /* PA29 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxSOC  */
-       /* PA28 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 RxENB */
-       /* PA27 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxSOC */
-       /* PA26 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxClav */
+       /* PA31 */ {   1,   1,   1,   0,   0,   0   }, /* FCC1 MII COL */
+       /* PA30 */ {   1,   1,   1,   0,   0,   0   }, /* FCC1 MII CRS */
+       /* PA29 */ {   1,   1,   1,   1,   0,   0   }, /* FCC1 MII TX_ER */
+       /* PA28 */ {   1,   1,   1,   1,   0,   0   }, /* FCC1 MII TX_EN */
+       /* PA27 */ {   1,   1,   1,   0,   0,   0   }, /* FCC1 MII RX_DV */
+       /* PA26 */ {   1,   1,   1,   0,   0,   0   }, /* FCC1 MII RX_ER */
        /* PA25 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[0] */
        /* PA24 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[1] */
        /* PA23 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[2] */
        /* PA22 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[3] */
-       /* PA21 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[4] */
-       /* PA20 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[5] */
-       /* PA19 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[6] */
-       /* PA18 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[7] */
-       /* PA17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[7] */
-       /* PA16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[6] */
-       /* PA15 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[5] */
-       /* PA14 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[4] */
+       /* PA21 */ {   1,   1,   0,   1,   0,   0   }, /* FCC1 MII TxD[3] */
+       /* PA20 */ {   1,   1,   0,   1,   0,   0   }, /* FCC1 MII TxD[2] */
+       /* PA19 */ {   1,   1,   0,   1,   0,   0   }, /* FCC1 MII TxD[1] */
+       /* PA18 */ {   1,   1,   0,   1,   0,   0   }, /* FCC1 MII TxD[0] */
+       /* PA17 */ {   1,   1,   0,   0,   0,   0   }, /* FCC1 MII RxD[0] */
+       /* PA16 */ {   1,   1,   0,   0,   0,   0   }, /* FCC1 MII RxD[1] */
+       /* PA15 */ {   1,   1,   0,   0,   0,   0   }, /* FCC1 MII RxD[2] */
+       /* PA14 */ {   1,   1,   0,   0,   0,   0   }, /* FCC1 MII RxD[3] */
        /* PA13 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[3] */
        /* PA12 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[2] */
        /* PA11 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[1] */
@@ -89,20 +90,20 @@ const iop_conf_t iop_conf_tab[4][32] = {
 
     /* Port B configuration */
     {   /*            conf ppar psor pdir podr pdat */
-       /* PB31 */ {   0,   1,   0,   1,   0,   0   }, /* FCC2 MII TX_ER */
-       /* PB30 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_DV */
-       /* PB29 */ {   0,   1,   1,   1,   0,   0   }, /* FCC2 MII TX_EN */
-       /* PB28 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_ER */
-       /* PB27 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII COL */
-       /* PB26 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII CRS */
-       /* PB25 */ {   0,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[3] */
-       /* PB24 */ {   0,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[2] */
-       /* PB23 */ {   0,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[1] */
-       /* PB22 */ {   0,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[0] */
-       /* PB21 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[0] */
-       /* PB20 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[1] */
-       /* PB19 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[2] */
-       /* PB18 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[3] */
+       /* PB31 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TX_ER */
+       /* PB30 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_DV */
+       /* PB29 */ {   1,   1,   1,   1,   0,   0   }, /* FCC2 MII TX_EN */
+       /* PB28 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_ER */
+       /* PB27 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII COL */
+       /* PB26 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII CRS */
+       /* PB25 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[3] */
+       /* PB24 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[2] */
+       /* PB23 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[1] */
+       /* PB22 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[0] */
+       /* PB21 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[0] */
+       /* PB20 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[1] */
+       /* PB19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[2] */
+       /* PB18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[3] */
        /* PB17 */ {   1,   1,   0,   0,   0,   0   }, /* FCC3:RX_DIV */
        /* PB16 */ {   1,   1,   0,   0,   0,   0   }, /* FCC3:RX_ERR */
        /* PB15 */ {   1,   1,   0,   1,   0,   0   }, /* FCC3:TX_ERR */
@@ -135,12 +136,12 @@ const iop_conf_t iop_conf_tab[4][32] = {
        /* PC24 */ {   0,   0,   0,   1,   0,   0   }, /* PC24 */
        /* PC23 */ {   0,   1,   0,   1,   0,   0   }, /* ATMTFCLK */
        /* PC22 */ {   0,   1,   0,   0,   0,   0   }, /* ATMRFCLK */
-       /* PC21 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN RXCLK */
-       /* PC20 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN TXCLK */
-       /* PC19 */ {   0,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_CLK CLK13 */
+       /* PC21 */ {   1,   1,   0,   0,   0,   0   }, /* SCC1 EN RXCLK */
+       /* PC20 */ {   1,   1,   0,   0,   0,   0   }, /* SCC1 EN TXCLK */
+       /* PC19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_CLK CLK13 */
        /* PC18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK14) */
        /* PC17 */ {   1,   1,   0,   0,   0,   0   }, /* PC17 */
-       /* PC16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK16) */
+       /* PC16 */ {   1,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK16) */
        /* PC15 */ {   0,   1,   0,   0,   0,   0   }, /* PC15 */
        /* PC14 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN *CD */
        /* PC13 */ {   0,   1,   0,   0,   0,   0   }, /* PC13 */
@@ -195,16 +196,49 @@ const iop_conf_t iop_conf_tab[4][32] = {
        /* PD0  */ {   0,   0,   0,   0,   0,   0   }  /* pin doesn't exist */
     }
 };
+#endif /*  CONFIG_CPM2 */
+
+#define CASL_STRING1   "casl=xx"
+#define CASL_STRING2   "casl="
 
+static const int casl_table[] = { 20, 25, 30 };
+#define        N_CASL (sizeof(casl_table) / sizeof(casl_table[0]))
 
-int board_early_init_f (void)
+int cas_latency(void)
 {
-       return 0;
+       char *s = getenv("serial#");
+       int casl;
+       int val;
+       int i;
+
+       casl = CONFIG_DDR_DEFAULT_CL;
+
+       if (s != NULL) {
+               if (strncmp(s + strlen(s) - strlen(CASL_STRING1), CASL_STRING2,
+                           strlen(CASL_STRING2)) == 0) {
+                       val = simple_strtoul(s + strlen(s) - 2, NULL, 10);
+
+                       for (i=0; i<N_CASL; ++i) {
+                               if (val == casl_table[i]) {
+                                       return val;
+                               }
+                       }
+               }
+       }
+
+       return casl;
 }
 
 int checkboard (void)
 {
-       puts ("Board: TQM8560\n");
+       char *s = getenv("serial#");
+
+       printf("Board: %s", CONFIG_BOARDNAME);
+       if (s != NULL) {
+               puts(", serial# ");
+               puts(s);
+       }
+       putc('\n');
 
 #ifdef CONFIG_PCI
        printf ("PCI1:  32 bit, %d MHz (compiled)\n",
@@ -212,6 +246,7 @@ int checkboard (void)
 #else
        printf ("PCI1:  disabled\n");
 #endif
+
        /*
         * Initialize local bus.
         */
@@ -220,48 +255,69 @@ int checkboard (void)
        return 0;
 }
 
-
-long int initdram (int board_type)
+int misc_init_r (void)
 {
-       long dram_size = 0;
-       extern long spd_sdram (void);
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
+       DECLARE_GLOBAL_DATA_PTR;
+       volatile immap_t    *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_lbc_t *memctl = &immap->im_lbc;
 
-#if defined(CONFIG_DDR_DLL)
-       {
-               volatile ccsr_gur_t *gur = &immap->im_gur;
-               uint temp_ddrdll = 0;
+       /*
+        * Adjust flash start and offset to detected values
+        */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       /*
+        * Check if boot FLASH isn't max size
+        */
+       if (gd->bd->bi_flashsize < (0 - CFG_FLASH0)) {
+               memctl->or0 = gd->bd->bi_flashstart | (CFG_OR0_PRELIM & 0x00007fff);
+               memctl->br0 = gd->bd->bi_flashstart | (CFG_BR0_PRELIM & 0x00007fff);
 
                /*
-                * Work around to stabilize DDR DLL
+                * Re-check to get correct base address
                 */
-               temp_ddrdll = gur->ddrdllcr;
-               gur->ddrdllcr = ((temp_ddrdll & 0xff) << 16) | 0x80000000;
-               asm ("sync;isync;msync");
+               flash_get_size(gd->bd->bi_flashstart, CFG_MAX_FLASH_BANKS - 1);
        }
-#endif
 
-#if defined(CONFIG_SPD_EEPROM)
-       dram_size = spd_sdram ();
-#else
-       dram_size = fixed_sdram ();
-#endif
-
-#if defined(CONFIG_DDR_ECC)
        /*
-        * Initialize and enable DDR ECC.
+        * Check if only one FLASH bank is available
         */
-       ddr_enable_ecc (dram_size);
-#endif
+       if (gd->bd->bi_flashsize != CFG_MAX_FLASH_BANKS * (0 - CFG_FLASH0)) {
+               memctl->or1 = 0;
+               memctl->br1 = 0;
 
-       return dram_size;
-}
+               /*
+                * Re-do flash protection upon new addresses
+                */
+               flash_protect (FLAG_PROTECT_CLEAR,
+                              gd->bd->bi_flashstart, 0xffffffff,
+                              &flash_info[CFG_MAX_FLASH_BANKS - 1]);
+
+               /* Monitor protection ON by default */
+               flash_protect (FLAG_PROTECT_SET,
+                              CFG_MONITOR_BASE, 0xffffffff,
+                              &flash_info[CFG_MAX_FLASH_BANKS - 1]);
+
+               /* Environment protection ON by default */
+               flash_protect (FLAG_PROTECT_SET,
+                              CFG_ENV_ADDR,
+                              CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1,
+                              &flash_info[CFG_MAX_FLASH_BANKS - 1]);
+
+               /* Redundant environment protection ON by default */
+               flash_protect (FLAG_PROTECT_SET,
+                              CFG_ENV_ADDR_REDUND,
+                              CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1,
+                              &flash_info[CFG_MAX_FLASH_BANKS - 1]);
+       }
 
+       return 0;
+}
 
 /*
  * Initialize Local Bus
  */
-
 void local_bus_init (void)
 {
        volatile immap_t *immap = (immap_t *) CFG_IMMR;
@@ -318,79 +374,6 @@ void local_bus_init (void)
        }
 }
 
-
-#if defined(CFG_DRAM_TEST)
-int testdram (void)
-{
-       uint *pstart = (uint *) CFG_MEMTEST_START;
-       uint *pend = (uint *) CFG_MEMTEST_END;
-       uint *p;
-
-       printf ("SDRAM test phase 1:\n");
-       for (p = pstart; p < pend; p++)
-               *p = 0xaaaaaaaa;
-
-       for (p = pstart; p < pend; p++) {
-               if (*p != 0xaaaaaaaa) {
-                       printf ("SDRAM test fails at: %08x\n", (uint) p);
-                       return 1;
-               }
-       }
-
-       printf ("SDRAM test phase 2:\n");
-       for (p = pstart; p < pend; p++)
-               *p = 0x55555555;
-
-       for (p = pstart; p < pend; p++) {
-               if (*p != 0x55555555) {
-                       printf ("SDRAM test fails at: %08x\n", (uint) p);
-                       return 1;
-               }
-       }
-
-       printf ("SDRAM test passed.\n");
-       return 0;
-}
-#endif
-
-
-#if !defined(CONFIG_SPD_EEPROM)
-/*************************************************************************
- *  fixed sdram init -- doesn't use serial presence detect.
- ************************************************************************/
-long int fixed_sdram (void)
-{
-#ifndef CFG_RAMBOOT
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-       volatile ccsr_ddr_t *ddr = &immap->im_ddr;
-
-       ddr->cs0_bnds = CFG_DDR_CS0_BNDS;
-       ddr->cs0_config = CFG_DDR_CS0_CONFIG;
-       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;
-       ddr->err_disable = 0x0000000D;
-#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);
-#endif
-       return get_ram_size (0, CFG_SDRAM_SIZE * 1024 * 1024);
-}
-#endif /* !defined(CONFIG_SPD_EEPROM) */
-
-
 #if defined(CONFIG_PCI)
 /*
  * Initialize PCI Devices, report devices found.
similarity index 97%
rename from board/tqm8540/u-boot.lds
rename to board/tqm85xx/u-boot.lds
index ffd75629b73828d6af691b87d3537cf627b36f39..4cc825bcdb1c7529e2ad303ff61b437f68cb0663 100644 (file)
@@ -35,7 +35,7 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o (.bootpg)
-    board/tqm8540/init.o (.bootpg)
+    board/tqm85xx/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -65,7 +65,7 @@ SECTIONS
   .text             :
   {
     cpu/mpc85xx/start.o (.text)
-    board/tqm8540/init.o (.text)
+    board/tqm85xx/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
@@ -87,6 +87,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini             : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -119,10 +120,12 @@ SECTIONS
   _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 = .;
index 98baf7f67db37a76b0fdbe79783a58a6d4c69037..143f36801d2c4ad71ff1266113f34b9333ddd0db 100644 (file)
@@ -96,10 +96,10 @@ void load_sernum_ethaddr (void)
 
        /* set serial# and ethaddr if not yet defined */
        if (getenv("serial#") == NULL) {
-               setenv ("serial#", serial);
+               setenv ((char *)"serial#", (char *)serial);
        }
 
        if (getenv("ethaddr") == NULL) {
-               setenv ("ethaddr", ethaddr);
+               setenv ((char *)"ethaddr", (char *)ethaddr);
        }
 }
index a7a6f2a2fa78d9036b4ac4c13e665c0ade10d623..017bdf9442a8871ebfa737ff0faa9445c33c5e74 100644 (file)
@@ -106,7 +106,7 @@ int checkboard (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       unsigned char *s = getenv ("serial#");
+       char *s = getenv ("serial#");
 
        puts ("Board: ");
 
@@ -215,7 +215,7 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
        debug ("SDRAM Bank 0 in 8 column mode: %ld MB\n", size8 >> 20);
 
@@ -224,7 +224,7 @@ long int initdram (int board_type)
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE2_PRELIM,
+       size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE2_PRELIM,
                                           SDRAM_MAX_SIZE);
        debug ("SDRAM Bank 0 in 9 column mode: %ld MB\n", size9 >> 20);
 
@@ -263,7 +263,7 @@ long int initdram (int board_type)
                 * [9 column SDRAM may also be used in 8 column mode,
                 *  but then only half the real size will be used.]
                 */
-               size_b1 = dram_size (memctl->memc_mamr, (ulong *) SDRAM_BASE3_PRELIM,
+               size_b1 = dram_size (memctl->memc_mamr, (long int *)SDRAM_BASE3_PRELIM,
                                     SDRAM_MAX_SIZE);
                debug ("SDRAM Bank 1: %ld MB\n", size_b1 >> 20);
        } else {
index 10dc7d2571061b0c265f57aec20f0a6d6b9f4d86..d526d1d07d3163413ee4157cc1a358ff5cddeb13 100644 (file)
@@ -80,6 +80,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -112,11 +113,13 @@ SECTIONS
   _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 = .;
index c0ee8499cd6dbfa6c934333c42686e7633b30834..ddd4678ee8c5f4102535a055504b51cf8b1e6132 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 0399fe86ac70bbe0c7d25d93e2f948ec573b67ed..056e562bfeab5a4286f755ee34a29cfd88299f06 100644 (file)
@@ -199,7 +199,7 @@ extern int transfer_pic(unsigned char, unsigned char *, int, int);
 #endif
 extern int flash_sect_erase(ulong, ulong);
 extern int flash_sect_protect (int, ulong, ulong);
-extern int flash_write (uchar *, ulong, ulong);
+extern int flash_write (char *, ulong, ulong);
 /* change char* to void* to shutup the compiler */
 extern int i2c_write_multiple (uchar, uint, int, void *, int);
 extern int i2c_read_multiple (uchar, uint, int, void *, int);
@@ -296,7 +296,7 @@ au_check_header_valid(int idx, long nbytes)
        /* recycle checksum */
        checksum = ntohl(hdr->ih_size);
        /* for kernel and app the image header must also fit into flash */
-       if (idx != IDX_DISK)
+       if ((idx != IDX_DISK) && (idx != IDX_FIRMWARE))
                checksum += sizeof(*hdr);
        /* check the size does not exceed space in flash. HUSH scripts */
        /* all have ausize[] set to 0 */
index 5afdb70a93cbf6cdb25812e247bc066ae1631d9e..e56cdd3cad4ab7851e3a3031c7a786b1df9b3ed1 100644 (file)
@@ -53,6 +53,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 85c9dc0ead261dc77d247a654901636b9bab7602..d7c798ebb686bc9fc7664520e06297d26291736e 100644 (file)
@@ -79,6 +79,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -111,11 +112,13 @@ SECTIONS
   _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 = .;
index eaa3aa25cca376d47a537e5c7a2707760caafab0..d9bb86836393fb75677f1bddb671ca3b9496d8bf 100644 (file)
@@ -73,6 +73,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 6fc68e5cc3c4f3d8715ccbeadb354ae2e493be3f..4f2cff624fec32c4e1753dfb50f19199b08b8ed2 100644 (file)
@@ -30,6 +30,8 @@
 #include <i2c.h>
 #include <miiphy.h>
 
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value);
 
 /*********************************************************************/
 /* UPMA Pre Initilization Table by WV (Miron MT48LC16M16A2-7E B)     */
@@ -147,7 +149,7 @@ int board_switch(void)
  */
 int checkboard (void)
 {
-       unsigned char str[64];
+       char str[64];
        int i = getenv_r ("serial#", str, sizeof(str));
 
        puts ("Board: ");
@@ -258,8 +260,11 @@ int misc_init_r (void)
         */
        mii_init();
 
-       miiphy_write(0, PHY_BMCR, 0x2100);    /* disable auto-negotiation, 100mbit, full-duplex */
-       miiphy_write(0, PHY_FCSCR, 0x4122);   /* set LED's to Link, Transmit, Receive           */
+       /* disable auto-negotiation, 100mbit, full-duplex */
+       fec8xx_miiphy_write(NULL, 0, PHY_BMCR, 0x2100);
+
+       /* set LED's to Link, Transmit, Receive           */
+       fec8xx_miiphy_write(NULL,  0, PHY_FCSCR, 0x4122);
 
        return 0;
 }
index ae624845382e602029231def5bfa61f2f108654d..45f3018bb9fb16eb016101bbd61b18e5fa824d0a 100644 (file)
@@ -76,6 +76,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -108,11 +109,13 @@ SECTIONS
   _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 = .;
index ab1bbc91a5d82e731ed971639e0a1baa8105c27d..f9722dbb6bd369828f1bdff57001add17adb665b 100644 (file)
@@ -82,6 +82,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -114,11 +115,13 @@ SECTIONS
   _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 = .;
index 42b6ed5b5c9ffd2de396f154d1f2c85b0d1ef796..fbdc627e386869ce57971fe4518afb25adb1afad 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(BOARD).a
 
 OBJS   := versatile.o flash.o
-SOBJS  := platform.o
+SOBJS  := lowlevel_init.o
 
 $(LIB):        $(OBJS) $(SOBJS)
        $(AR) crv $@ $^
similarity index 91%
rename from board/versatile/platform.S
rename to board/versatile/lowlevel_init.S
index 68c3e8b1857b2364e8192c920a2f861840d0ba13..bdfce2d3c13762513114cad6ae4c9a7761210775 100644 (file)
@@ -26,8 +26,9 @@
 #include <config.h>
 #include <version.h>
 
-.globl platformsetup
-platformsetup:
+/* Set up the platform, once the cpu has been initialized */
+.globl lowlevel_init
+lowlevel_init:
 
        /* All done by Versatile's boot monitor! */
        mov pc, lr
diff --git a/board/versatile/split_by_variant.sh b/board/versatile/split_by_variant.sh
new file mode 100755 (executable)
index 0000000..35c663e
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/sh
+# ---------------------------------------------------------
+#  Set the core module defines according to Core Module
+# ---------------------------------------------------------
+# ---------------------------------------------------------
+# Set up the Versatile type define
+# ---------------------------------------------------------
+variant=PB926EJ-S
+if [ "$1" == "" ]
+then
+       echo "$0:: No parameters - using versatilepb_config"
+       echo "#define CONFIG_ARCH_VERSATILE_PB" > ./include/config.h
+       variant=PB926EJ-S
+else
+       case "$1" in
+       versatilepb_config      |       \
+       versatile_config)
+       echo "#define CONFIG_ARCH_VERSATILE_PB" > ./include/config.h
+       ;;
+
+       versatileab_config)
+       echo "#define CONFIG_ARCH_VERSATILE_AB" > ./include/config.h
+       variant=AB926EJ-S
+       ;;
+
+
+       *)
+       echo "$0:: Unrecognised config - using versatilepb_config"
+       echo "#define CONFIG_ARCH_VERSATILE_PB" > ./include/config.h
+       variant=PB926EJ-S
+       ;;
+
+       esac
+
+fi
+# ---------------------------------------------------------
+# Complete the configuration
+# ---------------------------------------------------------
+./mkconfig -a versatile arm arm926ejs versatile
+echo "Variant:: $variant"
index 33931be12773e399b6daf6c4cd627b2f8d8e567a..cb6ee188b19fa7af559485e0eacb55e3c079fe64 100644 (file)
@@ -39,6 +39,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 4a110e846dc084491f6786f80ee8a55ab14d161e..dcf37b5dce5bc9390f60e823162b691dfa93dcd9 100644 (file)
@@ -122,8 +122,8 @@ MUX_CONFIG_OFFSETS:
        .byte 0x0c              @ COMP_MODE_CTRL_0
        .byte 0xff
 
-.globl platformsetup
-platformsetup:
+.globl lowlevel_init
+lowlevel_init:
        /* Improve performance a bit... */
        mrc     p15, 0, r1, c0, c0, 0           @ read C15 ID register
        mrc     p15, 0, r1, c0, c0, 1           @ read C15 Cache information register
index 8317f72d06d8a53a179fda2bcae721c18752907d..f35a3ab024df282779607ce24b63477464080758 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index d6ea63530c67a7b2566cfeca0f6cbc78849236bd..32815fb63e0833e88bdf865189604ae03299ae82 100644 (file)
@@ -805,7 +805,7 @@ static int _flash_protect(flash_info_t *info, long sector)
     int flag;
     ulong status;
     int rcode = 0;
-    volatile long *addr = (unsigned long *)sector;
+    volatile long *addr = (long *)sector;
 
     switch(info->flash_id & FLASH_TYPEMASK) {
        case FLASH_28F320J3A:
@@ -863,7 +863,7 @@ static int _flash_unprotect(flash_info_t *info, long sector)
     int flag;
     ulong status;
     int rcode = 0;
-    volatile long *addr = (unsigned long *)sector;
+    volatile long *addr = (long *)sector;
 
     switch(info->flash_id & FLASH_TYPEMASK) {
        case FLASH_28F320J3A:
index 97af9242946dc3fb73747542245b6e6530ec85ea..100bce4722ecf321ee547adb860c4f7b1301a642 100644 (file)
@@ -77,17 +77,17 @@ fpgaDownload(unsigned char *saddr,
     dest = (unsigned short *)daddr;
 
     /* Get DCR output register */
-    grego = in32(IBM405GP_GPIO0_OR);
+    grego = in32(PPC405GP_GPIO0_OR);
 
     /* Reset FPGA */
     grego &= ~GPIO_XCV_PROG;                   /* PROG line low */
-    out32(IBM405GP_GPIO0_OR, grego);
+    out32(PPC405GP_GPIO0_OR, grego);
 
     /* Setup timeout timer */
     start = get_timer(0);
 
     /* Wait for FPGA init line */
-    while(in32(IBM405GP_GPIO0_IR) & GPIO_XCV_INIT) { /* Wait INIT line low */
+    while(in32(PPC405GP_GPIO0_IR) & GPIO_XCV_INIT) { /* Wait INIT line low */
        /* Check for timeout - 100us max, so use 3ms */
        if (get_timer(start) > 3) {
            printf("     failed to start init.\n");
@@ -100,10 +100,10 @@ fpgaDownload(unsigned char *saddr,
 
     /* Unreset FPGA */
     grego |= GPIO_XCV_PROG;                    /* PROG line high */
-    out32(IBM405GP_GPIO0_OR, grego);
+    out32(PPC405GP_GPIO0_OR, grego);
 
     /* Wait for FPGA end of init period .  */
-    while(!(in32(IBM405GP_GPIO0_IR) & GPIO_XCV_INIT)) { /* Wait for INIT hi */
+    while(!(in32(PPC405GP_GPIO0_IR) & GPIO_XCV_INIT)) { /* Wait for INIT hi */
 
        /* Check for timeout */
        if (get_timer(start) > 3) {
@@ -112,7 +112,7 @@ fpgaDownload(unsigned char *saddr,
 
            /* Reset FPGA */
            grego &= ~GPIO_XCV_PROG;            /* PROG line low */
-           out32(IBM405GP_GPIO0_OR, grego);
+           out32(PPC405GP_GPIO0_OR, grego);
 
            goto done;
        }
@@ -127,18 +127,18 @@ fpgaDownload(unsigned char *saddr,
        mtdcr(CPC0_CR0, greg);                  /*  ... just do it */
 
        /* turn on open drain for CNFG */
-       greg = in32(IBM405GP_GPIO0_ODR);        /* get open drain register */
+       greg = in32(PPC405GP_GPIO0_ODR);        /* get open drain register */
        greg |= cnfg;                           /* CNFG open drain */
-       out32(IBM405GP_GPIO0_ODR, greg);        /*  .. just do it */
+       out32(PPC405GP_GPIO0_ODR, greg);        /*  .. just do it */
 
        /* Turn output enable on for CNFG */
-       greg = in32(IBM405GP_GPIO0_TCR);        /* get tristate register */
+       greg = in32(PPC405GP_GPIO0_TCR);        /* get tristate register */
        greg |= cnfg;                           /* CNFG tristate inactive */
-       out32(IBM405GP_GPIO0_TCR, greg);        /*  ... just do it */
+       out32(PPC405GP_GPIO0_TCR, greg);        /*  ... just do it */
 
        /* Setup FPGA for programming */
        grego &= ~cnfg;                         /* CONFIG line low */
-       out32(IBM405GP_GPIO0_OR, grego);
+       out32(PPC405GP_GPIO0_OR, grego);
 
        /*
         * Program the FPGA
@@ -149,12 +149,12 @@ fpgaDownload(unsigned char *saddr,
 
        /* Done programming */
        grego |= cnfg;                          /* CONFIG line high */
-       out32(IBM405GP_GPIO0_OR, grego);
+       out32(PPC405GP_GPIO0_OR, grego);
 
        /* Turn output enable OFF for CNFG */
-       greg = in32(IBM405GP_GPIO0_TCR);        /* get tristate register */
+       greg = in32(PPC405GP_GPIO0_TCR);        /* get tristate register */
        greg &= ~cnfg;                          /* CNFG tristate inactive */
-       out32(IBM405GP_GPIO0_TCR, greg);        /*  ... just do it */
+       out32(PPC405GP_GPIO0_TCR, greg);        /*  ... just do it */
 
        /* Toggle IRQ/GPIO */
        greg = mfdcr(CPC0_CR0);                 /* get chip ctrl register */
@@ -180,7 +180,7 @@ fpgaDownload(unsigned char *saddr,
     start = get_timer(0);
 
     /* Wait for FPGA end of programming period .  */
-    while(!(in32(IBM405GP_GPIO0_IR) & GPIO_XCV_DONE)) { /* Test DONE low */
+    while(!(in32(PPC405GP_GPIO0_IR) & GPIO_XCV_DONE)) { /* Test DONE low */
 
        /* Check for timeout */
        if (get_timer(start) > 3) {
@@ -189,7 +189,7 @@ fpgaDownload(unsigned char *saddr,
 
            /* Reset FPGA */
            grego &= ~GPIO_XCV_PROG;            /* PROG line low */
-           out32(IBM405GP_GPIO0_OR, grego);
+           out32(PPC405GP_GPIO0_OR, grego);
 
            goto done;
        }
@@ -252,7 +252,7 @@ int init_fpga(void)
     xcv_len = len - 14 - fn_len;               /* fpga image length */
 
     /* Check for uninitialized FLASH */
-    if ((strncmp(buf, "w7o", 3)!=0) || (len > 0x0007ffffL) || (len == 0))
+    if ((strncmp((char *)buf, "w7o", 3)!=0) || (len > 0x0007ffffL) || (len == 0))
        goto bad_image;
 
     /*
index 5576ab9a67a6a4c07603cb40bdd2b1365f3749d5..7e3e15dc2eae8835a4381b7d85f6b84df553118b 100644 (file)
@@ -71,6 +71,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -103,11 +104,13 @@ SECTIONS
   _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 = .;
index f996db30ad64350489c4d78d11192063862c6ac2..a0c72c92103b8e575f67567afee3dc28905c5ed1 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index fc2cd98321528ab29491525720ad18735cf49b21..2ce15680e1535f6a6907980770402754ee2fda5c 100644 (file)
@@ -125,7 +125,7 @@ static int vpd_is_valid(unsigned dev_addr, unsigned char *buf)
     unsigned short  stored_crc16, calc_crc16 = 0xffff;
 
     /* Check Eyecatcher */
-    if (strncmp(vpd->header.eyecatcher, VPD_EYECATCHER, VPD_EYE_SIZE) != 0) {
+    if (strncmp((char *)(vpd->header.eyecatcher), VPD_EYECATCHER, VPD_EYE_SIZE) != 0) {
        unsigned offset = 0;
        if (dev_addr == CFG_DEF_EEPROM_ADDR)
            offset += SDRAM_SPD_DATA_SIZE;
@@ -259,7 +259,7 @@ int vpd_get_data(unsigned char dev_addr, VPD *vpdInfo)
            case VPD_PID_PID:
                if (strlen_ok(packet, MAX_PROD_ID)) {
                    strncpy(vpdInfo->productId,
-                           packet->data, packet->size);
+                           (char *)(packet->data), packet->size);
                }
                break;
            case VPD_PID_REV:
index 1e3ceb20d65b603438f66d87bedc7a22aed7b3a8..c56c269daecc0418412354ec978b4b2967cbe347 100644 (file)
@@ -47,9 +47,9 @@ int board_early_init_f (void)
        /*
         * Setup GPIO pins - reset devices.
         */
-       out32 (IBM405GP_GPIO0_ODR, 0x10000000); /* one open drain pin */
-       out32 (IBM405GP_GPIO0_OR, 0x3E000000);  /* set output pins to default */
-       out32 (IBM405GP_GPIO0_TCR, 0x7f800000); /* setup for output */
+       out32 (PPC405GP_GPIO0_ODR, 0x10000000); /* one open drain pin */
+       out32 (PPC405GP_GPIO0_OR, 0x3E000000);  /* set output pins to default */
+       out32 (PPC405GP_GPIO0_TCR, 0x7f800000); /* setup for output */
 
        /*
         * IRQ 0-15  405GP internally generated; active high; level sensitive
@@ -78,9 +78,9 @@ int board_early_init_f (void)
        /*
         * Setup GPIO pins
         */
-       out32 (IBM405GP_GPIO0_ODR, 0x01800000); /* XCV Done Open Drain */
-       out32 (IBM405GP_GPIO0_OR, 0x03800000);  /* set out pins to default */
-       out32 (IBM405GP_GPIO0_TCR, 0x66C00000); /* setup for output */
+       out32 (PPC405GP_GPIO0_ODR, 0x01800000); /* XCV Done Open Drain */
+       out32 (PPC405GP_GPIO0_OR, 0x03800000);  /* set out pins to default */
+       out32 (PPC405GP_GPIO0_TCR, 0x66C00000); /* setup for output */
 
        /*
         * IRQ 0-15  405GP internally generated; active high; level sensitive
@@ -207,8 +207,8 @@ static void w7o_env_init (VPD * vpd)
             (strncmp (vpd->productId, "CMM", 3) == 0))) {
                char buf[30];
                char *eth;
-               unsigned char *serial = getenv ("serial#");
-               unsigned char *ethaddr = getenv ("ethaddr");
+               char *serial = getenv ("serial#");
+               char *ethaddr = getenv ("ethaddr");
 
                /* Set 'serial#' envvar if serial# isn't set */
                if (!serial) {
@@ -218,7 +218,7 @@ static void w7o_env_init (VPD * vpd)
                }
 
                /* Set 'ethaddr' envvar if 'ethaddr' envvar is the default */
-               eth = vpd->ethAddrs[0];
+               eth = (char *)(vpd->ethAddrs[0]);
                if (ethaddr
                    && (strcmp (ethaddr, MK_STR (CONFIG_ETHADDR)) == 0)) {
                        /* Now setup ethaddr */
@@ -238,14 +238,14 @@ int misc_init_r (void)
 #if defined(CONFIG_W7OLMG)
        unsigned long greg;     /* GPIO Register */
 
-       greg = in32 (IBM405GP_GPIO0_OR);
+       greg = in32 (PPC405GP_GPIO0_OR);
 
        /*
         * XXX - Unreset devices - this should be moved into VxWorks driver code
         */
        greg |= 0x41800000L;    /* SAM, PHY, Galileo */
 
-       out32 (IBM405GP_GPIO0_OR, greg);        /* set output pins to default */
+       out32 (PPC405GP_GPIO0_OR, greg);        /* set output pins to default */
 #endif /* CONFIG_W7OLMG */
 
        /*
index 84581664e81191c2ff45b49f8e366205ffa7f489..d6f50e2e6786a3205989c86c34a2456ba2aca36d 100644 (file)
 #define _W7O_H_
 #include <config.h>
 
-/* IBM 405GP PowerPC GPIO registers */
-#define IBM405GP_GPIO0_OR      0xef600700L     /* GPIO Output */
-#define IBM405GP_GPIO0_TCR     0xef600704L     /* GPIO Three-State Control */
-#define IBM405GP_GPIO0_ODR     0xef600718L     /* GPIO Open Drain */
-#define IBM405GP_GPIO0_IR      0xef60071cL     /* GPIO Input */
+/* AMCC 405GP PowerPC GPIO registers */
+#define PPC405GP_GPIO0_OR      0xef600700L     /* GPIO Output */
+#define PPC405GP_GPIO0_TCR     0xef600704L     /* GPIO Three-State Control */
+#define PPC405GP_GPIO0_ODR     0xef600718L     /* GPIO Open Drain */
+#define PPC405GP_GPIO0_IR      0xef60071cL     /* GPIO Input */
 
-/* IBM 405GP DCRs */
+/* AMCC 405GP DCRs */
 #define CPC0_CR0               0xb1            /* Chip control register 0 */
 
 /* LMG FPGA <=> CPU GPIO signals */
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 86e587ff2fe776c3bc1e85ddbc8af584f9ef5bbb..cdf550f67b57f61612a53b23634c62db6a138554 100644 (file)
@@ -77,6 +77,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -109,11 +110,13 @@ SECTIONS
   _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 = .;
index 7b84fd34877d0803429777004b7b9700470dd63e..87f228beed61ebd163d9e25dc2d4fdd6bdd4b524 100644 (file)
@@ -75,6 +75,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index 58c371df06b4942082297f0312084dbf09bc670c..f0102391b342fedb1fa7970324776aa828629a11 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 25f1e260287753373c143d5a4047b55fae72178d..3d5fc75e3659adf0a5526c112a4fdf7fd5291a74 100644 (file)
@@ -123,7 +123,7 @@ XDmaChannel_Initialize(XDmaChannel * InstancePtr, u32 BaseAddress)
 
        /* initialize the version of the component
         */
-       XVersion_FromString(&InstancePtr->Version, "1.00a");
+       XVersion_FromString(&InstancePtr->Version, (s8 *)"1.00a");
 
        /* reset the DMA channel such that it's in a known state and ready
         * and indicate the initialization occured with no errors, note that
index f335fc1ba6dfcaf10263070afd84f504cd5a3c29..dad562f1c7761d0d2d47fb867e18bea8838444ca 100644 (file)
@@ -55,8 +55,8 @@ board_pre_init(void)
 int
 checkboard(void)
 {
-       uchar tmp[64];          /* long enough for environment variables */
-       uchar *s, *e;
+       char tmp[64];           /* long enough for environment variables */
+       char *s, *e;
        int i = getenv_r("L", tmp, sizeof (tmp));
 
        if (i < 0) {
index e7b7e107b0614c9ec5445a2aef4411d041f5c58d..b6d748e1d982acff974e543383b27ac54c599971 100644 (file)
@@ -65,7 +65,7 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
+    cpu/ppc4xx/4xx_enet.o      (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -85,6 +85,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -117,11 +118,13 @@ SECTIONS
   _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 = .;
index d483424ad6de09c5fff24218e17ad2797f004a38..1608f8cdaa38f02898160fe0bc028be7cdd51f20 100644 (file)
@@ -74,6 +74,8 @@ SECTIONS
   {
     *(.rodata)
     *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index bf8cf0bccb4a98f7579661a2d05fa2d31f030a33..5c492ebbc0ec484f78b69d083babff65aa9c1dd1 100644 (file)
@@ -148,7 +148,7 @@ eth_rx(void)
        RecvFrameLength = PKTSIZE;
        Result = XEmac_PollRecv(&Emac, (u8 *) etherrxbuff, &RecvFrameLength);
        if (Result == XST_SUCCESS) {
-               NetReceive(etherrxbuff, RecvFrameLength);
+               NetReceive((uchar *)etherrxbuff, RecvFrameLength);
                return (1);
        } else {
                return (0);
index 5ad4a0c11945cd78a0cff1df9379c297b9295218..f3ecba72dc88095ba9837f7fe01e14544cc6efdf 100644 (file)
@@ -291,15 +291,15 @@ read_crc(uchar * buffer, int len)
 static void
 ip_ml300(uchar * s, uchar * res)
 {
-       uchar temp[2];
+       char temp[2];
        u8 i;
 
        res[0] = 0x00;
 
        for (i = 0; i < 4; i++) {
                sprintf(temp, "%02x", atoi(s));
-               s = strchr(s, '.') + 1;
-               strcat(res, temp);
+               s = (uchar *)strchr((char *)s, '.') + 1;
+               strcat((char *)res, temp);
        }
 }
 
@@ -310,8 +310,8 @@ static void
 change_null(uchar * s)
 {
        if (s != NULL) {
-               change_null(strchr(s + 1, 255));
-               *(strchr(s, 255)) = '\0';
+               change_null((uchar *)strchr((char *)s + 1, 255));
+               *(strchr((char *)s, 255)) = '\0';
        }
 }
 
@@ -321,8 +321,8 @@ change_null(uchar * s)
 void
 convert_env(void)
 {
-       uchar *s;               /* pointer to env value */
-       uchar temp[20];         /* temp storage for addresses */
+       char *s;                /* pointer to env value */
+       char temp[20];          /* temp storage for addresses */
 
        /* E -> ethaddr */
        s = getenv("E");
@@ -345,8 +345,8 @@ convert_env(void)
        /* I -> ipaddr */
        s = getenv("I");
        if (s != NULL) {
-               sprintf(temp, "%d.%d.%d.%d", axtoi(s), axtoi(s + 2),
-                       axtoi(s + 4), axtoi(s + 6));
+               sprintf(temp, "%d.%d.%d.%d", axtoi((u8 *)s), axtoi((u8 *)(s + 2)),
+                       axtoi((u8 *)(s + 4)), axtoi((u8 *)(s + 6)));
                setenv("ipaddr", temp);
                setenv("I", NULL);
        }
@@ -354,8 +354,8 @@ convert_env(void)
        /* S -> serverip */
        s = getenv("S");
        if (s != NULL) {
-               sprintf(temp, "%d.%d.%d.%d", axtoi(s), axtoi(s + 2),
-                       axtoi(s + 4), axtoi(s + 6));
+               sprintf(temp, "%d.%d.%d.%d", axtoi((u8 *)s), axtoi((u8 *)(s + 2)),
+                       axtoi((u8 *)(s + 4)), axtoi((u8 *)(s + 6)));
                setenv("serverip", temp);
                setenv("S", NULL);
        }
@@ -391,9 +391,9 @@ convert_env(void)
 static void
 save_env(void)
 {
-       uchar eprom[ENV_SIZE];  /* buffer to be written back to EEPROM */
-       uchar *s, temp[20];
-       uchar ff[] = { 0xff, 0x00 };    /* dummy null value */
+       char eprom[ENV_SIZE];   /* buffer to be written back to EEPROM */
+       char *s, temp[20];
+       char ff[] = { 0xff, 0x00 };     /* dummy null value */
        u32 len;                /* length of env to be written to EEPROM */
 
        eprom[0] = 0x00;
@@ -422,7 +422,7 @@ save_env(void)
        s = getenv("ipaddr");
        if (s != NULL) {
                strcat(eprom, "I=");
-               ip_ml300(s, temp);
+               ip_ml300((uchar *)s, (uchar *)temp);
                strcat(eprom, temp);
                strcat(eprom, ff);
        }
@@ -431,7 +431,7 @@ save_env(void)
        s = getenv("serverip");
        if (s != NULL) {
                strcat(eprom, "S=");
-               ip_ml300(s, temp);
+               ip_ml300((uchar *)s, (uchar *)temp);
                strcat(eprom, temp);
                strcat(eprom, ff);
        }
@@ -461,11 +461,11 @@ save_env(void)
        }
 
        len = strlen(eprom);    /* find env length without crc */
-       change_null(eprom);     /* change 0xff to 0x00 */
+       change_null((uchar *)eprom);    /* change 0xff to 0x00 */
 
        /* update EEPROM env values if there is enough space */
-       if (update_crc(len, eprom) == 0)
-               send(CFG_ENV_OFFSET, eprom, len + 6);
+       if (update_crc(len, (uchar *)eprom) == 0)
+               send(CFG_ENV_OFFSET, (uchar *)eprom, len + 6);
 }
 
 /************************************************************************
index e0b0514713fd162870f0ebde26475a983b4e6dc6..db8387520eb269e74e5de3d8f943aaae496446dd 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index 3f964c8852e1117e63b0693bb62ff187943f818e..0f08637107be73edc2f43908adc3f00bc98a7ac9 100644 (file)
@@ -74,7 +74,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -94,6 +93,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -126,11 +126,13 @@ SECTIONS
   _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 = .;
index 3530c9889a72a9b9a258b46bad58632ba5dfa34b..5066326927fdc18a0b0da234cb0c8353eba075dc 100644 (file)
@@ -64,7 +64,6 @@ SECTIONS
     cpu/ppc4xx/serial.o        (.text)
     cpu/ppc4xx/cpu_init.o      (.text)
     cpu/ppc4xx/speed.o (.text)
-    cpu/ppc4xx/405gp_enet.o    (.text)
     common/dlmalloc.o  (.text)
     lib_generic/crc32.o                (.text)
     lib_ppc/extable.o  (.text)
@@ -83,6 +82,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
index d6b30b94466ca0e22f2b9792627051dfe0159f3a..bb36c965236344f42c44ef65f2f62043059f6d77 100644 (file)
@@ -96,15 +96,7 @@ int board_early_init_f(void)
 
 int checkboard (void)
 {
-       sys_info_t sysinfo;
-       get_sys_info (&sysinfo);
-
        printf ("Board: XES XPedite1000 440GX\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);
 
        return (0);
 }
index 3f93700d6db17bb2857b11b36bae2d5a885b9b11..2b9afc7a77bcfcac7063d2b7779291015a67b2ad 100644 (file)
@@ -101,13 +101,9 @@ void flash_print_info  (flash_info_t *info)
        }
 
        switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_AMLV128U:    printf ("AM29LV128ML (128Mbit, uniform sector size)\n");
-                               break;
-       case FLASH_AMLV320U:    printf ("AM29LV320ML (32Mbit, uniform sector size)\n");
-                               break;
        case FLASH_AMLV640U:    printf ("AM29LV640ML (64Mbit, uniform sector size)\n");
                                break;
-       case FLASH_AMLV320B:    printf ("AM29LV320MB (32Mbit, bottom boot sect)\n");
+       case FLASH_S29GL064M:   printf ("S29GL064M (64Mbit, top boot sector size)\n");
                                break;
        default:                printf ("Unknown Chip Type\n");
                                break;
@@ -174,17 +170,6 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                debug ("Mirror Bit flash: addr[14] = %08lX  addr[15] = %08lX\n",
                        addr[14], addr[15]);
                switch(addr[14]) {
-               case AMD_ID_LV128U_2:
-                       if (addr[15] != AMD_ID_LV128U_3) {
-                               debug ("Chip: AMLV128U -> unknown\n");
-                               info->flash_id = FLASH_UNKNOWN;
-                       } else {
-                               debug ("Chip: AMLV128U\n");
-                               info->flash_id += FLASH_AMLV128U;
-                               info->sector_count = 256;
-                               info->size = 0x02000000;
-                       }
-                       break;                          /* => 32 MB     */
                case AMD_ID_LV640U_2:
                        if (addr[15] != AMD_ID_LV640U_3) {
                                debug ("Chip: AMLV640U -> unknown\n");
@@ -196,17 +181,17 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)
                                info->size = 0x01000000;
                        }
                        break;                          /* => 16 MB     */
-               case AMD_ID_LV320B_2:
-                       if (addr[15] != AMD_ID_LV320B_3) {
-                               debug ("Chip: AMLV320B -> unknown\n");
+               case AMD_ID_GL064MT_2:
+                       if (addr[15] != AMD_ID_GL064MT_3) {
+                               debug ("Chip: S29GL064M-R3 -> unknown\n");
                                info->flash_id = FLASH_UNKNOWN;
                        } else {
-                               debug ("Chip: AMLV320B\n");
-                               info->flash_id += FLASH_AMLV320B;
-                               info->sector_count = 71;
-                               info->size = 0x00800000;
+                               debug ("Chip: S29GL064M-R3\n");
+                               info->flash_id += FLASH_S29GL064M;
+                               info->sector_count = 128;
+                               info->size = 0x01000000;
                        }
-                       break;                          /* =>  8 MB     */
+                       break;                          /* => 16 MB     */
                default:
                        debug ("Chip: *** unknown ***\n");
                        info->flash_id = FLASH_UNKNOWN;
index e0b0514713fd162870f0ebde26475a983b4e6dc6..db8387520eb269e74e5de3d8f943aaae496446dd 100644 (file)
@@ -44,6 +44,7 @@ SECTIONS
        . = ALIGN(4);
        .got : { *(.got) }
 
+       . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
index d6f35f31e09c8ce7488504a591dbd90b4cbdcfb1..18c4b46f47b3826e9ffdf4a9ddf4f65051bcefe3 100644 (file)
@@ -60,6 +60,7 @@ SECTIONS
     *(.rodata)
     *(.rodata1)
     *(.rodata.str1.4)
+    *(.eh_frame)
   }
   .fini      : { *(.fini)    } =0
   .ctors     : { *(.ctors)   }
@@ -92,11 +93,13 @@ SECTIONS
   _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 = .;
index 9bfc11ab50b77982eb1a0278782cd39783d698e5..7e45a7c7168df55320d8a015afae5c6f10780ec0 100644 (file)
@@ -31,7 +31,7 @@ COBJS = main.o ACEX1K.o altera.o bedbug.o circbuf.o \
          cmd_ace.o cmd_autoscript.o \
          cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \
          cmd_cache.o cmd_console.o \
-         cmd_date.o cmd_dcr.o cmd_diag.o cmd_doc.o cmd_dtt.o \
+         cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \
          cmd_eeprom.o cmd_elf.o cmd_ext2.o \
          cmd_fat.o cmd_fdc.o cmd_fdos.o cmd_flash.o cmd_fpga.o \
          cmd_i2c.o cmd_ide.o cmd_immap.o cmd_itest.o cmd_jffs2.o \
@@ -39,14 +39,17 @@ COBJS       = main.o ACEX1K.o altera.o bedbug.o circbuf.o \
          cmd_mem.o cmd_mii.o cmd_misc.o cmd_mmc.o \
          cmd_nand.o cmd_nand_new.o cmd_net.o cmd_nvedit.o \
          cmd_pci.o cmd_pcmcia.o cmd_portio.o \
-         cmd_reginfo.o cmd_reiser.o cmd_scsi.o cmd_spi.o cmd_universe.o cmd_usb.o cmd_vfd.o \
+         cmd_reginfo.o cmd_reiser.o cmd_scsi.o cmd_spi.o cmd_universe.o \
+         cmd_usb.o cmd_vfd.o \
          command.o console.o devices.o dlmalloc.o docecc.o \
          environment.o env_common.o \
-         env_nand.o env_dataflash.o env_flash.o env_eeprom.o env_nvram.o env_nowhere.o exports.o \
-         flash.o fpga.o \
+         env_nand.o env_dataflash.o env_flash.o env_eeprom.o \
+         env_nvram.o env_nowhere.o \
+         exports.o \
+         flash.o fpga.o ft_build.o \
          hush.o kgdb.o lcd.o lists.o lynxkdi.o \
          memsize.o miiphybb.o miiphyutil.o \
-         s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o \
+         s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o spartan3.o \
          usb.o usb_kbd.o usb_storage.o \
          virtex2.o xilinx.o
 
index fb4d3584b5039690e3e4475327df1cc3996eb0b7..b6d61057fdebe10e34a80d9746f0ede1a758c565 100644 (file)
@@ -131,6 +131,7 @@ block_dev_desc_t *  systemace_get_dev(int dev)
           not yet initialized. In that case, fill it in. */
       if (systemace_dev.blksz == 0) {
            systemace_dev.if_type   = IF_TYPE_UNKNOWN;
+           systemace_dev.dev       = 0;
            systemace_dev.part_type = PART_TYPE_UNKNOWN;
            systemace_dev.type      = DEV_TYPE_HARDDISK;
            systemace_dev.blksz     = 512;
index 2d1f43143996a18596b8ce3b5433105f5d1f5755..e3253022dc92a08f8057af9d33472ff2ad1a0b92 100644 (file)
@@ -76,7 +76,7 @@ autoscript (ulong addr)
        hdr->ih_hcrc = 0;
        len = sizeof (image_header_t);
        data = (ulong)hdr;
-       if (crc32(0, (char *)data, len) != crc) {
+       if (crc32(0, (uchar *)data, len) != crc) {
                puts ("Bad header crc\n");
                return 1;
        }
@@ -85,7 +85,7 @@ autoscript (ulong addr)
        len = ntohl(hdr->ih_size);
 
        if (verify) {
-               if (crc32(0, (char *)data, len) != ntohl(hdr->ih_dcrc)) {
+               if (crc32(0, (uchar *)data, len) != ntohl(hdr->ih_dcrc)) {
                        puts ("Bad data crc\n");
                        return 1;
                }
index daa54e77692f2936047dde1612bee1a9cfc0a357..ad412c81eb8d39ee893ffa166af533156922eeda 100644 (file)
 #include <bmp_layout.h>
 #include <command.h>
 #include <asm/byteorder.h>
+#include <malloc.h>
 
 #if (CONFIG_COMMANDS & CFG_CMD_BMP)
 
 static int bmp_info (ulong addr);
 static int bmp_display (ulong addr, int x, int y);
 
+int gunzip(void *, int, unsigned char *, unsigned long *);
+
 /*
  * Subroutine:  do_bmp
  *
@@ -100,15 +103,64 @@ 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 */
+
        if (!((bmp->header.signature[0]=='B') &&
              (bmp->header.signature[1]=='M'))) {
+
+#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 */
                printf("There is no valid bmp file at the given address\n");
                return(1);
+#endif /* CONFIG_VIDEO_BMP_GZIP */
        }
        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 */
+
        return(0);
 }
 
index c200fd8b86b2c467288658768f85d15bff373dd2..8599a49d057b954f11d0cb73deb2f8124c2eeb78 100644 (file)
 #include <environment.h>
 #include <asm/byteorder.h>
 
+#ifdef CONFIG_OF_FLAT_TREE
+#include <ft_build.h>
+#endif
+
  /*cmd_boot.c*/
  extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
 
@@ -84,7 +88,7 @@ static int image_info (unsigned long addr);
 
 #if (CONFIG_COMMANDS & CFG_CMD_IMLS)
 #include <flash.h>
-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+extern flash_info_t flash_info[]; /* info for FLASH chips */
 static int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
 #endif
 
@@ -197,29 +201,31 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)data, len) != checksum) {
+       if (crc32 (0, (uchar *)data, len) != checksum) {
                puts ("Bad Header Checksum\n");
                SHOW_BOOT_PROGRESS (-2);
                return 1;
        }
        SHOW_BOOT_PROGRESS (3);
 
+#ifdef CONFIG_HAS_DATAFLASH
+       if (addr_dataflash(addr)){
+               len  = ntohl(hdr->ih_size) + sizeof(image_header_t);
+               read_dataflash(addr, len, (char *)CFG_LOAD_ADDR);
+               addr = CFG_LOAD_ADDR;
+       }
+#endif
+
+
        /* for multi-file images we need the data part, too */
        print_image_hdr ((image_header_t *)addr);
 
        data = addr + sizeof(image_header_t);
        len  = ntohl(hdr->ih_size);
 
-#ifdef CONFIG_HAS_DATAFLASH
-       if (addr_dataflash(addr)){
-               read_dataflash(data, len, (char *)CFG_LOAD_ADDR);
-               data = CFG_LOAD_ADDR;
-       }
-#endif
-
        if (verify) {
                puts ("   Verifying Checksum ... ");
-               if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) {
+               if (crc32 (0, (uchar *)data, len) != ntohl(hdr->ih_dcrc)) {
                        printf ("Bad Data CRC\n");
                        SHOW_BOOT_PROGRESS (-3);
                        return 1;
@@ -487,6 +493,11 @@ fixup_silent_linux ()
 }
 #endif /* CONFIG_SILENT_CONSOLE */
 
+#ifdef CONFIG_OF_FLAT_TREE
+extern const unsigned char oftree_dtb[];
+extern const unsigned int oftree_dtb_len;
+#endif
+
 #ifdef CONFIG_PPC
 static void
 do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
@@ -509,6 +520,9 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
        bd_t    *kbd;
        void    (*kernel)(bd_t *, ulong, ulong, ulong, ulong);
        image_header_t *hdr = &header;
+#ifdef CONFIG_OF_FLAT_TREE
+       char    *of_flat_tree;
+#endif
 
        if ((s = getenv ("initrd_high")) != NULL) {
                /* a value of "no" or a similar string will act like 0,
@@ -619,7 +633,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                checksum = hdr->ih_hcrc;
                hdr->ih_hcrc = 0;
 
-               if (crc32 (0, (char *)data, len) != checksum) {
+               if (crc32 (0, (uchar *)data, len) != checksum) {
                        puts ("Bad Header Checksum\n");
                        SHOW_BOOT_PROGRESS (-11);
                        do_reset (cmdtp, flag, argc, argv);
@@ -647,13 +661,13 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
 
                                if (chunk > CHUNKSZ)
                                        chunk = CHUNKSZ;
-                               csum = crc32 (csum, (char *)cdata, chunk);
+                               csum = crc32 (csum, (uchar *)cdata, chunk);
                                cdata += chunk;
 
                                WATCHDOG_RESET();
                        }
 #else  /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */
-                       csum = crc32 (0, (char *)data, len);
+                       csum = crc32 (0, (uchar *)data, len);
 #endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */
 
                        if (csum != hdr->ih_dcrc) {
@@ -774,15 +788,26 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                initrd_end = 0;
        }
 
+#ifdef CONFIG_OF_FLAT_TREE
+       if (initrd_start == 0)
+               of_flat_tree = (char *)(((ulong)kbd - OF_FLAT_TREE_MAX_SIZE -
+                                       sizeof(bd_t)) & ~0xF);
+       else
+               of_flat_tree = (char *)((initrd_start - OF_FLAT_TREE_MAX_SIZE -
+                                       sizeof(bd_t)) & ~0xF);
+#endif
 
        debug ("## Transferring control to Linux (at address %08lx) ...\n",
                (ulong)kernel);
 
        SHOW_BOOT_PROGRESS (15);
 
+#ifndef CONFIG_OF_FLAT_TREE
+
 #if defined(CFG_INIT_RAM_LOCK) && !defined(CONFIG_E500)
        unlock_ram_in_cache();
 #endif
+
        /*
         * Linux Kernel Parameters:
         *   r3: ptr to board info data
@@ -792,6 +817,25 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
         *   r7: End   of command line string
         */
        (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
+
+#else
+       ft_setup(of_flat_tree, OF_FLAT_TREE_MAX_SIZE, kbd);
+       /* ft_dump_blob(of_flat_tree); */
+
+#if defined(CFG_INIT_RAM_LOCK) && !defined(CONFIG_E500)
+       unlock_ram_in_cache();
+#endif
+       /*
+        * Linux Kernel Parameters:
+        *   r3: ptr to OF flat tree, followed by the board info data
+        *   r4: initrd_start or 0 if no initrd
+        *   r5: initrd_end - unused if r4 is 0
+        *   r6: Start of command line string
+        *   r7: End   of command line string
+        */
+       (*kernel) ((bd_t *)of_flat_tree, initrd_start, initrd_end, cmd_start, cmd_end);
+
+#endif
 }
 #endif /* CONFIG_PPC */
 
@@ -1035,7 +1079,7 @@ static int image_info (ulong addr)
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)data, len) != checksum) {
+       if (crc32 (0, (uchar *)data, len) != checksum) {
                puts ("   Bad Header Checksum\n");
                return 1;
        }
@@ -1047,7 +1091,7 @@ static int image_info (ulong addr)
        len  = ntohl(hdr->ih_size);
 
        puts ("   Verifying Checksum ... ");
-       if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) {
+       if (crc32 (0, (uchar *)data, len) != ntohl(hdr->ih_dcrc)) {
                puts ("   Bad Data CRC\n");
                return 1;
        }
@@ -1080,7 +1124,7 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        for (i=0, info=&flash_info[0]; i<CFG_MAX_FLASH_BANKS; ++i, ++info) {
                if (info->flash_id == FLASH_UNKNOWN)
                        goto next_bank;
-               for (j=0; j<CFG_MAX_FLASH_SECT; ++j) {
+               for (j=0; j<info->sector_count; ++j) {
 
                        if (!(hdr=(image_header_t *)info->start[j]) ||
                            (ntohl(hdr->ih_magic) != IH_MAGIC))
@@ -1092,7 +1136,7 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        checksum = ntohl(header.ih_hcrc);
                        header.ih_hcrc = 0;
 
-                       if (crc32 (0, (char *)&header, sizeof(image_header_t))
+                       if (crc32 (0, (uchar *)&header, sizeof(image_header_t))
                            != checksum)
                                goto next_sector;
 
@@ -1103,7 +1147,7 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        len  = ntohl(hdr->ih_size);
 
                        puts ("   Verifying Checksum ... ");
-                       if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) {
+                       if (crc32 (0, (uchar *)data, len) != ntohl(hdr->ih_dcrc)) {
                                puts ("   Bad Data CRC\n");
                        }
                        puts ("OK\n");
index 3e4e08f95b5ed9307ab4372c883bb28a38135458..5842471df159b15ed929b5dd916e373078315941 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 /*
- * IBM 4XX DCR Functions
+ * AMCC 4XX DCR Functions
  */
 
 #include <common.h>
 
 #if defined(CONFIG_4xx) && (CONFIG_COMMANDS & CFG_CMD_SETGETDCR)
 
-/* ======================================================================
- * Interpreter command to retrieve an IBM PPC 4xx Device Control Register
- * ======================================================================
+/* =======================================================================
+ * Interpreter command to retrieve an AMCC PPC 4xx Device Control Register
+ * =======================================================================
  */
 int do_getdcr ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] )
 {
-    unsigned short dcrn;                     /* Device Control Register Num */
-    unsigned long value;                     /* DCR's value */
+       unsigned short dcrn;    /* Device Control Register Num */
+       unsigned long value;    /* DCR's value */
 
-    unsigned long get_dcr(unsigned short);
+       unsigned long get_dcr (unsigned short);
 
-    /* Validate arguments */
-    if (argc < 2) {
-       printf("Usage:\n%s\n", cmdtp->usage);
-       return 1;
-    }
+       /* Validate arguments */
+       if (argc < 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
 
-    /* Get a DCR */
-    dcrn = (unsigned short)simple_strtoul(argv[ 1 ], NULL, 16);
-    value = get_dcr(dcrn);
+       /* Get a DCR */
+       dcrn = (unsigned short) simple_strtoul (argv[1], NULL, 16);
+       value = get_dcr (dcrn);
 
-    printf("%04x: %08lx\n", dcrn, value);
+       printf ("%04x: %08lx\n", dcrn, value);
 
-    return 0;
-} /* do_getdcr */
+       return 0;
+}
 
 
 /* ======================================================================
- * Interpreter command to set an IBM PPC 4xx Device Control Register
+ * Interpreter command to set an AMCC PPC 4xx Device Control Register
  * ======================================================================
 */
-int do_setdcr ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_setdcr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 {
-   unsigned long get_dcr(unsigned short );
-   unsigned long set_dcr(unsigned short , unsigned long );
-    unsigned short dcrn;                     /* Device Control Register Num */
-   unsigned long value;
-                   /* DCR's value */
-    int nbytes;
-    extern char console_buffer[];
-
-    /* Validate arguments */
-    if (argc < 2) {
-       printf("Usage:\n%s\n", cmdtp->usage);
-       return 1;
-    }
-
-    /* Set a DCR */
-    dcrn = (unsigned short)simple_strtoul(argv[1], NULL, 16);
-    do {
-       value = get_dcr(dcrn);
-       printf("%04x: %08lx", dcrn, value);
-       nbytes = readline(" ? ");
-       if (nbytes == 0) {
-           /*
-            * <CR> pressed as only input, don't modify current
-            * location and exit command.
-            */
-           nbytes = 1;
-           return 0;
-       } else {
-           unsigned long i;
-           char *endp;
-           i = simple_strtoul(console_buffer, &endp, 16);
-           nbytes = endp - console_buffer;
-           if (nbytes)
-               set_dcr(dcrn, i);
+       unsigned long get_dcr (unsigned short);
+       unsigned long set_dcr (unsigned short, unsigned long);
+       unsigned short dcrn;    /* Device Control Register Num */
+       unsigned long value;
+
+       /* DCR's value */
+       int nbytes;
+       extern char console_buffer[];
+
+       /* Validate arguments */
+       if (argc < 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
        }
-    } while (nbytes);
 
-    return 0;
-} /* do_setdcr */
+       /* Set a DCR */
+       dcrn = (unsigned short) simple_strtoul (argv[1], NULL, 16);
+       do {
+               value = get_dcr (dcrn);
+               printf ("%04x: %08lx", dcrn, value);
+               nbytes = readline (" ? ");
+               if (nbytes == 0) {
+                       /*
+                        * <CR> pressed as only input, don't modify current
+                        * location and exit command.
+                        */
+                       nbytes = 1;
+                       return 0;
+               } else {
+                       unsigned long i;
+                       char *endp;
+
+                       i = simple_strtoul (console_buffer, &endp, 16);
+                       nbytes = endp - console_buffer;
+                       if (nbytes)
+                               set_dcr (dcrn, i);
+               }
+       } while (nbytes);
+
+       return 0;
+}
 
 /***************************************************/
 
 U_BOOT_CMD(
        getdcr, 2,      1,      do_getdcr,
-       "getdcr  - Get an IBM PPC 4xx DCR's value\n",
+       "getdcr  - Get an AMCC PPC 4xx DCR's value\n",
        "dcrn - return a DCR's value.\n"
 );
 U_BOOT_CMD(
        setdcr, 2,      1,      do_setdcr,
-       "setdcr  - Set an IBM PPC 4xx DCR's value\n",
+       "setdcr  - Set an AMCC PPC 4xx DCR's value\n",
        "dcrn - set a DCR's value.\n"
 );
 
diff --git a/common/cmd_display.c b/common/cmd_display.c
new file mode 100644 (file)
index 0000000..abee844
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2005
+ * 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 <command.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_DISPLAY)
+
+#undef DEBUG_DISP
+
+#define DISP_SIZE      8
+#define CWORD_CLEAR    0x80
+#define CLEAR_DELAY    (110 * 2)
+
+int do_display (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int i;
+       int pos;
+
+       /* Clear display */
+       *((volatile char*)(CFG_DISP_CWORD)) = CWORD_CLEAR;
+       udelay(1000 * CLEAR_DELAY);
+
+       if (argc < 2)
+               return (0);
+
+       for (pos = 0, i = 1; i < argc && pos < DISP_SIZE; i++) {
+               char *p = argv[i], c;
+
+               if (i > 1) {
+                       *((volatile uchar *) (CFG_DISP_CHR_RAM + pos++)) = ' ';
+#ifdef DEBUG_DISP
+                       putc(' ');
+#endif
+               }
+
+               while ((c = *p++) != '\0' && pos < DISP_SIZE) {
+                       *((volatile uchar *) (CFG_DISP_CHR_RAM + pos++)) = c;
+#ifdef DEBUG_DISP
+                       putc(c);
+#endif
+               }
+       }
+
+#ifdef DEBUG_DISP
+       putc('\n');
+#endif
+
+       return (0);
+}
+
+/***************************************************/
+
+U_BOOT_CMD(
+       display,        CFG_MAXARGS,    1,      do_display,
+       "display- display string on dot matrix display\n",
+       "[<string>]\n"
+       "    - with <string> argument: display <string> on dot matrix display\n"
+       "    - without arguments: clear dot matrix display\n"
+);
+
+#endif /* CFG_CMD_DISPLAY */
index e5db1bc360b9eb3ece877dda24ea9fa8be2d955a..5e9bea30450683eea1d22c91d920676c3e5fe4e6 100644 (file)
@@ -143,7 +143,7 @@ int do_doc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        cmd ? "read" : "write", curr_device, off, size);
 
                ret = doc_rw(doc_dev_desc + curr_device, cmd, off, size,
-                            &total, (u_char*)addr);
+                            (size_t *)&total, (u_char*)addr);
 
                printf ("%d bytes %s: %s\n", total, cmd ? "read" : "write",
                        ret ? "ERROR" : "OK");
@@ -304,12 +304,12 @@ int doc_rw (struct DiskOnChip* this, int cmd,
 
                if (cmd)
                        ret = doc_read_ecc(this, from, len,
-                                          &n, (u_char*)buf,
-                                          noecc ? NULL : eccbuf);
+                                          (size_t *)&n, (u_char*)buf,
+                                          noecc ? (uchar *)NULL : (uchar *)eccbuf);
                else
                        ret = doc_write_ecc(this, from, len,
-                                           &n, (u_char*)buf,
-                                           noecc ? NULL : eccbuf);
+                                           (size_t *)&n, (u_char*)buf,
+                                           noecc ? (uchar *)NULL : (uchar *)eccbuf);
 
                if (ret)
                        break;
@@ -804,7 +804,7 @@ static int find_boot_record(struct NFTLrecord *nftl)
                /* Check for ANAND header first. Then can whinge if it's found but later
                   checks fail */
                if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize, SECTORSIZE,
-                                       &retlen, buf, NULL))) {
+                                       (size_t *)&retlen, buf, NULL))) {
                        static int warncount = 5;
 
                        if (warncount) {
@@ -829,7 +829,7 @@ static int find_boot_record(struct NFTLrecord *nftl)
 
                /* To be safer with BIOS, also use erase mark as discriminant */
                if ((ret = doc_read_oob(nftl->mtd, block * nftl->EraseSize + SECTORSIZE + 8,
-                               8, &retlen, (char *)&h1) < 0)) {
+                               8, (size_t *)&retlen, (uchar *)&h1) < 0)) {
 #ifdef NFTL_DEBUG
                        printf("ANAND header found at 0x%x, but OOB data read failed\n",
                               block * nftl->EraseSize);
@@ -902,7 +902,7 @@ static int find_boot_record(struct NFTLrecord *nftl)
                                /* read one sector for every SECTORSIZE of blocks */
                                if ((ret = doc_read_ecc(nftl->mtd, block * nftl->EraseSize +
                                                       i + SECTORSIZE, SECTORSIZE,
-                                                      &retlen, buf, (char *)&oob)) < 0) {
+                                                      (size_t *)&retlen, buf, (uchar *)&oob)) < 0) {
                                        puts ("Read of bad sector table failed\n");
                                        return -1;
                                }
index 80b8ccc1e8d08d0d695254a6ab13314fbf5d8256..d15a4120577f617744487b25c95b8c4c84f9b764 100644 (file)
  *
  */
 
+/*
+ * Support for read and write access to EEPROM like memory devices. This
+ * includes regular EEPROM as well as  FRAM (ferroelectic nonvolaile RAM).
+ * FRAM devices read and write data at bus speed. In particular, there is no
+ * write delay. Also, there is no limit imposed on the numer of bytes that can
+ * be transferred with a single read or write.
+ *
+ * Use the following configuration options to ensure no unneeded performance
+ * degradation (typical for EEPROM) is incured for FRAM memory:
+ *
+ * #define CFG_I2C_FRAM
+ * #undef CFG_EEPROM_PAGE_WRITE_DELAY_MS
+ *
+ */
+
 #include <common.h>
 #include <config.h>
 #include <command.h>
@@ -34,6 +49,9 @@ extern int  eeprom_read  (unsigned dev_addr, unsigned offset,
                          uchar *buffer, unsigned cnt);
 extern int  eeprom_write (unsigned dev_addr, unsigned offset,
                          uchar *buffer, unsigned cnt);
+#if defined(CFG_EEPROM_WREN)
+extern int eeprom_write_enable (unsigned dev_addr, int state);
+#endif
 #endif
 
 
@@ -122,7 +140,11 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt
         * because the next page may be in a different device.
         */
        while (offset < end) {
-               unsigned alen, len, maxlen;
+               unsigned alen, len;
+#if !defined(CFG_I2C_FRAM)
+               unsigned maxlen;
+#endif
+
 #if CFG_I2C_EEPROM_ADDR_LEN == 1 && !defined(CONFIG_SPI_X)
                uchar addr[2];
 
@@ -144,12 +166,21 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt
 
                addr[0] |= dev_addr;            /* insert device address */
 
+               len = end - offset;
+
+               /*
+                * For a FRAM device there is no limit on the number of the
+                * bytes that can be ccessed with the single read or write
+                * operation.
+                */
+#if !defined(CFG_I2C_FRAM)
                maxlen = 0x100 - blk_off;
                if (maxlen > I2C_RXTX_LEN)
                        maxlen = I2C_RXTX_LEN;
-               len    = end - offset;
                if (len > maxlen)
                        len = maxlen;
+#endif
+
 #ifdef CONFIG_SPI
                spi_read (addr, alen, buffer, len);
 #else
@@ -159,6 +190,7 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt
                buffer += len;
                offset += len;
        }
+
        return rcode;
 }
 
@@ -185,13 +217,20 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn
        int     i;
 #endif
 
+#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, maxlen;
+               unsigned alen, len;
+#if !defined(CFG_I2C_FRAM)
+               unsigned maxlen;
+#endif
+
 #if CFG_I2C_EEPROM_ADDR_LEN == 1 && !defined(CONFIG_SPI_X)
                uchar addr[2];
 
@@ -213,6 +252,15 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn
 
                addr[0] |= dev_addr;            /* insert device address */
 
+               len = end - offset;
+
+               /*
+                * For a FRAM device there is no limit on the number of the
+                * bytes that can be ccessed with the single read or write
+                * operation.
+                */
+#if !defined(CFG_I2C_FRAM)
+
 #if defined(CFG_EEPROM_PAGE_WRITE_BITS)
 
 #define        EEPROM_PAGE_SIZE        (1 << CFG_EEPROM_PAGE_WRITE_BITS)
@@ -225,9 +273,10 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn
                if (maxlen > I2C_RXTX_LEN)
                        maxlen = I2C_RXTX_LEN;
 
-               len = end - offset;
                if (len > maxlen)
                        len = maxlen;
+#endif
+
 #ifdef CONFIG_SPI
                spi_write (addr, alen, buffer, len);
 #else
@@ -324,6 +373,9 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn
                udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
 #endif
        }
+#if defined(CFG_EEPROM_WREN)
+       eeprom_write_enable (dev_addr,0);
+#endif
        return rcode;
 }
 
index af836cd614ef4e61ad2eab6f137a914c69be9ddc..5db42f2b0d65e79e9d3b546b1864abb4ba26799a 100644 (file)
@@ -152,7 +152,7 @@ int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        ext2ls, 4,      1,      do_ext2ls,
-       "ext2ls- list files in a directory (default /)\n",
+       "ext2ls  - list files in a directory (default /)\n",
        "<interface> <dev[:part]> [directory]\n"
        "    - list files from 'dev' on 'interface' in a 'directory'\n"
 );
@@ -231,7 +231,7 @@ int do_ext2load (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        return(1);
                }
 
-               if (strncmp(info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) {
+               if (strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) {
                        printf ("\n** Invalid partition type \"%.32s\""
                                " (expect \"" BOOT_PART_TYPE "\")\n",
                                info.type);
index d5be30c54dd0d00791e56a1fba2a36ba13966c25..0aa478306b8bd1988f4e66fc2e33111375128b0e 100644 (file)
@@ -404,7 +404,11 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
+#ifdef CFG_MAX_FLASH_BANKS_DETECT
+       int s_first[CFG_MAX_FLASH_BANKS_DETECT], s_last[CFG_MAX_FLASH_BANKS_DETECT];
+#else
        int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS];
+#endif
        int erased = 0;
        int planned;
        int rcode = 0;
@@ -617,7 +621,11 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
+#ifdef CFG_MAX_FLASH_BANKS_DETECT
+       int s_first[CFG_MAX_FLASH_BANKS_DETECT], s_last[CFG_MAX_FLASH_BANKS_DETECT];
+#else
        int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS];
+#endif
        int protected, i;
        int planned;
        int rcode;
index c4b73929493b1cc487895011709434caabee9cbf..9a01e7df8b6b4a68f29f51db07e5ff2fc63dfc8f 100644 (file)
@@ -69,7 +69,7 @@ int fpga_loadbitstream(unsigned long dev, char* fpgadata, size_t size)
        unsigned int i;
        int rc;
 
-       dataptr = fpgadata;
+       dataptr = (unsigned char *)fpgadata;
 
 #if CFG_FPGA_XILINX
        /* skip the first bytes of the bitsteam, their meaning is unknown */
index 9c02ceb153c3356300d87365104f7102a204fc56..c543bb5314892df8799afc754f8dfd4a54774107 100644 (file)
@@ -295,7 +295,13 @@ int do_i2c_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                 * chip doesn't respond.  This apparently isn't a
                 * universal feature so we don't take advantage of it.
                 */
+/*
+ * No write delay with FRAM devices.
+ */
+#if !defined(CFG_I2C_FRAM)
                udelay(11000);
+#endif
+
 #if 0
                for(timeout = 0; timeout < 10; timeout++) {
                        udelay(2000);
@@ -455,7 +461,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
         */
        do {
                printf("%08lx:", addr);
-               if(i2c_read(chip, addr, alen, (char *)&data, size) != 0) {
+               if(i2c_read(chip, addr, alen, (uchar *)&data, size) != 0) {
                        puts ("\nError reading the chip,\n");
                } else {
                        data = cpu_to_be32(data);
@@ -504,7 +510,7 @@ mod_i2c_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
                                 */
                                reset_cmd_timeout();
 #endif
-                               if(i2c_write(chip, addr, alen, (char *)&data, size) != 0) {
+                               if(i2c_write(chip, addr, alen, (uchar *)&data, size) != 0) {
                                        puts ("Error writing the chip.\n");
                                }
 #ifdef CFG_EEPROM_PAGE_WRITE_DELAY_MS
index 1adfe2bfaf8b49154c1db828cdb0cff81626b4cc..b67d35a5a4e89191f5c41aedbdccedf81706bf4c 100644 (file)
@@ -49,7 +49,7 @@
 #include <asm/io.h>
 #ifdef __MIPS__
 /* Macros depend on this variable */
-static unsigned long mips_io_port_base = 0;
+unsigned long mips_io_port_base = 0;
 #endif
 #endif
 
@@ -417,8 +417,8 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                SHOW_BOOT_PROGRESS (-1);
                return 1;
        }
-       if ((strncmp(info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
-           (strncmp(info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {
+       if ((strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
+           (strncmp((char *)info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {
                printf ("\n** Invalid partition type \"%.32s\""
                        " (expect \"" BOOT_PART_TYPE "\")\n",
                        info.type);
@@ -450,7 +450,7 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)hdr, sizeof(image_header_t)) != checksum) {
+       if (crc32 (0, (uchar *)hdr, sizeof(image_header_t)) != checksum) {
                puts ("\n** Bad Header Checksum **\n");
                SHOW_BOOT_PROGRESS (-2);
                return 1;
index abf5590b4680c79e6bc9c6e2a0af563bb4378b2d..559d7b4c300dacfd2826f146c0a33447203f6387 100644 (file)
@@ -34,6 +34,7 @@
 #if defined(CONFIG_8xx)
 #include <asm/8xx_immap.h>
 #include <commproc.h>
+#include <asm/iopin_8xx.h>
 #elif defined(CONFIG_8260)
 #include <asm/immap_8260.h>
 #include <asm/cpm_8260.h>
@@ -316,13 +317,21 @@ do_iopinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 int
 do_iopset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-#if defined(CONFIG_8260)
        uint rcode = 0;
+       iopin_t iopin;
        static uint port = 0;
        static uint pin = 0;
        static uint value = 0;
-       static enum { DIR, PAR, SOR, ODR, DAT } cmd = DAT;
-       iopin_t iopin;
+       static enum {
+               DIR,
+               PAR,
+               SOR,
+               ODR,
+               DAT,
+#if defined(CONFIG_8xx)
+               INT
+#endif
+       } cmd = DAT;
 
        if (argc != 5) {
                puts ("iopset PORT PIN CMD VALUE\n");
@@ -356,6 +365,11 @@ do_iopset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        case 's':
                cmd = SOR;
                break;
+#if defined(CONFIG_8xx)
+       case 'i':
+               cmd = INT;
+               break;
+#endif
        default:
                printf ("iopset: unknown command %s\n", argv[3]);
                rcode = 1;
@@ -369,6 +383,7 @@ do_iopset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        if (rcode == 0) {
                iopin.port = port;
                iopin.pin = pin;
+               iopin.flag = 0;
                switch (cmd) {
                case DIR:
                        if (value)
@@ -400,14 +415,18 @@ do_iopset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        else
                                iopin_set_low (&iopin);
                        break;
+#if defined(CONFIG_8xx)
+               case INT:
+                       if (value)
+                               iopin_set_falledge (&iopin);
+                       else
+                               iopin_set_anyedge (&iopin);
+                       break;
+#endif
                }
 
        }
        return rcode;
-#else
-       unimplemented (cmdtp, flag, argc, argv);
-       return 0;
-#endif
 }
 
 int
index bc63f0c4923e80aa3a34575b4bb58697c2c9ecdb..ecadb796347fc5a7ce100cfd7c11269ba804a4ca 100644 (file)
 #endif
 
 /* enable/disable debugging messages */
-#define        DEBUG
-#undef DEBUG
+#define        DEBUG_JFFS
+#undef DEBUG_JFFS
 
-#ifdef  DEBUG
+#ifdef  DEBUG_JFFS
 # define DEBUGF(fmt, args...)  printf(fmt ,##args)
 #else
 # define DEBUGF(fmt, args...)
 
 /* this flag needs to be set in part_info struct mask_flags
  * field for read-only partitions */
-#define MTD_WRITEABLE          1
+#define MTD_WRITEABLE_CMD              1
 
 #ifdef CONFIG_JFFS2_CMDLINE
 /* default values for mtdids and mtdparts variables */
@@ -241,6 +241,46 @@ static void memsize_format(char *buf, u32 size)
                sprintf(buf, "%lu", size);
 }
 
+/**
+ * This routine does global indexing of all partitions. Resulting index for
+ * current partition is saved in 'mtddevnum'. Current partition name in
+ * 'mtddevname'.
+ */
+static void index_partitions(void)
+{
+       char buf[16];
+       u16 mtddevnum;
+       struct part_info *part;
+       struct list_head *dentry;
+       struct mtd_device *dev;
+
+       DEBUGF("--- index partitions ---\n");
+
+       if (current_dev) {
+               mtddevnum = 0;
+               list_for_each(dentry, &devices) {
+                       dev = list_entry(dentry, struct mtd_device, link);
+                       if (dev == current_dev) {
+                               mtddevnum += current_partnum;
+                               sprintf(buf, "%d", mtddevnum);
+                               setenv("mtddevnum", buf);
+                               break;
+                       }
+                       mtddevnum += dev->num_parts;
+               }
+
+               part = jffs2_part_info(current_dev, current_partnum);
+               setenv("mtddevname", part->name);
+
+               DEBUGF("=> mtddevnum %d,\n=> mtddevname %s\n", mtddevnum, part->name);
+       } else {
+               setenv("mtddevnum", NULL);
+               setenv("mtddevname", NULL);
+
+               DEBUGF("=> mtddevnum NULL\n=> mtddevname NULL\n");
+       }
+}
+
 /**
  * Save current device and partition in environment variable 'partition'.
  */
@@ -264,6 +304,7 @@ static void current_save(void)
 
                DEBUGF("=> partition NULL\n");
        }
+       index_partitions();
 }
 
 /**
@@ -279,7 +320,7 @@ static int part_validate_nor(struct mtdids *id, struct part_info *part)
 {
 #if (CONFIG_COMMANDS & CFG_CMD_FLASH)
        /* info for FLASH chips */
-       extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+       extern flash_info_t flash_info[];
        flash_info_t *flash;
        int offset_aligned;
        u32 end_offset;
@@ -401,6 +442,8 @@ static int part_validate(struct mtdids *id, struct part_info *part)
  */
 static int part_del(struct mtd_device *dev, struct part_info *part)
 {
+       u8 current_save_needed = 0;
+
        /* if there is only one partition, remove whole device */
        if (dev->num_parts == 1)
                return device_del(dev);
@@ -417,11 +460,10 @@ static int part_del(struct mtd_device *dev, struct part_info *part)
                        if (curr_pi == part) {
                                printf("current partition deleted, resetting current to 0\n");
                                current_partnum = 0;
-                               current_save();
                        } else if (part->offset <= curr_pi->offset) {
                                current_partnum--;
-                               current_save();
                        }
+                       current_save_needed = 1;
                }
        }
 
@@ -432,6 +474,11 @@ static int part_del(struct mtd_device *dev, struct part_info *part)
        free(part);
        dev->num_parts--;
 
+       if (current_save_needed > 0)
+               current_save();
+       else
+               index_partitions();
+
        return 0;
 }
 
@@ -475,6 +522,8 @@ static int part_sort_add(struct mtd_device *dev, struct part_info *part)
        if (list_empty(&dev->parts)) {
                DEBUGF("part_sort_add: list empty\n");
                list_add(&part->link, &dev->parts);
+               dev->num_parts++;
+               index_partitions();
                return 0;
        }
 
@@ -498,18 +547,23 @@ static int part_sort_add(struct mtd_device *dev, struct part_info *part)
 
                if (new_pi->offset <= pi->offset) {
                        list_add_tail(&part->link, entry);
+                       dev->num_parts++;
 
                        if (curr_pi && (pi->offset <= curr_pi->offset)) {
                                /* we are modyfing partitions for the current
                                 * device, update current */
                                current_partnum++;
                                current_save();
+                       } else {
+                               index_partitions();
                        }
-
                        return 0;
                }
        }
+
        list_add_tail(&part->link, &dev->parts);
+       dev->num_parts++;
+       index_partitions();
        return 0;
 }
 
@@ -530,7 +584,6 @@ static int part_add(struct mtd_device *dev, struct part_info *part)
        if (part_sort_add(dev, part) != 0)
                return 1;
 
-       dev->num_parts++;
        return 0;
 }
 
@@ -600,7 +653,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
        /* test for options */
        mask_flags = 0;
        if (strncmp(p, "ro", 2) == 0) {
-               mask_flags |= MTD_WRITEABLE;
+               mask_flags |= MTD_WRITEABLE_CMD;
                p += 2;
        }
 
@@ -665,7 +718,7 @@ static int device_validate(u8 type, u8 num, u32 *size)
        if (type == MTD_DEV_TYPE_NOR) {
 #if (CONFIG_COMMANDS & CFG_CMD_FLASH)
                if (num < CFG_MAX_FLASH_BANKS) {
-                       extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+                       extern flash_info_t flash_info[];
                        *size = flash_info[num].size;
 
                        return 0;
@@ -746,9 +799,10 @@ static int device_del(struct mtd_device *dev)
                        current_partnum = 0;
                }
                current_save();
+               return 0;
        }
 
-
+       index_partitions();
        return 0;
 }
 
@@ -782,13 +836,20 @@ static struct mtd_device* device_find(u8 type, u8 num)
  */
 static void device_add(struct mtd_device *dev)
 {
+       u8 current_save_needed = 0;
+
        if (list_empty(&devices)) {
                current_dev = dev;
                current_partnum = 0;
-               current_save();
+               current_save_needed = 1;
        }
 
        list_add_tail(&dev->link, &devices);
+
+       if (current_save_needed > 0)
+               current_save();
+       else
+               index_partitions();
 }
 
 /**
@@ -907,7 +968,7 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_
        }
        memset(dev, 0, sizeof(struct mtd_device));
        dev->id = id;
-       dev->num_parts = num_parts;
+       dev->num_parts = 0; /* part_sort_add increments num_parts */
        INIT_LIST_HEAD(&dev->parts);
        INIT_LIST_HEAD(&dev->link);
 
@@ -1120,7 +1181,7 @@ static int generate_mtdparts(char *buf, u32 buflen)
                        }
 
                        /* ro mask flag */
-                       if (part->mask_flags && MTD_WRITEABLE) {
+                       if (part->mask_flags && MTD_WRITEABLE_CMD) {
                                len = 2;
                                if (len > maxlen)
                                        goto cleanup;
@@ -1559,7 +1620,7 @@ int mtdparts_init(void)
                ids_changed = 1;
 
                if (parse_mtdids(ids) != 0) {
-                       device_delall(&devices);
+                       devices_init();
                        return 1;
                }
 
index b85db69e131361c62267bbb7ed11bedbd2a806ac..749849711a007fcfc6817ddca3144e2e0c0dcfb2 100644 (file)
@@ -166,7 +166,7 @@ load_serial (ulong offset)
                    if (addr2info(store_addr)) {
                        int rc;
 
-                       rc = flash_write((uchar *)binbuf,store_addr,binlen);
+                       rc = flash_write((char *)binbuf,store_addr,binlen);
                        if (rc != 0) {
                                flash_perror (rc);
                                return (~0);
index 57ef48461a537b12228ab830fe27db794d8c51c7..efc9689c298b55675bde676c5708bb66917c9b3d 100644 (file)
@@ -179,7 +179,7 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        case 2:
                if (strcmp(argv[1],"show") == 0) {
                        for (i=0; i < (log_size&LOGBUFF_MASK); i++) {
-                               s = log_buf+((log_start+i)&LOGBUFF_MASK);
+                               s = (char *)log_buf+((log_start+i)&LOGBUFF_MASK);
                                putc (*s);
                        }
                        return 0;
index bafb1d6792d96d657e2badb149c0c89f4eb6433c..0f4f9b73df91f4049a4b7995d9d4992266a4385d 100644 (file)
@@ -179,7 +179,7 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                }
 #endif
                puts ("    ");
-               cp = linebuf;
+               cp = (u_char *)linebuf;
                for (i=0; i<linebytes; i++) {
                        if ((*cp < 0x20) || (*cp > 0x7e))
                                putc ('.');
@@ -430,7 +430,7 @@ int do_mem_cp ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
                puts ("Copy to Flash... ");
 
-               rc = flash_write ((uchar *)addr, dest, count*size);
+               rc = flash_write ((char *)addr, dest, count*size);
                if (rc != 0) {
                        flash_perror (rc);
                        return (1);
index 3d260ab9bd7802f781f387f1c439ddd5cbc4c574..48a4e77c55a0bfd3de841f866d3bfd15d53ff0b6 100644 (file)
@@ -41,19 +41,21 @@ uint last_data;
 uint last_reg;
 
 /*
- * MII read/write
+ * MII device/info/read/write
  *
  * Syntax:
- *  mii read {addr} {reg}
- *  mii write {addr} {reg} {data}
+ *  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 defined(CONFIG_8xx) || defined(CONFIG_MCF52x2)
        mii_init ();
@@ -78,8 +80,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        data = simple_strtoul (argv[4], NULL, 16);
        }
 
+       /* use current device */
+       devname = miiphy_get_current_dev();
+
        /*
-        * check info/read/write.
+        * check device/read/write/list.
         */
        if (op == 'i') {
                unsigned char j, start, end;
@@ -93,32 +98,41 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                if (argc >= 3) {
                        start = addr; end = addr + 1;
                } else {
-                       start = 0; end = 32;
+                       start = 0; end = 31;
                }
 
                for (j = start; j < end; j++) {
-                       if (miiphy_info (j, &oui, &model, &rev) == 0) {
+                       if (miiphy_info (devname, j, &oui, &model, &rev) == 0) {
                                printf ("PHY 0x%02X: "
                                        "OUI = 0x%04X, "
                                        "Model = 0x%02X, "
                                        "Rev = 0x%02X, "
                                        "%3dbaseT, %s\n",
                                        j, oui, model, rev,
-                                       miiphy_speed (j),
-                                       miiphy_duplex (j) == FULL ? "FDX" : "HDX");
+                                       miiphy_speed (devname, j),
+                                       (miiphy_duplex (devname, j) == FULL)
+                                               ? "FDX" : "HDX");
+                       } else {
+                               puts ("Error reading info from the PHY\n");
                        }
                }
        } else if (op == 'r') {
-               if (miiphy_read (addr, reg, &data) != 0) {
+               if (miiphy_read (devname, addr, reg, &data) != 0) {
                        puts ("Error reading from the PHY\n");
                        rcode = 1;
+               } else {
+                       printf ("%04X\n", data & 0x0000FFFF);
                }
-               printf ("%04X\n", data & 0x0000FFFF);
        } else if (op == 'w') {
-               if (miiphy_write (addr, reg, data) != 0) {
+               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;
@@ -140,9 +154,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        mii,    5,      1,      do_mii,
        "mii     - MII utility commands\n",
-       "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"
+       "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 ================================================= */
@@ -386,7 +402,7 @@ static int special_field(
        return 0;
 }
 
-uint last_op;
+char last_op[2];
 uint last_data;
 uint last_addr_lo;
 uint last_addr_hi;
@@ -412,11 +428,12 @@ static void extract_range(
 /* ---------------------------------------------------------------- */
 int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 {
-       char            op;
+       char            op[2];
        unsigned char   addrlo, addrhi, reglo, reghi;
-       unsigned char   addr = 0, reg = 0;
+       unsigned char   addr, reg;
        unsigned short  data;
        int             rcode = 0;
+       char            *devname;
 
 #ifdef CONFIG_8xx
        mii_init ();
@@ -426,7 +443,8 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
         * We use the last specified parameters, unless new ones are
         * entered.
         */
-       op     = last_op;
+       op[0] = last_op[0];
+       op[1] = last_op[1];
        addrlo = last_addr_lo;
        addrhi = last_addr_hi;
        reglo  = last_reg_lo;
@@ -434,7 +452,12 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        data   = last_data;
 
        if ((flag & CMD_FLAG_REPEAT) == 0) {
-               op = argv[1][0];
+               op[0] = argv[1][0];
+               if (strlen(argv[1]) > 1)
+                       op[1] = argv[1][1];
+               else
+                       op[1] = '\0';
+
                if (argc >= 3)
                        extract_range(argv[2], &addrlo, &addrhi);
                if (argc >= 4)
@@ -443,10 +466,13 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        data = simple_strtoul (argv[4], NULL, 16);
        }
 
+       /* use current device */
+       devname = miiphy_get_current_dev();
+
        /*
         * check info/read/write.
         */
-       if (op == 'i') {
+       if (op[0] == 'i') {
                unsigned char j, start, end;
                unsigned int oui;
                unsigned char model;
@@ -456,34 +482,36 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                 * Look for any and all PHYs.  Valid addresses are 0..31.
                 */
                if (argc >= 3) {
-                       start = addr; end = addr + 1;
+                       start = addrlo; end = addrhi;
                } else {
-                       start = 0; end = 32;
+                       start = 0; end = 31;
                }
 
-               for (j = start; j < end; j++) {
-                       if (miiphy_info (j, &oui, &model, &rev) == 0) {
+               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, "
                                        "%3dbaseT, %s\n",
                                        j, oui, model, rev,
-                                       miiphy_speed (j),
-                                       miiphy_duplex (j) == FULL ? "FDX" : "HDX");
+                                       miiphy_speed (devname, j),
+                                       (miiphy_duplex (devname, j) == FULL)
+                                               ? "FDX" : "HDX");
+                       } else {
+                               puts ("Error reading info from the PHY\n");
                        }
                }
-       } else if (op == 'r') {
+       } else if (op[0] == 'r') {
                for (addr = addrlo; addr <= addrhi; addr++) {
                        for (reg = reglo; reg <= reghi; reg++) {
                                data = 0xffff;
-                               if (miiphy_read (addr, reg, &data) != 0) {
+                               if (miiphy_read (devname, addr, reg, &data) != 0) {
                                        printf(
                                        "Error reading from the PHY addr=%02x reg=%02x\n",
                                                addr, reg);
                                        rcode = 1;
-                               }
-                               else {
+                               } else {
                                        if ((addrlo != addrhi) || (reglo != reghi))
                                                printf("addr=%02x reg=%02x data=",
                                                        (uint)addr, (uint)reg);
@@ -493,17 +521,17 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        if ((addrlo != addrhi) && (reglo != reghi))
                                printf("\n");
                }
-       } else if (op == 'w') {
+       } else if (op[0] == 'w') {
                for (addr = addrlo; addr <= addrhi; addr++) {
                        for (reg = reglo; reg <= reghi; reg++) {
-                               if (miiphy_write (addr, reg, data) != 0) {
+                               if (miiphy_write (devname, addr, reg, data) != 0) {
                                        printf("Error writing to the PHY addr=%02x reg=%02x\n",
                                                addr, reg);
                                        rcode = 1;
                                }
                        }
                }
-       } else if (op == 'd') {
+       } else if (strncmp(op, "du", 2) == 0) {
                ushort regs[6];
                int ok = 1;
                if ((reglo > 5) || (reghi > 5)) {
@@ -513,8 +541,8 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        return 1;
                }
                for (addr = addrlo; addr <= addrhi; addr++) {
-                       for (reg = 0; reg < 6; reg++) {
-                               if (miiphy_read(addr, reg, &regs[reg]) != 0) {
+                       for (reg = reglo; reg < reghi + 1; reg++) {
+                               if (miiphy_read(devname, addr, reg, &regs[reg]) != 0) {
                                        ok = 0;
                                        printf(
                                        "Error reading from the PHY addr=%02x reg=%02x\n",
@@ -526,6 +554,11 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                                MII_dump_0_to_5(regs, reglo, reghi);
                        printf("\n");
                }
+       } else if (strncmp(op, "de", 2) == 0) {
+               if (argc == 2)
+                       miiphy_listdev ();
+               else
+                       miiphy_set_current_dev (argv[2]);
        } else {
                printf("Usage:\n%s\n", cmdtp->usage);
                return 1;
@@ -534,7 +567,8 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        /*
         * Save the parameters for repeats.
         */
-       last_op      = op;
+       last_op[0] = op[0];
+       last_op[1] = op[1];
        last_addr_lo = addrlo;
        last_addr_hi = addrhi;
        last_reg_lo  = reglo;
@@ -549,10 +583,12 @@ int do_mii (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        mii,    5,      1,      do_mii,
        "mii     - MII utility commands\n",
-       "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"
-       "mii dump  <addr> <reg>        - pretty-print <addr> <reg> (0-5 only)\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"
+       "mii dump   <addr> <reg>        - pretty-print <addr> <reg> (0-5 only)\n"
        "Addr and/or reg may be ranges, e.g. 2-7.\n"
 );
 
index 674eafca3f18d5081fbf101a583003b33d4f3cc2..67ee9e8a83de02eabaa3aa85ad80a5472b8756d9 100644 (file)
@@ -31,6 +31,7 @@
 
 int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
+       ulong start = get_timer(0);
        ulong delay;
 
        if (argc != 2) {
@@ -38,20 +39,18 @@ int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       delay = simple_strtoul(argv[1], NULL, 10);
+       delay = simple_strtoul(argv[1], NULL, 10) * CFG_HZ;
 
-       while (delay) {
-               int i;
-               for (i=0; i<1000; ++i) {
-                       if (ctrlc ()) {
-                               return (-1);
-                       }
-                       udelay (1000);
+       while (get_timer(start) < delay) {
+               if (ctrlc ()) {
+                       return (-1);
                }
-               --delay;
+               udelay (100);
        }
+
        return 0;
 }
+
 /* Implemented in $(CPU)/interrupts.c */
 #if (CONFIG_COMMANDS & CFG_CMD_IRQ)
 int do_irqinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
index 0c05255855248d411c77e37513b7fd9a1cbbd837..152873f1ae1069c2057c1cd6d05abcfa02c3e6c6 100644 (file)
@@ -21,7 +21,7 @@
 # define SHOW_BOOT_PROGRESS(arg)
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined CONFIG_NEW_NAND_CODE
+#if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CONFIG_NEW_NAND_CODE)
 
 #include <linux/mtd/nand.h>
 #include <linux/mtd/nand_ids.h>
@@ -200,12 +200,12 @@ int do_nand (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        /* read out-of-band data */
                        if (cmd & NANDRW_READ) {
                                ret = nand_read_oob(nand_dev_desc + curr_device,
-                                                   off, size, &total,
+                                                   off, size, (size_t *)&total,
                                                    (u_char*)addr);
                        }
                        else {
                                ret = nand_write_oob(nand_dev_desc + curr_device,
-                                                    off, size, &total,
+                                                    off, size, (size_t *)&total,
                                                     (u_char*)addr);
                        }
                        return ret;
@@ -241,7 +241,7 @@ int do_nand (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        curr_device, off, size);
 
                ret = nand_rw(nand_dev_desc + curr_device, cmd, off, size,
-                            &total, (u_char*)addr);
+                            (size_t *)&total, (u_char*)addr);
 
                printf (" %d bytes %s: %s\n", total,
                        (cmd & NANDRW_READ) ? "read" : "written",
@@ -401,7 +401,7 @@ U_BOOT_CMD(
  */
 int check_block (struct nand_chip *nand, unsigned long pos)
 {
-       int retlen;
+       size_t retlen;
        uint8_t oob_data;
        uint16_t oob_data16[6];
        int page0 = pos & (-nand->erasesize);
@@ -423,9 +423,9 @@ int check_block (struct nand_chip *nand, unsigned long pos)
                        return 1;
        } else {
                /* Note - bad block marker can be on first or second page */
-               if (nand_read_oob(nand, page0 + badpos, 1, &retlen, &oob_data)
+               if (nand_read_oob(nand, page0 + badpos, 1, &retlen, (unsigned char *)&oob_data)
                    || oob_data != 0xff
-                   || nand_read_oob (nand, page1 + badpos, 1, &retlen, &oob_data)
+                   || nand_read_oob (nand, page1 + badpos, 1, &retlen, (unsigned char *)&oob_data)
                    || oob_data != 0xff)
                        return 1;
        }
@@ -501,11 +501,11 @@ int nand_rw (struct nand_chip* nand, int cmd,
                if (cmd & NANDRW_READ) {
                        ret = nand_read_ecc(nand, start,
                                           min(len, eblk + erasesize - start),
-                                          &n, (u_char*)buf, eccbuf);
+                                          (size_t *)&n, (u_char*)buf, (u_char *)eccbuf);
                } else {
                        ret = nand_write_ecc(nand, start,
                                            min(len, eblk + erasesize - start),
-                                           &n, (u_char*)buf, eccbuf);
+                                           (size_t *)&n, (u_char*)buf, (u_char *)eccbuf);
                }
 
                if (ret)
@@ -1591,7 +1591,7 @@ int nand_erase(struct nand_chip* nand, size_t ofs, size_t len, int clean)
                                        l = NAND_JFFS2_OOB16_FSDALEN;
                                }
 
-                               ret = nand_write_oob(nand, ofs + p, l, &n,
+                               ret = nand_write_oob(nand, ofs + p, l, (size_t *)&n,
                                                     (u_char *)&clean_marker);
                                /* quit here if write failed */
                                if (ret)
index 578b0ca93608ba28b4ff9a70f4b7138ffd75878b..1babffec2e0a8fc322b2ac462635e41bef4eb57a 100644 (file)
@@ -124,7 +124,7 @@ int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
                        for (nxt=j; env_get_char(nxt) != '\0'; ++nxt)
                                ;
-                       k = envmatch(name, j);
+                       k = envmatch((uchar *)name, j);
                        if (k < 0) {
                                continue;
                        }
@@ -157,7 +157,7 @@ int _do_setenv (int flag, int argc, char *argv[])
        int   i, len, oldval;
        int   console = -1;
        uchar *env, *nxt = NULL;
-       uchar *name;
+       char *name;
        bd_t *bd = gd->bd;
 
        uchar *env_data = env_get_addr(0);
@@ -174,7 +174,7 @@ int _do_setenv (int flag, int argc, char *argv[])
        for (env=env_data; *env; env=nxt+1) {
                for (nxt=env; *nxt; ++nxt)
                        ;
-               if ((oldval = envmatch(name, env-env_data)) >= 0)
+               if ((oldval = envmatch((uchar *)name, env-env_data)) >= 0)
                        break;
        }
 
@@ -191,7 +191,7 @@ int _do_setenv (int flag, int argc, char *argv[])
                if ( (strcmp (name, "serial#") == 0) ||
                    ((strcmp (name, "ethaddr") == 0)
 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
-                    && (strcmp (env_get_addr(oldval),MK_STR(CONFIG_ETHADDR)) != 0)
+                    && (strcmp ((char *)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR)) != 0)
 #endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
                    ) ) {
                        printf ("Can't overwrite \"%s\"\n", name);
@@ -483,7 +483,7 @@ int do_askenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  * or NULL if not found
  */
 
-char *getenv (uchar *name)
+char *getenv (char *name)
 {
        int i, nxt;
 
@@ -497,15 +497,15 @@ char *getenv (uchar *name)
                                return (NULL);
                        }
                }
-               if ((val=envmatch(name, i)) < 0)
+               if ((val=envmatch((uchar *)name, i)) < 0)
                        continue;
-               return (env_get_addr(val));
+               return ((char *)env_get_addr(val));
        }
 
        return (NULL);
 }
 
-int getenv_r (uchar *name, uchar *buf, unsigned len)
+int getenv_r (char *name, char *buf, unsigned len)
 {
        int i, nxt;
 
@@ -517,7 +517,7 @@ int getenv_r (uchar *name, uchar *buf, unsigned len)
                                return (-1);
                        }
                }
-               if ((val=envmatch(name, i)) < 0)
+               if ((val=envmatch((uchar *)name, i)) < 0)
                        continue;
                /* found; copy out */
                n = 0;
index 31f2ba2f69682a5029063278edddf712c015dff2..62446d4efebb2fdff4a3fe819895673e4212b08f 100644 (file)
@@ -2681,7 +2681,7 @@ static void print_fixed (volatile uchar *p)
 #define        MAX_IDENT_FIELDS        4
 
 static uchar *known_cards[] = {
-       "ARGOSY PnPIDE D5",
+       (uchar *)"ARGOSY PnPIDE D5",
        NULL
 };
 
@@ -2722,12 +2722,12 @@ static int identify  (volatile uchar *p)
                else
                        break;
        }
-       puts (id_str);
+       puts ((char *)id_str);
        putc ('\n');
 
        for (card=known_cards; *card; ++card) {
                debug ("## Compare against \"%s\"\n", *card);
-               if (strcmp(*card, id_str) == 0) {       /* found! */
+               if (strcmp((char *)*card, (char *)id_str) == 0) {       /* found! */
                        debug ("## CARD FOUND ##\n");
                        return (1);
                }
index ec53790f8134be96852e25b1126abd5cb477e987..e8048611f93b2ff615d18cc41807a2cb6610677b 100644 (file)
@@ -247,8 +247,8 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                printf("error reading partinfo\n");
                return 1;
        }
-       if ((strncmp(info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
-           (strncmp(info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {
+       if ((strncmp((char *)(info.type), BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
+           (strncmp((char *)(info.type), BOOT_PART_COMP, sizeof(info.type)) != 0)) {
                printf ("\n** Invalid partition type \"%.32s\""
                        " (expect \"" BOOT_PART_TYPE "\")\n",
                        info.type);
@@ -277,7 +277,7 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)hdr, sizeof(image_header_t)) != checksum) {
+       if (crc32 (0, (uchar *)hdr, sizeof(image_header_t)) != checksum) {
                puts ("\n** Bad Header Checksum **\n");
                return 1;
        }
index 7b6faf79c5a3d3863b47623e9436192b9e08a048..a6fdf7fddbd0924e7d10c0a9171df35ec88b98c9 100644 (file)
@@ -119,7 +119,7 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                printf("Error with the SPI transaction.\n");
                rcode = 1;
        } else {
-               cp = din;
+               cp = (char *)din;
                for(j = 0; j < ((bitlen + 7) / 8); j++) {
                        printf("%02X", *cp++);
                }
index 0738f55303352783671b3061ed79f686a9eec279..fdfd042acaa7582596bfa2e0c6ead6f483ac2fe2 100644 (file)
@@ -362,15 +362,15 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
        if (get_partition_info (stor_dev, part, &info)) {
                /* try to boot raw .... */
-               strncpy(&info.type[0], BOOT_PART_TYPE, sizeof(BOOT_PART_TYPE));
-               strncpy(&info.name[0], "Raw", 4);
+               strncpy((char *)&info.type[0], BOOT_PART_TYPE, sizeof(BOOT_PART_TYPE));
+               strncpy((char *)&info.name[0], "Raw", 4);
                info.start=0;
                info.blksz=0x200;
                info.size=2880;
                printf("error reading partinfo...try to boot raw\n");
        }
-       if ((strncmp(info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
-           (strncmp(info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {
+       if ((strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&
+           (strncmp((char *)info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {
                printf ("\n** Invalid partition type \"%.32s\""
                        " (expect \"" BOOT_PART_TYPE "\")\n",
                        info.type);
@@ -398,7 +398,7 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        checksum = ntohl(hdr->ih_hcrc);
        hdr->ih_hcrc = 0;
 
-       if (crc32 (0, (char *)hdr, sizeof(image_header_t)) != checksum) {
+       if (crc32 (0, (uchar *)hdr, sizeof(image_header_t)) != checksum) {
                puts ("\n** Bad Header Checksum **\n");
                return 1;
        }
index 9be4cc1dbf58e1c2d688a312bf3367d566e819d9..3201135ea2eddbe7b46c427c7f1deef21d9d7d32 100644 (file)
@@ -283,7 +283,7 @@ int env_complete(char *var, int maxv, char *cmdv[], int bufsz, char *buf)
                for (nxt=i; env_get_char(nxt) != '\0'; ++nxt)
                        ;
 
-               lval = env_get_addr(i);
+               lval = (char *)env_get_addr(i);
                rval = strchr(lval, '=');
                if (rval != NULL) {
                        vallen = rval - lval;
index 8bfbbc943e138c968a6d79110690a605f18c2cbb..8834da032bdd82f5b78acf51d772e9972057a1a4 100644 (file)
@@ -24,7 +24,6 @@
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
-#include <malloc.h>
 #include <dataflash.h>
 
 env_t *env_ptr = NULL;
index 300af6fcfe1afc943dd7c02e06813f574f4f0a7f..50c623e37e32b89b4bbe9f4bab1ba95f3017b059 100644 (file)
@@ -31,7 +31,6 @@
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
-#include <malloc.h>
 
 env_t *env_ptr = NULL;
 
index d6257d07bd097db647a8e7b8d503c00e660a68e4..a2ea9c41406842d7acbc404aef25538f19d75df7 100644 (file)
@@ -202,7 +202,7 @@ int saveenv(void)
        debug (" %08lX ... %08lX ...",
                (ulong)&(flash_addr_new->data),
                sizeof(env_ptr->data)+(ulong)&(flash_addr_new->data));
-       if ((rc = flash_write(env_ptr->data,
+       if ((rc = flash_write((char *)env_ptr->data,
                        (ulong)&(flash_addr_new->data),
                        sizeof(env_ptr->data))) ||
            (rc = flash_write((char *)&(env_ptr->crc),
@@ -291,7 +291,7 @@ int saveenv(void)
        ulong   flash_offset;
        uchar   env_buffer[CFG_ENV_SECT_SIZE];
 #else
-       uchar *env_buffer = (char *)env_ptr;
+       uchar *env_buffer = (uchar *)env_ptr;
 #endif /* CFG_ENV_SECT_SIZE */
        int rcode = 0;
 
@@ -337,7 +337,7 @@ int saveenv(void)
                return 1;
 
        puts ("Writing to Flash... ");
-       rc = flash_write(env_buffer, flash_sect_addr, len);
+       rc = flash_write((char *)env_buffer, flash_sect_addr, len);
        if (rc != 0) {
                flash_perror (rc);
                rcode = 1;
index 516aed7326dc47da821deff310a8c54807b46bca..60aba1e7e667ee8137b2ce61611c2e038fd92c8e 100644 (file)
@@ -36,7 +36,6 @@
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
-#include <malloc.h>
 #include <linux/mtd/nand.h>
 
 #if ((CONFIG_COMMANDS&(CFG_CMD_ENV|CFG_CMD_NAND)) == (CFG_CMD_ENV|CFG_CMD_NAND))
index b274c0355747d6669257a424576bd2fc42f062de..ee4237c7e906889fe6833baab2d8425a04b6d79d 100644 (file)
@@ -31,7 +31,6 @@
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
-#include <malloc.h>
 
 env_t *env_ptr = NULL;
 
index 2c831d14d774b63a3609dfab8a9c466cfe2055f9..a406e427a24e871f9ace82901483b434afd58272 100644 (file)
@@ -47,7 +47,6 @@
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
-#include <malloc.h>
 
 #ifdef CFG_NVRAM_ACCESS_ROUTINE
 extern void *nvram_read(void *dest, const long src, size_t count);
index b3084137a418e2c8657a4cc80dda9ad74a72866c..a64bc985299500bcd2f995ba14740c9af939bfdd 100644 (file)
@@ -28,7 +28,7 @@
 
 #if !defined(CFG_NO_FLASH)
 
-extern flash_info_t  flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+extern flash_info_t  flash_info[]; /* info for FLASH chips */
 
 /*-----------------------------------------------------------------------
  * Functions
@@ -135,7 +135,7 @@ addr2info (ulong addr)
  *                     (only some targets require alignment)
  */
 int
-flash_write (uchar *src, ulong addr, ulong cnt)
+flash_write (char *src, ulong addr, ulong cnt)
 {
 #ifdef CONFIG_SPD823TS
        return (ERR_TIMOUT);    /* any other error codes are possible as well */
@@ -174,7 +174,7 @@ flash_write (uchar *src, ulong addr, ulong cnt)
                len = info->start[0] + info->size - addr;
                if (len > cnt)
                        len = cnt;
-               if ((i = write_buff(info, src, addr, len)) != 0) {
+               if ((i = write_buff(info, (uchar *)src, addr, len)) != 0) {
                        return (i);
                }
                cnt  -= len;
index c41c6f89a74eb281f5dfc06f82546cf50622cf6e..02d3e42b3bbf076db365aba7d9a59c104d52ff9b 100644 (file)
@@ -53,8 +53,8 @@ static int next_desc = FPGA_INVALID_DEVICE;
 static fpga_desc desc_table[CONFIG_MAX_FPGA_DEVICES];
 
 /* Local static functions */
-static const fpga_desc * const fpga_get_desc( int devnum );
-static const fpga_desc * const fpga_validate( int devnum, void *buf,
+static __attribute__((__const__)) fpga_desc * __attribute__((__const__)) fpga_get_desc( int devnum );
+static __attribute__((__const__)) fpga_desc * __attribute__((__const__)) fpga_validate( int devnum, void *buf,
                                         size_t bsize, char *fn );
 static int fpga_dev_info( int devnum );
 
@@ -82,7 +82,7 @@ static void fpga_no_sup( char *fn, char *msg )
 /* fpga_get_desc
  *     map a device number to a descriptor
  */
-static const fpga_desc * const fpga_get_desc( int devnum )
+static __attribute__((__const__)) fpga_desc * __attribute__((__const__)) fpga_get_desc( int devnum )
 {
        fpga_desc *desc = (fpga_desc * )NULL;
 
@@ -99,10 +99,10 @@ static const fpga_desc * const fpga_get_desc( int devnum )
 /* fpga_validate
  *     generic parameter checking code
  */
-static const fpga_desc * const fpga_validate( int devnum, void *buf,
+static __attribute__((__const__)) fpga_desc * __attribute__((__const__)) fpga_validate( int devnum, void *buf,
                                         size_t bsize, char *fn )
 {
-       const fpga_desc * const desc = fpga_get_desc( devnum );
+       fpga_desc * desc = fpga_get_desc( devnum );
 
        if ( !desc ) {
                printf( "%s: Invalid device number %d\n", fn, devnum );
@@ -147,7 +147,7 @@ static int fpga_dev_info( int devnum )
                        printf( "Altera Device\nDescriptor @ 0x%p\n", desc );
                        ret_val = altera_info( desc->devdesc );
 #else
-                       fpga_no_sup( __FUNCTION__, "Altera devices" );
+                       fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
 #endif
                        break;
                default:
@@ -185,7 +185,7 @@ int fpga_reloc( fpga_type devtype, void *desc, ulong reloc_off )
 #if CONFIG_FPGA & CFG_FPGA_ALTERA
                ret_val = altera_reloc( desc, reloc_off );
 #else
-               fpga_no_sup( __FUNCTION__, "Altera devices" );
+               fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
 #endif
                break;
        default:
@@ -216,7 +216,7 @@ void fpga_init( ulong reloc_off )
 /* fpga_count
  * Basic interface function to get the current number of devices available.
  */
-const int fpga_count( void )
+int fpga_count( void )
 {
        return next_desc;
 }
@@ -263,7 +263,7 @@ int fpga_add( fpga_type devtype, void *desc )
 int fpga_load( int devnum, void *buf, size_t bsize )
 {
        int ret_val = FPGA_FAIL;           /* assume failure */
-       const fpga_desc * const desc = fpga_validate( devnum, buf, bsize, __FUNCTION__ );
+       fpga_desc * desc = fpga_validate( devnum, buf, bsize, (char *)__FUNCTION__ );
 
        if ( desc ) {
                switch ( desc->devtype ) {
@@ -278,7 +278,7 @@ int fpga_load( int devnum, void *buf, size_t bsize )
 #if CONFIG_FPGA & CFG_FPGA_ALTERA
                        ret_val = altera_load( desc->devdesc, buf, bsize );
 #else
-                       fpga_no_sup( __FUNCTION__, "Altera devices" );
+                       fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
 #endif
                        break;
                default:
@@ -296,7 +296,7 @@ int fpga_load( int devnum, void *buf, size_t bsize )
 int fpga_dump( int devnum, void *buf, size_t bsize )
 {
        int ret_val = FPGA_FAIL;           /* assume failure */
-       const fpga_desc * const desc = fpga_validate( devnum, buf, bsize, __FUNCTION__ );
+       fpga_desc * desc = fpga_validate( devnum, buf, bsize, (char *)__FUNCTION__ );
 
        if ( desc ) {
                switch ( desc->devtype ) {
@@ -311,7 +311,7 @@ int fpga_dump( int devnum, void *buf, size_t bsize )
 #if CONFIG_FPGA & CFG_FPGA_ALTERA
                        ret_val = altera_dump( desc->devdesc, buf, bsize );
 #else
-                       fpga_no_sup( __FUNCTION__, "Altera devices" );
+                       fpga_no_sup( (char *)__FUNCTION__, "Altera devices" );
 #endif
                        break;
                default:
diff --git a/common/ft_build.c b/common/ft_build.c
new file mode 100644 (file)
index 0000000..65a274f
--- /dev/null
@@ -0,0 +1,695 @@
+/*
+ * OF flat tree builder
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <environment.h>
+
+#ifdef CONFIG_OF_FLAT_TREE
+
+#include <asm/errno.h>
+#include <stddef.h>
+
+#include <ft_build.h>
+
+/* align addr on a size boundary - adjust address up if needed -- Cort */
+#define _ALIGN(addr,size)       (((addr)+(size)-1)&(~((size)-1)))
+
+static void ft_put_word(struct ft_cxt *cxt, u32 v)
+{
+       if (cxt->overflow)      /* do nothing */
+               return;
+
+       /* check for overflow */
+       if (cxt->p + 4 > cxt->pstr) {
+               cxt->overflow = 1;
+               return;
+       }
+
+       *(u32 *) cxt->p = cpu_to_be32(v);
+       cxt->p += 4;
+}
+
+static inline void ft_put_bin(struct ft_cxt *cxt, const void *data, int sz)
+{
+       u8 *p;
+
+       if (cxt->overflow)      /* do nothing */
+               return;
+
+       /* next pointer pos */
+       p = (u8 *) _ALIGN((unsigned long)cxt->p + sz, 4);
+
+       /* check for overflow */
+       if (p > cxt->pstr) {
+               cxt->overflow = 1;
+               return;
+       }
+
+       memcpy(cxt->p, data, sz);
+       if ((sz & 3) != 0)
+               memset(cxt->p + sz, 0, 4 - (sz & 3));
+       cxt->p = p;
+}
+
+void ft_begin_node(struct ft_cxt *cxt, const char *name)
+{
+       ft_put_word(cxt, OF_DT_BEGIN_NODE);
+       ft_put_bin(cxt, name, strlen(name) + 1);
+}
+
+void ft_end_node(struct ft_cxt *cxt)
+{
+       ft_put_word(cxt, OF_DT_END_NODE);
+}
+
+void ft_nop(struct ft_cxt *cxt)
+{
+       ft_put_word(cxt, OF_DT_NOP);
+}
+
+static int lookup_string(struct ft_cxt *cxt, const char *name)
+{
+       u8 *p;
+
+       p = cxt->pstr;
+       while (p < cxt->pstr_begin) {
+               if (strcmp(p, name) == 0)
+                       return p - cxt->p_begin;
+               p += strlen(p) + 1;
+       }
+
+       return -1;
+}
+
+void ft_prop(struct ft_cxt *cxt, const char *name, const void *data, int sz)
+{
+       int len, off;
+
+       if (cxt->overflow)
+               return;
+
+       len = strlen(name) + 1;
+
+       off = lookup_string(cxt, name);
+       if (off == -1) {
+               /* check if we have space */
+               if (cxt->p + 12 + sz + len > cxt->pstr) {
+                       cxt->overflow = 1;
+                       return;
+               }
+
+               cxt->pstr -= len;
+               memcpy(cxt->pstr, name, len);
+               off = cxt->pstr - cxt->p_begin;
+       }
+
+       /* now put offset from beginning of *STRUCTURE* */
+       /* will be fixed up at the end */
+       ft_put_word(cxt, OF_DT_PROP);
+       ft_put_word(cxt, sz);
+       ft_put_word(cxt, off);
+       ft_put_bin(cxt, data, sz);
+}
+
+void ft_prop_str(struct ft_cxt *cxt, const char *name, const char *str)
+{
+       ft_prop(cxt, name, str, strlen(str) + 1);
+}
+
+void ft_prop_int(struct ft_cxt *cxt, const char *name, int val)
+{
+       u32 v = cpu_to_be32((u32) val);
+
+       ft_prop(cxt, name, &v, 4);
+}
+
+/* start construction of the flat OF tree */
+void ft_begin(struct ft_cxt *cxt, void *blob, int max_size)
+{
+       struct boot_param_header *bph = blob;
+       u32 off;
+
+       /* clear the cxt */
+       memset(cxt, 0, sizeof(*cxt));
+
+       cxt->bph = bph;
+       cxt->max_size = max_size;
+
+       /* zero everything in the header area */
+       memset(bph, 0, sizeof(*bph));
+
+       bph->magic = cpu_to_be32(OF_DT_HEADER);
+       bph->version = cpu_to_be32(0x10);
+       bph->last_comp_version = cpu_to_be32(0x10);
+
+       /* start pointers */
+       cxt->pres_begin = (u8 *) _ALIGN((unsigned long)(bph + 1), 8);
+       cxt->pres = cxt->pres_begin;
+
+       off = (unsigned long)cxt->pres_begin - (unsigned long)bph;
+       bph->off_mem_rsvmap = cpu_to_be32(off);
+
+       ((u64 *) cxt->pres)[0] = 0;     /* phys = 0, size = 0, terminate */
+       ((u64 *) cxt->pres)[1] = 0;
+
+       cxt->p_anchor = cxt->pres + 16; /* over the terminator */
+}
+
+/* add a reserver physical area to the rsvmap */
+void ft_add_rsvmap(struct ft_cxt *cxt, u64 physaddr, u64 size)
+{
+       ((u64 *) cxt->pres)[0] = cpu_to_be64(physaddr); /* phys = 0, size = 0, terminate */
+       ((u64 *) cxt->pres)[1] = cpu_to_be64(size);
+
+       cxt->pres += 18;        /* advance */
+
+       ((u64 *) cxt->pres)[0] = 0;     /* phys = 0, size = 0, terminate */
+       ((u64 *) cxt->pres)[1] = 0;
+
+       /* keep track of size */
+       cxt->res_size = cxt->pres + 16 - cxt->pres_begin;
+
+       cxt->p_anchor = cxt->pres + 16; /* over the terminator */
+}
+
+void ft_begin_tree(struct ft_cxt *cxt)
+{
+       cxt->p_begin = cxt->p_anchor;
+       cxt->pstr_begin = (char *)cxt->bph + cxt->max_size;     /* point at the end */
+
+       cxt->p = cxt->p_begin;
+       cxt->pstr = cxt->pstr_begin;
+}
+
+int ft_end_tree(struct ft_cxt *cxt)
+{
+       struct boot_param_header *bph = cxt->bph;
+       int off, sz, sz1;
+       u32 tag, v;
+       u8 *p;
+
+       ft_put_word(cxt, OF_DT_END);
+
+       if (cxt->overflow)
+               return -ENOMEM;
+
+       /* size of the areas */
+       cxt->struct_size = cxt->p - cxt->p_begin;
+       cxt->strings_size = cxt->pstr_begin - cxt->pstr;
+
+       /* the offset we must move */
+       off = (cxt->pstr_begin - cxt->p_begin) - cxt->strings_size;
+
+       /* the new strings start */
+       cxt->pstr_begin = cxt->p_begin + cxt->struct_size;
+
+       /* move the whole string area */
+       memmove(cxt->pstr_begin, cxt->pstr, cxt->strings_size);
+
+       /* now perform the fixup of the strings */
+       p = cxt->p_begin;
+       while ((tag = be32_to_cpu(*(u32 *) p)) != OF_DT_END) {
+               p += 4;
+
+               if (tag == OF_DT_BEGIN_NODE) {
+                       p = (u8 *) _ALIGN((unsigned long)p + strlen(p) + 1, 4);
+                       continue;
+               }
+
+               if (tag == OF_DT_END_NODE || tag == OF_DT_NOP)
+                       continue;
+
+               if (tag != OF_DT_PROP)
+                       return -EINVAL;
+
+               sz = be32_to_cpu(*(u32 *) p);
+               p += 4;
+
+               v = be32_to_cpu(*(u32 *) p);
+               v -= off;
+               *(u32 *) p = cpu_to_be32(v);    /* move down */
+               p += 4;
+
+               p = (u8 *) _ALIGN((unsigned long)p + sz, 4);
+       }
+
+       /* fix sizes */
+       p = (char *)cxt->bph;
+       sz = (cxt->pstr_begin + cxt->strings_size) - p;
+       sz1 = _ALIGN(sz, 16);   /* align at 16 bytes */
+       if (sz != sz1)
+               memset(p + sz, 0, sz1 - sz);
+       bph->totalsize = cpu_to_be32(sz1);
+       bph->off_dt_struct = cpu_to_be32(cxt->p_begin - p);
+       bph->off_dt_strings = cpu_to_be32(cxt->pstr_begin - p);
+
+       /* the new strings start */
+       cxt->pstr_begin = cxt->p_begin + cxt->struct_size;
+       cxt->pstr = cxt->pstr_begin + cxt->strings_size;
+
+       return 0;
+}
+
+/**********************************************************************/
+
+static inline int isprint(int c)
+{
+       return c >= 0x20 && c <= 0x7e;
+}
+
+static int is_printable_string(const void *data, int len)
+{
+       const char *s = data;
+       const char *ss;
+
+       /* zero length is not */
+       if (len == 0)
+               return 0;
+
+       /* must terminate with zero */
+       if (s[len - 1] != '\0')
+               return 0;
+
+       ss = s;
+       while (*s && isprint(*s))
+               s++;
+
+       /* not zero, or not done yet */
+       if (*s != '\0' || (s + 1 - ss) < len)
+               return 0;
+
+       return 1;
+}
+
+static void print_data(const void *data, int len)
+{
+       int i;
+       const u8 *s;
+
+       /* no data, don't print */
+       if (len == 0)
+               return;
+
+       if (is_printable_string(data, len)) {
+               printf(" = \"%s\"", (char *)data);
+               return;
+       }
+
+       switch (len) {
+       case 1:         /* byte */
+               printf(" = <0x%02x>", (*(u8 *) data) & 0xff);
+               break;
+       case 2:         /* half-word */
+               printf(" = <0x%04x>", be16_to_cpu(*(u16 *) data) & 0xffff);
+               break;
+       case 4:         /* word */
+               printf(" = <0x%08x>", be32_to_cpu(*(u32 *) data) & 0xffffffffU);
+               break;
+       case 8:         /* double-word */
+               printf(" = <0x%16llx>", be64_to_cpu(*(uint64_t *) data));
+               break;
+       default:                /* anything else... hexdump */
+               printf(" = [");
+               for (i = 0, s = data; i < len; i++)
+                       printf("%02x%s", s[i], i < len - 1 ? " " : "");
+               printf("]");
+
+               break;
+       }
+}
+
+void ft_dump_blob(const void *bphp)
+{
+       const struct boot_param_header *bph = bphp;
+       const uint64_t *p_rsvmap = (const uint64_t *)
+               ((const char *)bph + be32_to_cpu(bph->off_mem_rsvmap));
+       const u32 *p_struct = (const u32 *)
+               ((const char *)bph + be32_to_cpu(bph->off_dt_struct));
+       const u32 *p_strings = (const u32 *)
+               ((const char *)bph + be32_to_cpu(bph->off_dt_strings));
+       u32 tag;
+       const u32 *p;
+       const char *s, *t;
+       int depth, sz, shift;
+       int i;
+       uint64_t addr, size;
+
+       if (be32_to_cpu(bph->magic) != OF_DT_HEADER) {
+               /* not valid tree */
+               return;
+       }
+
+       depth = 0;
+       shift = 4;
+
+       for (i = 0;; i++) {
+               addr = be64_to_cpu(p_rsvmap[i * 2]);
+               size = be64_to_cpu(p_rsvmap[i * 2 + 1]);
+               if (addr == 0 && size == 0)
+                       break;
+
+               printf("/memreserve/ 0x%llx 0x%llx;\n", addr, size);
+       }
+
+       p = p_struct;
+       while ((tag = be32_to_cpu(*p++)) != OF_DT_END) {
+
+               /* printf("tag: 0x%08x (%d)\n", tag, p - p_struct); */
+
+               if (tag == OF_DT_BEGIN_NODE) {
+                       s = (const char *)p;
+                       p = (u32 *) _ALIGN((unsigned long)p + strlen(s) + 1, 4);
+
+                       printf("%*s%s {\n", depth * shift, "", s);
+
+                       depth++;
+                       continue;
+               }
+
+               if (tag == OF_DT_END_NODE) {
+                       depth--;
+
+                       printf("%*s};\n", depth * shift, "");
+                       continue;
+               }
+
+               if (tag == OF_DT_NOP) {
+                       printf("%*s[NOP]\n", depth * shift, "");
+                       continue;
+               }
+
+               if (tag != OF_DT_PROP) {
+                       fprintf(stderr, "%*s ** Unknown tag 0x%08x\n",
+                               depth * shift, "", tag);
+                       break;
+               }
+               sz = be32_to_cpu(*p++);
+               s = (const char *)p_strings + be32_to_cpu(*p++);
+               t = (const char *)p;
+               p = (const u32 *)_ALIGN((unsigned long)p + sz, 4);
+               printf("%*s%s", depth * shift, "", s);
+               print_data(t, sz);
+               printf(";\n");
+       }
+}
+
+void ft_backtrack_node(struct ft_cxt *cxt)
+{
+       if (be32_to_cpu(*(u32 *) (cxt->p - 4)) != OF_DT_END_NODE)
+               return;         /* XXX only for node */
+
+       cxt->p -= 4;
+}
+
+/* note that the root node of the blob is "peeled" off */
+void ft_merge_blob(struct ft_cxt *cxt, void *blob)
+{
+       struct boot_param_header *bph = (struct boot_param_header *)blob;
+       u32 *p_struct = (u32 *) ((char *)bph + be32_to_cpu(bph->off_dt_struct));
+       u32 *p_strings =
+           (u32 *) ((char *)bph + be32_to_cpu(bph->off_dt_strings));
+       u32 tag, *p;
+       char *s, *t;
+       int depth, sz;
+
+       if (be32_to_cpu(*(u32 *) (cxt->p - 4)) != OF_DT_END_NODE)
+               return;         /* XXX only for node */
+
+       cxt->p -= 4;
+
+       depth = 0;
+       p = p_struct;
+       while ((tag = be32_to_cpu(*p++)) != OF_DT_END) {
+
+               /* printf("tag: 0x%08x (%d) - %d\n", tag, p - p_struct, depth); */
+
+               if (tag == OF_DT_BEGIN_NODE) {
+                       s = (char *)p;
+                       p = (u32 *) _ALIGN((unsigned long)p + strlen(s) + 1, 4);
+
+                       if (depth++ > 0)
+                               ft_begin_node(cxt, s);
+
+                       continue;
+               }
+
+               if (tag == OF_DT_END_NODE) {
+                       ft_end_node(cxt);
+                       if (--depth == 0)
+                               break;
+                       continue;
+               }
+
+               if (tag == OF_DT_NOP)
+                       continue;
+
+               if (tag != OF_DT_PROP)
+                       break;
+
+               sz = be32_to_cpu(*p++);
+               s = (char *)p_strings + be32_to_cpu(*p++);
+               t = (char *)p;
+               p = (u32 *) _ALIGN((unsigned long)p + sz, 4);
+
+               ft_prop(cxt, s, t, sz);
+       }
+}
+
+void *ft_get_prop(void *bphp, const char *propname, int *szp)
+{
+       struct boot_param_header *bph = bphp;
+       uint32_t *p_struct =
+           (uint32_t *) ((char *)bph + be32_to_cpu(bph->off_dt_struct));
+       uint32_t *p_strings =
+           (uint32_t *) ((char *)bph + be32_to_cpu(bph->off_dt_strings));
+       uint32_t version = be32_to_cpu(bph->version);
+       uint32_t tag;
+       uint32_t *p;
+       char *s, *t;
+       char *ss;
+       int sz;
+       static char path[256], prop[256];
+
+       path[0] = '\0';
+
+       p = p_struct;
+       while ((tag = be32_to_cpu(*p++)) != OF_DT_END) {
+
+               if (tag == OF_DT_BEGIN_NODE) {
+                       s = (char *)p;
+                       p = (uint32_t *) _ALIGN((unsigned long)p + strlen(s) +
+                                               1, 4);
+                       strcat(path, s);
+                       strcat(path, "/");
+                       continue;
+               }
+
+               if (tag == OF_DT_END_NODE) {
+                       path[strlen(path) - 1] = '\0';
+                       ss = strrchr(path, '/');
+                       if (ss != NULL)
+                               ss[1] = '\0';
+                       continue;
+               }
+
+               if (tag == OF_DT_NOP)
+                       continue;
+
+               if (tag != OF_DT_PROP)
+                       break;
+
+               sz = be32_to_cpu(*p++);
+               s = (char *)p_strings + be32_to_cpu(*p++);
+               if (version < 0x10 && sz >= 8)
+                       p = (uint32_t *) _ALIGN((unsigned long)p, 8);
+               t = (char *)p;
+               p = (uint32_t *) _ALIGN((unsigned long)p + sz, 4);
+
+               strcpy(prop, path);
+               strcat(prop, s);
+
+               if (strcmp(prop, propname) == 0) {
+                       *szp = sz;
+                       return t;
+               }
+       }
+
+       return NULL;
+}
+
+/********************************************************************/
+
+extern unsigned char oftree_dtb[];
+extern unsigned int oftree_dtb_len;
+
+/* Function that returns a character from the environment */
+extern uchar(*env_get_char) (int);
+
+#define BDM(x) {       .name = #x, .offset = offsetof(bd_t, bi_ ##x ) }
+
+static const struct {
+       const char *name;
+       int offset;
+} bd_map[] = {
+       BDM(memstart),
+       BDM(memsize),
+       BDM(flashstart),
+       BDM(flashsize),
+       BDM(flashoffset),
+       BDM(sramstart),
+       BDM(sramsize),
+#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_8260) \
+       || defined(CONFIG_E500)
+       BDM(immr_base),
+#endif
+#if defined(CONFIG_MPC5xxx)
+       BDM(mbar_base),
+#endif
+#if defined(CONFIG_MPC83XX)
+       BDM(immrbar),
+#endif
+#if defined(CONFIG_MPC8220)
+       BDM(mbar_base),
+       BDM(inpfreq),
+       BDM(pcifreq),
+       BDM(pevfreq),
+       BDM(flbfreq),
+       BDM(vcofreq),
+#endif
+       BDM(bootflags),
+       BDM(ip_addr),
+       BDM(intfreq),
+       BDM(busfreq),
+#ifdef CONFIG_CPM2
+       BDM(cpmfreq),
+       BDM(brgfreq),
+       BDM(sccfreq),
+       BDM(vco),
+#endif
+#if defined(CONFIG_MPC5xxx)
+       BDM(ipbfreq),
+       BDM(pcifreq),
+#endif
+       BDM(baudrate),
+};
+
+void ft_setup(void *blob, int size, bd_t * bd)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       u8 *end;
+       u32 *p;
+       int len;
+       struct ft_cxt cxt;
+       int i, k, nxt;
+       static char tmpenv[256];
+       char *s, *lval, *rval;
+       ulong clock;
+       uint32_t v;
+
+       /* disable OF tree; booting old kernel */
+       if (getenv("disable_of") != NULL) {
+               memcpy(blob, bd, sizeof(*bd));
+               return;
+       }
+
+       ft_begin(&cxt, blob, size);
+
+       /* fs_add_rsvmap not used */
+
+       ft_begin_tree(&cxt);
+
+       ft_begin_node(&cxt, "");
+
+       ft_end_node(&cxt);
+
+       /* copy RO tree */
+       ft_merge_blob(&cxt, oftree_dtb);
+
+       /* back into root */
+       ft_backtrack_node(&cxt);
+
+       ft_begin_node(&cxt, "u-boot-env");
+
+       for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) {
+               for (nxt = i; env_get_char(nxt) != '\0'; ++nxt) ;
+               s = tmpenv;
+               for (k = i; k < nxt && s < &tmpenv[sizeof(tmpenv) - 1]; ++k)
+                       *s++ = env_get_char(k);
+               *s++ = '\0';
+               lval = tmpenv;
+               s = strchr(tmpenv, '=');
+               if (s != NULL) {
+                       *s++ = '\0';
+                       rval = s;
+               } else
+                       continue;
+               ft_prop_str(&cxt, lval, rval);
+       }
+
+       ft_end_node(&cxt);
+
+       ft_begin_node(&cxt, "chosen");
+
+       ft_prop_str(&cxt, "name", "chosen");
+       ft_prop_str(&cxt, "bootargs", getenv("bootargs"));
+       ft_prop_int(&cxt, "linux,platform", 0x600);     /* what is this? */
+
+       ft_end_node(&cxt);
+
+       ft_end_node(&cxt);      /* end root */
+
+       ft_end_tree(&cxt);
+
+       /*
+          printf("merged OF-tree\n");
+          ft_dump_blob(blob);
+        */
+
+       /* paste the bd_t at the end of the flat tree */
+       end = (char *)blob +
+           be32_to_cpu(((struct boot_param_header *)blob)->totalsize);
+       memcpy(end, bd, sizeof(*bd));
+
+#ifdef CONFIG_PPC
+
+       for (i = 0; i < sizeof(bd_map)/sizeof(bd_map[0]); i++) {
+               sprintf(tmpenv, "/bd_t/%s", bd_map[i].name);
+               v = *(uint32_t *)((char *)bd + bd_map[i].offset);
+
+               p = ft_get_prop(blob, tmpenv, &len);
+               if (p != NULL)
+                       *p = cpu_to_be32(v);
+       }
+
+       p = ft_get_prop(blob, "/bd_t/enetaddr", &len);
+       if (p != NULL)
+               memcpy(p, bd->bi_enetaddr, 6);
+
+       p = ft_get_prop(blob, "/bd_t/ethspeed", &len);
+       if (p != NULL)
+               *p = cpu_to_be32((uint32_t) bd->bi_ethspeed);
+
+       clock = bd->bi_intfreq;
+       p = ft_get_prop(blob, "/cpus/" OF_CPU "/clock-frequency", &len);
+       if (p != NULL)
+               *p = cpu_to_be32(clock);
+
+#ifdef OF_TBCLK
+       clock = OF_TBCLK;
+       p = ft_get_prop(blob, "/cpus/" OF_CPU "/timebase-frequency", &len);
+       if (p != NULL)
+               *p = cpu_to_be32(OF_TBCLK);
+#endif
+
+#endif                         /* __powerpc__ */
+
+       /*
+          printf("final OF-tree\n");
+          ft_dump_blob(blob);
+        */
+
+}
+
+#endif
index eb7f7f15606ab652d43e2012db487fae0292962c..bb5041a08d872d93b04077fab9edadbd02fca12c 100644 (file)
@@ -296,7 +296,7 @@ extern char **environ; /* This is in <unistd.h>, but protected with __USE_GNU */
 #endif
 
 /* "globals" within this file */
-static char *ifs;
+static uchar *ifs;
 static char map[256];
 #ifndef __U_BOOT__
 static int fake_mode;
@@ -2389,6 +2389,7 @@ struct pipe *new_pipe(void) {
        pi->progs = NULL;
        pi->next = NULL;
        pi->followup = 0;  /* invalid */
+       pi->r_mode = RES_NONE;
        return pi;
 }
 
@@ -3133,8 +3134,8 @@ void mapset(const unsigned char *set, int code)
 void update_ifs_map(void)
 {
        /* char *ifs and char map[256] are both globals. */
-       ifs = getenv("IFS");
-       if (ifs == NULL) ifs=" \t\n";
+       ifs = (uchar *)getenv("IFS");
+       if (ifs == NULL) ifs=(uchar *)" \t\n";
        /* Precompute a list of 'flow through' behavior so it can be treated
         * quickly up front.  Computation is necessary because of IFS.
         * Special case handling of IFS == " \t\n" is not implemented.
@@ -3143,11 +3144,11 @@ void update_ifs_map(void)
         */
        memset(map,0,sizeof(map)); /* most characters flow through always */
 #ifndef __U_BOOT__
-       mapset("\\$'\"`", 3);      /* never flow through */
-       mapset("<>;&|(){}#", 1);   /* flow through if quoted */
+       mapset((uchar *)"\\$'\"`", 3);      /* never flow through */
+       mapset((uchar *)"<>;&|(){}#", 1);   /* flow through if quoted */
 #else
-       mapset("\\$'\"", 3);       /* never flow through */
-       mapset(";&|#", 1);         /* flow through if quoted */
+       mapset((uchar *)"\\$'\"", 3);       /* never flow through */
+       mapset((uchar *)";&|#", 1);         /* flow through if quoted */
 #endif
        mapset(ifs, 2);            /* also flow through if quoted */
 }
@@ -3167,7 +3168,7 @@ int parse_stream_outer(struct in_str *inp, int flag)
                ctx.type = flag;
                initialize_context(&ctx);
                update_ifs_map();
-               if (!(flag & FLAG_PARSE_SEMICOLON) || (flag & FLAG_REPARSING)) mapset(";$&|", 0);
+               if (!(flag & FLAG_PARSE_SEMICOLON) || (flag & FLAG_REPARSING)) mapset((uchar *)";$&|", 0);
                inp->promptmode=1;
                rcode = parse_stream(&temp, &ctx, inp, '\n');
 #ifdef __U_BOOT__
index 06adb3ea5142542eca0dd52051cd66cd618c6406..6de6ec99a22273c4ff8fd7ac515fcf42cff6ac85 100644 (file)
@@ -144,7 +144,7 @@ mem2hex(char *mem, char *buf, int count)
        }
        *buf = 0;
        longjmp_on_fault = 0;
-       return buf;
+       return (unsigned char *)buf;
 }
 
 /* convert the hex array pointed to by buf into binary to be placed in mem
@@ -353,7 +353,7 @@ handle_exception (struct pt_regs *regs)
                *ptr++ = hexchars[rp->num >> 4];
                *ptr++ = hexchars[rp->num & 0xf];
                *ptr++ = ':';
-               ptr = mem2hex((char *)&rp->val, ptr, 4);
+               ptr = (char *)mem2hex((char *)&rp->val, ptr, 4);
                *ptr++ = ';';
        }
 
@@ -364,7 +364,7 @@ handle_exception (struct pt_regs *regs)
                printf("kgdb: remcomOutBuffer: %s\n", remcomOutBuffer);
 #endif
 
-       putpacket(remcomOutBuffer);
+       putpacket((unsigned char *)&remcomOutBuffer);
 
        while (1) {
                volatile int errnum;
@@ -508,7 +508,7 @@ handle_exception (struct pt_regs *regs)
 #endif
 
                /* reply to the request */
-               putpacket(remcomOutBuffer);
+               putpacket((unsigned char *)&remcomOutBuffer);
 
        } /* while(1) */
 }
@@ -548,7 +548,7 @@ kgdb_output_string (const char* s, unsigned int count)
 
        buffer[0] = 'O';
        mem2hex ((char *)s, &buffer[1], count);
-       putpacket(buffer);
+       putpacket((unsigned char *)&buffer);
 
        return 1;
 }
index a85599dd76814f61ef09c63f381eb9099d07539e..e64972fd813a6e10ade52623140df65fa234249c 100644 (file)
@@ -279,9 +279,9 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 static inline void lcd_puts_xy (ushort x, ushort y, uchar *s)
 {
 #if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
-       lcd_drawchars (x, y+BMP_LOGO_HEIGHT, s, strlen (s));
+       lcd_drawchars (x, y+BMP_LOGO_HEIGHT, s, strlen ((char *)s));
 #else
-       lcd_drawchars (x, y, s, strlen (s));
+       lcd_drawchars (x, y, s, strlen ((char *)s));
 #endif
 }
 
@@ -526,7 +526,7 @@ void bitmap_plot (int x, int y)
                sizeof(bmp_logo_palette)/(sizeof(ushort)));
 
        bmap = &bmp_logo_bitmap[0];
-       fb   = (char *)(lcd_base + y * lcd_line_length + x);
+       fb   = (uchar *)(lcd_base + y * lcd_line_length + x);
 
        if (NBITS(panel_info.vl_bpix) < 12) {
                /* Leave room for default color map */
@@ -638,9 +638,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
                        bmp_color_table_entry_t cte = bmp->color_table[i];
                        ushort colreg =
                                ( ((cte.red)   << 8) & 0xf800) |
-                               ( ((cte.green) << 4) & 0x07e0) |
-                               ( (cte.blue) & 0x001f) ;
-
+                               ( ((cte.green) << 3) & 0x07e0) |
+                               ( ((cte.blue)  >> 3) & 0x001f) ;
 #ifdef CFG_INVERT_COLORS
                        *cmap = 0xffff - colreg;
 #else
@@ -711,15 +710,15 @@ static void *lcd_logo (void)
 #ifdef CONFIG_MPC823
 # ifdef CONFIG_LCD_INFO
        sprintf (info, "%s (%s - %s) ", U_BOOT_VERSION, __DATE__, __TIME__);
-       lcd_drawchars (LCD_INFO_X, LCD_INFO_Y, info, strlen(info));
+       lcd_drawchars (LCD_INFO_X, LCD_INFO_Y, (uchar *)info, strlen(info));
 
        sprintf (info, "(C) 2004 DENX Software Engineering");
        lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT,
-                                       info, strlen(info));
+                                       (uchar *)info, strlen(info));
 
        sprintf (info, "    Wolfgang DENK, wd@denx.de");
        lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 2,
-                                       info, strlen(info));
+                                       (uchar *)info, strlen(info));
 #  ifdef CONFIG_LCD_INFO_BELOW_LOGO
        sprintf (info, "MPC823 CPU at %s MHz",
                strmhz(temp, gd->cpu_clk));
@@ -738,7 +737,7 @@ static void *lcd_logo (void)
                gd->ram_size >> 20,
                gd->bd->bi_flashsize >> 20 );
        lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 4,
-                                       info, strlen(info));
+                                       (uchar *)info, strlen(info));
 
 #  endif /* CONFIG_LCD_INFO_BELOW_LOGO */
 # endif /* CONFIG_LCD_INFO */
index 9f649dbcd31222b8850317270bd74e300828a3e4..f042f3a636fd6171ce2f96c6f8a15b49fb33169b 100644 (file)
@@ -26,7 +26,9 @@
 #include <common.h>
 #include <watchdog.h>
 #include <command.h>
-#include <malloc.h>
+#ifdef CONFIG_MODEM_SUPPORT
+#include <malloc.h>            /* for free() prototype */
+#endif
 
 #ifdef CFG_HUSH_PARSER
 #include <hush.h>
@@ -345,7 +347,7 @@ void main_loop (void)
 #ifdef CONFIG_MODEM_SUPPORT
        debug ("DEBUG: main_loop:   do_mdm_init=%d\n", do_mdm_init);
        if (do_mdm_init) {
-               uchar *str = strdup(getenv("mdm_cmd"));
+               char *str = strdup(getenv("mdm_cmd"));
                setenv ("preboot", str);  /* set or delete definition */
                if (str != NULL)
                        free (str);
index b6af88f7d6866ecf417ebd5c24161f0bfeee8e96..adb697ca6bd0fa86e57ea87ad715e15f91922ce7 100644 (file)
@@ -121,7 +121,8 @@ static void miiphy_pre (char read, unsigned char addr, unsigned char reg)
  * Returns:
  *   0 on success
  */
-int miiphy_read (unsigned char addr, unsigned char reg, unsigned short *value)
+int bb_miiphy_read (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value)
 {
        short rdreg;            /* register working value */
        int j;                  /* counter */
@@ -188,7 +189,8 @@ int miiphy_read (unsigned char addr, unsigned char reg, unsigned short *value)
  * Returns:
  *   0 on success
  */
-int miiphy_write (unsigned char addr, unsigned char reg, unsigned short value)
+int bb_miiphy_write (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
 {
        int j;                  /* counter */
 #ifndef CONFIG_EP8248
index 13b9c65dc8771668add77b8d88c7317ae4ad1443..e411e573c7b2bf1248b5759518e6bf40f0942379 100644 (file)
 #include <miiphy.h>
 
 #if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+#include <asm/types.h>
+#include <linux/list.h>
+#include <malloc.h>
+#include <net.h>
+
+/* local debug macro */
+#define MII_DEBUG
+#undef MII_DEBUG
+
+#undef debug
+#ifdef MII_DEBUG
+#define debug(fmt,args...)     printf (fmt ,##args)
+#else
+#define debug(fmt,args...)
+#endif /* MII_DEBUG */
+
+struct mii_dev {
+       struct list_head link;
+       char *name;
+       int (* read)(char *devname, unsigned char addr,
+                       unsigned char reg, unsigned short *value);
+       int (* write)(char *devname, unsigned char addr,
+                       unsigned char reg, unsigned short value);
+};
+
+static struct list_head mii_devs;
+static struct mii_dev *current_mii;
+
+/*****************************************************************************
+ *
+ * Initialize global data. Need to be called before any other miiphy routine.
+ */
+void miiphy_init()
+{
+               INIT_LIST_HEAD(&mii_devs);
+               current_mii = NULL;
+}
+
+/*****************************************************************************
+ *
+ * Register read and write MII access routines for the device <name>.
+ */
+void miiphy_register(char *name,
+               int (* read)(char *devname, unsigned char addr,
+                       unsigned char reg, unsigned short *value),
+               int (* write)(char *devname, unsigned char addr,
+                       unsigned char reg, unsigned short value))
+{
+       struct list_head *entry;
+       struct mii_dev *new_dev;
+       struct mii_dev *miidev;
+       unsigned int name_len;
+
+       /* check if we have unique name */
+       list_for_each(entry, &mii_devs) {
+               miidev = list_entry(entry, struct mii_dev, link);
+               if (strcmp(miidev->name, name) == 0) {
+                       printf("miiphy_register: non unique device name '%s'\n",
+                                       name);
+                       return;
+               }
+       }
+
+       /* allocate memory */
+       name_len = strlen(name);
+       new_dev = (struct mii_dev *)malloc(sizeof(struct mii_dev) + name_len + 1);
+
+       if(new_dev == NULL) {
+               printf("miiphy_register: cannot allocate memory for '%s'\n",
+                               name);
+               return;
+       }
+       memset(new_dev, 0, sizeof(struct mii_dev) + name_len);
+
+       /* initalize mii_dev struct fields */
+       INIT_LIST_HEAD(&new_dev->link);
+       new_dev->read = read;
+       new_dev->write = write;
+       new_dev->name = (char *)(new_dev + 1);
+       strncpy(new_dev->name, name, name_len);
+       new_dev->name[name_len] = '\0';
+
+       debug("miiphy_register: added '%s', read=0x%08lx, write=0x%08lx\n",
+                       new_dev->name, new_dev->read, new_dev->write);
+
+       /* add it to the list */
+       list_add_tail(&new_dev->link, &mii_devs);
+
+       if (!current_mii)
+               current_mii = new_dev;
+}
+
+int miiphy_set_current_dev(char *devname)
+{
+       struct list_head *entry;
+       struct mii_dev *dev;
+
+       list_for_each(entry, &mii_devs) {
+               dev = list_entry(entry, struct mii_dev, link);
+
+               if (strcmp(devname, dev->name) == 0) {
+                       current_mii = dev;
+                       return 0;
+               }
+       }
+
+       printf("No such device: %s\n", devname);
+       return 1;
+}
+
+char *miiphy_get_current_dev()
+{
+       if (current_mii)
+               return current_mii->name;
+
+       return NULL;
+}
+
+/*****************************************************************************
+ *
+ * Read to variable <value> from the PHY attached to device <devname>,
+ * use PHY address <addr> and register <reg>.
+ *
+ * Returns:
+ *   0 on success
+ */
+int miiphy_read(char *devname, unsigned char addr, unsigned char reg,
+               unsigned short *value)
+{
+       struct list_head *entry;
+       struct mii_dev *dev;
+       int found_dev = 0;
+       int read_ret = 0;
+
+       if (!devname) {
+               printf("NULL device name!\n");
+               return 1;
+       }
+
+       list_for_each(entry, &mii_devs) {
+               dev = list_entry(entry, struct mii_dev, link);
+
+               if (strcmp(devname, dev->name) == 0) {
+                       found_dev = 1;
+                       read_ret = dev->read(devname, addr, reg, value);
+                       break;
+               }
+       }
+
+       if (found_dev == 0)
+               printf("No such device: %s\n", devname);
+
+       return ((found_dev) ? read_ret : 1);
+}
+
+/*****************************************************************************
+ *
+ * Write <value> to the PHY attached to device <devname>,
+ * use PHY address <addr> and register <reg>.
+ *
+ * Returns:
+ *   0 on success
+ */
+int miiphy_write(char *devname, unsigned char addr, unsigned char reg,
+               unsigned short value)
+{
+       struct list_head *entry;
+       struct mii_dev *dev;
+       int found_dev = 0;
+       int write_ret = 0;
+
+       if (!devname) {
+               printf("NULL device name!\n");
+               return 1;
+       }
+
+       list_for_each(entry, &mii_devs) {
+               dev = list_entry(entry, struct mii_dev, link);
+
+               if (strcmp(devname, dev->name) == 0) {
+                       found_dev = 1;
+                       write_ret = dev->write(devname, addr, reg, value);
+                       break;
+               }
+       }
+
+       if (found_dev == 0)
+               printf("No such device: %s\n", devname);
+
+       return ((found_dev) ? write_ret : 1);
+}
+
+/*****************************************************************************
+ *
+ * Print out list of registered MII capable devices.
+ */
+void miiphy_listdev(void)
+{
+       struct list_head *entry;
+       struct mii_dev *dev;
+
+       puts("MII devices: ");
+       list_for_each(entry, &mii_devs) {
+               dev = list_entry(entry, struct mii_dev, link);
+               printf("'%s' ", dev->name);
+       }
+       puts("\n");
+
+       if (current_mii)
+               printf("Current device: '%s'\n", current_mii->name);
+}
+
 
 /*****************************************************************************
  *
  * Returns:
  *   0 on success
  */
-int miiphy_info (unsigned char addr,
+int miiphy_info (char *devname,
+                unsigned char addr,
                 unsigned int *oui,
                 unsigned char *model, unsigned char *rev)
 {
        unsigned int reg = 0;
        unsigned short tmp;
 
-       if (miiphy_read (addr, PHY_PHYIDR2, &tmp) != 0) {
+       if (miiphy_read (devname, addr, PHY_PHYIDR2, &tmp) != 0) {
 #ifdef DEBUG
                puts ("PHY ID register 2 read failed\n");
 #endif
@@ -65,7 +278,7 @@ int miiphy_info (unsigned char addr,
                return (-1);
        }
 
-       if (miiphy_read (addr, PHY_PHYIDR1, &tmp) != 0) {
+       if (miiphy_read (devname, addr, PHY_PHYIDR1, &tmp) != 0) {
 #ifdef DEBUG
                puts ("PHY ID register 1 read failed\n");
 #endif
@@ -88,18 +301,18 @@ int miiphy_info (unsigned char addr,
  * Returns:
  *   0 on success
  */
-int miiphy_reset (unsigned char addr)
+int miiphy_reset (char *devname, unsigned char addr)
 {
        unsigned short reg;
        int loop_cnt;
 
-       if (miiphy_read (addr, PHY_BMCR, &reg) != 0) {
+       if (miiphy_read (devname, addr, PHY_BMCR, &reg) != 0) {
 #ifdef DEBUG
                printf ("PHY status read failed\n");
 #endif
                return (-1);
        }
-       if (miiphy_write (addr, PHY_BMCR, reg | 0x8000) != 0) {
+       if (miiphy_write (devname, addr, PHY_BMCR, reg | 0x8000) != 0) {
 #ifdef DEBUG
                puts ("PHY reset failed\n");
 #endif
@@ -116,7 +329,7 @@ int miiphy_reset (unsigned char addr)
        loop_cnt = 0;
        reg = 0x8000;
        while (((reg & 0x8000) != 0) && (loop_cnt++ < 1000000)) {
-               if (miiphy_read (addr, PHY_BMCR, &reg) != 0) {
+               if (miiphy_read (devname, addr, PHY_BMCR, &reg) != 0) {
 #     ifdef DEBUG
                        puts ("PHY status read failed\n");
 #     endif
@@ -137,12 +350,12 @@ int miiphy_reset (unsigned char addr)
  *
  * Determine the ethernet speed (10/100).
  */
-int miiphy_speed (unsigned char addr)
+int miiphy_speed (char *devname, unsigned char addr)
 {
        unsigned short reg;
 
 #if defined(CONFIG_PHY_GIGE)
-       if (miiphy_read (addr, PHY_1000BTSR, &reg)) {
+       if (miiphy_read (devname, addr, PHY_1000BTSR, &reg)) {
                printf ("PHY 1000BT Status read failed\n");
        } else {
                if (reg != 0xFFFF) {
@@ -154,14 +367,14 @@ int miiphy_speed (unsigned char addr)
 #endif /* CONFIG_PHY_GIGE */
 
        /* Check Basic Management Control Register first. */
-       if (miiphy_read (addr, PHY_BMCR, &reg)) {
+       if (miiphy_read (devname, addr, PHY_BMCR, &reg)) {
                puts ("PHY speed read failed, assuming 10bT\n");
                return (_10BASET);
        }
        /* Check if auto-negotiation is on. */
        if ((reg & PHY_BMCR_AUTON) != 0) {
                /* Get auto-negotiation results. */
-               if (miiphy_read (addr, PHY_ANLPAR, &reg)) {
+               if (miiphy_read (devname, addr, PHY_ANLPAR, &reg)) {
                        puts ("PHY AN speed read failed, assuming 10bT\n");
                        return (_10BASET);
                }
@@ -185,12 +398,12 @@ int miiphy_speed (unsigned char addr)
  *
  * Determine full/half duplex.
  */
-int miiphy_duplex (unsigned char addr)
+int miiphy_duplex (char *devname, unsigned char addr)
 {
        unsigned short reg;
 
 #if defined(CONFIG_PHY_GIGE)
-       if (miiphy_read (addr, PHY_1000BTSR, &reg)) {
+       if (miiphy_read (devname, addr, PHY_1000BTSR, &reg)) {
                printf ("PHY 1000BT Status read failed\n");
        } else {
                if ( (reg != 0xFFFF) &&
@@ -205,14 +418,14 @@ int miiphy_duplex (unsigned char addr)
 #endif /* CONFIG_PHY_GIGE */
 
        /* Check Basic Management Control Register first. */
-       if (miiphy_read (addr, PHY_BMCR, &reg)) {
+       if (miiphy_read (devname, addr, PHY_BMCR, &reg)) {
                puts ("PHY duplex read failed, assuming half duplex\n");
                return (HALF);
        }
        /* Check if auto-negotiation is on. */
        if ((reg & PHY_BMCR_AUTON) != 0) {
                /* Get auto-negotiation results. */
-               if (miiphy_read (addr, PHY_ANLPAR, &reg)) {
+               if (miiphy_read (devname, addr, PHY_ANLPAR, &reg)) {
                        puts ("PHY AN duplex read failed, assuming half duplex\n");
                        return (HALF);
                }
@@ -237,13 +450,13 @@ int miiphy_duplex (unsigned char addr)
  *
  * Determine link status
  */
-int miiphy_link (unsigned char addr)
+int miiphy_link (char *devname, unsigned char addr)
 {
        unsigned short reg;
 
        /* dummy read; needed to latch some phys */
-       (void)miiphy_read(addr, PHY_BMSR, &reg);
-       if (miiphy_read (addr, PHY_BMSR, &reg)) {
+       (void)miiphy_read(devname, addr, PHY_BMSR, &reg);
+       if (miiphy_read (devname, addr, PHY_BMSR, &reg)) {
                puts ("PHY_BMSR read failed, assuming no link\n");
                return (0);
        }
index f7ca49840a08173e8e037e99310076bbfe59ffc1..3d0e08c6ff3866f295913bd576b80bb230992ff2 100644 (file)
@@ -399,7 +399,7 @@ int  i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
  */
 uchar i2c_reg_read(uchar i2c_addr, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read(i2c_addr, reg, 1, &buf, 1);
 
diff --git a/common/spartan3.c b/common/spartan3.c
new file mode 100644 (file)
index 0000000..c0f2b05
--- /dev/null
@@ -0,0 +1,658 @@
+/*
+ * (C) Copyright 2002
+ * Rich Ireland, Enterasys Networks, rireland@enterasys.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
+ *
+ */
+
+/*
+ * Configuration support for Xilinx Spartan3 devices.  Based
+ * on spartan2.c (Rich Ireland, rireland@enterasys.com).
+ */
+
+#include <common.h>            /* core U-Boot definitions */
+#include <spartan3.h>          /* Spartan-II device family */
+
+#if (CONFIG_FPGA & (CFG_XILINX | CFG_SPARTAN3))
+
+/* Define FPGA_DEBUG to get debug printf's */
+#ifdef FPGA_DEBUG
+#define PRINTF(fmt,args...)    printf (fmt ,##args)
+#else
+#define PRINTF(fmt,args...)
+#endif
+
+#undef CFG_FPGA_CHECK_BUSY
+#undef CFG_FPGA_PROG_FEEDBACK
+
+/* Note: The assumption is that we cannot possibly run fast enough to
+ * overrun the device (the Slave Parallel mode can free run at 50MHz).
+ * If there is a need to operate slower, define CONFIG_FPGA_DELAY in
+ * the board config file to slow things down.
+ */
+#ifndef CONFIG_FPGA_DELAY
+#define CONFIG_FPGA_DELAY()
+#endif
+
+#ifndef CFG_FPGA_WAIT
+#define CFG_FPGA_WAIT CFG_HZ/100       /* 10 ms */
+#endif
+
+static int Spartan3_sp_load( Xilinx_desc *desc, void *buf, size_t bsize );
+static int Spartan3_sp_dump( Xilinx_desc *desc, void *buf, size_t bsize );
+/* static int Spartan3_sp_info( Xilinx_desc *desc ); */
+static int Spartan3_sp_reloc( Xilinx_desc *desc, ulong reloc_offset );
+
+static int Spartan3_ss_load( Xilinx_desc *desc, void *buf, size_t bsize );
+static int Spartan3_ss_dump( Xilinx_desc *desc, void *buf, size_t bsize );
+/* static int Spartan3_ss_info( Xilinx_desc *desc ); */
+static int Spartan3_ss_reloc( Xilinx_desc *desc, ulong reloc_offset );
+
+/* ------------------------------------------------------------------------- */
+/* Spartan-II Generic Implementation */
+int Spartan3_load (Xilinx_desc * desc, void *buf, size_t bsize)
+{
+       int ret_val = FPGA_FAIL;
+
+       switch (desc->iface) {
+       case slave_serial:
+               PRINTF ("%s: Launching Slave Serial Load\n", __FUNCTION__);
+               ret_val = Spartan3_ss_load (desc, buf, bsize);
+               break;
+
+       case slave_parallel:
+               PRINTF ("%s: Launching Slave Parallel Load\n", __FUNCTION__);
+               ret_val = Spartan3_sp_load (desc, buf, bsize);
+               break;
+
+       default:
+               printf ("%s: Unsupported interface type, %d\n",
+                               __FUNCTION__, desc->iface);
+       }
+
+       return ret_val;
+}
+
+int Spartan3_dump (Xilinx_desc * desc, void *buf, size_t bsize)
+{
+       int ret_val = FPGA_FAIL;
+
+       switch (desc->iface) {
+       case slave_serial:
+               PRINTF ("%s: Launching Slave Serial Dump\n", __FUNCTION__);
+               ret_val = Spartan3_ss_dump (desc, buf, bsize);
+               break;
+
+       case slave_parallel:
+               PRINTF ("%s: Launching Slave Parallel Dump\n", __FUNCTION__);
+               ret_val = Spartan3_sp_dump (desc, buf, bsize);
+               break;
+
+       default:
+               printf ("%s: Unsupported interface type, %d\n",
+                               __FUNCTION__, desc->iface);
+       }
+
+       return ret_val;
+}
+
+int Spartan3_info( Xilinx_desc *desc )
+{
+       return FPGA_SUCCESS;
+}
+
+
+int Spartan3_reloc (Xilinx_desc * desc, ulong reloc_offset)
+{
+       int ret_val = FPGA_FAIL;        /* assume a failure */
+
+       if (desc->family != Xilinx_Spartan3) {
+               printf ("%s: Unsupported family type, %d\n",
+                               __FUNCTION__, desc->family);
+               return FPGA_FAIL;
+       } else
+               switch (desc->iface) {
+               case slave_serial:
+                       ret_val = Spartan3_ss_reloc (desc, reloc_offset);
+                       break;
+
+               case slave_parallel:
+                       ret_val = Spartan3_sp_reloc (desc, reloc_offset);
+                       break;
+
+               default:
+                       printf ("%s: Unsupported interface type, %d\n",
+                                       __FUNCTION__, desc->iface);
+               }
+
+       return ret_val;
+}
+
+
+/* ------------------------------------------------------------------------- */
+/* Spartan-II Slave Parallel Generic Implementation */
+
+static int Spartan3_sp_load (Xilinx_desc * desc, void *buf, size_t bsize)
+{
+       int ret_val = FPGA_FAIL;        /* assume the worst */
+       Xilinx_Spartan3_Slave_Parallel_fns *fn = desc->iface_fns;
+
+       PRINTF ("%s: start with interface functions @ 0x%p\n",
+                       __FUNCTION__, fn);
+
+       if (fn) {
+               size_t bytecount = 0;
+               unsigned char *data = (unsigned char *) buf;
+               int cookie = desc->cookie;      /* make a local copy */
+               unsigned long ts;               /* timestamp */
+
+               PRINTF ("%s: Function Table:\n"
+                               "ptr:\t0x%p\n"
+                               "struct: 0x%p\n"
+                               "pre: 0x%p\n"
+                               "pgm:\t0x%p\n"
+                               "init:\t0x%p\n"
+                               "err:\t0x%p\n"
+                               "clk:\t0x%p\n"
+                               "cs:\t0x%p\n"
+                               "wr:\t0x%p\n"
+                               "read data:\t0x%p\n"
+                               "write data:\t0x%p\n"
+                               "busy:\t0x%p\n"
+                               "abort:\t0x%p\n",
+                               "post:\t0x%p\n\n",
+                               __FUNCTION__, &fn, fn, fn->pre, fn->pgm, fn->init, fn->err,
+                               fn->clk, fn->cs, fn->wr, fn->rdata, fn->wdata, fn->busy,
+                               fn->abort, fn->post);
+
+               /*
+                * This code is designed to emulate the "Express Style"
+                * Continuous Data Loading in Slave Parallel Mode for
+                * the Spartan-II Family.
+                */
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               printf ("Loading FPGA Device %d...\n", cookie);
+#endif
+               /*
+                * Run the pre configuration function if there is one.
+                */
+               if (*fn->pre) {
+                       (*fn->pre) (cookie);
+               }
+
+               /* Establish the initial state */
+               (*fn->pgm) (TRUE, TRUE, cookie);        /* Assert the program, commit */
+
+               /* Get ready for the burn */
+               CONFIG_FPGA_DELAY ();
+               (*fn->pgm) (FALSE, TRUE, cookie);       /* Deassert the program, commit */
+
+               ts = get_timer (0);             /* get current time */
+               /* Now wait for INIT and BUSY to go high */
+               do {
+                       CONFIG_FPGA_DELAY ();
+                       if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                               puts ("** Timeout waiting for INIT to clear.\n");
+                               (*fn->abort) (cookie);  /* abort the burn */
+                               return FPGA_FAIL;
+                       }
+               } while ((*fn->init) (cookie) && (*fn->busy) (cookie));
+
+               (*fn->wr) (TRUE, TRUE, cookie); /* Assert write, commit */
+               (*fn->cs) (TRUE, TRUE, cookie); /* Assert chip select, commit */
+               (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+               /* Load the data */
+               while (bytecount < bsize) {
+                       /* XXX - do we check for an Ctrl-C press in here ??? */
+                       /* XXX - Check the error bit? */
+
+                       (*fn->wdata) (data[bytecount++], TRUE, cookie); /* write the data */
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+#ifdef CFG_FPGA_CHECK_BUSY
+                       ts = get_timer (0);     /* get current time */
+                       while ((*fn->busy) (cookie)) {
+                               /* XXX - we should have a check in here somewhere to
+                                * make sure we aren't busy forever... */
+
+                               CONFIG_FPGA_DELAY ();
+                               (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+                               CONFIG_FPGA_DELAY ();
+                               (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+                               if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                                       puts ("** Timeout waiting for BUSY to clear.\n");
+                                       (*fn->abort) (cookie);  /* abort the burn */
+                                       return FPGA_FAIL;
+                               }
+                       }
+#endif
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+                       if (bytecount % (bsize / 40) == 0)
+                               putc ('.');             /* let them know we are alive */
+#endif
+               }
+
+               CONFIG_FPGA_DELAY ();
+               (*fn->cs) (FALSE, TRUE, cookie);        /* Deassert the chip select */
+               (*fn->wr) (FALSE, TRUE, cookie);        /* Deassert the write pin */
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               putc ('\n');                    /* terminate the dotted line */
+#endif
+
+               /* now check for done signal */
+               ts = get_timer (0);             /* get current time */
+               ret_val = FPGA_SUCCESS;
+               while ((*fn->done) (cookie) == FPGA_FAIL) {
+                       /* XXX - we should have a check in here somewhere to
+                        * make sure we aren't busy forever... */
+
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+                       if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                               puts ("** Timeout waiting for DONE to clear.\n");
+                               (*fn->abort) (cookie);  /* abort the burn */
+                               ret_val = FPGA_FAIL;
+                               break;
+                       }
+               }
+
+               if (ret_val == FPGA_SUCCESS) {
+#ifdef CFG_FPGA_PROG_FEEDBACK
+                       puts ("Done.\n");
+#endif
+               }
+               /*
+                * Run the post configuration function if there is one.
+                */
+               if (*fn->post) {
+                       (*fn->post) (cookie);
+               }
+
+               else {
+#ifdef CFG_FPGA_PROG_FEEDBACK
+                       puts ("Fail.\n");
+#endif
+               }
+
+       } else {
+               printf ("%s: NULL Interface function table!\n", __FUNCTION__);
+       }
+
+       return ret_val;
+}
+
+static int Spartan3_sp_dump (Xilinx_desc * desc, void *buf, size_t bsize)
+{
+       int ret_val = FPGA_FAIL;        /* assume the worst */
+       Xilinx_Spartan3_Slave_Parallel_fns *fn = desc->iface_fns;
+
+       if (fn) {
+               unsigned char *data = (unsigned char *) buf;
+               size_t bytecount = 0;
+               int cookie = desc->cookie;      /* make a local copy */
+
+               printf ("Starting Dump of FPGA Device %d...\n", cookie);
+
+               (*fn->cs) (TRUE, TRUE, cookie); /* Assert chip select, commit */
+               (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+               /* dump the data */
+               while (bytecount < bsize) {
+                       /* XXX - do we check for an Ctrl-C press in here ??? */
+
+                       (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+                       (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+                       (*fn->rdata) (&(data[bytecount++]), cookie);    /* read the data */
+#ifdef CFG_FPGA_PROG_FEEDBACK
+                       if (bytecount % (bsize / 40) == 0)
+                               putc ('.');             /* let them know we are alive */
+#endif
+               }
+
+               (*fn->cs) (FALSE, FALSE, cookie);       /* Deassert the chip select */
+               (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+               (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               putc ('\n');                    /* terminate the dotted line */
+#endif
+               puts ("Done.\n");
+
+               /* XXX - checksum the data? */
+       } else {
+               printf ("%s: NULL Interface function table!\n", __FUNCTION__);
+       }
+
+       return ret_val;
+}
+
+
+static int Spartan3_sp_reloc (Xilinx_desc * desc, ulong reloc_offset)
+{
+       int ret_val = FPGA_FAIL;        /* assume the worst */
+       Xilinx_Spartan3_Slave_Parallel_fns *fn_r, *fn =
+                       (Xilinx_Spartan3_Slave_Parallel_fns *) (desc->iface_fns);
+
+       if (fn) {
+               ulong addr;
+
+               /* Get the relocated table address */
+               addr = (ulong) fn + reloc_offset;
+               fn_r = (Xilinx_Spartan3_Slave_Parallel_fns *) addr;
+
+               if (!fn_r->relocated) {
+
+                       if (memcmp (fn_r, fn,
+                                               sizeof (Xilinx_Spartan3_Slave_Parallel_fns))
+                               == 0) {
+                               /* good copy of the table, fix the descriptor pointer */
+                               desc->iface_fns = fn_r;
+                       } else {
+                               PRINTF ("%s: Invalid function table at 0x%p\n",
+                                               __FUNCTION__, fn_r);
+                               return FPGA_FAIL;
+                       }
+
+                       PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,
+                                       desc);
+
+                       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;
+
+                       addr = (ulong) (fn->init) + reloc_offset;
+                       fn_r->init = (Xilinx_init_fn) addr;
+
+                       addr = (ulong) (fn->done) + reloc_offset;
+                       fn_r->done = (Xilinx_done_fn) addr;
+
+                       addr = (ulong) (fn->clk) + reloc_offset;
+                       fn_r->clk = (Xilinx_clk_fn) addr;
+
+                       addr = (ulong) (fn->err) + reloc_offset;
+                       fn_r->err = (Xilinx_err_fn) addr;
+
+                       addr = (ulong) (fn->cs) + reloc_offset;
+                       fn_r->cs = (Xilinx_cs_fn) addr;
+
+                       addr = (ulong) (fn->wr) + reloc_offset;
+                       fn_r->wr = (Xilinx_wr_fn) addr;
+
+                       addr = (ulong) (fn->rdata) + reloc_offset;
+                       fn_r->rdata = (Xilinx_rdata_fn) addr;
+
+                       addr = (ulong) (fn->wdata) + reloc_offset;
+                       fn_r->wdata = (Xilinx_wdata_fn) addr;
+
+                       addr = (ulong) (fn->busy) + reloc_offset;
+                       fn_r->busy = (Xilinx_busy_fn) addr;
+
+                       addr = (ulong) (fn->abort) + reloc_offset;
+                       fn_r->abort = (Xilinx_abort_fn) addr;
+
+                       addr = (ulong) (fn->post) + reloc_offset;
+                       fn_r->post = (Xilinx_post_fn) addr;
+
+                       fn_r->relocated = TRUE;
+
+               } else {
+                       /* this table has already been moved */
+                       /* XXX - should check to see if the descriptor is correct */
+                       desc->iface_fns = fn_r;
+               }
+
+               ret_val = FPGA_SUCCESS;
+       } else {
+               printf ("%s: NULL Interface function table!\n", __FUNCTION__);
+       }
+
+       return ret_val;
+
+}
+
+/* ------------------------------------------------------------------------- */
+
+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;
+
+       PRINTF ("%s: start with interface functions @ 0x%p\n",
+                       __FUNCTION__, fn);
+
+       if (fn) {
+               size_t bytecount = 0;
+               unsigned char *data = (unsigned char *) buf;
+               int cookie = desc->cookie;      /* make a local copy */
+               unsigned long ts;               /* timestamp */
+
+               PRINTF ("%s: Function Table:\n"
+                               "ptr:\t0x%p\n"
+                               "struct: 0x%p\n"
+                               "pgm:\t0x%p\n"
+                               "init:\t0x%p\n"
+                               "clk:\t0x%p\n"
+                               "wr:\t0x%p\n"
+                               "done:\t0x%p\n\n",
+                               __FUNCTION__, &fn, fn, fn->pgm, fn->init,
+                               fn->clk, fn->wr, fn->done);
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               printf ("Loading FPGA Device %d...\n", cookie);
+#endif
+
+               /*
+                * Run the pre configuration function if there is one.
+                */
+               if (*fn->pre) {
+                       (*fn->pre) (cookie);
+               }
+
+               /* Establish the initial state */
+               (*fn->pgm) (TRUE, TRUE, cookie);        /* Assert the program, commit */
+
+               /* Wait for INIT state (init low)                            */
+               ts = get_timer (0);             /* get current time */
+               do {
+                       CONFIG_FPGA_DELAY ();
+                       if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                               puts ("** Timeout waiting for INIT to start.\n");
+                               return FPGA_FAIL;
+                       }
+               } while (!(*fn->init) (cookie));
+
+               /* Get ready for the burn */
+               CONFIG_FPGA_DELAY ();
+               (*fn->pgm) (FALSE, TRUE, cookie);       /* Deassert the program, commit */
+
+               ts = get_timer (0);             /* get current time */
+               /* Now wait for INIT to go high */
+               do {
+                       CONFIG_FPGA_DELAY ();
+                       if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                               puts ("** Timeout waiting for INIT to clear.\n");
+                               return FPGA_FAIL;
+                       }
+               } while ((*fn->init) (cookie));
+
+               /* Load the data */
+               while (bytecount < bsize) {
+
+                       /* Xilinx detects an error if INIT goes low (active)
+                          while DONE is low (inactive) */
+                       if ((*fn->done) (cookie) == 0 && (*fn->init) (cookie)) {
+                               puts ("** CRC error during FPGA load.\n");
+                               return (FPGA_FAIL);
+                       }
+                       val = data [bytecount ++];
+                       i = 8;
+                       do {
+                               /* Deassert the clock */
+                               (*fn->clk) (FALSE, TRUE, cookie);
+                               CONFIG_FPGA_DELAY ();
+                               /* Write data */
+                               (*fn->wr) ((val < 0), TRUE, cookie);
+                               CONFIG_FPGA_DELAY ();
+                               /* Assert the clock */
+                               (*fn->clk) (TRUE, TRUE, cookie);
+                               CONFIG_FPGA_DELAY ();
+                               val <<= 1;
+                               i --;
+                       } while (i > 0);
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+                       if (bytecount % (bsize / 40) == 0)
+                               putc ('.');             /* let them know we are alive */
+#endif
+               }
+
+               CONFIG_FPGA_DELAY ();
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               putc ('\n');                    /* terminate the dotted line */
+#endif
+
+               /* now check for done signal */
+               ts = get_timer (0);             /* get current time */
+               ret_val = FPGA_SUCCESS;
+               (*fn->wr) (TRUE, TRUE, cookie);
+
+               while (! (*fn->done) (cookie)) {
+                       /* XXX - we should have a check in here somewhere to
+                        * make sure we aren't busy forever... */
+
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (FALSE, TRUE, cookie);       /* Deassert the clock pin */
+                       CONFIG_FPGA_DELAY ();
+                       (*fn->clk) (TRUE, TRUE, cookie);        /* Assert the clock pin */
+
+                       putc ('*');
+
+                       if (get_timer (ts) > CFG_FPGA_WAIT) {   /* check the time */
+                               puts ("** Timeout waiting for DONE to clear.\n");
+                               ret_val = FPGA_FAIL;
+                               break;
+                       }
+               }
+               putc ('\n');                    /* terminate the dotted line */
+
+#ifdef CFG_FPGA_PROG_FEEDBACK
+               if (ret_val == FPGA_SUCCESS) {
+                       puts ("Done.\n");
+               }
+               else {
+                       puts ("Fail.\n");
+               }
+#endif
+
+       } else {
+               printf ("%s: NULL Interface function table!\n", __FUNCTION__);
+       }
+
+       return ret_val;
+}
+
+static int Spartan3_ss_dump (Xilinx_desc * desc, void *buf, size_t bsize)
+{
+       /* Readback is only available through the Slave Parallel and         */
+       /* boundary-scan interfaces.                                         */
+       printf ("%s: Slave Serial Dumping is unavailable\n",
+                       __FUNCTION__);
+       return FPGA_FAIL;
+}
+
+static int Spartan3_ss_reloc (Xilinx_desc * desc, ulong reloc_offset)
+{
+       int ret_val = FPGA_FAIL;        /* assume the worst */
+       Xilinx_Spartan3_Slave_Serial_fns *fn_r, *fn =
+                       (Xilinx_Spartan3_Slave_Serial_fns *) (desc->iface_fns);
+
+       if (fn) {
+               ulong addr;
+
+               /* Get the relocated table address */
+               addr = (ulong) fn + reloc_offset;
+               fn_r = (Xilinx_Spartan3_Slave_Serial_fns *) addr;
+
+               if (!fn_r->relocated) {
+
+                       if (memcmp (fn_r, fn,
+                                               sizeof (Xilinx_Spartan3_Slave_Serial_fns))
+                               == 0) {
+                               /* good copy of the table, fix the descriptor pointer */
+                               desc->iface_fns = fn_r;
+                       } else {
+                               PRINTF ("%s: Invalid function table at 0x%p\n",
+                                               __FUNCTION__, fn_r);
+                               return FPGA_FAIL;
+                       }
+
+                       PRINTF ("%s: Relocating descriptor at 0x%p\n", __FUNCTION__,
+                                       desc);
+
+                       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;
+
+                       addr = (ulong) (fn->init) + reloc_offset;
+                       fn_r->init = (Xilinx_init_fn) addr;
+
+                       addr = (ulong) (fn->done) + reloc_offset;
+                       fn_r->done = (Xilinx_done_fn) addr;
+
+                       addr = (ulong) (fn->clk) + reloc_offset;
+                       fn_r->clk = (Xilinx_clk_fn) addr;
+
+                       addr = (ulong) (fn->wr) + reloc_offset;
+                       fn_r->wr = (Xilinx_wr_fn) addr;
+
+                       fn_r->relocated = TRUE;
+
+               } else {
+                       /* this table has already been moved */
+                       /* XXX - should check to see if the descriptor is correct */
+                       desc->iface_fns = fn_r;
+               }
+
+               ret_val = FPGA_SUCCESS;
+       } else {
+               printf ("%s: NULL Interface function table!\n", __FUNCTION__);
+       }
+
+       return ret_val;
+
+}
+
+#endif
index 69d195af605539875fee45da3d87a38458e7b448..99e4ab0d2335a88642ec5a82e2c3da61d5bb90f2 100644 (file)
@@ -490,7 +490,7 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
  */
 int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
 {
-       int result;
+       int result = 0;
        int dir_in,retry;
        unsigned int pipe;
        unsigned long status;
@@ -528,7 +528,7 @@ int usb_stor_CB_comdat(ccb *srb, struct us_data *us)
 
                USB_STOR_PRINTF("CB_transport: control msg returned %d, direction is %s to go 0x%lx\n",result,dir_in ? "IN" : "OUT",srb->datalen);
                if (srb->datalen) {
-                       result = us_one_transfer(us, pipe, srb->pdata,srb->datalen);
+                       result = us_one_transfer(us, pipe, (char *)srb->pdata,srb->datalen);
                        USB_STOR_PRINTF("CBI attempted to transfer data, result is %d status %lX, len %d\n", result,us->pusb_dev->status,us->pusb_dev->act_len);
                        if(!(us->pusb_dev->status & USB_ST_NAK_REC))
                                break;
@@ -847,7 +847,7 @@ static int usb_request_sense(ccb *srb,struct us_data *ss)
 {
        char *ptr;
 
-       ptr=srb->pdata;
+       ptr=(char *)srb->pdata;
        memset(&srb->cmd[0],0,12);
        srb->cmd[0]=SCSI_REQ_SENSE;
        srb->cmd[1]=srb->lun<<5;
@@ -857,7 +857,7 @@ static int usb_request_sense(ccb *srb,struct us_data *ss)
        srb->cmdlen=12;
        ss->transport(srb,ss);
        USB_STOR_PRINTF("Request Sense returned %02X %02X %02X\n",srb->sense_buf[2],srb->sense_buf[12],srb->sense_buf[13]);
-       srb->pdata=ptr;
+       srb->pdata=(uchar *)ptr;
        return 0;
 }
 
index bb44eaa6c503732d913b7ceadf61decf7449fa87..b5dc366aad39c15de8f57e88c8c7699d26c1cc56 100644 (file)
 
 #if (CONFIG_FPGA & (CFG_XILINX | CFG_VIRTEX2))
 
+#if 0
+#define FPGA_DEBUG
+#endif
+
 #ifdef FPGA_DEBUG
 #define        PRINTF(fmt,args...)     printf (fmt ,##args)
 #else
@@ -190,7 +194,7 @@ int Virtex2_reloc (Xilinx_desc * desc, ulong reloc_offset)
  *    this process, a configuration error (most likely CRC failure) has
  *    ocurred.  At this point a status word may be read from the
  *    SelectMap interface to determine the source of the problem (You
- *    could, for instance, put this in you 'abort' function handler).
+ *    could, for instance, put this in your 'abort' function handler).
  * 4. After all data has been written, test the state of the FPGA
  *    INIT_B and DONE lines.  If both are high, configuration has
  *    succeeded. Congratulations!
@@ -251,7 +255,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
                ts = get_timer (0);
                do {
                        if (get_timer (ts) > CFG_FPGA_WAIT_INIT) {
-                               printf ("%s:%d: ** Timeout after %d mS waiting for INIT"
+                               printf ("%s:%d: ** Timeout after %d ticks waiting for INIT"
                                                " to assert.\n", __FUNCTION__, __LINE__,
                                                CFG_FPGA_WAIT_INIT);
                                (*fn->abort) (cookie);
@@ -270,7 +274,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
                do {
                        CONFIG_FPGA_DELAY ();
                        if (get_timer (ts) > CFG_FPGA_WAIT_INIT) {
-                               printf ("%s:%d: ** Timeout after %d mS waiting for INIT"
+                               printf ("%s:%d: ** Timeout after %d ticks waiting for INIT"
                                                " to deassert.\n", __FUNCTION__, __LINE__,
                                                CFG_FPGA_WAIT_INIT);
                                (*fn->abort) (cookie);
@@ -293,14 +297,24 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
                                return FPGA_FAIL;
                        }
 #endif
+
+                       if ((*fn->done) (cookie) == FPGA_SUCCESS) {
+                           PRINTF ("%s:%d:done went active early, bytecount = %d\n",
+                                   __FUNCTION__, __LINE__, bytecount);
+                           break;
+                       }
+
 #ifdef CFG_FPGA_CHECK_ERROR
                        if ((*fn->init) (cookie)) {
-                               printf ("%s:%d:  ** Error: INIT asserted during"
+                               printf ("\n%s:%d:  ** Error: INIT asserted during"
                                                " configuration\n", __FUNCTION__, __LINE__);
+                               printf ("%d = buffer offset, %d = buffer size\n",
+                                       bytecount, bsize);
                                (*fn->abort) (cookie);
                                return FPGA_FAIL;
                        }
 #endif
+
                        (*fn->wdata) (data[bytecount++], TRUE, cookie);
                        CONFIG_FPGA_DELAY ();
 
@@ -315,7 +329,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
                        ts = get_timer (0);
                        while ((*fn->busy) (cookie)) {
                                if (get_timer (ts) > CFG_FPGA_WAIT_BUSY) {
-                                       printf ("%s:%d: ** Timeout after %d mS waiting for"
+                                       printf ("%s:%d: ** Timeout after %d ticks waiting for"
                                                        " BUSY to deassert\n",
                                                        __FUNCTION__, __LINE__, CFG_FPGA_WAIT_BUSY);
                                        (*fn->abort) (cookie);
@@ -349,7 +363,7 @@ static int Virtex2_ssm_load (Xilinx_desc * desc, void *buf, size_t bsize)
                ret_val = FPGA_SUCCESS;
                while (((*fn->done) (cookie) == FPGA_FAIL) || (*fn->init) (cookie)) {
                        if (get_timer (ts) > CFG_FPGA_WAIT_CONFIG) {
-                               printf ("%s:%d: ** Timeout after %d mS waiting for DONE to"
+                               printf ("%s:%d: ** Timeout after %d ticks waiting for DONE to"
                                                "assert and INIT to deassert\n",
                                                __FUNCTION__, __LINE__, CFG_FPGA_WAIT_CONFIG);
                                (*fn->abort) (cookie);
index b2e61692cb0d0a25e4f6f64f0ba9e2a2d02f089f..e03e78cb28527403f1085c5dfdc955b0daf0e509 100644 (file)
@@ -30,6 +30,7 @@
 #include <common.h>
 #include <virtex2.h>
 #include <spartan2.h>
+#include <spartan3.h>
 
 #if (CONFIG_FPGA & CFG_FPGA_XILINX)
 
@@ -53,7 +54,7 @@ int xilinx_load (Xilinx_desc * desc, void *buf, size_t bsize)
 {
        int ret_val = FPGA_FAIL;        /* assume a failure */
 
-       if (!xilinx_validate (desc, __FUNCTION__)) {
+       if (!xilinx_validate (desc, (char *)__FUNCTION__)) {
                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
        } else
                switch (desc->family) {
@@ -65,6 +66,16 @@ int xilinx_load (Xilinx_desc * desc, void *buf, size_t bsize)
 #else
                        printf ("%s: No support for Spartan-II devices.\n",
                                        __FUNCTION__);
+#endif
+                       break;
+               case Xilinx_Spartan3:
+#if (CONFIG_FPGA & CFG_SPARTAN3)
+                       PRINTF ("%s: Launching the Spartan-III Loader...\n",
+                                       __FUNCTION__);
+                       ret_val = Spartan3_load (desc, buf, bsize);
+#else
+                       printf ("%s: No support for Spartan-III devices.\n",
+                                       __FUNCTION__);
 #endif
                        break;
                case Xilinx_Virtex2:
@@ -90,7 +101,7 @@ int xilinx_dump (Xilinx_desc * desc, void *buf, size_t bsize)
 {
        int ret_val = FPGA_FAIL;        /* assume a failure */
 
-       if (!xilinx_validate (desc, __FUNCTION__)) {
+       if (!xilinx_validate (desc, (char *)__FUNCTION__)) {
                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
        } else
                switch (desc->family) {
@@ -102,6 +113,16 @@ int xilinx_dump (Xilinx_desc * desc, void *buf, size_t bsize)
 #else
                        printf ("%s: No support for Spartan-II devices.\n",
                                        __FUNCTION__);
+#endif
+                       break;
+               case Xilinx_Spartan3:
+#if (CONFIG_FPGA & CFG_SPARTAN3)
+                       PRINTF ("%s: Launching the Spartan-III Reader...\n",
+                                       __FUNCTION__);
+                       ret_val = Spartan3_dump (desc, buf, bsize);
+#else
+                       printf ("%s: No support for Spartan-III devices.\n",
+                                       __FUNCTION__);
 #endif
                        break;
                case Xilinx_Virtex2:
@@ -127,12 +148,15 @@ int xilinx_info (Xilinx_desc * desc)
 {
        int ret_val = FPGA_FAIL;
 
-       if (xilinx_validate (desc, __FUNCTION__)) {
+       if (xilinx_validate (desc, (char *)__FUNCTION__)) {
                printf ("Family:        \t");
                switch (desc->family) {
                case Xilinx_Spartan2:
                        printf ("Spartan-II\n");
                        break;
+               case Xilinx_Spartan3:
+                       printf ("Spartan-III\n");
+                       break;
                case Xilinx_Virtex2:
                        printf ("Virtex-II\n");
                        break;
@@ -180,6 +204,15 @@ int xilinx_info (Xilinx_desc * desc)
                                /* just in case */
                                printf ("%s: No support for Spartan-II devices.\n",
                                                __FUNCTION__);
+#endif
+                               break;
+                       case Xilinx_Spartan3:
+#if (CONFIG_FPGA & CFG_SPARTAN3)
+                               Spartan3_info (desc);
+#else
+                               /* just in case */
+                               printf ("%s: No support for Spartan-III devices.\n",
+                                               __FUNCTION__);
 #endif
                                break;
                        case Xilinx_Virtex2:
@@ -211,7 +244,7 @@ int xilinx_reloc (Xilinx_desc * desc, ulong reloc_offset)
 {
        int ret_val = FPGA_FAIL;        /* assume a failure */
 
-       if (!xilinx_validate (desc, __FUNCTION__)) {
+       if (!xilinx_validate (desc, (char *)__FUNCTION__)) {
                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
        } else
                switch (desc->family) {
@@ -221,6 +254,14 @@ int xilinx_reloc (Xilinx_desc * desc, ulong reloc_offset)
 #else
                        printf ("%s: No support for Spartan-II devices.\n",
                                        __FUNCTION__);
+#endif
+                       break;
+               case Xilinx_Spartan3:
+#if (CONFIG_FPGA & CFG_SPARTAN3)
+                       ret_val = Spartan3_reloc (desc, reloc_offset);
+#else
+                       printf ("%s: No support for Spartan-III devices.\n",
+                                       __FUNCTION__);
 #endif
                        break;
                case Xilinx_Virtex2:
index ff83091746887aad0e44a0e03113c75863f68a91..d85ac36b5e602c3e80c67c8c5cb1d767f6f49680 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -86,6 +86,12 @@ HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
 HOSTSTRIP      = strip
 
 #########################################################################
+#
+# Option checker (courtesy linux kernel) to ensure
+# only supported compiler options are used
+#
+cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
+               > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
 
 #
 # Include the make variables (CC, etc...)
index ca9dc2564e7568b9a111878490b80cb25df71f21..e39e7741c126c984c0c24b947224c7cc1ac62ff2 100644 (file)
 # MA 02111-1307 USA
 #
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
+       -msoft-float
 
 # Make ARMv5 to allow more compilers to work, even though its v6.
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv5
+PLATFORM_CPPFLAGS += -march=armv5
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 7fa5ddcac6c98d3f3a1ccbceda22f1b10fde99d0..85a48491b35b7f68b9e09ec866989dd810bf3eb7 100644 (file)
@@ -33,7 +33,9 @@
 
 #include <common.h>
 #include <command.h>
+#if !defined(CONFIG_INTEGRATOR) && ! defined(CONFIG_ARCH_CINTEGRATOR)
 #include <asm/arch/omap2420.h>
+#endif
 
 /* read co-processor 15, register #1 (control register) */
 static unsigned long read_p15_c1 (void)
index 23236dcb0ff770ad1ad6f1b66485ad98adaa4940..1dc36d0344fa123a4a8f9a055a5b6aa71aad25b5 100644 (file)
 
 #include <common.h>
 #include <asm/arch/bits.h>
-#include <asm/arch/omap2420.h>
+
+#if !defined(CONFIG_INTEGRATOR) && ! defined(CONFIG_ARCH_CINTEGRATOR)
+# include <asm/arch/omap2420.h>
+#endif
+
 #include <asm/proc-armv/ptrace.h>
 
 #define TIMER_LOAD_VAL 0
@@ -172,6 +176,10 @@ void do_irq (struct pt_regs *pt_regs)
        bad_mode ();
 }
 
+#if defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_CINTEGRATOR)
+/* Use the IntegratorCP function from board/integratorcp.c */
+#else
+
 static ulong timestamp;
 static ulong lastinc;
 
@@ -189,7 +197,6 @@ int interrupt_init (void)
 
        return(0);
 }
-
 /*
  * timer without interrupts
  */
@@ -281,7 +288,6 @@ unsigned long long get_ticks(void)
 {
        return get_timer(0);
 }
-
 /*
  * This function is derived from PowerPC code (timebase clock frequency).
  * On ARM it returns the number of timer ticks per second.
@@ -292,3 +298,4 @@ ulong get_tbclk (void)
        tbclk = CFG_HZ;
        return tbclk;
 }
+#endif /* !Integrator/CP */
index c3bf6e37e1cfda9820866dd1b0fc157d7a2f61fb..17c7a834919b54a4b02fc929df958dcb0abac0bb 100644 (file)
@@ -30,8 +30,9 @@
 
 #include <config.h>
 #include <version.h>
+#if !defined(CONFIG_INTEGRATOR) && ! defined(CONFIG_ARCH_CINTEGRATOR)
 #include <asm/arch/omap2420.h>
-
+#endif
 .globl _start
 _start: b      reset
        ldr     pc, _undefined_instruction
@@ -210,7 +211,7 @@ cpu_init_crit:
         * basic memory.  Go here to bump up clock rate and handle wake up conditions.
         */
        mov     ip, lr          /* persevere link reg across call */
-       bl      platformsetup   /* go setup pll,mux,memory */
+       bl      lowlevel_init   /* go setup pll,mux,memory */
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 /*
@@ -397,6 +398,10 @@ arm1136_cache_flush:
                mcr     p15, 0, r1, c7, c5, 0   @ invalidate I cache
                mov     pc, lr                  @ back to caller
 
+#if defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_CINTEGRATOR)
+/* Use the IntegratorCP function from board/integratorcp/platform.S */
+#else
+
        .align  5
 .globl reset_cpu
 reset_cpu:
@@ -408,3 +413,5 @@ _loop_forever:
        b       _loop_forever
 rstctl:
        .word   PM_RSTCTRL_WKUP
+
+#endif
index 2d797090556324cbfe3a6f16496da244032307ef..641b91cd818ace5ebdb395fc646544e2d6c88d30 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=arm7tdmi
+PLATFORM_CPPFLAGS += -march=armv4 -mtune=arm7tdmi
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 5421aff7def4569b2caa9237eb81b94d4bad6abf..a5b6de7605525783eebe3608170f8cfa255cc2f8 100644 (file)
@@ -57,7 +57,7 @@ int cleanup_before_linux (void)
         * and we set the CPU-speed to 73 MHz - see start.S for details
         */
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
        unsigned long i;
 
        disable_interrupts ();
@@ -76,6 +76,8 @@ int cleanup_before_linux (void)
 #elif defined(CONFIG_NETARM) || defined(CONFIG_S3C4510B)
        disable_interrupts ();
        /* Nothing more needed */
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No cleanup before linux for IntegratorAP/CM720T as yet */
 #else
 #error No cleanup_before_linux() defined for this CPU type
 #endif
@@ -95,7 +97,7 @@ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  *
  */
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO)
 /* read co-processor 15, register #1 (control register) */
 static unsigned long read_p15_c1(void)
 {
@@ -245,6 +247,11 @@ int dcache_status (void)
        return icache_status();
 }
 
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No specific cache setup for IntegratorAP/CM720T as yet */
+       void icache_enable (void)
+       {
+       }
 #else
 #error No icache/dcache enable/disable functions defined for this CPU type
 #endif
index ab28e602c55fc5710d135b50fecf3a7badacd3b4..da62502d6144e21ae375a935e4216bf06c211cc7 100644 (file)
@@ -180,7 +180,7 @@ void do_fiq (struct pt_regs *pt_regs)
 
 void do_irq (struct pt_regs *pt_regs)
 {
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO)
        printf ("interrupt request\n");
        show_regs (pt_regs);
        bad_mode ();
@@ -193,6 +193,8 @@ void do_irq (struct pt_regs *pt_regs)
                /* clear pending interrupt */
                PUT_REG( REG_INTPEND, (1<<(pending>>2)));
        }
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No do_irq() for IntegratorAP/CM720T as yet */
 #else
 #error do_irq() not defined for this CPU type
 #endif
@@ -216,6 +218,10 @@ static void timer_isr( void *data) {
 }
 #endif
 
+#if defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* Use IntegratorAP routines in board/integratorap.c */
+#else
+
 static ulong timestamp;
 static ulong lastdec;
 
@@ -233,7 +239,7 @@ int interrupt_init (void)
 
        /* set timer 2 counter */
        lastdec = TIMER_LOAD_VAL;
-#elif defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#elif defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
        /* disable all interrupts */
        IO_INTMR1 = 0;
 
@@ -296,12 +302,14 @@ int interrupt_init (void)
        return (0);
 }
 
+#endif /* ! IntegratorAP */
+
 /*
  * timer without interrupts
  */
 
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_NETARM) || defined(CONFIG_ARMADILLO)
 
 void reset_timer (void)
 {
@@ -398,6 +406,8 @@ void udelay (unsigned long usec)
 
 }
 
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No timer routines for IntegratorAP/CM720T as yet */
 #else
 #error Timer routines not defined for this CPU type
 #endif
index a5da4b76b6207d6cf12f8fc67bf8e69c4e0c7ade..0f9997950875551e445faacf1a49da1bcdaa410f 100644 (file)
@@ -30,7 +30,7 @@
 
 #include <common.h>
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
 
 #include <clps7111.h>
 
index 5b41949e0a52b117961df77510839af14c8759a6..5ad98f06fdb8c0b29bdf6d4c8fcf988aa6df94f6 100644 (file)
 #include <asm/hardware.h>
 
 #define PORTA  (*(volatile unsigned int *)(NETARM_GEN_MODULE_BASE + NETARM_GEN_PORTA))
+#if !defined(CONFIG_NETARM_NS7520)
 #define PORTB  (*(volatile unsigned int *)(NETARM_GEN_MODULE_BASE + NETARM_GEN_PORTB))
+#else
+#define PORTC  (*(volatile unsigned int *)(NETARM_GEN_MODULE_BASE + NETARM_GEN_PORTC))
+#endif
 
 /* wait until transmitter is ready for another character */
 #define TXWAITRDY(registers)                                                   \
 }
 
 
+#ifndef CONFIG_UART1_CONSOLE
 volatile netarm_serial_channel_t *serial_reg_ch1 = get_serial_channel(0);
 volatile netarm_serial_channel_t *serial_reg_ch2 = get_serial_channel(1);
+#else
+volatile netarm_serial_channel_t *serial_reg_ch1 = get_serial_channel(1);
+volatile netarm_serial_channel_t *serial_reg_ch2 = get_serial_channel(0);
+#endif
 
 extern void _netarm_led_FAIL1(void);
 
@@ -62,8 +71,13 @@ void serial_setbrg (void)
        DECLARE_GLOBAL_DATA_PTR;
 
        /* set 0 ... make sure pins are configured for serial */
+#if !defined(CONFIG_NETARM_NS7520)
        PORTA = PORTB =
                NETARM_GEN_PORT_MODE (0xef) | NETARM_GEN_PORT_DIR (0xe0);
+#else
+       PORTA = NETARM_GEN_PORT_MODE (0xef) | NETARM_GEN_PORT_DIR (0xe0);
+       PORTC = NETARM_GEN_PORT_CSF (0xef) | NETARM_GEN_PORT_MODE (0xef) | NETARM_GEN_PORT_DIR (0xe0);
+#endif
 
        /* first turn em off */
        serial_reg_ch1->ctrl_a = serial_reg_ch2->ctrl_a = 0;
index 3695465e70959be4837261131413e23fa6f2db17..e66d109443a18f4260dd4c219e09083442d1cc9a 100644 (file)
@@ -188,7 +188,7 @@ _start_armboot: .word start_armboot
  *************************************************************************
  */
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
 
 /* Interupt-Controller base addresses */
 INTMR1:                .word   0x80000280 @ 32 bit size
@@ -209,7 +209,7 @@ SYSCON3:    .word   0x80002200
 #endif
 
 cpu_init_crit:
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
 
        /*
         * mask all IRQs by clearing all bits in the INTMRs
@@ -272,12 +272,15 @@ cpu_init_crit:
 
        str     r1, [r0, #+NETARM_GEN_SYSTEM_CONTROL]
 
+#ifndef CONFIG_NETARM_PLL_BYPASS
        ldr     r1, =(  NETARM_GEN_PLL_CTL_PLLCNT(NETARM_PLL_COUNT_VAL) | \
                        NETARM_GEN_PLL_CTL_POLTST_DEF | \
                        NETARM_GEN_PLL_CTL_INDIV(1) | \
                        NETARM_GEN_PLL_CTL_ICP_DEF | \
                        NETARM_GEN_PLL_CTL_OUTDIV(2) )
        str     r1, [r0, #+NETARM_GEN_PLL_CONTROL]
+#endif
+
        /*
         * mask all IRQs by clearing all bits in the INTMRs
         */
@@ -301,6 +304,8 @@ cpu_init_crit:
        ldr r1, =0x83ffffa0     /* cache-disabled  */
        str r1, [r0]
 
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No specific initialisation for IntegratorAP/CM720T as yet */
 #else
 #error No cpu_init_crit() defined for current CPU type
 #endif
@@ -316,12 +321,12 @@ cpu_init_crit:
        str     r1, [r0]
 #endif
 
+       mov     ip, lr
        /*
         * before relocating, we have to setup RAM timing
         * because memory timing is board-dependent, you will
         * find a lowlevel_init.S in your board directory.
         */
-       mov     ip, lr
        bl      lowlevel_init
        mov     lr, ip
 
@@ -495,7 +500,7 @@ fiq:
 
 #endif
 
-#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312)
+#if defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) || defined(CONFIG_ARMADILLO)
        .align  5
 .globl reset_cpu
 reset_cpu:
@@ -530,6 +535,8 @@ reset_cpu:
 #elif defined(CONFIG_S3C4510B)
 /* Nothing done here as reseting the CPU is board specific, depending
  * on external peripherals such as watchdog timers, etc. */
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+       /* No specific reset actions for IntegratorAP/CM720T as yet */
 #else
 #error No reset_cpu() defined for current CPU type
 #endif
index 0c9bcb25cd8880be01e465a3c47d87bfff2e15d6..aec9cb640935548a30e24da6f828fa0810d5fc03 100644 (file)
@@ -25,7 +25,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(SOC).a
 
-OBJS   = ether.o i2c.o interrupts.o serial.o
+OBJS   = bcm5221.o dm9161.o ether.o i2c.o interrupts.o \
+         lxt972.o serial.o usb_ohci.o
 SOBJS  = lowlevel_init.o
 
 all:   .depend $(LIB)
@@ -35,8 +36,8 @@ $(LIB):       $(OBJS) $(SOBJS)
 
 #########################################################################
 
-.depend:       Makefile $(OBJS:.o=.c)
-               $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
 
 sinclude .depend
 
similarity index 57%
rename from board/cmc_pu2/dm9161.c
rename to cpu/arm920t/at91rm9200/bcm5221.c
index 73537c037d18d5ea0034b0807de466a887778e91..6db143562c89406fde77ee1ee09a035410e5a048 100644 (file)
@@ -1,4 +1,9 @@
 /*
+ * Broadcom BCM5221 Ethernet PHY
+ *
+ * (C) Copyright 2005 REA Elektronik GmbH <www.rea.de>
+ * Anders Larsen <alarsen@rea.de>
+ *
  * (C) Copyright 2003
  * Author : Hamid Ikdoumi (Atmel)
  *
@@ -23,7 +28,7 @@
 
 #include <at91rm9200_net.h>
 #include <net.h>
-#include <dm9161.h>
+#include <bcm5221.h>
 
 #ifdef CONFIG_DRIVER_ETHER
 
@@ -31,7 +36,7 @@
 
 /*
  * Name:
- *     dm9161_IsPhyConnected
+ *     bcm5221_IsPhyConnected
  * Description:
  *     Reads the 2 PHY ID registers
  * Arguments:
  *     TRUE - if id read successfully
  *     FALSE- if error
  */
-static unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
+unsigned int bcm5221_IsPhyConnected (AT91PS_EMAC p_mac)
 {
        unsigned short Id1, Id2;
 
        at91rm9200_EmacEnableMDIO (p_mac);
-       at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID1, &Id1);
-       at91rm9200_EmacReadPhy (p_mac, DM9161_PHYID2, &Id2);
+       at91rm9200_EmacReadPhy (p_mac, BCM5221_PHYID1, &Id1);
+       at91rm9200_EmacReadPhy (p_mac, BCM5221_PHYID2, &Id2);
        at91rm9200_EmacDisableMDIO (p_mac);
 
-       if ((Id1 == (DM9161_PHYID1_OUI >> 6)) &&
-               ((Id2 >> 10) == (DM9161_PHYID1_OUI & DM9161_LSB_MASK)))
+       if ((Id1 == (BCM5221_PHYID1_OUI >> 6)) &&
+               ((Id2 >> 10) == (BCM5221_PHYID1_OUI & BCM5221_LSB_MASK)))
                return TRUE;
 
        return FALSE;
@@ -58,7 +63,7 @@ static unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
 
 /*
  * Name:
- *     dm9161_GetLinkSpeed
+ *     bcm5221_GetLinkSpeed
  * Description:
  *     Link parallel detection status of MAC is checked and set in the
  *     MAC configuration registers
@@ -68,26 +73,26 @@ static unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
  *     TRUE - if link status set succesfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
+unsigned char bcm5221_GetLinkSpeed (AT91PS_EMAC p_mac)
 {
        unsigned short stat1, stat2;
 
-       if (!at91rm9200_EmacReadPhy (p_mac, DM9161_BMSR, &stat1))
+       if (!at91rm9200_EmacReadPhy (p_mac, BCM5221_BMSR, &stat1))
                return FALSE;
 
-       if (!(stat1 & DM9161_LINK_STATUS))      /* link status up? */
+       if (!(stat1 & BCM5221_LINK_STATUS))     /* link status up? */
                return FALSE;
 
-       if (!at91rm9200_EmacReadPhy (p_mac, DM9161_DSCSR, &stat2))
+       if (!at91rm9200_EmacReadPhy (p_mac, BCM5221_ACSR, &stat2))
                return FALSE;
 
-       if ((stat1 & DM9161_100BASE_TX_FD) && (stat2 & DM9161_100FDX)) {
+       if ((stat1 & BCM5221_100BASE_TX_FD) && (stat2 & BCM5221_100) && (stat2 & BCM5221_FDX)) {
                /*set Emac for 100BaseTX and Full Duplex  */
                p_mac->EMAC_CFG |= AT91C_EMAC_SPD | AT91C_EMAC_FD;
                return TRUE;
        }
 
-       if ((stat1 & DM9161_10BASE_T_FD) && (stat2 & DM9161_10FDX)) {
+       if ((stat1 & BCM5221_10BASE_T_FD) && !(stat2 & BCM5221_100) && (stat2 & BCM5221_FDX)) {
                /*set MII for 10BaseT and Full Duplex  */
                p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
                                ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
@@ -95,7 +100,7 @@ static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
                return TRUE;
        }
 
-       if ((stat1 & DM9161_100BASE_T4_HD) && (stat2 & DM9161_100HDX)) {
+       if ((stat1 & BCM5221_100BASE_TX_HD) && (stat2 & BCM5221_100) && !(stat2 & BCM5221_FDX)) {
                /*set MII for 100BaseTX and Half Duplex  */
                p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
                                ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
@@ -103,7 +108,7 @@ static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
                return TRUE;
        }
 
-       if ((stat1 & DM9161_10BASE_T_HD) && (stat2 & DM9161_10HDX)) {
+       if ((stat1 & BCM5221_10BASE_T_HD) && !(stat2 & BCM5221_100) && !(stat2 & BCM5221_FDX)) {
                /*set MII for 10BaseT and Half Duplex  */
                p_mac->EMAC_CFG &= ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
                return TRUE;
@@ -114,7 +119,7 @@ static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
 
 /*
  * Name:
- *     dm9161_InitPhy
+ *     bcm5221_InitPhy
  * Description:
  *     MAC starts checking its link by using parallel detection and
  *     Autonegotiation and the same is set in the MAC configuration registers
@@ -124,24 +129,26 @@ static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
  *     TRUE - if link status set succesfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
+unsigned char bcm5221_InitPhy (AT91PS_EMAC p_mac)
 {
-       UCHAR ret = TRUE;
+       unsigned char ret = TRUE;
        unsigned short IntValue;
 
        at91rm9200_EmacEnableMDIO (p_mac);
 
-       if (!dm9161_GetLinkSpeed (p_mac)) {
+       if (!bcm5221_GetLinkSpeed (p_mac)) {
                /* Try another time */
-               ret = dm9161_GetLinkSpeed (p_mac);
+               ret = bcm5221_GetLinkSpeed (p_mac);
        }
 
        /* Disable PHY Interrupts */
-       at91rm9200_EmacReadPhy (p_mac, DM9161_MDINTR, &IntValue);
-       /* clear FDX, SPD, Link, INTR masks */
-       IntValue &= ~(DM9161_FDX_MASK | DM9161_SPD_MASK |
-                     DM9161_LINK_MASK | DM9161_INTR_MASK);
-       at91rm9200_EmacWritePhy (p_mac, DM9161_MDINTR, &IntValue);
+       at91rm9200_EmacReadPhy (p_mac, BCM5221_INTR, &IntValue);
+       /* clear FDX LED and INTR Enable */
+       IntValue &= ~(BCM5221_FDX_LED | BCM5221_INTR_ENABLE);
+       /* set FDX, SPD, Link, INTR masks */
+       IntValue |= (BCM5221_FDX_MASK  | BCM5221_SPD_MASK |
+                    BCM5221_LINK_MASK | BCM5221_INTR_MASK);
+       at91rm9200_EmacWritePhy (p_mac, BCM5221_INTR, &IntValue);
        at91rm9200_EmacDisableMDIO (p_mac);
 
        return (ret);
@@ -150,7 +157,7 @@ static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
 
 /*
  * Name:
- *     dm9161_AutoNegotiate
+ *     bcm5221_AutoNegotiate
  * Description:
  *     MAC Autonegotiates with the partner status of same is set in the
  *     MAC configuration registers
@@ -160,56 +167,57 @@ static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
  *     TRUE - if link status set successfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
+unsigned char bcm5221_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
 {
        unsigned short value;
        unsigned short PhyAnar;
        unsigned short PhyAnalpar;
 
-       /* Set dm9161 control register */
-       if (!at91rm9200_EmacReadPhy (p_mac, DM9161_BMCR, &value))
+       /* Set bcm5221 control register */
+       if (!at91rm9200_EmacReadPhy (p_mac, BCM5221_BMCR, &value))
                return FALSE;
-       value &= ~DM9161_AUTONEG;       /* remove autonegotiation enable */
-       value |= DM9161_ISOLATE;        /* Electrically isolate PHY */
-       if (!at91rm9200_EmacWritePhy (p_mac, DM9161_BMCR, &value))
+       value &= ~BCM5221_AUTONEG;      /* remove autonegotiation enable */
+       value |=  BCM5221_ISOLATE;      /* Electrically isolate PHY */
+       if (!at91rm9200_EmacWritePhy (p_mac, BCM5221_BMCR, &value))
                return FALSE;
 
        /* Set the Auto_negotiation Advertisement Register */
-       /* MII advertising for Next page, 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3 */
-       PhyAnar = DM9161_NP | DM9161_TX_FDX | DM9161_TX_HDX |
-                 DM9161_10_FDX | DM9161_10_HDX | DM9161_AN_IEEE_802_3;
-       if (!at91rm9200_EmacWritePhy (p_mac, DM9161_ANAR, &PhyAnar))
+       /* MII advertising for 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3 */
+       PhyAnar = BCM5221_TX_FDX | BCM5221_TX_HDX |
+                 BCM5221_10_FDX | BCM5221_10_HDX | BCM5221_AN_IEEE_802_3;
+       if (!at91rm9200_EmacWritePhy (p_mac, BCM5221_ANAR, &PhyAnar))
                return FALSE;
 
        /* Read the Control Register     */
-       if (!at91rm9200_EmacReadPhy (p_mac, DM9161_BMCR, &value))
+       if (!at91rm9200_EmacReadPhy (p_mac, BCM5221_BMCR, &value))
                return FALSE;
 
-       value |= DM9161_SPEED_SELECT | DM9161_AUTONEG | DM9161_DUPLEX_MODE;
-       if (!at91rm9200_EmacWritePhy (p_mac, DM9161_BMCR, &value))
+       value |= BCM5221_SPEED_SELECT | BCM5221_AUTONEG | BCM5221_DUPLEX_MODE;
+       if (!at91rm9200_EmacWritePhy (p_mac, BCM5221_BMCR, &value))
                return FALSE;
        /* Restart Auto_negotiation  */
-       value |= DM9161_RESTART_AUTONEG;
-       if (!at91rm9200_EmacWritePhy (p_mac, DM9161_BMCR, &value))
+       value |= BCM5221_RESTART_AUTONEG;
+       value &= ~BCM5221_ISOLATE;
+       if (!at91rm9200_EmacWritePhy (p_mac, BCM5221_BMCR, &value))
                return FALSE;
 
        /*check AutoNegotiate complete */
        udelay (10000);
-       at91rm9200_EmacReadPhy (p_mac, DM9161_BMSR, &value);
-       if (!(value & DM9161_AUTONEG_COMP))
+       at91rm9200_EmacReadPhy (p_mac, BCM5221_BMSR, &value);
+       if (!(value & BCM5221_AUTONEG_COMP))
                return FALSE;
 
        /* Get the AutoNeg Link partner base page */
-       if (!at91rm9200_EmacReadPhy (p_mac, DM9161_ANLPAR, &PhyAnalpar))
+       if (!at91rm9200_EmacReadPhy (p_mac, BCM5221_ANLPAR, &PhyAnalpar))
                return FALSE;
 
-       if ((PhyAnar & DM9161_TX_FDX) && (PhyAnalpar & DM9161_TX_FDX)) {
+       if ((PhyAnar & BCM5221_TX_FDX) && (PhyAnalpar & BCM5221_TX_FDX)) {
                /*set MII for 100BaseTX and Full Duplex  */
                p_mac->EMAC_CFG |= AT91C_EMAC_SPD | AT91C_EMAC_FD;
                return TRUE;
        }
 
-       if ((PhyAnar & DM9161_10_FDX) && (PhyAnalpar & DM9161_10_FDX)) {
+       if ((PhyAnar & BCM5221_10_FDX) && (PhyAnalpar & BCM5221_10_FDX)) {
                /*set MII for 10BaseT and Full Duplex  */
                p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
                                ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
@@ -219,25 +227,6 @@ static UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
        return FALSE;
 }
 
-
-/*
- * Name:
- *     at91rm92000_GetPhyInterface
- * Description:
- *     Initialise the interface functions to the PHY
- * Arguments:
- *     None
- * Return value:
- *     None
- */
-void at91rm92000_GetPhyInterface(AT91PS_PhyOps p_phyops)
-{
-       p_phyops->Init = dm9161_InitPhy;
-       p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
-       p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
-       p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
-}
-
 #endif /* CONFIG_COMMANDS & CFG_CMD_NET */
 
 #endif /* CONFIG_DRIVER_ETHER */
similarity index 88%
rename from board/at91rm9200dk/dm9161.c
rename to cpu/arm920t/at91rm9200/dm9161.c
index 73537c037d18d5ea0034b0807de466a887778e91..4b13c237c7044ccc21475faf51f5b8f9c8269060 100644 (file)
@@ -40,7 +40,7 @@
  *     TRUE - if id read successfully
  *     FALSE- if error
  */
-static unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
+unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
 {
        unsigned short Id1, Id2;
 
@@ -68,7 +68,7 @@ static unsigned int dm9161_IsPhyConnected (AT91PS_EMAC p_mac)
  *     TRUE - if link status set succesfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
+UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
 {
        unsigned short stat1, stat2;
 
@@ -124,7 +124,7 @@ static UCHAR dm9161_GetLinkSpeed (AT91PS_EMAC p_mac)
  *     TRUE - if link status set succesfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
+UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
 {
        UCHAR ret = TRUE;
        unsigned short IntValue;
@@ -138,9 +138,9 @@ static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
 
        /* Disable PHY Interrupts */
        at91rm9200_EmacReadPhy (p_mac, DM9161_MDINTR, &IntValue);
-       /* clear FDX, SPD, Link, INTR masks */
-       IntValue &= ~(DM9161_FDX_MASK | DM9161_SPD_MASK |
-                     DM9161_LINK_MASK | DM9161_INTR_MASK);
+       /* set FDX, SPD, Link, INTR masks */
+       IntValue |= (DM9161_FDX_MASK | DM9161_SPD_MASK |
+                    DM9161_LINK_MASK | DM9161_INTR_MASK);
        at91rm9200_EmacWritePhy (p_mac, DM9161_MDINTR, &IntValue);
        at91rm9200_EmacDisableMDIO (p_mac);
 
@@ -160,7 +160,7 @@ static UCHAR dm9161_InitPhy (AT91PS_EMAC p_mac)
  *     TRUE - if link status set successfully
  *     FALSE - if link status not set
  */
-static UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
+UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
 {
        unsigned short value;
        unsigned short PhyAnar;
@@ -190,6 +190,7 @@ static UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
                return FALSE;
        /* Restart Auto_negotiation  */
        value |= DM9161_RESTART_AUTONEG;
+       value &= ~DM9161_ISOLATE;
        if (!at91rm9200_EmacWritePhy (p_mac, DM9161_BMCR, &value))
                return FALSE;
 
@@ -219,25 +220,6 @@ static UCHAR dm9161_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
        return FALSE;
 }
 
-
-/*
- * Name:
- *     at91rm92000_GetPhyInterface
- * Description:
- *     Initialise the interface functions to the PHY
- * Arguments:
- *     None
- * Return value:
- *     None
- */
-void at91rm92000_GetPhyInterface(AT91PS_PhyOps p_phyops)
-{
-       p_phyops->Init = dm9161_InitPhy;
-       p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
-       p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
-       p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
-}
-
 #endif /* CONFIG_COMMANDS & CFG_CMD_NET */
 
 #endif /* CONFIG_DRIVER_ETHER */
index 0bc1d89ed09ee74666e6cd2455a1965b9a9e6f87..67008d0b9112ece297408d2f5000b164a45e4ec1 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <at91rm9200_net.h>
 #include <net.h>
+#include <miiphy.h>
 
 /* ----- Ethernet Buffer definitions ----- */
 
@@ -44,21 +45,19 @@ typedef struct {
 #define RBF_LOCAL2    (1<<24)
 #define RBF_LOCAL1    (1<<23)
 
-/* Emac Buffers in last 512KBytes of SDRAM*/
-/* Be careful, buffer size is limited to 512KBytes !!! */
-#define RBF_FRAMEMAX 100
-/*#define RBF_FRAMEMEM 0x200000 */
-#define RBF_FRAMEMEM 0x21F80000
+#define RBF_FRAMEMAX 64
 #define RBF_FRAMELEN 0x600
 
-#define RBF_FRAMEBTD RBF_FRAMEMEM
-#define RBF_FRAMEBUF (RBF_FRAMEMEM + RBF_FRAMEMAX*sizeof(rbf_t))
-
-
 #ifdef CONFIG_DRIVER_ETHER
 
 #if (CONFIG_COMMANDS & CFG_CMD_NET)
 
+/* alignment as per Errata #11 (64 bytes) is insufficient! */
+rbf_t rbfdt[RBF_FRAMEMAX] __attribute((aligned(512)));
+rbf_t *rbfp;
+
+unsigned char rbf_framebuf[RBF_FRAMEMAX][RBF_FRAMELEN] __attribute((aligned(4)));
+
 /* structure to interface the PHY */
 AT91S_PhyOps PhyOps;
 
@@ -152,10 +151,6 @@ UCHAR at91rm9200_EmacWritePhy (AT91PS_EMAC p_mac,
        return TRUE;
 }
 
-
-rbf_t *rbfdt;
-rbf_t *rbfp;
-
 int eth_init (bd_t * bd)
 {
        int ret;
@@ -188,9 +183,8 @@ int eth_init (bd_t * bd)
        p_mac->EMAC_CFG |= AT91C_EMAC_CSR;      /* Clear statistics */
 
        /* Init Ehternet buffers */
-       rbfdt = (rbf_t *) RBF_FRAMEBTD;
        for (i = 0; i < RBF_FRAMEMAX; i++) {
-               rbfdt[i].addr = RBF_FRAMEBUF + RBF_FRAMELEN * i;
+               rbfdt[i].addr = (unsigned long)rbf_framebuf[i];
                rbfdt[i].size = 0;
        }
        rbfdt[RBF_FRAMEMAX - 1].addr |= RBF_WRAP;
@@ -217,7 +211,7 @@ int eth_init (bd_t * bd)
 
        p_mac->EMAC_CTL |= AT91C_EMAC_TE | AT91C_EMAC_RE;
 
-       at91rm92000_GetPhyInterface (& PhyOps);
+       at91rm9200_GetPhyInterface (& PhyOps);
 
        if (!PhyOps.IsPhyConnected (p_mac))
                printf ("PHY not connected!!\n\r");
@@ -271,8 +265,9 @@ void eth_halt (void)
 {
 };
 
-#if (CONFIG_COMMANDS & CFG_CMD_MII)
-int  miiphy_read(unsigned char addr, unsigned char reg, unsigned short * value)
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+int  at91rm9200_miiphy_read(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short * value)
 {
        at91rm9200_EmacEnableMDIO (p_mac);
        at91rm9200_EmacReadPhy (p_mac, reg, value);
@@ -280,14 +275,24 @@ int  miiphy_read(unsigned char addr, unsigned char reg, unsigned short * value)
        return 0;
 }
 
-int  miiphy_write(unsigned char addr, unsigned char reg, unsigned short value)
+int  at91rm9200_miiphy_write(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
 {
        at91rm9200_EmacEnableMDIO (p_mac);
        at91rm9200_EmacWritePhy (p_mac, reg, &value);
        at91rm9200_EmacDisableMDIO (p_mac);
        return 0;
 }
-#endif /* CONFIG_COMMANDS & CFG_CMD_MII */
+
+#endif /* defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) */
+
+int at91rm9200_miiphy_initialize(bd_t *bis)
+{
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_register("at91rm9200phy", at91rm9200_miiphy_read, at91rm9200_miiphy_write);
+#endif
+       return 0;
+}
 
 #endif /* CONFIG_COMMANDS & CFG_CMD_NET */
 
index 569274082f2afbe3e5ef86daefed4abac8b3116a..2565998e484d7ed0f70a1ad2ee7ce762220990dd 100644 (file)
@@ -65,9 +65,8 @@ at91_xfer(unsigned char chip, unsigned int addr, int alen,
                | ((rw == 1) ? AT91C_TWI_MREAD : 0);
 
        /* Set TWI Internal Address Register with first messages data field */
-       /* only one address byte is supported  */
        if (alen > 0)
-               twi->TWI_IADR = addr & 0xff;
+               twi->TWI_IADR = addr;
 
        length = len;
        buf = buffer;
index 05887adc0c4886570cb538531b19082e22608bc5..1902bd02c5d236e526d0bc2133b2c07dd954e843 100644 (file)
@@ -123,6 +123,11 @@ LoopOsc:
        cmp     r2, r0
        bne     2b
 
+       /* switch from FastBus to Asynchronous clock mode */
+       mrc     p15, 0, r0, c1, c0, 0
+       orr     r0, r0, #0xC0000000     @ set bit 31 (iA) and 30 (nF)
+       mcr     p15, 0, r0, c1, c0, 0
+
        /* everything is fine now */
        mov     pc, lr
 
diff --git a/cpu/arm920t/at91rm9200/lxt972.c b/cpu/arm920t/at91rm9200/lxt972.c
new file mode 100644 (file)
index 0000000..f12c59c
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ *
+ * (C) Copyright 2003
+ * Author : Hamid Ikdoumi (Atmel)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Adapted for KwikByte KB920x board: 22APR2005
+ */
+
+#include <common.h>
+#include <at91rm9200_net.h>
+#include <net.h>
+#include <lxt971a.h>
+
+#ifdef CONFIG_DRIVER_ETHER
+
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+/*
+ * Name:
+ *     lxt972_IsPhyConnected
+ * Description:
+ *     Reads the 2 PHY ID registers
+ * Arguments:
+ *     p_mac - pointer to AT91S_EMAC struct
+ * Return value:
+ *     TRUE - if id read successfully
+ *     FALSE- if error
+ */
+unsigned int lxt972_IsPhyConnected (AT91PS_EMAC p_mac)
+{
+       unsigned short Id1, Id2;
+
+       at91rm9200_EmacEnableMDIO (p_mac);
+       at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_ID1, &Id1);
+       at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_ID2, &Id2);
+       at91rm9200_EmacDisableMDIO (p_mac);
+
+       if ((Id1 == (0x0013)) && ((Id2  & 0xFFF0) == 0x78E0))
+               return TRUE;
+
+       return FALSE;
+}
+
+/*
+ * Name:
+ *     lxt972_GetLinkSpeed
+ * Description:
+ *     Link parallel detection status of MAC is checked and set in the
+ *     MAC configuration registers
+ * Arguments:
+ *     p_mac - pointer to MAC
+ * Return value:
+ *     TRUE - if link status set succesfully
+ *     FALSE - if link status not set
+ */
+UCHAR lxt972_GetLinkSpeed (AT91PS_EMAC p_mac)
+{
+       unsigned short stat1;
+
+       if (!at91rm9200_EmacReadPhy (p_mac, PHY_LXT971_STAT2, &stat1))
+               return FALSE;
+
+       if (!(stat1 & PHY_LXT971_STAT2_LINK))   /* link status up? */
+               return FALSE;
+
+       if (stat1 & PHY_LXT971_STAT2_100BTX) {
+
+               if (stat1 & PHY_LXT971_STAT2_DUPLEX_MODE) {
+
+                       /*set Emac for 100BaseTX and Full Duplex  */
+                       p_mac->EMAC_CFG |= AT91C_EMAC_SPD | AT91C_EMAC_FD;
+               } else {
+
+                       /*set Emac for 100BaseTX and Half Duplex  */
+                       p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
+                                       ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
+                                       | AT91C_EMAC_SPD;
+               }
+
+               return TRUE;
+
+       } else {
+
+               if (stat1 & PHY_LXT971_STAT2_DUPLEX_MODE) {
+
+                       /*set MII for 10BaseT and Full Duplex  */
+                       p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
+                                       ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
+                                       | AT91C_EMAC_FD;
+               } else {
+
+                       /*set MII for 10BaseT and Half Duplex  */
+                       p_mac->EMAC_CFG &= ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
+               }
+
+               return TRUE;
+       }
+
+       return FALSE;
+}
+
+
+/*
+ * Name:
+ *     lxt972_InitPhy
+ * Description:
+ *     MAC starts checking its link by using parallel detection and
+ *     Autonegotiation and the same is set in the MAC configuration registers
+ * Arguments:
+ *     p_mac - pointer to struct AT91S_EMAC
+ * Return value:
+ *     TRUE - if link status set succesfully
+ *     FALSE - if link status not set
+ */
+UCHAR lxt972_InitPhy (AT91PS_EMAC p_mac)
+{
+       UCHAR ret = TRUE;
+
+       at91rm9200_EmacEnableMDIO (p_mac);
+
+       if (!lxt972_GetLinkSpeed (p_mac)) {
+               /* Try another time */
+               ret = lxt972_GetLinkSpeed (p_mac);
+       }
+
+       /* Disable PHY Interrupts */
+       at91rm9200_EmacWritePhy (p_mac, PHY_LXT971_INT_ENABLE, 0);
+
+       at91rm9200_EmacDisableMDIO (p_mac);
+
+       return (ret);
+}
+
+
+/*
+ * Name:
+ *     lxt972_AutoNegotiate
+ * Description:
+ *     MAC Autonegotiates with the partner status of same is set in the
+ *     MAC configuration registers
+ * Arguments:
+ *     dev - pointer to struct net_device
+ * Return value:
+ *     TRUE - if link status set successfully
+ *     FALSE - if link status not set
+ */
+UCHAR lxt972_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
+{
+       unsigned short value;
+
+       /* Set lxt972 control register */
+       if (!at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_CTRL, &value))
+               return FALSE;
+
+       /* Restart Auto_negotiation  */
+       value |= PHY_COMMON_CTRL_RES_AUTO;
+       if (!at91rm9200_EmacWritePhy (p_mac, PHY_COMMON_CTRL, &value))
+               return FALSE;
+
+       /*check AutoNegotiate complete */
+       udelay (10000);
+       at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_STAT, &value);
+       if (!(value & PHY_COMMON_STAT_AN_COMP))
+               return FALSE;
+
+       return (lxt972_GetLinkSpeed (p_mac));
+}
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
+
+#endif /* CONFIG_DRIVER_ETHER */
diff --git a/cpu/arm920t/at91rm9200/usb_ohci.c b/cpu/arm920t/at91rm9200/usb_ohci.c
new file mode 100644 (file)
index 0000000..5b2c56c
--- /dev/null
@@ -0,0 +1,1635 @@
+/*
+ * URB OHCI HCD (Host Controller Driver) for USB on the AT91RM9200.
+ *
+ * (C) Copyright 2003
+ * Gary Jennejohn, DENX Software Engineering <gj@denx.de>
+ *
+ * Note: Much of this code has been derived from Linux 2.4
+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ * (C) Copyright 2000-2002 David Brownell
+ *
+ * Modified for the MP2USB by (C) Copyright 2005 Eric Benard
+ * ebenard@eukrea.com - based on s3c24x0's 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
+ *
+ */
+/*
+ * IMPORTANT NOTES
+ * 1 - you MUST define LITTLEENDIAN in the configuration file for the
+ *     board or this driver will NOT work!
+ * 2 - this driver is intended for use with USB Mass Storage Devices
+ *     (BBB) ONLY. There is NO support for Interrupt or Isochronous pipes!
+ * 3 - when running on a PQFP208 AT91RM9200, define CONFIG_AT91C_PQFP_UHPBUG
+ *     to activate workaround for bug #41 or this driver will NOT work!
+ */
+
+#include <common.h>
+/* #include <pci.h> no PCI on the S3C24X0 */
+
+#ifdef CONFIG_USB_OHCI
+
+#include <asm/arch/hardware.h>
+
+#include <malloc.h>
+#include <usb.h>
+#include "usb_ohci.h"
+
+#define OHCI_USE_NPS           /* force NoPowerSwitching mode */
+#undef OHCI_VERBOSE_DEBUG      /* not always helpful */
+
+/* For initializing controller (mask in an HCFS mode too) */
+#define OHCI_CONTROL_INIT \
+       (OHCI_CTRL_CBSR & 0x3) | OHCI_CTRL_IE | OHCI_CTRL_PLE
+
+#define readl(a) (*((vu_long *)(a)))
+#define writel(a, b) (*((vu_long *)(b)) = ((vu_long)a))
+
+#define min_t(type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
+
+#undef DEBUG
+#ifdef DEBUG
+#define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)
+#else
+#define dbg(format, arg...) do {} while(0)
+#endif /* DEBUG */
+#define err(format, arg...) printf("ERROR: " format "\n", ## arg)
+#undef SHOW_INFO
+#ifdef SHOW_INFO
+#define info(format, arg...) printf("INFO: " format "\n", ## arg)
+#else
+#define info(format, arg...) do {} while(0)
+#endif
+
+#define m16_swap(x) swap_16(x)
+#define m32_swap(x) swap_32(x)
+
+/* global ohci_t */
+static ohci_t gohci;
+/* this must be aligned to a 256 byte boundary */
+struct ohci_hcca ghcca[1];
+/* a pointer to the aligned storage */
+struct ohci_hcca *phcca;
+/* this allocates EDs for all possible endpoints */
+struct ohci_device ohci_dev;
+/* urb_priv */
+urb_priv_t urb_priv;
+/* RHSC flag */
+int got_rhsc;
+/* device which was disconnected */
+struct usb_device *devgone;
+
+/*-------------------------------------------------------------------------*/
+
+/* AMD-756 (D2 rev) reports corrupt register contents in some cases.
+ * The erratum (#4) description is incorrect.  AMD's workaround waits
+ * till some bits (mostly reserved) are clear; ok for all revs.
+ */
+#define OHCI_QUIRK_AMD756 0xabcd
+#define read_roothub(hc, register, mask) ({ \
+       u32 temp = readl (&hc->regs->roothub.register); \
+       if (hc->flags & OHCI_QUIRK_AMD756) \
+               while (temp & mask) \
+                       temp = readl (&hc->regs->roothub.register); \
+       temp; })
+
+static u32 roothub_a (struct ohci *hc)
+       { return read_roothub (hc, a, 0xfc0fe000); }
+static inline u32 roothub_b (struct ohci *hc)
+       { return readl (&hc->regs->roothub.b); }
+static inline u32 roothub_status (struct ohci *hc)
+       { return readl (&hc->regs->roothub.status); }
+static u32 roothub_portstatus (struct ohci *hc, int i)
+       { return read_roothub (hc, portstatus [i], 0xffe0fce0); }
+
+
+/* forward declaration */
+static int hc_interrupt (void);
+static void
+td_submit_job (struct usb_device * dev, unsigned long pipe, void * buffer,
+       int transfer_len, struct devrequest * setup, urb_priv_t * urb, int interval);
+
+/*-------------------------------------------------------------------------*
+ * URB support functions
+ *-------------------------------------------------------------------------*/
+
+/* free HCD-private data associated with this URB */
+
+static void urb_free_priv (urb_priv_t * urb)
+{
+       int             i;
+       int             last;
+       struct td       * td;
+
+       last = urb->length - 1;
+       if (last >= 0) {
+               for (i = 0; i <= last; i++) {
+                       td = urb->td[i];
+                       if (td) {
+                               td->usb_dev = NULL;
+                               urb->td[i] = NULL;
+                       }
+               }
+       }
+}
+
+/*-------------------------------------------------------------------------*/
+
+#ifdef DEBUG
+static int sohci_get_current_frame_number (struct usb_device * dev);
+
+/* debug| print the main components of an URB
+ * small: 0) header + data packets 1) just header */
+
+static void pkt_print (struct usb_device * dev, unsigned long pipe, void * buffer,
+       int transfer_len, struct devrequest * setup, char * str, int small)
+{
+       urb_priv_t * purb = &urb_priv;
+
+       dbg("%s URB:[%4x] dev:%2d,ep:%2d-%c,type:%s,len:%d/%d stat:%#lx",
+                       str,
+                       sohci_get_current_frame_number (dev),
+                       usb_pipedevice (pipe),
+                       usb_pipeendpoint (pipe),
+                       usb_pipeout (pipe)? 'O': 'I',
+                       usb_pipetype (pipe) < 2? (usb_pipeint (pipe)? "INTR": "ISOC"):
+                               (usb_pipecontrol (pipe)? "CTRL": "BULK"),
+                       purb->actual_length,
+                       transfer_len, dev->status);
+#ifdef OHCI_VERBOSE_DEBUG
+       if (!small) {
+               int i, len;
+
+               if (usb_pipecontrol (pipe)) {
+                       printf (__FILE__ ": cmd(8):");
+                       for (i = 0; i < 8 ; i++)
+                               printf (" %02x", ((__u8 *) setup) [i]);
+                       printf ("\n");
+               }
+               if (transfer_len > 0 && buffer) {
+                       printf (__FILE__ ": data(%d/%d):",
+                               purb->actual_length,
+                               transfer_len);
+                       len = usb_pipeout (pipe)?
+                                       transfer_len: purb->actual_length;
+                       for (i = 0; i < 16 && i < len; i++)
+                               printf (" %02x", ((__u8 *) buffer) [i]);
+                       printf ("%s\n", i < len? "...": "");
+               }
+       }
+#endif
+}
+
+/* just for debugging; prints non-empty branches of the int ed tree inclusive iso eds*/
+void ep_print_int_eds (ohci_t *ohci, char * str) {
+       int i, j;
+        __u32 * ed_p;
+       for (i= 0; i < 32; i++) {
+               j = 5;
+               ed_p = &(ohci->hcca->int_table [i]);
+               if (*ed_p == 0)
+                   continue;
+               printf (__FILE__ ": %s branch int %2d(%2x):", str, i, i);
+               while (*ed_p != 0 && j--) {
+                       ed_t *ed = (ed_t *)m32_swap(ed_p);
+                       printf (" ed: %4x;", ed->hwINFO);
+                       ed_p = &ed->hwNextED;
+               }
+               printf ("\n");
+       }
+}
+
+static void ohci_dump_intr_mask (char *label, __u32 mask)
+{
+       dbg ("%s: 0x%08x%s%s%s%s%s%s%s%s%s",
+               label,
+               mask,
+               (mask & OHCI_INTR_MIE) ? " MIE" : "",
+               (mask & OHCI_INTR_OC) ? " OC" : "",
+               (mask & OHCI_INTR_RHSC) ? " RHSC" : "",
+               (mask & OHCI_INTR_FNO) ? " FNO" : "",
+               (mask & OHCI_INTR_UE) ? " UE" : "",
+               (mask & OHCI_INTR_RD) ? " RD" : "",
+               (mask & OHCI_INTR_SF) ? " SF" : "",
+               (mask & OHCI_INTR_WDH) ? " WDH" : "",
+               (mask & OHCI_INTR_SO) ? " SO" : ""
+               );
+}
+
+static void maybe_print_eds (char *label, __u32 value)
+{
+       ed_t *edp = (ed_t *)value;
+
+       if (value) {
+               dbg ("%s %08x", label, value);
+               dbg ("%08x", edp->hwINFO);
+               dbg ("%08x", edp->hwTailP);
+               dbg ("%08x", edp->hwHeadP);
+               dbg ("%08x", edp->hwNextED);
+       }
+}
+
+static char * hcfs2string (int state)
+{
+       switch (state) {
+               case OHCI_USB_RESET:    return "reset";
+               case OHCI_USB_RESUME:   return "resume";
+               case OHCI_USB_OPER:     return "operational";
+               case OHCI_USB_SUSPEND:  return "suspend";
+       }
+       return "?";
+}
+
+/* dump control and status registers */
+static void ohci_dump_status (ohci_t *controller)
+{
+       struct ohci_regs        *regs = controller->regs;
+       __u32                   temp;
+
+       temp = readl (&regs->revision) & 0xff;
+       if (temp != 0x10)
+               dbg ("spec %d.%d", (temp >> 4), (temp & 0x0f));
+
+       temp = readl (&regs->control);
+       dbg ("control: 0x%08x%s%s%s HCFS=%s%s%s%s%s CBSR=%d", temp,
+               (temp & OHCI_CTRL_RWE) ? " RWE" : "",
+               (temp & OHCI_CTRL_RWC) ? " RWC" : "",
+               (temp & OHCI_CTRL_IR) ? " IR" : "",
+               hcfs2string (temp & OHCI_CTRL_HCFS),
+               (temp & OHCI_CTRL_BLE) ? " BLE" : "",
+               (temp & OHCI_CTRL_CLE) ? " CLE" : "",
+               (temp & OHCI_CTRL_IE) ? " IE" : "",
+               (temp & OHCI_CTRL_PLE) ? " PLE" : "",
+               temp & OHCI_CTRL_CBSR
+               );
+
+       temp = readl (&regs->cmdstatus);
+       dbg ("cmdstatus: 0x%08x SOC=%d%s%s%s%s", temp,
+               (temp & OHCI_SOC) >> 16,
+               (temp & OHCI_OCR) ? " OCR" : "",
+               (temp & OHCI_BLF) ? " BLF" : "",
+               (temp & OHCI_CLF) ? " CLF" : "",
+               (temp & OHCI_HCR) ? " HCR" : ""
+               );
+
+       ohci_dump_intr_mask ("intrstatus", readl (&regs->intrstatus));
+       ohci_dump_intr_mask ("intrenable", readl (&regs->intrenable));
+
+       maybe_print_eds ("ed_periodcurrent", readl (&regs->ed_periodcurrent));
+
+       maybe_print_eds ("ed_controlhead", readl (&regs->ed_controlhead));
+       maybe_print_eds ("ed_controlcurrent", readl (&regs->ed_controlcurrent));
+
+       maybe_print_eds ("ed_bulkhead", readl (&regs->ed_bulkhead));
+       maybe_print_eds ("ed_bulkcurrent", readl (&regs->ed_bulkcurrent));
+
+       maybe_print_eds ("donehead", readl (&regs->donehead));
+}
+
+static void ohci_dump_roothub (ohci_t *controller, int verbose)
+{
+       __u32                   temp, ndp, i;
+
+       temp = roothub_a (controller);
+       ndp = (temp & RH_A_NDP);
+#ifdef CONFIG_AT91C_PQFP_UHPBUG
+       ndp = (ndp == 2) ? 1:0;
+#endif
+       if (verbose) {
+               dbg ("roothub.a: %08x POTPGT=%d%s%s%s%s%s NDP=%d", temp,
+                       ((temp & RH_A_POTPGT) >> 24) & 0xff,
+                       (temp & RH_A_NOCP) ? " NOCP" : "",
+                       (temp & RH_A_OCPM) ? " OCPM" : "",
+                       (temp & RH_A_DT) ? " DT" : "",
+                       (temp & RH_A_NPS) ? " NPS" : "",
+                       (temp & RH_A_PSM) ? " PSM" : "",
+                       ndp
+                       );
+               temp = roothub_b (controller);
+               dbg ("roothub.b: %08x PPCM=%04x DR=%04x",
+                       temp,
+                       (temp & RH_B_PPCM) >> 16,
+                       (temp & RH_B_DR)
+                       );
+               temp = roothub_status (controller);
+               dbg ("roothub.status: %08x%s%s%s%s%s%s",
+                       temp,
+                       (temp & RH_HS_CRWE) ? " CRWE" : "",
+                       (temp & RH_HS_OCIC) ? " OCIC" : "",
+                       (temp & RH_HS_LPSC) ? " LPSC" : "",
+                       (temp & RH_HS_DRWE) ? " DRWE" : "",
+                       (temp & RH_HS_OCI) ? " OCI" : "",
+                       (temp & RH_HS_LPS) ? " LPS" : ""
+                       );
+       }
+
+       for (i = 0; i < ndp; i++) {
+               temp = roothub_portstatus (controller, i);
+               dbg ("roothub.portstatus [%d] = 0x%08x%s%s%s%s%s%s%s%s%s%s%s%s",
+                       i,
+                       temp,
+                       (temp & RH_PS_PRSC) ? " PRSC" : "",
+                       (temp & RH_PS_OCIC) ? " OCIC" : "",
+                       (temp & RH_PS_PSSC) ? " PSSC" : "",
+                       (temp & RH_PS_PESC) ? " PESC" : "",
+                       (temp & RH_PS_CSC) ? " CSC" : "",
+
+                       (temp & RH_PS_LSDA) ? " LSDA" : "",
+                       (temp & RH_PS_PPS) ? " PPS" : "",
+                       (temp & RH_PS_PRS) ? " PRS" : "",
+                       (temp & RH_PS_POCI) ? " POCI" : "",
+                       (temp & RH_PS_PSS) ? " PSS" : "",
+
+                       (temp & RH_PS_PES) ? " PES" : "",
+                       (temp & RH_PS_CCS) ? " CCS" : ""
+                       );
+       }
+}
+
+static void ohci_dump (ohci_t *controller, int verbose)
+{
+       dbg ("OHCI controller usb-%s state", controller->slot_name);
+
+       /* dumps some of the state we know about */
+       ohci_dump_status (controller);
+       if (verbose)
+               ep_print_int_eds (controller, "hcca");
+       dbg ("hcca frame #%04x", controller->hcca->frame_no);
+       ohci_dump_roothub (controller, 1);
+}
+
+
+#endif /* DEBUG */
+
+/*-------------------------------------------------------------------------*
+ * Interface functions (URB)
+ *-------------------------------------------------------------------------*/
+
+/* get a transfer request */
+
+int sohci_submit_job(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup, int interval)
+{
+       ohci_t *ohci;
+       ed_t * ed;
+       urb_priv_t *purb_priv;
+       int i, size = 0;
+
+       ohci = &gohci;
+
+       /* when controller's hung, permit only roothub cleanup attempts
+        * such as powering down ports */
+       if (ohci->disabled) {
+               err("sohci_submit_job: EPIPE");
+               return -1;
+       }
+
+       /* every endpoint has a ed, locate and fill it */
+       if (!(ed = ep_add_ed (dev, pipe))) {
+               err("sohci_submit_job: ENOMEM");
+               return -1;
+       }
+
+       /* for the private part of the URB we need the number of TDs (size) */
+       switch (usb_pipetype (pipe)) {
+               case PIPE_BULK: /* one TD for every 4096 Byte */
+                       size = (transfer_len - 1) / 4096 + 1;
+                       break;
+               case PIPE_CONTROL: /* 1 TD for setup, 1 for ACK and 1 for every 4096 B */
+                       size = (transfer_len == 0)? 2:
+                                               (transfer_len - 1) / 4096 + 3;
+                       break;
+       }
+
+       if (size >= (N_URB_TD - 1)) {
+               err("need %d TDs, only have %d", size, N_URB_TD);
+               return -1;
+       }
+       purb_priv = &urb_priv;
+       purb_priv->pipe = pipe;
+
+       /* fill the private part of the URB */
+       purb_priv->length = size;
+       purb_priv->ed = ed;
+       purb_priv->actual_length = 0;
+
+       /* allocate the TDs */
+       /* note that td[0] was allocated in ep_add_ed */
+       for (i = 0; i < size; i++) {
+               purb_priv->td[i] = td_alloc (dev);
+               if (!purb_priv->td[i]) {
+                       purb_priv->length = i;
+                       urb_free_priv (purb_priv);
+                       err("sohci_submit_job: ENOMEM");
+                       return -1;
+               }
+       }
+
+       if (ed->state == ED_NEW || (ed->state & ED_DEL)) {
+               urb_free_priv (purb_priv);
+               err("sohci_submit_job: EINVAL");
+               return -1;
+       }
+
+       /* link the ed into a chain if is not already */
+       if (ed->state != ED_OPER)
+               ep_link (ohci, ed);
+
+       /* fill the TDs and link it to the ed */
+       td_submit_job(dev, pipe, buffer, transfer_len, setup, purb_priv, interval);
+
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+#ifdef DEBUG
+/* tell us the current USB frame number */
+
+static int sohci_get_current_frame_number (struct usb_device *usb_dev)
+{
+       ohci_t *ohci = &gohci;
+
+       return m16_swap (ohci->hcca->frame_no);
+}
+#endif
+
+/*-------------------------------------------------------------------------*
+ * ED handling functions
+ *-------------------------------------------------------------------------*/
+
+/* link an ed into one of the HC chains */
+
+static int ep_link (ohci_t *ohci, ed_t *edi)
+{
+       volatile ed_t *ed = edi;
+
+       ed->state = ED_OPER;
+
+       switch (ed->type) {
+       case PIPE_CONTROL:
+               ed->hwNextED = 0;
+               if (ohci->ed_controltail == NULL) {
+                       writel (ed, &ohci->regs->ed_controlhead);
+               } else {
+                       ohci->ed_controltail->hwNextED = m32_swap (ed);
+               }
+               ed->ed_prev = ohci->ed_controltail;
+               if (!ohci->ed_controltail && !ohci->ed_rm_list[0] &&
+                       !ohci->ed_rm_list[1] && !ohci->sleeping) {
+                       ohci->hc_control |= OHCI_CTRL_CLE;
+                       writel (ohci->hc_control, &ohci->regs->control);
+               }
+               ohci->ed_controltail = edi;
+               break;
+
+       case PIPE_BULK:
+               ed->hwNextED = 0;
+               if (ohci->ed_bulktail == NULL) {
+                       writel (ed, &ohci->regs->ed_bulkhead);
+               } else {
+                       ohci->ed_bulktail->hwNextED = m32_swap (ed);
+               }
+               ed->ed_prev = ohci->ed_bulktail;
+               if (!ohci->ed_bulktail && !ohci->ed_rm_list[0] &&
+                       !ohci->ed_rm_list[1] && !ohci->sleeping) {
+                       ohci->hc_control |= OHCI_CTRL_BLE;
+                       writel (ohci->hc_control, &ohci->regs->control);
+               }
+               ohci->ed_bulktail = edi;
+               break;
+       }
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* unlink an ed from one of the HC chains.
+ * just the link to the ed is unlinked.
+ * the link from the ed still points to another operational ed or 0
+ * so the HC can eventually finish the processing of the unlinked ed */
+
+static int ep_unlink (ohci_t *ohci, ed_t *ed)
+{
+       ed->hwINFO |= m32_swap (OHCI_ED_SKIP);
+
+       switch (ed->type) {
+       case PIPE_CONTROL:
+               if (ed->ed_prev == NULL) {
+                       if (!ed->hwNextED) {
+                               ohci->hc_control &= ~OHCI_CTRL_CLE;
+                               writel (ohci->hc_control, &ohci->regs->control);
+                       }
+                       writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_controlhead);
+               } else {
+                       ed->ed_prev->hwNextED = ed->hwNextED;
+               }
+               if (ohci->ed_controltail == ed) {
+                       ohci->ed_controltail = ed->ed_prev;
+               } else {
+                       ((ed_t *)m32_swap (*((__u32 *)&ed->hwNextED)))->ed_prev = ed->ed_prev;
+               }
+               break;
+
+       case PIPE_BULK:
+               if (ed->ed_prev == NULL) {
+                       if (!ed->hwNextED) {
+                               ohci->hc_control &= ~OHCI_CTRL_BLE;
+                               writel (ohci->hc_control, &ohci->regs->control);
+                       }
+                       writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_bulkhead);
+               } else {
+                       ed->ed_prev->hwNextED = ed->hwNextED;
+               }
+               if (ohci->ed_bulktail == ed) {
+                       ohci->ed_bulktail = ed->ed_prev;
+               } else {
+                       ((ed_t *)m32_swap (*((__u32 *)&ed->hwNextED)))->ed_prev = ed->ed_prev;
+               }
+               break;
+       }
+       ed->state = ED_UNLINK;
+       return 0;
+}
+
+
+/*-------------------------------------------------------------------------*/
+
+/* add/reinit an endpoint; this should be done once at the usb_set_configuration command,
+ * but the USB stack is a little bit stateless so we do it at every transaction
+ * if the state of the ed is ED_NEW then a dummy td is added and the state is changed to ED_UNLINK
+ * in all other cases the state is left unchanged
+ * the ed info fields are setted anyway even though most of them should not change */
+
+static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe)
+{
+       td_t *td;
+       ed_t *ed_ret;
+       volatile ed_t *ed;
+
+       ed = ed_ret = &ohci_dev.ed[(usb_pipeendpoint (pipe) << 1) |
+                       (usb_pipecontrol (pipe)? 0: usb_pipeout (pipe))];
+
+       if ((ed->state & ED_DEL) || (ed->state & ED_URB_DEL)) {
+               err("ep_add_ed: pending delete");
+               /* pending delete request */
+               return NULL;
+       }
+
+       if (ed->state == ED_NEW) {
+               ed->hwINFO = m32_swap (OHCI_ED_SKIP); /* skip ed */
+               /* dummy td; end of td list for ed */
+               td = td_alloc (usb_dev);
+               ed->hwTailP = m32_swap (td);
+               ed->hwHeadP = ed->hwTailP;
+               ed->state = ED_UNLINK;
+               ed->type = usb_pipetype (pipe);
+               ohci_dev.ed_cnt++;
+       }
+
+       ed->hwINFO = m32_swap (usb_pipedevice (pipe)
+                       | usb_pipeendpoint (pipe) << 7
+                       | (usb_pipeisoc (pipe)? 0x8000: 0)
+                       | (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
+                       | usb_pipeslow (pipe) << 13
+                       | usb_maxpacket (usb_dev, pipe) << 16);
+
+       return ed_ret;
+}
+
+/*-------------------------------------------------------------------------*
+ * TD handling functions
+ *-------------------------------------------------------------------------*/
+
+/* enqueue next TD for this URB (OHCI spec 5.2.8.2) */
+
+static void td_fill (ohci_t *ohci, unsigned int info,
+       void *data, int len,
+       struct usb_device *dev, int index, urb_priv_t *urb_priv)
+{
+       volatile td_t  *td, *td_pt;
+#ifdef OHCI_FILL_TRACE
+       int i;
+#endif
+
+       if (index > urb_priv->length) {
+               err("index > length");
+               return;
+       }
+       /* use this td as the next dummy */
+       td_pt = urb_priv->td [index];
+       td_pt->hwNextTD = 0;
+
+       /* fill the old dummy TD */
+       td = urb_priv->td [index] = (td_t *)(m32_swap (urb_priv->ed->hwTailP) & ~0xf);
+
+       td->ed = urb_priv->ed;
+       td->next_dl_td = NULL;
+       td->index = index;
+       td->data = (__u32)data;
+#ifdef OHCI_FILL_TRACE
+       if ((usb_pipetype(urb_priv->pipe) == PIPE_BULK) && usb_pipeout(urb_priv->pipe)) {
+               for (i = 0; i < len; i++)
+               printf("td->data[%d] %#2x ",i, ((unsigned char *)td->data)[i]);
+               printf("\n");
+       }
+#endif
+       if (!len)
+               data = 0;
+
+       td->hwINFO = m32_swap (info);
+       td->hwCBP = m32_swap (data);
+       if (data)
+               td->hwBE = m32_swap (data + len - 1);
+       else
+               td->hwBE = 0;
+       td->hwNextTD = m32_swap (td_pt);
+       td->hwPSW [0] = m16_swap (((__u32)data & 0x0FFF) | 0xE000);
+
+       /* append to queue */
+       td->ed->hwTailP = td->hwNextTD;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* prepare all TDs of a transfer */
+
+static void td_submit_job (struct usb_device *dev, unsigned long pipe, void *buffer,
+       int transfer_len, struct devrequest *setup, urb_priv_t *urb, int interval)
+{
+       ohci_t *ohci = &gohci;
+       int data_len = transfer_len;
+       void *data;
+       int cnt = 0;
+       __u32 info = 0;
+       unsigned int toggle = 0;
+
+       /* OHCI handles the DATA-toggles itself, we just use the USB-toggle bits for reseting */
+       if(usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe))) {
+               toggle = TD_T_TOGGLE;
+       } else {
+               toggle = TD_T_DATA0;
+               usb_settoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe), 1);
+       }
+       urb->td_cnt = 0;
+       if (data_len)
+               data = buffer;
+       else
+               data = 0;
+
+       switch (usb_pipetype (pipe)) {
+       case PIPE_BULK:
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_OUT : TD_CC | TD_DP_IN ;
+               while(data_len > 4096) {
+                       td_fill (ohci, info | (cnt? TD_T_TOGGLE:toggle), data, 4096, dev, cnt, urb);
+                       data += 4096; data_len -= 4096; cnt++;
+               }
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_OUT : TD_CC | TD_R | TD_DP_IN ;
+               td_fill (ohci, info | (cnt? TD_T_TOGGLE:toggle), data, data_len, dev, cnt, urb);
+               cnt++;
+
+               if (!ohci->sleeping)
+                       writel (OHCI_BLF, &ohci->regs->cmdstatus); /* start bulk list */
+               break;
+
+       case PIPE_CONTROL:
+               info = TD_CC | TD_DP_SETUP | TD_T_DATA0;
+               td_fill (ohci, info, setup, 8, dev, cnt++, urb);
+               if (data_len > 0) {
+                       info = usb_pipeout (pipe)?
+                               TD_CC | TD_R | TD_DP_OUT | TD_T_DATA1 : TD_CC | TD_R | TD_DP_IN | TD_T_DATA1;
+                       /* NOTE:  mishandles transfers >8K, some >4K */
+                       td_fill (ohci, info, data, data_len, dev, cnt++, urb);
+               }
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_IN | TD_T_DATA1: TD_CC | TD_DP_OUT | TD_T_DATA1;
+               td_fill (ohci, info, data, 0, dev, cnt++, urb);
+               if (!ohci->sleeping)
+                       writel (OHCI_CLF, &ohci->regs->cmdstatus); /* start Control list */
+               break;
+       }
+       if (urb->length != cnt)
+               dbg("TD LENGTH %d != CNT %d", urb->length, cnt);
+}
+
+/*-------------------------------------------------------------------------*
+ * Done List handling functions
+ *-------------------------------------------------------------------------*/
+
+
+/* calculate the transfer length and update the urb */
+
+static void dl_transfer_length(td_t * td)
+{
+       __u32 tdINFO, tdBE, tdCBP;
+       urb_priv_t *lurb_priv = &urb_priv;
+
+       tdINFO = m32_swap (td->hwINFO);
+       tdBE   = m32_swap (td->hwBE);
+       tdCBP  = m32_swap (td->hwCBP);
+
+
+       if (!(usb_pipetype (lurb_priv->pipe) == PIPE_CONTROL &&
+           ((td->index == 0) || (td->index == lurb_priv->length - 1)))) {
+               if (tdBE != 0) {
+                       if (td->hwCBP == 0)
+                               lurb_priv->actual_length += tdBE - td->data + 1;
+                       else
+                               lurb_priv->actual_length += tdCBP - td->data;
+               }
+       }
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* replies to the request have to be on a FIFO basis so
+ * we reverse the reversed done-list */
+
+static td_t * dl_reverse_done_list (ohci_t *ohci)
+{
+       __u32 td_list_hc;
+       td_t *td_rev = NULL;
+       td_t *td_list = NULL;
+       urb_priv_t *lurb_priv = NULL;
+
+       td_list_hc = m32_swap (ohci->hcca->done_head) & 0xfffffff0;
+       ohci->hcca->done_head = 0;
+
+       while (td_list_hc) {
+               td_list = (td_t *)td_list_hc;
+
+               if (TD_CC_GET (m32_swap (td_list->hwINFO))) {
+                       lurb_priv = &urb_priv;
+                       dbg(" USB-error/status: %x : %p",
+                                       TD_CC_GET (m32_swap (td_list->hwINFO)), td_list);
+                       if (td_list->ed->hwHeadP & m32_swap (0x1)) {
+                               if (lurb_priv && ((td_list->index + 1) < lurb_priv->length)) {
+                                       td_list->ed->hwHeadP =
+                                               (lurb_priv->td[lurb_priv->length - 1]->hwNextTD & m32_swap (0xfffffff0)) |
+                                                                       (td_list->ed->hwHeadP & m32_swap (0x2));
+                                       lurb_priv->td_cnt += lurb_priv->length - td_list->index - 1;
+                               } else
+                                       td_list->ed->hwHeadP &= m32_swap (0xfffffff2);
+                       }
+               }
+
+               td_list->next_dl_td = td_rev;
+               td_rev = td_list;
+               td_list_hc = m32_swap (td_list->hwNextTD) & 0xfffffff0;
+       }
+       return td_list;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* td done list */
+static int dl_done_list (ohci_t *ohci, td_t *td_list)
+{
+       td_t *td_list_next = NULL;
+       ed_t *ed;
+       int cc = 0;
+       int stat = 0;
+       /* urb_t *urb; */
+       urb_priv_t *lurb_priv;
+       __u32 tdINFO, edHeadP, edTailP;
+
+       while (td_list) {
+               td_list_next = td_list->next_dl_td;
+
+               lurb_priv = &urb_priv;
+               tdINFO = m32_swap (td_list->hwINFO);
+
+               ed = td_list->ed;
+
+               dl_transfer_length(td_list);
+
+               /* error code of transfer */
+               cc = TD_CC_GET (tdINFO);
+               if (cc != 0) {
+                       dbg("ConditionCode %#x", cc);
+                       stat = cc_to_error[cc];
+               }
+
+               if (ed->state != ED_NEW) {
+                       edHeadP = m32_swap (ed->hwHeadP) & 0xfffffff0;
+                       edTailP = m32_swap (ed->hwTailP);
+
+                       /* unlink eds if they are not busy */
+                       if ((edHeadP == edTailP) && (ed->state == ED_OPER))
+                               ep_unlink (ohci, ed);
+               }
+
+               td_list = td_list_next;
+       }
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*
+ * Virtual Root Hub
+ *-------------------------------------------------------------------------*/
+
+/* Device descriptor */
+static __u8 root_hub_dev_des[] =
+{
+       0x12,       /*  __u8  bLength; */
+       0x01,       /*  __u8  bDescriptorType; Device */
+       0x10,       /*  __u16 bcdUSB; v1.1 */
+       0x01,
+       0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
+       0x00,       /*  __u8  bDeviceSubClass; */
+       0x00,       /*  __u8  bDeviceProtocol; */
+       0x08,       /*  __u8  bMaxPacketSize0; 8 Bytes */
+       0x00,       /*  __u16 idVendor; */
+       0x00,
+       0x00,       /*  __u16 idProduct; */
+       0x00,
+       0x00,       /*  __u16 bcdDevice; */
+       0x00,
+       0x00,       /*  __u8  iManufacturer; */
+       0x01,       /*  __u8  iProduct; */
+       0x00,       /*  __u8  iSerialNumber; */
+       0x01        /*  __u8  bNumConfigurations; */
+};
+
+
+/* Configuration descriptor */
+static __u8 root_hub_config_des[] =
+{
+       0x09,       /*  __u8  bLength; */
+       0x02,       /*  __u8  bDescriptorType; Configuration */
+       0x19,       /*  __u16 wTotalLength; */
+       0x00,
+       0x01,       /*  __u8  bNumInterfaces; */
+       0x01,       /*  __u8  bConfigurationValue; */
+       0x00,       /*  __u8  iConfiguration; */
+       0x40,       /*  __u8  bmAttributes;
+                Bit 7: Bus-powered, 6: Self-powered, 5 Remote-wakwup, 4..0: resvd */
+       0x00,       /*  __u8  MaxPower; */
+
+       /* interface */
+       0x09,       /*  __u8  if_bLength; */
+       0x04,       /*  __u8  if_bDescriptorType; Interface */
+       0x00,       /*  __u8  if_bInterfaceNumber; */
+       0x00,       /*  __u8  if_bAlternateSetting; */
+       0x01,       /*  __u8  if_bNumEndpoints; */
+       0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
+       0x00,       /*  __u8  if_bInterfaceSubClass; */
+       0x00,       /*  __u8  if_bInterfaceProtocol; */
+       0x00,       /*  __u8  if_iInterface; */
+
+       /* endpoint */
+       0x07,       /*  __u8  ep_bLength; */
+       0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
+       0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
+       0x03,       /*  __u8  ep_bmAttributes; Interrupt */
+       0x02,       /*  __u16 ep_wMaxPacketSize; ((MAX_ROOT_PORTS + 1) / 8 */
+       0x00,
+       0xff        /*  __u8  ep_bInterval; 255 ms */
+};
+
+static unsigned char root_hub_str_index0[] =
+{
+       0x04,                   /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       0x09,                   /*  __u8  lang ID */
+       0x04,                   /*  __u8  lang ID */
+};
+
+static unsigned char root_hub_str_index1[] =
+{
+       28,                     /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       'O',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'H',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'C',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'I',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'R',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       't',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'H',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'u',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'b',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+};
+
+/* Hub class-specific descriptor is constructed dynamically */
+
+
+/*-------------------------------------------------------------------------*/
+
+#define OK(x)                  len = (x); break
+#ifdef DEBUG
+#define WR_RH_STAT(x)          {info("WR:status %#8x", (x));writel((x), &gohci.regs->roothub.status);}
+#define WR_RH_PORTSTAT(x)      {info("WR:portstatus[%d] %#8x", wIndex-1, (x));writel((x), &gohci.regs->roothub.portstatus[wIndex-1]);}
+#else
+#define WR_RH_STAT(x)          writel((x), &gohci.regs->roothub.status)
+#define WR_RH_PORTSTAT(x)      writel((x), &gohci.regs->roothub.portstatus[wIndex-1])
+#endif
+#define RD_RH_STAT             roothub_status(&gohci)
+#define RD_RH_PORTSTAT         roothub_portstatus(&gohci,wIndex-1)
+
+/* request to virtual root hub */
+
+int rh_check_port_status(ohci_t *controller)
+{
+       __u32 temp, ndp, i;
+       int res;
+
+       res = -1;
+       temp = roothub_a (controller);
+       ndp = (temp & RH_A_NDP);
+#ifdef CONFIG_AT91C_PQFP_UHPBUG
+       ndp = (ndp == 2) ? 1:0;
+#endif
+
+       for (i = 0; i < ndp; i++) {
+               temp = roothub_portstatus (controller, i);
+               /* check for a device disconnect */
+               if (((temp & (RH_PS_PESC | RH_PS_CSC)) ==
+                       (RH_PS_PESC | RH_PS_CSC)) &&
+                       ((temp & RH_PS_CCS) == 0)) {
+                       res = i;
+                       break;
+               }
+       }
+       return res;
+}
+
+static int ohci_submit_rh_msg(struct usb_device *dev, unsigned long pipe,
+               void *buffer, int transfer_len, struct devrequest *cmd)
+{
+       void * data = buffer;
+       int leni = transfer_len;
+       int len = 0;
+       int stat = 0;
+       __u32 datab[4];
+       __u8 *data_buf = (__u8 *)datab;
+       __u16 bmRType_bReq;
+       __u16 wValue;
+       __u16 wIndex;
+       __u16 wLength;
+
+#ifdef DEBUG
+urb_priv.actual_length = 0;
+pkt_print(dev, pipe, buffer, transfer_len, cmd, "SUB(rh)", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if ((pipe & PIPE_INTERRUPT) == PIPE_INTERRUPT) {
+               info("Root-Hub submit IRQ: NOT implemented");
+               return 0;
+       }
+
+       bmRType_bReq  = cmd->requesttype | (cmd->request << 8);
+       wValue        = m16_swap (cmd->value);
+       wIndex        = m16_swap (cmd->index);
+       wLength       = m16_swap (cmd->length);
+
+       info("Root-Hub: adr: %2x cmd(%1x): %08x %04x %04x %04x",
+               dev->devnum, 8, bmRType_bReq, wValue, wIndex, wLength);
+
+       switch (bmRType_bReq) {
+       /* Request Destination:
+          without flags: Device,
+          RH_INTERFACE: interface,
+          RH_ENDPOINT: endpoint,
+          RH_CLASS means HUB here,
+          RH_OTHER | RH_CLASS  almost ever means HUB_PORT here
+       */
+
+       case RH_GET_STATUS:
+                       *(__u16 *) data_buf = m16_swap (1); OK (2);
+       case RH_GET_STATUS | RH_INTERFACE:
+                       *(__u16 *) data_buf = m16_swap (0); OK (2);
+       case RH_GET_STATUS | RH_ENDPOINT:
+                       *(__u16 *) data_buf = m16_swap (0); OK (2);
+       case RH_GET_STATUS | RH_CLASS:
+                       *(__u32 *) data_buf = m32_swap (
+                               RD_RH_STAT & ~(RH_HS_CRWE | RH_HS_DRWE));
+                       OK (4);
+       case RH_GET_STATUS | RH_OTHER | RH_CLASS:
+                       *(__u32 *) data_buf = m32_swap (RD_RH_PORTSTAT); OK (4);
+
+       case RH_CLEAR_FEATURE | RH_ENDPOINT:
+               switch (wValue) {
+                       case (RH_ENDPOINT_STALL): OK (0);
+               }
+               break;
+
+       case RH_CLEAR_FEATURE | RH_CLASS:
+               switch (wValue) {
+                       case RH_C_HUB_LOCAL_POWER:
+                               OK(0);
+                       case (RH_C_HUB_OVER_CURRENT):
+                                       WR_RH_STAT(RH_HS_OCIC); OK (0);
+               }
+               break;
+
+       case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
+               switch (wValue) {
+                       case (RH_PORT_ENABLE):
+                                       WR_RH_PORTSTAT (RH_PS_CCS ); OK (0);
+                       case (RH_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_POCI); OK (0);
+                       case (RH_PORT_POWER):
+                                       WR_RH_PORTSTAT (RH_PS_LSDA); OK (0);
+                       case (RH_C_PORT_CONNECTION):
+                                       WR_RH_PORTSTAT (RH_PS_CSC ); OK (0);
+                       case (RH_C_PORT_ENABLE):
+                                       WR_RH_PORTSTAT (RH_PS_PESC); OK (0);
+                       case (RH_C_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_PSSC); OK (0);
+                       case (RH_C_PORT_OVER_CURRENT):
+                                       WR_RH_PORTSTAT (RH_PS_OCIC); OK (0);
+                       case (RH_C_PORT_RESET):
+                                       WR_RH_PORTSTAT (RH_PS_PRSC); OK (0);
+               }
+               break;
+
+       case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
+               switch (wValue) {
+                       case (RH_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_PSS ); OK (0);
+                       case (RH_PORT_RESET): /* BUG IN HUP CODE *********/
+                                       if (RD_RH_PORTSTAT & RH_PS_CCS)
+                                           WR_RH_PORTSTAT (RH_PS_PRS);
+                                       OK (0);
+                       case (RH_PORT_POWER):
+                                       WR_RH_PORTSTAT (RH_PS_PPS ); OK (0);
+                       case (RH_PORT_ENABLE): /* BUG IN HUP CODE *********/
+                                       if (RD_RH_PORTSTAT & RH_PS_CCS)
+                                           WR_RH_PORTSTAT (RH_PS_PES );
+                                       OK (0);
+               }
+               break;
+
+       case RH_SET_ADDRESS: gohci.rh.devnum = wValue; OK(0);
+
+       case RH_GET_DESCRIPTOR:
+               switch ((wValue & 0xff00) >> 8) {
+                       case (0x01): /* device descriptor */
+                               len = min_t(unsigned int,
+                                         leni,
+                                         min_t(unsigned int,
+                                             sizeof (root_hub_dev_des),
+                                             wLength));
+                               data_buf = root_hub_dev_des; OK(len);
+                       case (0x02): /* configuration descriptor */
+                               len = min_t(unsigned int,
+                                         leni,
+                                         min_t(unsigned int,
+                                             sizeof (root_hub_config_des),
+                                             wLength));
+                               data_buf = root_hub_config_des; OK(len);
+                       case (0x03): /* string descriptors */
+                               if(wValue==0x0300) {
+                                       len = min_t(unsigned int,
+                                                 leni,
+                                                 min_t(unsigned int,
+                                                     sizeof (root_hub_str_index0),
+                                                     wLength));
+                                       data_buf = root_hub_str_index0;
+                                       OK(len);
+                               }
+                               if(wValue==0x0301) {
+                                       len = min_t(unsigned int,
+                                                 leni,
+                                                 min_t(unsigned int,
+                                                     sizeof (root_hub_str_index1),
+                                                     wLength));
+                                       data_buf = root_hub_str_index1;
+                                       OK(len);
+                       }
+                       default:
+                               stat = USB_ST_STALLED;
+               }
+               break;
+
+       case RH_GET_DESCRIPTOR | RH_CLASS:
+       {
+               __u32 temp = roothub_a (&gohci);
+
+               data_buf [0] = 9;               /* min length; */
+               data_buf [1] = 0x29;
+               data_buf [2] = temp & RH_A_NDP;
+#ifdef CONFIG_AT91C_PQFP_UHPBUG
+               data_buf [2] = (data_buf [2] == 2) ? 1:0;
+#endif
+               data_buf [3] = 0;
+               if (temp & RH_A_PSM)    /* per-port power switching? */
+                       data_buf [3] |= 0x1;
+               if (temp & RH_A_NOCP)   /* no overcurrent reporting? */
+                       data_buf [3] |= 0x10;
+               else if (temp & RH_A_OCPM)      /* per-port overcurrent reporting? */
+                       data_buf [3] |= 0x8;
+
+               /* corresponds to data_buf[4-7] */
+               datab [1] = 0;
+               data_buf [5] = (temp & RH_A_POTPGT) >> 24;
+               temp = roothub_b (&gohci);
+               data_buf [7] = temp & RH_B_DR;
+               if (data_buf [2] < 7) {
+                       data_buf [8] = 0xff;
+               } else {
+                       data_buf [0] += 2;
+                       data_buf [8] = (temp & RH_B_DR) >> 8;
+                       data_buf [10] = data_buf [9] = 0xff;
+               }
+
+               len = min_t(unsigned int, leni,
+               min_t(unsigned int, data_buf [0], wLength));
+               OK (len);
+       }
+
+       case RH_GET_CONFIGURATION:      *(__u8 *) data_buf = 0x01; OK (1);
+
+       case RH_SET_CONFIGURATION:      WR_RH_STAT (0x10000); OK (0);
+
+       default:
+               dbg ("unsupported root hub command");
+               stat = USB_ST_STALLED;
+       }
+
+#ifdef DEBUG
+       ohci_dump_roothub (&gohci, 1);
+#else
+       wait_ms(1);
+#endif
+
+       len = min_t(int, len, leni);
+       if (data != data_buf)
+           memcpy (data, data_buf, len);
+       dev->act_len = len;
+       dev->status = stat;
+
+#ifdef DEBUG
+       if (transfer_len)
+               urb_priv.actual_length = transfer_len;
+       pkt_print(dev, pipe, buffer, transfer_len, cmd, "RET(rh)", 0/*usb_pipein(pipe)*/);
+#else
+       wait_ms(1);
+#endif
+
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* common code for handling submit messages - used for all but root hub */
+/* accesses. */
+int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup, int interval)
+{
+       int stat = 0;
+       int maxsize = usb_maxpacket(dev, pipe);
+       int timeout;
+
+       /* device pulled? Shortcut the action. */
+       if (devgone == dev) {
+               dev->status = USB_ST_CRC_ERR;
+               return 0;
+       }
+
+#ifdef DEBUG
+       urb_priv.actual_length = 0;
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "SUB", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if (!maxsize) {
+               err("submit_common_message: pipesize for pipe %lx is zero",
+                       pipe);
+               return -1;
+       }
+
+       if (sohci_submit_job(dev, pipe, buffer, transfer_len, setup, interval) < 0) {
+               err("sohci_submit_job failed");
+               return -1;
+       }
+
+       wait_ms(10);
+       /* ohci_dump_status(&gohci); */
+
+       /* allow more time for a BULK device to react - some are slow */
+#define BULK_TO         5000   /* timeout in milliseconds */
+       if (usb_pipetype (pipe) == PIPE_BULK)
+               timeout = BULK_TO;
+       else
+               timeout = 100;
+
+       /* wait for it to complete */
+       for (;;) {
+               /* check whether the controller is done */
+               stat = hc_interrupt();
+               if (stat < 0) {
+                       stat = USB_ST_CRC_ERR;
+                       break;
+               }
+               if (stat >= 0 && stat != 0xff) {
+                       /* 0xff is returned for an SF-interrupt */
+                       break;
+               }
+               if (--timeout) {
+                       wait_ms(1);
+               } else {
+                       err("CTL:TIMEOUT ");
+                       stat = USB_ST_CRC_ERR;
+                       break;
+               }
+       }
+       /* we got an Root Hub Status Change interrupt */
+       if (got_rhsc) {
+#ifdef DEBUG
+               ohci_dump_roothub (&gohci, 1);
+#endif
+               got_rhsc = 0;
+               /* abuse timeout */
+               timeout = rh_check_port_status(&gohci);
+               if (timeout >= 0) {
+#if 0 /* this does nothing useful, but leave it here in case that changes */
+                       /* the called routine adds 1 to the passed value */
+                       usb_hub_port_connect_change(gohci.rh.dev, timeout - 1);
+#endif
+                       /*
+                        * XXX
+                        * This is potentially dangerous because it assumes
+                        * that only one device is ever plugged in!
+                        */
+                       devgone = dev;
+               }
+       }
+
+       dev->status = stat;
+       dev->act_len = transfer_len;
+
+#ifdef DEBUG
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "RET(ctlr)", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+
+       /* free TDs in urb_priv */
+       urb_free_priv (&urb_priv);
+       return 0;
+}
+
+/* submit routines called from usb.c */
+int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len)
+{
+       info("submit_bulk_msg");
+       return submit_common_msg(dev, pipe, buffer, transfer_len, NULL, 0);
+}
+
+int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup)
+{
+       int maxsize = usb_maxpacket(dev, pipe);
+
+       info("submit_control_msg");
+#ifdef DEBUG
+       urb_priv.actual_length = 0;
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "SUB", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if (!maxsize) {
+               err("submit_control_message: pipesize for pipe %lx is zero",
+                       pipe);
+               return -1;
+       }
+       if (((pipe >> 8) & 0x7f) == gohci.rh.devnum) {
+               gohci.rh.dev = dev;
+               /* root hub - redirect */
+               return ohci_submit_rh_msg(dev, pipe, buffer, transfer_len,
+                       setup);
+       }
+
+       return submit_common_msg(dev, pipe, buffer, transfer_len, setup, 0);
+}
+
+int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, int interval)
+{
+       info("submit_int_msg");
+       return -1;
+}
+
+/*-------------------------------------------------------------------------*
+ * HC functions
+ *-------------------------------------------------------------------------*/
+
+/* reset the HC and BUS */
+
+static int hc_reset (ohci_t *ohci)
+{
+       int timeout = 30;
+       int smm_timeout = 50; /* 0,5 sec */
+
+       dbg("%s\n", __FUNCTION__);
+
+       if (readl (&ohci->regs->control) & OHCI_CTRL_IR) { /* SMM owns the HC */
+               writel (OHCI_OCR, &ohci->regs->cmdstatus); /* request ownership */
+               info("USB HC TakeOver from SMM");
+               while (readl (&ohci->regs->control) & OHCI_CTRL_IR) {
+                       wait_ms (10);
+                       if (--smm_timeout == 0) {
+                               err("USB HC TakeOver failed!");
+                               return -1;
+                       }
+               }
+       }
+
+       /* Disable HC interrupts */
+       writel (OHCI_INTR_MIE, &ohci->regs->intrdisable);
+
+       dbg("USB HC reset_hc usb-%s: ctrl = 0x%X ;\n",
+               ohci->slot_name,
+               readl(&ohci->regs->control));
+
+       /* Reset USB (needed by some controllers) */
+       writel (0, &ohci->regs->control);
+
+       /* HC Reset requires max 10 us delay */
+       writel (OHCI_HCR,  &ohci->regs->cmdstatus);
+       while ((readl (&ohci->regs->cmdstatus) & OHCI_HCR) != 0) {
+               if (--timeout == 0) {
+                       err("USB HC reset timed out!");
+                       return -1;
+               }
+               udelay (1);
+       }
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* Start an OHCI controller, set the BUS operational
+ * enable interrupts
+ * connect the virtual root hub */
+
+static int hc_start (ohci_t * ohci)
+{
+       __u32 mask;
+       unsigned int fminterval;
+
+       ohci->disabled = 1;
+
+       /* Tell the controller where the control and bulk lists are
+        * The lists are empty now. */
+
+       writel (0, &ohci->regs->ed_controlhead);
+       writel (0, &ohci->regs->ed_bulkhead);
+
+       writel ((__u32)ohci->hcca, &ohci->regs->hcca); /* a reset clears this */
+
+       fminterval = 0x2edf;
+       writel ((fminterval * 9) / 10, &ohci->regs->periodicstart);
+       fminterval |= ((((fminterval - 210) * 6) / 7) << 16);
+       writel (fminterval, &ohci->regs->fminterval);
+       writel (0x628, &ohci->regs->lsthresh);
+
+       /* start controller operations */
+       ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER;
+       ohci->disabled = 0;
+       writel (ohci->hc_control, &ohci->regs->control);
+
+       /* disable all interrupts */
+       mask = (OHCI_INTR_SO | OHCI_INTR_WDH | OHCI_INTR_SF | OHCI_INTR_RD |
+                       OHCI_INTR_UE | OHCI_INTR_FNO | OHCI_INTR_RHSC |
+                       OHCI_INTR_OC | OHCI_INTR_MIE);
+       writel (mask, &ohci->regs->intrdisable);
+       /* clear all interrupts */
+       mask &= ~OHCI_INTR_MIE;
+       writel (mask, &ohci->regs->intrstatus);
+       /* Choose the interrupts we care about now  - but w/o MIE */
+       mask = OHCI_INTR_RHSC | OHCI_INTR_UE | OHCI_INTR_WDH | OHCI_INTR_SO;
+       writel (mask, &ohci->regs->intrenable);
+
+#ifdef OHCI_USE_NPS
+       /* required for AMD-756 and some Mac platforms */
+       writel ((roothub_a (ohci) | RH_A_NPS) & ~RH_A_PSM,
+               &ohci->regs->roothub.a);
+       writel (RH_HS_LPSC, &ohci->regs->roothub.status);
+#endif /* OHCI_USE_NPS */
+
+#define mdelay(n) ({unsigned long msec=(n); while (msec--) udelay(1000);})
+       /* POTPGT delay is bits 24-31, in 2 ms units. */
+       mdelay ((roothub_a (ohci) >> 23) & 0x1fe);
+
+       /* connect the virtual root hub */
+       ohci->rh.devnum = 0;
+
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* an interrupt happens */
+
+static int
+hc_interrupt (void)
+{
+       ohci_t *ohci = &gohci;
+       struct ohci_regs *regs = ohci->regs;
+       int ints;
+       int stat = -1;
+
+       if ((ohci->hcca->done_head != 0) && !(m32_swap (ohci->hcca->done_head) & 0x01)) {
+               ints =  OHCI_INTR_WDH;
+       } else {
+               ints = readl (&regs->intrstatus);
+       }
+
+       /* dbg("Interrupt: %x frame: %x", ints, le16_to_cpu (ohci->hcca->frame_no)); */
+
+       if (ints & OHCI_INTR_RHSC) {
+               got_rhsc = 1;
+       }
+
+       if (ints & OHCI_INTR_UE) {
+               ohci->disabled++;
+               err ("OHCI Unrecoverable Error, controller usb-%s disabled",
+                       ohci->slot_name);
+               /* e.g. due to PCI Master/Target Abort */
+
+#ifdef DEBUG
+               ohci_dump (ohci, 1);
+#else
+       wait_ms(1);
+#endif
+               /* FIXME: be optimistic, hope that bug won't repeat often. */
+               /* Make some non-interrupt context restart the controller. */
+               /* Count and limit the retries though; either hardware or */
+               /* software errors can go forever... */
+               hc_reset (ohci);
+               return -1;
+       }
+
+       if (ints & OHCI_INTR_WDH) {
+               wait_ms(1);
+               writel (OHCI_INTR_WDH, &regs->intrdisable);
+               stat = dl_done_list (&gohci, dl_reverse_done_list (&gohci));
+               writel (OHCI_INTR_WDH, &regs->intrenable);
+       }
+
+       if (ints & OHCI_INTR_SO) {
+               dbg("USB Schedule overrun\n");
+               writel (OHCI_INTR_SO, &regs->intrenable);
+               stat = -1;
+       }
+
+       /* FIXME:  this assumes SOF (1/ms) interrupts don't get lost... */
+       if (ints & OHCI_INTR_SF) {
+               unsigned int frame = m16_swap (ohci->hcca->frame_no) & 1;
+               wait_ms(1);
+               writel (OHCI_INTR_SF, &regs->intrdisable);
+               if (ohci->ed_rm_list[frame] != NULL)
+                       writel (OHCI_INTR_SF, &regs->intrenable);
+               stat = 0xff;
+       }
+
+       writel (ints, &regs->intrstatus);
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------*/
+
+/* De-allocate all resources.. */
+
+static void hc_release_ohci (ohci_t *ohci)
+{
+       dbg ("USB HC release ohci usb-%s", ohci->slot_name);
+
+       if (!ohci->disabled)
+               hc_reset (ohci);
+}
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * low level initalisation routine, called from usb.c
+ */
+static char ohci_inited = 0;
+
+int usb_lowlevel_init(void)
+{
+       /*
+        * Enable USB host clock.
+        */
+       *AT91C_PMC_SCER = AT91C_PMC_UHP;        /* 48MHz clock enabled for UHP */
+       *AT91C_PMC_PCER = 1 << AT91C_ID_UHP;    /* Peripheral Clock Enable Register */
+
+       memset (&gohci, 0, sizeof (ohci_t));
+       memset (&urb_priv, 0, sizeof (urb_priv_t));
+
+       /* align the storage */
+       if ((__u32)&ghcca[0] & 0xff) {
+               err("HCCA not aligned!!");
+               return -1;
+       }
+       phcca = &ghcca[0];
+       info("aligned ghcca %p", phcca);
+       memset(&ohci_dev, 0, sizeof(struct ohci_device));
+       if ((__u32)&ohci_dev.ed[0] & 0x7) {
+               err("EDs not aligned!!");
+               return -1;
+       }
+       memset(gtd, 0, sizeof(td_t) * (NUM_TD + 1));
+       if ((__u32)gtd & 0x7) {
+               err("TDs not aligned!!");
+               return -1;
+       }
+       ptd = gtd;
+       gohci.hcca = phcca;
+       memset (phcca, 0, sizeof (struct ohci_hcca));
+
+       gohci.disabled = 1;
+       gohci.sleeping = 0;
+       gohci.irq = -1;
+       gohci.regs = (struct ohci_regs *)AT91_USB_HOST_BASE;
+
+       gohci.flags = 0;
+       gohci.slot_name = "at91rm9200";
+
+       if (hc_reset (&gohci) < 0) {
+               hc_release_ohci (&gohci);
+               /* Initialization failed */
+               *AT91C_PMC_PCER = AT91C_ID_UHP;
+               *AT91C_PMC_SCDR = 1 << AT91C_PMC_UHP;   /* 48MHz clock disabled for UHP */
+               return -1;
+       }
+
+       /* FIXME this is a second HC reset; why?? */
+/*     writel (gohci.hc_control = OHCI_USB_RESET, &gohci.regs->control);
+       wait_ms (10);*/
+
+       if (hc_start (&gohci) < 0) {
+               err ("can't start usb-%s", gohci.slot_name);
+               hc_release_ohci (&gohci);
+               /* Initialization failed */
+               *AT91C_PMC_PCER = AT91C_ID_UHP;
+               *AT91C_PMC_SCDR = 1 << AT91C_PMC_UHP;   /* 48MHz clock disabled for UHP */
+               return -1;
+       }
+
+#ifdef DEBUG
+       ohci_dump (&gohci, 1);
+#else
+       wait_ms(1);
+#endif
+       ohci_inited = 1;
+       return 0;
+}
+
+int usb_lowlevel_stop(void)
+{
+       /* this gets called really early - before the controller has */
+       /* even been initialized! */
+       if (!ohci_inited)
+               return 0;
+       /* TODO release any interrupts, etc. */
+       /* call hc_release_ohci() here ? */
+       hc_reset (&gohci);
+       /* may not want to do this */
+       *AT91C_PMC_PCER = 1 << AT91C_ID_UHP;
+       *AT91C_PMC_SCDR = 1 << AT91C_PMC_UHP;   /* 48MHz clock disabled for UHP */
+       return 0;
+}
+
+#endif /* CONFIG_USB_OHCI */
diff --git a/cpu/arm920t/at91rm9200/usb_ohci.h b/cpu/arm920t/at91rm9200/usb_ohci.h
new file mode 100644 (file)
index 0000000..ecb4e93
--- /dev/null
@@ -0,0 +1,419 @@
+/*
+ * URB OHCI HCD (Host Controller Driver) for USB.
+ *
+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ * (C) Copyright 2000-2001 David Brownell <dbrownell@users.sourceforge.net>
+ *
+ * usb-ohci.h
+ */
+
+
+static int cc_to_error[16] = {
+
+/* mapping of the OHCI CC status to error codes */
+       /* No  Error  */               0,
+       /* CRC Error  */               USB_ST_CRC_ERR,
+       /* Bit Stuff  */               USB_ST_BIT_ERR,
+       /* Data Togg  */               USB_ST_CRC_ERR,
+       /* Stall      */               USB_ST_STALLED,
+       /* DevNotResp */               -1,
+       /* PIDCheck   */               USB_ST_BIT_ERR,
+       /* UnExpPID   */               USB_ST_BIT_ERR,
+       /* DataOver   */               USB_ST_BUF_ERR,
+       /* DataUnder  */               USB_ST_BUF_ERR,
+       /* reservd    */               -1,
+       /* reservd    */               -1,
+       /* BufferOver */               USB_ST_BUF_ERR,
+       /* BuffUnder  */               USB_ST_BUF_ERR,
+       /* Not Access */               -1,
+       /* Not Access */               -1
+};
+
+/* ED States */
+
+#define ED_NEW         0x00
+#define ED_UNLINK      0x01
+#define ED_OPER                0x02
+#define ED_DEL         0x04
+#define ED_URB_DEL     0x08
+
+/* usb_ohci_ed */
+struct ed {
+       __u32 hwINFO;
+       __u32 hwTailP;
+       __u32 hwHeadP;
+       __u32 hwNextED;
+
+       struct ed *ed_prev;
+       __u8 int_period;
+       __u8 int_branch;
+       __u8 int_load;
+       __u8 int_interval;
+       __u8 state;
+       __u8 type;
+       __u16 last_iso;
+       struct ed *ed_rm_list;
+
+       struct usb_device *usb_dev;
+       __u32 unused[3];
+} __attribute((aligned(16)));
+typedef struct ed ed_t;
+
+
+/* TD info field */
+#define TD_CC      0xf0000000
+#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
+#define TD_CC_SET(td_p, cc) (td_p) = ((td_p) & 0x0fffffff) | (((cc) & 0x0f) << 28)
+#define TD_EC      0x0C000000
+#define TD_T       0x03000000
+#define TD_T_DATA0  0x02000000
+#define TD_T_DATA1  0x03000000
+#define TD_T_TOGGLE 0x00000000
+#define TD_R       0x00040000
+#define TD_DI      0x00E00000
+#define TD_DI_SET(X) (((X) & 0x07)<< 21)
+#define TD_DP      0x00180000
+#define TD_DP_SETUP 0x00000000
+#define TD_DP_IN    0x00100000
+#define TD_DP_OUT   0x00080000
+
+#define TD_ISO     0x00010000
+#define TD_DEL     0x00020000
+
+/* CC Codes */
+#define TD_CC_NOERROR     0x00
+#define TD_CC_CRC         0x01
+#define TD_CC_BITSTUFFING  0x02
+#define TD_CC_DATATOGGLEM  0x03
+#define TD_CC_STALL       0x04
+#define TD_DEVNOTRESP     0x05
+#define TD_PIDCHECKFAIL           0x06
+#define TD_UNEXPECTEDPID   0x07
+#define TD_DATAOVERRUN    0x08
+#define TD_DATAUNDERRUN           0x09
+#define TD_BUFFEROVERRUN   0x0C
+#define TD_BUFFERUNDERRUN  0x0D
+#define TD_NOTACCESSED    0x0F
+
+
+#define MAXPSW 1
+
+struct td {
+       __u32 hwINFO;
+       __u32 hwCBP;            /* Current Buffer Pointer */
+       __u32 hwNextTD;         /* Next TD Pointer */
+       __u32 hwBE;             /* Memory Buffer End Pointer */
+
+       __u16 hwPSW[MAXPSW];
+       __u8 unused;
+       __u8 index;
+       struct ed *ed;
+       struct td *next_dl_td;
+       struct usb_device *usb_dev;
+       int transfer_len;
+       __u32 data;
+
+       __u32 unused2[2];
+} __attribute((aligned(32)));
+typedef struct td td_t;
+
+#define OHCI_ED_SKIP   (1 << 14)
+
+/*
+ * The HCCA (Host Controller Communications Area) is a 256 byte
+ * structure defined in the OHCI spec. that the host controller is
+ * told the base address of.  It must be 256-byte aligned.
+ */
+
+#define NUM_INTS 32    /* part of the OHCI standard */
+struct ohci_hcca {
+       __u32   int_table[NUM_INTS];    /* Interrupt ED table */
+       __u16   frame_no;               /* current frame number */
+       __u16   pad1;                   /* set to 0 on each frame_no change */
+       __u32   done_head;              /* info returned for an interrupt */
+       u8              reserved_for_hc[116];
+} __attribute((aligned(256)));
+
+
+/*
+ * Maximum number of root hub ports.
+ */
+#define MAX_ROOT_PORTS 15      /* maximum OHCI root hub ports */
+
+/*
+ * This is the structure of the OHCI controller's memory mapped I/O
+ * region.  This is Memory Mapped I/O. You must use the readl() and
+ * writel() macros defined in asm/io.h to access these!!
+ */
+struct ohci_regs {
+       /* control and status registers */
+       __u32   revision;
+       __u32   control;
+       __u32   cmdstatus;
+       __u32   intrstatus;
+       __u32   intrenable;
+       __u32   intrdisable;
+       /* memory pointers */
+       __u32   hcca;
+       __u32   ed_periodcurrent;
+       __u32   ed_controlhead;
+       __u32   ed_controlcurrent;
+       __u32   ed_bulkhead;
+       __u32   ed_bulkcurrent;
+       __u32   donehead;
+       /* frame counters */
+       __u32   fminterval;
+       __u32   fmremaining;
+       __u32   fmnumber;
+       __u32   periodicstart;
+       __u32   lsthresh;
+       /* Root hub ports */
+       struct  ohci_roothub_regs {
+               __u32   a;
+               __u32   b;
+               __u32   status;
+               __u32   portstatus[MAX_ROOT_PORTS];
+       } roothub;
+} __attribute((aligned(32)));
+
+
+/* OHCI CONTROL AND STATUS REGISTER MASKS */
+
+/*
+ * HcControl (control) register masks
+ */
+#define OHCI_CTRL_CBSR (3 << 0)        /* control/bulk service ratio */
+#define OHCI_CTRL_PLE  (1 << 2)        /* periodic list enable */
+#define OHCI_CTRL_IE   (1 << 3)        /* isochronous enable */
+#define OHCI_CTRL_CLE  (1 << 4)        /* control list enable */
+#define OHCI_CTRL_BLE  (1 << 5)        /* bulk list enable */
+#define OHCI_CTRL_HCFS (3 << 6)        /* host controller functional state */
+#define OHCI_CTRL_IR   (1 << 8)        /* interrupt routing */
+#define OHCI_CTRL_RWC  (1 << 9)        /* remote wakeup connected */
+#define OHCI_CTRL_RWE  (1 << 10)       /* remote wakeup enable */
+
+/* pre-shifted values for HCFS */
+#      define OHCI_USB_RESET   (0 << 6)
+#      define OHCI_USB_RESUME  (1 << 6)
+#      define OHCI_USB_OPER    (2 << 6)
+#      define OHCI_USB_SUSPEND (3 << 6)
+
+/*
+ * HcCommandStatus (cmdstatus) register masks
+ */
+#define OHCI_HCR       (1 << 0)        /* host controller reset */
+#define OHCI_CLF       (1 << 1)        /* control list filled */
+#define OHCI_BLF       (1 << 2)        /* bulk list filled */
+#define OHCI_OCR       (1 << 3)        /* ownership change request */
+#define OHCI_SOC       (3 << 16)       /* scheduling overrun count */
+
+/*
+ * masks used with interrupt registers:
+ * HcInterruptStatus (intrstatus)
+ * HcInterruptEnable (intrenable)
+ * HcInterruptDisable (intrdisable)
+ */
+#define OHCI_INTR_SO   (1 << 0)        /* scheduling overrun */
+#define OHCI_INTR_WDH  (1 << 1)        /* writeback of done_head */
+#define OHCI_INTR_SF   (1 << 2)        /* start frame */
+#define OHCI_INTR_RD   (1 << 3)        /* resume detect */
+#define OHCI_INTR_UE   (1 << 4)        /* unrecoverable error */
+#define OHCI_INTR_FNO  (1 << 5)        /* frame number overflow */
+#define OHCI_INTR_RHSC (1 << 6)        /* root hub status change */
+#define OHCI_INTR_OC   (1 << 30)       /* ownership change */
+#define OHCI_INTR_MIE  (1 << 31)       /* master interrupt enable */
+
+
+/* Virtual Root HUB */
+struct virt_root_hub {
+       int devnum; /* Address of Root Hub endpoint */
+       void *dev;  /* was urb */
+       void *int_addr;
+       int send;
+       int interval;
+};
+
+/* USB HUB CONSTANTS (not OHCI-specific; see hub.h) */
+
+/* destination of request */
+#define RH_INTERFACE              0x01
+#define RH_ENDPOINT               0x02
+#define RH_OTHER                  0x03
+
+#define RH_CLASS                  0x20
+#define RH_VENDOR                 0x40
+
+/* Requests: bRequest << 8 | bmRequestType */
+#define RH_GET_STATUS          0x0080
+#define RH_CLEAR_FEATURE       0x0100
+#define RH_SET_FEATURE         0x0300
+#define RH_SET_ADDRESS         0x0500
+#define RH_GET_DESCRIPTOR      0x0680
+#define RH_SET_DESCRIPTOR      0x0700
+#define RH_GET_CONFIGURATION   0x0880
+#define RH_SET_CONFIGURATION   0x0900
+#define RH_GET_STATE           0x0280
+#define RH_GET_INTERFACE       0x0A80
+#define RH_SET_INTERFACE       0x0B00
+#define RH_SYNC_FRAME          0x0C80
+/* Our Vendor Specific Request */
+#define RH_SET_EP              0x2000
+
+
+/* Hub port features */
+#define RH_PORT_CONNECTION        0x00
+#define RH_PORT_ENABLE            0x01
+#define RH_PORT_SUSPEND                   0x02
+#define RH_PORT_OVER_CURRENT      0x03
+#define RH_PORT_RESET             0x04
+#define RH_PORT_POWER             0x08
+#define RH_PORT_LOW_SPEED         0x09
+
+#define RH_C_PORT_CONNECTION      0x10
+#define RH_C_PORT_ENABLE          0x11
+#define RH_C_PORT_SUSPEND         0x12
+#define RH_C_PORT_OVER_CURRENT    0x13
+#define RH_C_PORT_RESET                   0x14
+
+/* Hub features */
+#define RH_C_HUB_LOCAL_POWER      0x00
+#define RH_C_HUB_OVER_CURRENT     0x01
+
+#define RH_DEVICE_REMOTE_WAKEUP           0x00
+#define RH_ENDPOINT_STALL         0x01
+
+#define RH_ACK                    0x01
+#define RH_REQ_ERR                -1
+#define RH_NACK                           0x00
+
+
+/* OHCI ROOT HUB REGISTER MASKS */
+
+/* roothub.portstatus [i] bits */
+#define RH_PS_CCS           0x00000001         /* current connect status */
+#define RH_PS_PES           0x00000002         /* port enable status*/
+#define RH_PS_PSS           0x00000004         /* port suspend status */
+#define RH_PS_POCI          0x00000008         /* port over current indicator */
+#define RH_PS_PRS           0x00000010         /* port reset status */
+#define RH_PS_PPS           0x00000100         /* port power status */
+#define RH_PS_LSDA          0x00000200         /* low speed device attached */
+#define RH_PS_CSC           0x00010000         /* connect status change */
+#define RH_PS_PESC          0x00020000         /* port enable status change */
+#define RH_PS_PSSC          0x00040000         /* port suspend status change */
+#define RH_PS_OCIC          0x00080000         /* over current indicator change */
+#define RH_PS_PRSC          0x00100000         /* port reset status change */
+
+/* roothub.status bits */
+#define RH_HS_LPS           0x00000001         /* local power status */
+#define RH_HS_OCI           0x00000002         /* over current indicator */
+#define RH_HS_DRWE          0x00008000         /* device remote wakeup enable */
+#define RH_HS_LPSC          0x00010000         /* local power status change */
+#define RH_HS_OCIC          0x00020000         /* over current indicator change */
+#define RH_HS_CRWE          0x80000000         /* clear remote wakeup enable */
+
+/* roothub.b masks */
+#define RH_B_DR                0x0000ffff              /* device removable flags */
+#define RH_B_PPCM      0xffff0000              /* port power control mask */
+
+/* roothub.a masks */
+#define RH_A_NDP       (0xff << 0)             /* number of downstream ports */
+#define RH_A_PSM       (1 << 8)                /* power switching mode */
+#define RH_A_NPS       (1 << 9)                /* no power switching */
+#define RH_A_DT                (1 << 10)               /* device type (mbz) */
+#define RH_A_OCPM      (1 << 11)               /* over current protection mode */
+#define RH_A_NOCP      (1 << 12)               /* no over current protection */
+#define RH_A_POTPGT    (0xff << 24)            /* power on to power good time */
+
+/* urb */
+#define N_URB_TD 48
+typedef struct
+{
+       ed_t *ed;
+       __u16 length;   /* number of tds associated with this request */
+       __u16 td_cnt;   /* number of tds already serviced */
+       int   state;
+       unsigned long pipe;
+       int actual_length;
+       td_t *td[N_URB_TD];     /* list pointer to all corresponding TDs associated with this request */
+} urb_priv_t;
+#define URB_DEL 1
+
+/*
+ * This is the full ohci controller description
+ *
+ * Note how the "proper" USB information is just
+ * a subset of what the full implementation needs. (Linus)
+ */
+
+
+typedef struct ohci {
+       struct ohci_hcca *hcca;         /* hcca */
+       /*dma_addr_t hcca_dma;*/
+
+       int irq;
+       int disabled;                   /* e.g. got a UE, we're hung */
+       int sleeping;
+       unsigned long flags;            /* for HC bugs */
+
+       struct ohci_regs *regs; /* OHCI controller's memory */
+
+       ed_t *ed_rm_list[2];     /* lists of all endpoints to be removed */
+       ed_t *ed_bulktail;       /* last endpoint of bulk list */
+       ed_t *ed_controltail;    /* last endpoint of control list */
+       int intrstatus;
+       __u32 hc_control;               /* copy of the hc control reg */
+       struct usb_device *dev[32];
+       struct virt_root_hub rh;
+
+       const char      *slot_name;
+} ohci_t;
+
+#define NUM_EDS 8              /* num of preallocated endpoint descriptors */
+
+struct ohci_device {
+       ed_t    ed[NUM_EDS];
+       int ed_cnt;
+};
+
+/* hcd */
+/* endpoint */
+static int ep_link(ohci_t * ohci, ed_t * ed);
+static int ep_unlink(ohci_t * ohci, ed_t * ed);
+static ed_t * ep_add_ed(struct usb_device * usb_dev, unsigned long pipe);
+
+/*-------------------------------------------------------------------------*/
+
+/* we need more TDs than EDs */
+#define NUM_TD 64
+
+/* +1 so we can align the storage */
+td_t gtd[NUM_TD+1];
+/* pointers to aligned storage */
+td_t *ptd;
+
+/* TDs ... */
+static inline struct td *
+td_alloc (struct usb_device *usb_dev)
+{
+       int i;
+       struct td       *td;
+
+       td = NULL;
+       for (i = 0; i < NUM_TD; i++)
+       {
+               if (ptd[i].usb_dev == NULL)
+               {
+                       td = &ptd[i];
+                       td->usb_dev = usb_dev;
+                       break;
+               }
+       }
+
+       return td;
+}
+
+static inline void
+ed_free (struct ed *ed)
+{
+       ed->usb_dev = NULL;
+}
index cef7d26f1cb48b8c84642a58a80d050d3e3a756b..8db4adbe1799038e830921b4fd4613940d9e3497 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4
+PLATFORM_CPPFLAGS += -march=armv4
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 718f253471d40e30935b994b631eececc4e6e523..2f7963dcf6640ccc275d92d9784fda91c20eed52 100644 (file)
@@ -39,7 +39,7 @@ static unsigned long read_p15_c1 (void)
        unsigned long value;
 
        __asm__ __volatile__(
-               "mrc     p15, 0, %0, c1, c0, 0   @ read control reg\n"
+               "mrc    p15, 0, %0, c1, c0, 0   @ read control reg\n"
                : "=r" (value)
                :
                : "memory");
@@ -57,7 +57,7 @@ static void write_p15_c1 (unsigned long value)
        printf ("write %08lx to p15/c1\n", value);
 #endif
        __asm__ __volatile__(
-               "mcr     p15, 0, %0, c1, c0, 0   @ write it back\n"
+               "mcr    p15, 0, %0, c1, c0, 0   @ write it back\n"
                :
                : "r" (value)
                : "memory");
@@ -73,16 +73,17 @@ static void cp_delay (void)
        for (i = 0; i < 100; i++);
 }
 
-/* See also ARM Ref. Man. */
+/* See also ARM920T    Technical reference Manual */
 #define C1_MMU         (1<<0)          /* mmu off/on */
 #define C1_ALIGN       (1<<1)          /* alignment faults off/on */
 #define C1_DC          (1<<2)          /* dcache off/on */
-#define C1_BIG_ENDIAN  (1<<7)  /* big endian off/on */
+
+#define C1_BIG_ENDIAN  (1<<7)          /* big endian off/on */
 #define C1_SYS_PROT    (1<<8)          /* system protection */
 #define C1_ROM_PROT    (1<<9)          /* ROM protection */
 #define C1_IC          (1<<12)         /* icache off/on */
-#define C1_HIGH_VECTORS        (1<<13) /* location of vectors: low/high addresses */
-#define RESERVED_1     (0xf << 3)      /* must be 111b for R/W */
+#define C1_HIGH_VECTORS        (1<<13)         /* location of vectors: low/high addresses */
+
 
 int cpu_init (void)
 {
@@ -119,6 +120,7 @@ int cleanup_before_linux (void)
        /* flush I/D-cache */
        i = 0;
        asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i));
+
        return (0);
 }
 
@@ -134,7 +136,7 @@ void icache_enable (void)
 {
        ulong reg;
 
-       reg = read_p15_c1 ();
+       reg = read_p15_c1 ();           /* get control reg. */
        cp_delay ();
        write_p15_c1 (reg | C1_IC);
 }
index bfab5196402d978db4f8c3701e56bb7b26cffc5f..a43a3ed4fe91d0932b60b944eb492f7d5a648de0 100644 (file)
@@ -30,7 +30,6 @@
  */
 
 #include <common.h>
-
 #include <arm920t.h>
 #include <asm/proc-armv/ptrace.h>
 
@@ -162,7 +161,14 @@ void do_fiq (struct pt_regs *pt_regs)
 
 void do_irq (struct pt_regs *pt_regs)
 {
+#if defined (CONFIG_USE_IRQ) && defined (CONFIG_ARCH_INTEGRATOR)
+       /* ASSUMED to be a timer interrupt  */
+       /* Just clear it - count handled in */
+       /* integratorap.c                   */
+       *(volatile ulong *)(CFG_TIMERBASE + 0x0C) = 0;
+#else
        printf ("interrupt request\n");
        show_regs (pt_regs);
        bad_mode ();
+#endif
 }
index ada71740b0058a548728b36ae1ce84a5f4e5f2cc..ac49060897253f247f0a6aadb9a80179d062b215 100644 (file)
@@ -35,8 +35,8 @@ $(LIB):       $(OBJS) $(SOBJS)
 
 #########################################################################
 
-.depend:       Makefile $(OBJS:.o=.c)
-               $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@
+.depend:       Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
 
 sinclude .depend
 
index 74a97d52903db7396f1172f0808a0776968326ea..4603cf573376fdfaa5b7b88933c6b1190591976a 100644 (file)
@@ -255,7 +255,6 @@ cpu_init_crit:
        orr     r0, r0, #0x00001000     @ set bit 12 (I) I-Cache
        mcr     p15, 0, r0, c1, c0, 0
 
-
        /*
         * before relocating, we have to setup RAM timing
         * because memory timing is board-dependend, you will
@@ -264,7 +263,6 @@ cpu_init_crit:
        mov     ip, lr
        bl      lowlevel_init
        mov     lr, ip
-
        mov     pc, lr
 
 
index 960df4c98934d7e106ff29871aad7d88097a471f..8db4adbe1799038e830921b4fd4613940d9e3497 100644 (file)
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
        -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4
+PLATFORM_CPPFLAGS += -march=armv4
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 238925936eaf60b2a07895748aae7f61b33b806d..acd77426d301fff7e95dac350e5ed0595c78d968 100644 (file)
@@ -246,7 +246,7 @@ cpu_init_crit:
         * Go setup Memory and board specific bits prior to relocation.
         */
        mov     ip, lr          /* perserve link reg across call */
-       bl      platformsetup   /* go setup pll,mux,memory */
+       bl      lowlevel_init   /* go setup pll,mux,memory */
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 /*
index cef7d26f1cb48b8c84642a58a80d050d3e3a756b..8db4adbe1799038e830921b4fd4613940d9e3497 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4
+PLATFORM_CPPFLAGS += -march=armv4
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 2681f999c1112f7ea6349d7524910f221a37a4e8..f57c5a5d89513098a39a86044cf2ab987388bbae 100644 (file)
@@ -69,21 +69,21 @@ static void cp_delay (void)
 {
        volatile int i;
 
-       /* Many OMAP regs need at least 2 nops  */
+       /* copro seems to need some delay between reading and writing */
        for (i = 0; i < 100; i++);
 }
 
-/* See also ARM Ref. Man. */
+/* See also ARM926EJ-S Technical Reference Manual */
 #define C1_MMU         (1<<0)          /* mmu off/on */
 #define C1_ALIGN       (1<<1)          /* alignment faults off/on */
 #define C1_DC          (1<<2)          /* dcache off/on */
-#define C1_WB          (1<<3)          /* merging write buffer on/off */
-#define C1_BIG_ENDIAN  (1<<7)  /* big endian off/on */
+
+#define C1_BIG_ENDIAN  (1<<7)          /* big endian off/on */
 #define C1_SYS_PROT    (1<<8)          /* system protection */
 #define C1_ROM_PROT    (1<<9)          /* ROM protection */
 #define C1_IC          (1<<12)         /* icache off/on */
-#define C1_HIGH_VECTORS        (1<<13) /* location of vectors: low/high addresses */
-#define RESERVED_1     (0xf << 3)      /* must be 111b for R/W */
+#define C1_HIGH_VECTORS        (1<<13)         /* location of vectors: low/high addresses */
+
 
 int cpu_init (void)
 {
@@ -120,6 +120,7 @@ int cleanup_before_linux (void)
        /* flush I/D-cache */
        i = 0;
        asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i));
+
        return (0);
 }
 
index ae8082d5ce6d24aa3500f9c26ab4f5d63596356e..0457bff96457e24836b1aeb6acd871348cf555fc 100644 (file)
@@ -36,8 +36,7 @@
  */
 
 #include <common.h>
-#include <arm925t.h>
-
+#include <arm926ejs.h>
 #include <asm/proc-armv/ptrace.h>
 
 #define TIMER_LOAD_VAL 0xffffffff
@@ -46,9 +45,6 @@
 #ifdef CONFIG_OMAP
 #define READ_TIMER (*(volatile ulong *)(CFG_TIMERBASE+8))
 #endif
-#ifdef CONFIG_INTEGRATOR
-#define READ_TIMER (*(volatile ulong *)(CFG_TIMERBASE+4))
-#endif
 #ifdef CONFIG_VERSATILE
 #define READ_TIMER (*(volatile ulong *)(CFG_TIMERBASE+4))
 #endif
@@ -186,6 +182,12 @@ void do_irq (struct pt_regs *pt_regs)
        bad_mode ();
 }
 
+#ifdef CONFIG_INTEGRATOR
+
+       /* Timer functionality supplied by Integrator board (AP or CP) */
+
+#else
+
 static ulong timestamp;
 static ulong lastdec;
 
@@ -200,12 +202,7 @@ int interrupt_init (void)
        val = MPUTIM_ST | MPUTIM_AR | MPUTIM_CLOCK_ENABLE | (CFG_PVT << MPUTIM_PTV_BIT);
        *((int32_t *) (CFG_TIMERBASE + CNTL_TIMER)) = val;
 #endif /* CONFIG_OMAP */
-#ifdef CONFIG_INTEGRATOR
-       /* Load timer with initial value */
-       *(volatile ulong *)(CFG_TIMERBASE + 0) = TIMER_LOAD_VAL;
-       /* Set timer to be enabled, free-running, no interrupts, 256 divider */
-       *(volatile ulong *)(CFG_TIMERBASE + 8) = 0x8C;
-#endif /* CONFIG_INTEGRATOR */
+
 #ifdef CONFIG_VERSATILE
        *(volatile ulong *)(CFG_TIMERBASE + 0) = CFG_TIMER_RELOAD;      /* TimerLoad */
        *(volatile ulong *)(CFG_TIMERBASE + 4) = CFG_TIMER_RELOAD;      /* TimerValue */
@@ -332,3 +329,5 @@ ulong get_tbclk (void)
        tbclk = CFG_HZ;
        return tbclk;
 }
+
+#endif /* CONFIG_INTEGRATOR */
index d62940b071474fe0c87724e197b2dacbbf7dbe62..fc6b20b21e3f1c4d8a631238ea6883e3c8578438 100644 (file)
@@ -222,7 +222,7 @@ cpu_init_crit:
         * Go setup Memory and board specific bits prior to relocation.
         */
        mov     ip, lr          /* perserve link reg across call */
-       bl      platformsetup   /* go setup pll,mux,memory */
+       bl      lowlevel_init   /* go setup pll,mux,memory */
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 /*
@@ -393,6 +393,12 @@ fiq:
 
 #endif
 
+# ifdef CONFIG_INTEGRATOR
+
+       /* Satisfied by Integrator routine (AP or CP) */
+
+#else
+
        .align  5
 .globl reset_cpu
 reset_cpu:
@@ -404,6 +410,7 @@ reset_cpu:
 _loop_forever:
        b       _loop_forever
 
-
 rstctl1:
        .word   0xfffece10
+
+#endif /* #ifdef CONFIG_INTEGRATOR */
diff --git a/cpu/arm946es/Makefile b/cpu/arm946es/Makefile
new file mode 100644 (file)
index 0000000..203278e
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(CPU).a
+
+START  = start.o
+OBJS   = interrupts.o cpu.o
+
+all:   .depend $(START) $(LIB)
+
+$(LIB):        $(OBJS)
+       $(AR) crv $@ $(OBJS)
+
+#########################################################################
+
+.depend:       Makefile $(START:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(START:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/cpu/arm946es/config.mk b/cpu/arm946es/config.mk
new file mode 100644 (file)
index 0000000..81ca288
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# (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
+#
+
+PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
+        -msoft-float
+
+PLATFORM_CPPFLAGS +=  -march=armv4
diff --git a/cpu/arm946es/cpu.c b/cpu/arm946es/cpu.c
new file mode 100644 (file)
index 0000000..ba0a4e4
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (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
+ */
+
+/*
+ * CPU specific code
+ */
+
+#include <common.h>
+#include <command.h>
+#include <arm946es.h>
+
+/* read co-processor 15, register #1 (control register) */
+static unsigned long read_p15_c1 (void)
+{
+       unsigned long value;
+
+       __asm__ __volatile__(
+               "mrc    p15, 0, %0, c1, c0, 0   @ read control reg\n"
+               : "=r" (value)
+               :
+               : "memory");
+
+#ifdef MMU_DEBUG
+       printf ("p15/c1 is = %08lx\n", value);
+#endif
+       return value;
+}
+
+/* write to co-processor 15, register #1 (control register) */
+static void write_p15_c1 (unsigned long value)
+{
+#ifdef MMU_DEBUG
+       printf ("write %08lx to p15/c1\n", value);
+#endif
+       __asm__ __volatile__(
+               "mcr    p15, 0, %0, c1, c0, 0   @ write it back\n"
+               :
+               : "r" (value)
+               : "memory");
+
+       read_p15_c1 ();
+}
+
+static void cp_delay (void)
+{
+       volatile int i;
+
+       /* copro seems to need some delay between reading and writing */
+       for (i = 0; i < 100; i++);
+}
+
+/* See also ARM946E-S  Technical Reference Manual */
+#define C1_MMU         (1<<0)          /* mmu off/on */
+#define C1_ALIGN       (1<<1)          /* alignment faults off/on */
+#define C1_DC          (1<<2)          /* dcache off/on */
+
+#define C1_BIG_ENDIAN  (1<<7)          /* big endian off/on */
+#define C1_SYS_PROT    (1<<8)          /* system protection */
+#define C1_ROM_PROT    (1<<9)          /* ROM protection */
+#define C1_IC          (1<<12)         /* icache off/on */
+#define C1_HIGH_VECTORS (1<<13)                /* location of vectors: low/high addresses */
+
+
+int cpu_init (void)
+{
+       /*
+        * setup up stacks if necessary
+        */
+#ifdef CONFIG_USE_IRQ
+       DECLARE_GLOBAL_DATA_PTR;
+
+       IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;
+       FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
+#endif
+       return 0;
+}
+
+int cleanup_before_linux (void)
+{
+       /*
+        * this function is called just before we call linux
+        * it prepares the processor for linux
+        *
+        * we turn off caches etc ...
+        */
+
+       unsigned long i;
+
+       disable_interrupts ();
+
+       /* ARM926E-S needs the protection unit enabled for the icache to have
+        * been enabled  - left for possible later use
+        * should turn off the protection unit as well....
+        */
+       /* turn off I/D-cache */
+       asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i));
+       i &= ~(C1_DC | C1_IC);
+       asm ("mcr p15, 0, %0, c1, c0, 0": :"r" (i));
+
+       /* flush I/D-cache */
+       i = 0;
+       asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
+       asm ("mcr p15, 0, %0, c7, c6, 0": :"r" (i));
+       return (0);
+}
+
+int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       extern void reset_cpu (ulong addr);
+
+       disable_interrupts ();
+       reset_cpu (0);
+       /*NOTREACHED*/
+       return (0);
+}
+/* ARM926E-S needs the protection unit enabled for this to have any effect
+   - left for possible later use */
+void icache_enable (void)
+{
+       ulong reg;
+
+       reg = read_p15_c1 ();           /* get control reg. */
+       cp_delay ();
+       write_p15_c1 (reg | C1_IC);
+}
+
+void icache_disable (void)
+{
+       ulong reg;
+
+       reg = read_p15_c1 ();
+       cp_delay ();
+       write_p15_c1 (reg & ~C1_IC);
+}
+
+int icache_status (void)
+{
+       return (read_p15_c1 () & C1_IC) != 0;
+}
diff --git a/cpu/arm946es/interrupts.c b/cpu/arm946es/interrupts.c
new file mode 100644 (file)
index 0000000..5728c3a
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+ * (C) Copyright 2003
+ * Texas Instruments <www.ti.com>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Alex Zuepke <azu@sysgo.de>
+ *
+ * (C) Copyright 2002-2004
+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+ *
+ * (C) Copyright 2004
+ * Philippe Robin, ARM Ltd. <philippe.robin@arm.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 <arm946es.h>
+#include <asm/proc-armv/ptrace.h>
+
+#define TIMER_LOAD_VAL 0xffffffff
+extern void reset_cpu(ulong addr);
+
+#ifdef CONFIG_USE_IRQ
+/* enable IRQ interrupts */
+void enable_interrupts (void)
+{
+       unsigned long temp;
+       __asm__ __volatile__("mrs %0, cpsr\n"
+                            "bic %0, %0, #0x80\n"
+                            "msr cpsr_c, %0"
+                            : "=r" (temp)
+                            :
+                            : "memory");
+}
+
+
+/*
+ * disable IRQ/FIQ interrupts
+ * returns true if interrupts had been enabled before we disabled them
+ */
+int disable_interrupts (void)
+{
+       unsigned long old,temp;
+       __asm__ __volatile__("mrs %0, cpsr\n"
+                            "orr %1, %0, #0xc0\n"
+                            "msr cpsr_c, %1"
+                            : "=r" (old), "=r" (temp)
+                            :
+                            : "memory");
+       return (old & 0x80) == 0;
+}
+#else
+void enable_interrupts (void)
+{
+       return;
+}
+int disable_interrupts (void)
+{
+       return 0;
+}
+#endif
+
+
+void bad_mode (void)
+{
+       panic ("Resetting CPU ...\n");
+       reset_cpu (0);
+}
+
+void show_regs (struct pt_regs *regs)
+{
+       unsigned long flags;
+       const char *processor_modes[] = {
+       "USER_26",      "FIQ_26",       "IRQ_26",       "SVC_26",
+       "UK4_26",       "UK5_26",       "UK6_26",       "UK7_26",
+       "UK8_26",       "UK9_26",       "UK10_26",      "UK11_26",
+       "UK12_26",      "UK13_26",      "UK14_26",      "UK15_26",
+       "USER_32",      "FIQ_32",       "IRQ_32",       "SVC_32",
+       "UK4_32",       "UK5_32",       "UK6_32",       "ABT_32",
+       "UK8_32",       "UK9_32",       "UK10_32",      "UND_32",
+       "UK12_32",      "UK13_32",      "UK14_32",      "SYS_32",
+       };
+
+       flags = condition_codes (regs);
+
+       printf ("pc : [<%08lx>]    lr : [<%08lx>]\n"
+               "sp : %08lx  ip : %08lx  fp : %08lx\n",
+               instruction_pointer (regs),
+               regs->ARM_lr, regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);
+       printf ("r10: %08lx  r9 : %08lx  r8 : %08lx\n",
+               regs->ARM_r10, regs->ARM_r9, regs->ARM_r8);
+       printf ("r7 : %08lx  r6 : %08lx  r5 : %08lx  r4 : %08lx\n",
+               regs->ARM_r7, regs->ARM_r6, regs->ARM_r5, regs->ARM_r4);
+       printf ("r3 : %08lx  r2 : %08lx  r1 : %08lx  r0 : %08lx\n",
+               regs->ARM_r3, regs->ARM_r2, regs->ARM_r1, regs->ARM_r0);
+       printf ("Flags: %c%c%c%c",
+               flags & CC_N_BIT ? 'N' : 'n',
+               flags & CC_Z_BIT ? 'Z' : 'z',
+               flags & CC_C_BIT ? 'C' : 'c', flags & CC_V_BIT ? 'V' : 'v');
+       printf ("  IRQs %s  FIQs %s  Mode %s%s\n",
+               interrupts_enabled (regs) ? "on" : "off",
+               fast_interrupts_enabled (regs) ? "on" : "off",
+               processor_modes[processor_mode (regs)],
+               thumb_mode (regs) ? " (T)" : "");
+}
+
+void do_undefined_instruction (struct pt_regs *pt_regs)
+{
+       printf ("undefined instruction\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_software_interrupt (struct pt_regs *pt_regs)
+{
+       printf ("software interrupt\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_prefetch_abort (struct pt_regs *pt_regs)
+{
+       printf ("prefetch abort\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_data_abort (struct pt_regs *pt_regs)
+{
+       printf ("data abort\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_not_used (struct pt_regs *pt_regs)
+{
+       printf ("not used\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_fiq (struct pt_regs *pt_regs)
+{
+       printf ("fast interrupt request\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_irq (struct pt_regs *pt_regs)
+{
+       printf ("interrupt request\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+#ifdef CONFIG_INTEGRATOR
+       /* Timer functionality supplied by Integrator board (AP or CP) */
+#else
+
+static ulong timestamp;
+static ulong lastdec;
+
+/* nothing really to do with interrupts, just starts up a counter. */
+int interrupt_init (void)
+{
+       /* init the timestamp and lastdec value */
+       reset_timer_masked();
+
+       return (0);
+}
+
+/*
+ * timer without interrupts
+ */
+
+void reset_timer (void)
+{
+       reset_timer_masked ();
+}
+
+ulong get_timer (ulong base)
+{
+       return get_timer_masked () - base;
+}
+
+void set_timer (ulong t)
+{
+       timestamp = t;
+}
+
+/* delay x useconds AND perserve advance timstamp value */
+void udelay(unsigned long usec)
+{
+       udelay_masked(usec);
+}
+
+void reset_timer_masked (void)
+{
+       /* reset time */
+       lastdec = READ_TIMER;  /* capure current decrementer value time */
+       timestamp = 0;         /* start "advancing" time stamp from 0 */
+}
+
+ulong get_timer_raw (void)
+{
+       ulong now = READ_TIMER;         /* current tick value */
+
+       if (lastdec >= now) {           /* normal mode (non roll) */
+               /* normal mode */
+               timestamp += lastdec - now; /* move stamp fordward with absoulte diff ticks */
+       } else {                        /* we have overflow of the count down timer */
+               /* nts = ts + ld + (TLV - now)
+                * ts=old stamp, ld=time that passed before passing through -1
+                * (TLV-now) amount of time after passing though -1
+                * nts = new "advancing time stamp"...it could also roll and cause problems.
+                */
+               timestamp += lastdec + TIMER_LOAD_VAL - now;
+       }
+       lastdec = now;
+
+       return timestamp;
+}
+
+ulong get_timer_masked (void)
+{
+       return get_timer_raw() / TIMER_LOAD_VAL;
+}
+
+/* waits specified delay value and resets timestamp */
+void udelay_masked (unsigned long usec)
+{
+       ulong tmo;
+
+       if(usec >= 1000){               /* if "big" number, spread normalization to seconds */
+               tmo = usec / 1000;      /* start to normalize for usec to ticks per sec */
+               tmo *= CFG_HZ_CLOCK;    /* find number of "ticks" to wait to achieve target */
+               tmo /= 1000;            /* finish normalize. */
+       }else{                          /* else small number, don't kill it prior to HZ multiply */
+               tmo = usec * CFG_HZ_CLOCK;
+               tmo /= (1000*1000);
+       }
+
+       reset_timer_masked ();  /* set "advancing" timestamp to 0, set lastdec vaule */
+
+       while (get_timer_raw () < tmo) /* wait for time stamp to overtake tick number.*/
+               /*NOP*/;
+}
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On ARM it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+       return get_timer(0);
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+ulong get_tbclk (void)
+{
+       ulong tbclk;
+
+       tbclk = CFG_HZ;
+       return tbclk;
+}
+
+#endif /* CONFIG_INTEGRATOR */
diff --git a/cpu/arm946es/start.S b/cpu/arm946es/start.S
new file mode 100644 (file)
index 0000000..e8c908b
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+ *  armboot - Startup Code for ARM926EJS CPU-core
+ *
+ *  Copyright (c) 2003  Texas Instruments
+ *
+ *  ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
+ *
+ *  Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
+ *  Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
+ *  Copyright (c) 2002 Gary Jennejohn <gj@denx.de>
+ *  Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com>
+ *  Copyright (c) 2003 Kshitij <kshitij@ti.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>
+
+/*
+ *************************************************************************
+ *
+ * Jump vector table as in table 3.1 in [1]
+ *
+ *************************************************************************
+ */
+
+
+.globl _start
+_start:
+       b       reset
+       ldr     pc, _undefined_instruction
+       ldr     pc, _software_interrupt
+       ldr     pc, _prefetch_abort
+       ldr     pc, _data_abort
+       ldr     pc, _not_used
+       ldr     pc, _irq
+       ldr     pc, _fiq
+
+_undefined_instruction:
+       .word undefined_instruction
+_software_interrupt:
+       .word software_interrupt
+_prefetch_abort:
+       .word prefetch_abort
+_data_abort:
+       .word data_abort
+_not_used:
+       .word not_used
+_irq:
+       .word irq
+_fiq:
+       .word fiq
+
+       .balignl 16,0xdeadbeef
+
+
+/*
+ *************************************************************************
+ *
+ * Startup Code (reset vector)
+ *
+ * do important init only if we don't start from memory!
+ * setup Memory and board specific bits prior to relocation.
+ * relocate armboot to ram
+ * setup stack
+ *
+ *************************************************************************
+ */
+
+_TEXT_BASE:
+       .word   TEXT_BASE
+
+.globl _armboot_start
+_armboot_start:
+       .word _start
+
+/*
+ * These are defined in the board-specific linker script.
+ */
+.globl _bss_start
+_bss_start:
+       .word __bss_start
+
+.globl _bss_end
+_bss_end:
+       .word _end
+
+#ifdef CONFIG_USE_IRQ
+/* IRQ stack memory (calculated at run-time) */
+.globl IRQ_STACK_START
+IRQ_STACK_START:
+       .word   0x0badc0de
+
+/* IRQ stack memory (calculated at run-time) */
+.globl FIQ_STACK_START
+FIQ_STACK_START:
+       .word 0x0badc0de
+#endif
+
+
+/*
+ * the actual reset code
+ */
+
+reset:
+       /*
+        * set the cpu to SVC32 mode
+        */
+       mrs     r0,cpsr
+       bic     r0,r0,#0x1f
+       orr     r0,r0,#0xd3
+       msr     cpsr,r0
+
+       /*
+        * we do sys-critical inits only at reboot,
+        * not when booting from ram!
+        */
+#ifdef CONFIG_INIT_CRITICAL
+       bl      cpu_init_crit
+#endif
+
+relocate:                              /* relocate U-Boot to RAM           */
+       adr     r0, _start              /* r0 <- current position of code   */
+       ldr     r1, _TEXT_BASE          /* test if we run from flash or RAM */
+       cmp     r0, r1                  /* don't reloc during debug         */
+       beq     stack_setup
+
+       ldr     r2, _armboot_start
+       ldr     r3, _bss_start
+       sub     r2, r3, r2              /* r2 <- size of armboot            */
+       add     r2, r0, r2              /* r2 <- source end address         */
+
+copy_loop:
+       ldmia   r0!, {r3-r10}           /* copy from source address [r0]    */
+       stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
+       cmp     r0, r2                  /* until source end addreee [r2]    */
+       ble     copy_loop
+
+       /* Set up the stack                                                 */
+stack_setup:
+       ldr     r0, _TEXT_BASE          /* upper 128 KiB: relocated uboot   */
+       sub     r0, r0, #CFG_MALLOC_LEN /* malloc area                      */
+       sub     r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
+#ifdef CONFIG_USE_IRQ
+       sub     r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
+#endif
+       sub     sp, r0, #12             /* leave 3 words for abort-stack    */
+
+clear_bss:
+       ldr     r0, _bss_start          /* find start of bss segment        */
+       ldr     r1, _bss_end            /* stop here                        */
+       mov     r2, #0x00000000         /* clear                            */
+
+clbss_l:str    r2, [r0]                /* clear loop...                    */
+       add     r0, r0, #4
+       cmp     r0, r1
+       bne     clbss_l
+
+       ldr     pc, _start_armboot
+
+_start_armboot:
+       .word start_armboot
+
+
+/*
+ *************************************************************************
+ *
+ * CPU_init_critical registers
+ *
+ * setup important registers
+ * setup memory timing
+ *
+ *************************************************************************
+ */
+
+
+cpu_init_crit:
+       /*
+        * flush v4 I/D caches
+        */
+       mov     r0, #0
+       mcr     p15, 0, r0, c7, c5, 0   /* flush v4 I-cache */
+       mcr     p15, 0, r0, c7, c6, 0   /* flush v4 D-cache */
+
+       /*
+        * disable MMU stuff and caches
+        */
+       mrc     p15, 0, r0, c1, c0, 0
+       bic     r0, r0, #0x00002300     /* clear bits 13, 9:8 (--V- --RS) */
+       bic     r0, r0, #0x00000087     /* clear bits 7, 2:0 (B--- -CAM) */
+       orr     r0, r0, #0x00000002     /* set bit 2 (A) Align */
+       orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
+       mcr     p15, 0, r0, c1, c0, 0
+
+       /*
+        * Go setup Memory and board specific bits prior to relocation.
+        */
+       mov     ip, lr          /* perserve link reg across call */
+       bl      lowlevel_init   /* go setup memory */
+       mov     lr, ip          /* restore link */
+       mov     pc, lr          /* back to my caller */
+/*
+ *************************************************************************
+ *
+ * Interrupt handling
+ *
+ *************************************************************************
+ */
+
+@
+@ IRQ stack frame.
+@
+#define S_FRAME_SIZE   72
+
+#define S_OLD_R0       68
+#define S_PSR          64
+#define S_PC           60
+#define S_LR           56
+#define S_SP           52
+
+#define S_IP           48
+#define S_FP           44
+#define S_R10          40
+#define S_R9           36
+#define S_R8           32
+#define S_R7           28
+#define S_R6           24
+#define S_R5           20
+#define S_R4           16
+#define S_R3           12
+#define S_R2           8
+#define S_R1           4
+#define S_R0           0
+
+#define MODE_SVC 0x13
+#define I_BIT   0x80
+
+/*
+ * use bad_save_user_regs for abort/prefetch/undef/swi ...
+ * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
+ */
+
+       .macro  bad_save_user_regs
+       @ carve out a frame on current user stack
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
+
+       ldr     r2, _armboot_start
+       sub     r2, r2, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+       sub     r2, r2, #(CFG_GBL_DATA_SIZE+8)  @ set base 2 words into abort stack
+       @ get values for "aborted" pc and cpsr (into parm regs)
+       ldmia   r2, {r2 - r3}
+       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
+       add     r5, sp, #S_SP
+       mov     r1, lr
+       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
+       mov     r0, sp          @ save current stack into r0 (param register)
+       .endm
+
+       .macro  irq_save_user_regs
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}                  @ Calling r0-r12
+       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
+       add     r8, sp, #S_PC
+       stmdb   r8, {sp, lr}^           @ Calling SP, LR
+       str     lr, [r8, #0]            @ Save calling PC
+       mrs     r6, spsr
+       str     r6, [r8, #4]            @ Save CPSR
+       str     r0, [r8, #8]            @ Save OLD_R0
+       mov     r0, sp
+       .endm
+
+       .macro  irq_restore_user_regs
+       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
+       mov     r0, r0
+       ldr     lr, [sp, #S_PC]                 @ Get PC
+       add     sp, sp, #S_FRAME_SIZE
+       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
+       .endm
+
+       .macro get_bad_stack
+       ldr     r13, _armboot_start             @ setup our mode stack
+       sub     r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+       sub     r13, r13, #(CFG_GBL_DATA_SIZE+8) @ reserved a couple spots in abort stack
+
+       str     lr, [r13]       @ save caller lr in position 0 of saved stack
+       mrs     lr, spsr        @ get the spsr
+       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
+       mov     r13, #MODE_SVC  @ prepare SVC-Mode
+       @ msr   spsr_c, r13
+       msr     spsr, r13       @ switch modes, make sure moves will execute
+       mov     lr, pc          @ capture return pc
+       movs    pc, lr          @ jump to next instruction & switch modes.
+       .endm
+
+       .macro get_irq_stack                    @ setup IRQ stack
+       ldr     sp, IRQ_STACK_START
+       .endm
+
+       .macro get_fiq_stack                    @ setup FIQ stack
+       ldr     sp, FIQ_STACK_START
+       .endm
+
+/*
+ * exception handlers
+ */
+       .align  5
+undefined_instruction:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_undefined_instruction
+
+       .align  5
+software_interrupt:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_software_interrupt
+
+       .align  5
+prefetch_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_prefetch_abort
+
+       .align  5
+data_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_data_abort
+
+       .align  5
+not_used:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_not_used
+
+#ifdef CONFIG_USE_IRQ
+
+       .align  5
+irq:
+       get_irq_stack
+       irq_save_user_regs
+       bl      do_irq
+       irq_restore_user_regs
+
+       .align  5
+fiq:
+       get_fiq_stack
+       /* someone ought to write a more effiction fiq_save_user_regs */
+       irq_save_user_regs
+       bl      do_fiq
+       irq_restore_user_regs
+
+#else
+
+       .align  5
+irq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_irq
+
+       .align  5
+fiq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_fiq
+
+#endif
+
+# ifdef CONFIG_INTEGRATOR
+
+       /* Satisfied by general board level routine */
+
+#else
+
+       .align  5
+.globl reset_cpu
+reset_cpu:
+
+       ldr     r1, rstctl1     /* get clkm1 reset ctl */
+       mov     r3, #0x0
+       strh    r3, [r1]        /* clear it */
+       mov     r3, #0x8
+       strh    r3, [r1]        /* force dsp+arm reset */
+_loop_forever:
+       b       _loop_forever
+
+rstctl1:
+       .word   0xfffece10
+
+#endif /* #ifdef CONFIG_INTEGRATOR */
diff --git a/cpu/arm_intcm/Makefile b/cpu/arm_intcm/Makefile
new file mode 100644 (file)
index 0000000..203278e
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = lib$(CPU).a
+
+START  = start.o
+OBJS   = interrupts.o cpu.o
+
+all:   .depend $(START) $(LIB)
+
+$(LIB):        $(OBJS)
+       $(AR) crv $@ $(OBJS)
+
+#########################################################################
+
+.depend:       Makefile $(START:.o=.S) $(OBJS:.o=.c)
+               $(CC) -M $(CFLAGS) $(START:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/cpu/arm_intcm/config.mk b/cpu/arm_intcm/config.mk
new file mode 100644 (file)
index 0000000..81ca288
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# (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
+#
+
+PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
+        -msoft-float
+
+PLATFORM_CPPFLAGS +=  -march=armv4
diff --git a/cpu/arm_intcm/cpu.c b/cpu/arm_intcm/cpu.c
new file mode 100644 (file)
index 0000000..d03b09d
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (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
+ */
+
+/*
+ * CPU specific code for an unknown cpu
+ * - hence fairly empty......
+ */
+
+#include <common.h>
+#include <command.h>
+
+int cpu_init (void)
+{
+       /*
+        * setup up stacks if necessary
+        */
+#ifdef CONFIG_USE_IRQ
+       DECLARE_GLOBAL_DATA_PTR;
+
+       IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;
+       FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
+#endif
+       return 0;
+}
+
+int cleanup_before_linux (void)
+{
+       /*
+        * this function is called just before we call linux
+        * it prepares the processor for linux
+        *
+        * we turn off caches etc ...
+        */
+
+       disable_interrupts ();
+
+       /* Since the CM has unknown processor we do not support
+        * cache operations
+        */
+
+       return (0);
+}
+
+int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       extern void reset_cpu (ulong addr);
+
+       disable_interrupts ();
+       reset_cpu (0);
+       /*NOTREACHED*/
+       return (0);
+}
+
+/* May not be cahed processor on the CM - do nothing */
+void icache_enable (void)
+{
+}
+
+void icache_disable (void)
+{
+}
+
+/* return "disabled" */
+int icache_status (void)
+{
+       return 0;
+}
diff --git a/cpu/arm_intcm/interrupts.c b/cpu/arm_intcm/interrupts.c
new file mode 100644 (file)
index 0000000..1763176
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * (C) Copyright 2003
+ * Texas Instruments <www.ti.com>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Alex Zuepke <azu@sysgo.de>
+ *
+ * (C) Copyright 2002-2004
+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+ *
+ * (C) Copyright 2004
+ * Philippe Robin, ARM Ltd. <philippe.robin@arm.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/proc-armv/ptrace.h>
+
+#ifndef CONFIG_INTEGRATOR
+/* Only to be used for integrator/AP or /CP */
+/* Allows U-Boot to be used with any ARM supplied core module (CM),
+ * provided the ARM boot monitor, or similar software,
+ * runs first to set up the platform e.g. map writeable memory to 0x00000000
+ * - see Integrator User Guides
+ * Versatile has a supported cpu - arm926ejs
+ * Some integrator CMs cpus are supported
+ * CM926EJ-S, CM946E-S
+ * For platforms with supported cpus U-Boot can be used as the sole boot
+ * monitor/loader - it will configure the platform itself
+ * Also U-Boot may be faster/smaller in those cases since specific
+ * qualities of the cpu and/or CM can be used e.g i and/or d caches etc.
+ */
+#endif
+extern void reset_cpu(ulong addr);
+
+#ifdef CONFIG_USE_IRQ
+/* enable IRQ interrupts */
+void enable_interrupts (void)
+{
+       unsigned long temp;
+       __asm__ __volatile__("mrs %0, cpsr\n"
+                            "bic %0, %0, #0x80\n"
+                            "msr cpsr_c, %0"
+                            : "=r" (temp)
+                            :
+                            : "memory");
+}
+
+
+/*
+ * disable IRQ/FIQ interrupts
+ * returns true if interrupts had been enabled before we disabled them
+ */
+int disable_interrupts (void)
+{
+       unsigned long old,temp;
+       __asm__ __volatile__("mrs %0, cpsr\n"
+                            "orr %1, %0, #0xc0\n"
+                            "msr cpsr_c, %1"
+                            : "=r" (old), "=r" (temp)
+                            :
+                            : "memory");
+       return (old & 0x80) == 0;
+}
+#else
+void enable_interrupts (void)
+{
+       return;
+}
+int disable_interrupts (void)
+{
+       return 0;
+}
+#endif
+
+
+void bad_mode (void)
+{
+       panic ("Resetting CPU ...\n");
+       reset_cpu (0);
+}
+
+void show_regs (struct pt_regs *regs)
+{
+       unsigned long flags;
+       const char *processor_modes[] = {
+       "USER_26",      "FIQ_26",       "IRQ_26",       "SVC_26",
+       "UK4_26",       "UK5_26",       "UK6_26",       "UK7_26",
+       "UK8_26",       "UK9_26",       "UK10_26",      "UK11_26",
+       "UK12_26",      "UK13_26",      "UK14_26",      "UK15_26",
+       "USER_32",      "FIQ_32",       "IRQ_32",       "SVC_32",
+       "UK4_32",       "UK5_32",       "UK6_32",       "ABT_32",
+       "UK8_32",       "UK9_32",       "UK10_32",      "UND_32",
+       "UK12_32",      "UK13_32",      "UK14_32",      "SYS_32",
+       };
+
+       flags = condition_codes (regs);
+
+       printf ("pc : [<%08lx>]    lr : [<%08lx>]\n"
+               "sp : %08lx  ip : %08lx  fp : %08lx\n",
+               instruction_pointer (regs),
+               regs->ARM_lr, regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);
+       printf ("r10: %08lx  r9 : %08lx  r8 : %08lx\n",
+               regs->ARM_r10, regs->ARM_r9, regs->ARM_r8);
+       printf ("r7 : %08lx  r6 : %08lx  r5 : %08lx  r4 : %08lx\n",
+               regs->ARM_r7, regs->ARM_r6, regs->ARM_r5, regs->ARM_r4);
+       printf ("r3 : %08lx  r2 : %08lx  r1 : %08lx  r0 : %08lx\n",
+               regs->ARM_r3, regs->ARM_r2, regs->ARM_r1, regs->ARM_r0);
+       printf ("Flags: %c%c%c%c",
+               flags & CC_N_BIT ? 'N' : 'n',
+               flags & CC_Z_BIT ? 'Z' : 'z',
+               flags & CC_C_BIT ? 'C' : 'c', flags & CC_V_BIT ? 'V' : 'v');
+       printf ("  IRQs %s  FIQs %s  Mode %s%s\n",
+               interrupts_enabled (regs) ? "on" : "off",
+               fast_interrupts_enabled (regs) ? "on" : "off",
+               processor_modes[processor_mode (regs)],
+               thumb_mode (regs) ? " (T)" : "");
+}
+
+void do_undefined_instruction (struct pt_regs *pt_regs)
+{
+       printf ("undefined instruction\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_software_interrupt (struct pt_regs *pt_regs)
+{
+       printf ("software interrupt\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_prefetch_abort (struct pt_regs *pt_regs)
+{
+       printf ("prefetch abort\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_data_abort (struct pt_regs *pt_regs)
+{
+       printf ("data abort\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_not_used (struct pt_regs *pt_regs)
+{
+       printf ("not used\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_fiq (struct pt_regs *pt_regs)
+{
+       printf ("fast interrupt request\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+void do_irq (struct pt_regs *pt_regs)
+{
+       printf ("interrupt request\n");
+       show_regs (pt_regs);
+       bad_mode ();
+}
+
+/* The timer functionality is supplied by the Integrator board */
+/* - see board/integrator<>.c */
diff --git a/cpu/arm_intcm/start.S b/cpu/arm_intcm/start.S
new file mode 100644 (file)
index 0000000..75fe917
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ *  armboot - Startup Code for ARM926EJS CPU-core
+ *
+ *  Copyright (c) 2003  Texas Instruments
+ *
+ *  ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
+ *
+ *  Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
+ *  Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
+ *  Copyright (c) 2002 Gary Jennejohn <gj@denx.de>
+ *  Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com>
+ *  Copyright (c) 2003 Kshitij <kshitij@ti.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>
+
+/*
+ *************************************************************************
+ *
+ * Jump vector table
+ *
+ *************************************************************************
+ */
+
+.globl _start
+_start:
+       b       reset
+       ldr     pc, _undefined_instruction
+       ldr     pc, _software_interrupt
+       ldr     pc, _prefetch_abort
+       ldr     pc, _data_abort
+       ldr     pc, _not_used
+       ldr     pc, _irq
+       ldr     pc, _fiq
+
+_undefined_instruction:
+       .word undefined_instruction
+_software_interrupt:
+       .word software_interrupt
+_prefetch_abort:
+       .word prefetch_abort
+_data_abort:
+       .word data_abort
+_not_used:
+       .word not_used
+_irq:
+       .word irq
+_fiq:
+       .word fiq
+
+       .balignl 16,0xdeadbeef
+
+/*
+ *************************************************************************
+ *
+ * Startup Code (reset vector)
+ *
+ * do important init only if we don't start from memory!
+ * setup memory and board specific bits prior to relocation.
+ * relocate armboot to ram
+ * setup stack
+ *
+ *************************************************************************
+ */
+
+_TEXT_BASE:
+       .word   TEXT_BASE /* address of _start in the linked image */
+
+.globl _armboot_start
+_armboot_start:
+       .word _start
+
+/*
+ * These are defined in the board-specific linker script.
+ */
+.globl _bss_start
+_bss_start:
+       .word __bss_start
+
+.globl _bss_end
+_bss_end:
+       .word _end
+
+#ifdef CONFIG_USE_IRQ
+/* IRQ stack memory (calculated at run-time) */
+.globl IRQ_STACK_START
+IRQ_STACK_START:
+       .word   0x0badc0de
+
+/* IRQ stack memory (calculated at run-time) */
+.globl FIQ_STACK_START
+FIQ_STACK_START:
+       .word 0x0badc0de
+#endif
+
+
+/*
+ * the actual reset code
+ */
+.globl reset
+reset:
+       /*
+        * set the cpu to SVC32 mode
+        */
+       mrs     r0,cpsr
+       bic     r0,r0,#0x1f
+       orr     r0,r0,#0xd3
+       msr     cpsr,r0
+
+       /*
+        * we do sys-critical inits only at reboot,
+        * not when booting from ram!
+        */
+#ifdef CONFIG_INIT_CRITICAL
+       bl      cpu_init_crit
+#endif
+
+relocate:                              /* relocate U-Boot to RAM           */
+       adr     r0, _start              /* pc relative  address of label    */
+       ldr     r1, _TEXT_BASE          /* linked image address of label    */
+       cmp     r0, r1                  /* test if we run from flash or RAM */
+       beq     stack_setup             /* ifeq we are in the RAM copy      */
+
+       ldr     r2, _armboot_start
+       ldr     r3, _bss_start
+       sub     r2, r3, r2              /* r2 <- size of armboot            */
+       add     r2, r0, r2              /* r2 <- source end address         */
+
+copy_loop:
+       ldmia   r0!, {r3-r10}           /* copy from source address [r0]    */
+       stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
+       cmp     r0, r2                  /* until source end addreee [r2]    */
+       ble     copy_loop
+
+       /* Set up the stack                                                 */
+stack_setup:
+       ldr     r0, _TEXT_BASE          /* upper 128 KiB: relocated uboot   */
+       sub     r0, r0, #CFG_MALLOC_LEN /* malloc area                      */
+       sub     r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
+#ifdef CONFIG_USE_IRQ
+       sub     r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
+#endif
+       sub     sp, r0, #12             /* leave 3 words for abort-stack    */
+
+clear_bss:
+       ldr     r0, _bss_start          /* find start of bss segment        */
+       ldr     r1, _bss_end            /* stop here                        */
+       mov     r2, #0x00000000         /* clear                            */
+
+clbss_l:str    r2, [r0]                /* clear loop...                    */
+       add     r0, r0, #4
+       cmp     r0, r1
+       ble     clbss_l
+
+       ldr     pc, _start_armboot
+
+_start_armboot:
+       .word start_armboot
+
+/*
+ *************************************************************************
+ *
+ * CPU_init_critical registers
+ *
+ * setup important registers
+ * setup memory timing
+ *
+ *************************************************************************
+ */
+
+cpu_init_crit:
+       /*  arm_int_generic assumes the ARM boot monitor, or user software,
+        * has initialized the platform
+        */
+       mov     pc, lr          /* back to my caller */
+/*
+ *************************************************************************
+ *
+ * Interrupt handling
+ *
+ *************************************************************************
+ */
+
+@
+@ IRQ stack frame.
+@
+#define S_FRAME_SIZE   72
+
+#define S_OLD_R0       68
+#define S_PSR          64
+#define S_PC           60
+#define S_LR           56
+#define S_SP           52
+
+#define S_IP           48
+#define S_FP           44
+#define S_R10          40
+#define S_R9           36
+#define S_R8           32
+#define S_R7           28
+#define S_R6           24
+#define S_R5           20
+#define S_R4           16
+#define S_R3           12
+#define S_R2           8
+#define S_R1           4
+#define S_R0           0
+
+#define MODE_SVC 0x13
+#define I_BIT   0x80
+
+/*
+ * use bad_save_user_regs for abort/prefetch/undef/swi ...
+ * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
+ */
+
+       .macro  bad_save_user_regs
+       @ carve out a frame on current user stack
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
+
+       ldr     r2, _armboot_start
+       sub     r2, r2, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+       sub     r2, r2, #(CFG_GBL_DATA_SIZE+8)  @ set base 2 words into abort stack
+       @ get values for "aborted" pc and cpsr (into parm regs)
+       ldmia   r2, {r2 - r3}
+       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
+       add     r5, sp, #S_SP
+       mov     r1, lr
+       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
+       mov     r0, sp          @ save current stack into r0 (param register)
+       .endm
+
+       .macro  irq_save_user_regs
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}                  @ Calling r0-r12
+       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
+       add     r8, sp, #S_PC
+       stmdb   r8, {sp, lr}^           @ Calling SP, LR
+       str     lr, [r8, #0]            @ Save calling PC
+       mrs     r6, spsr
+       str     r6, [r8, #4]            @ Save CPSR
+       str     r0, [r8, #8]            @ Save OLD_R0
+       mov     r0, sp
+       .endm
+
+       .macro  irq_restore_user_regs
+       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
+       mov     r0, r0
+       ldr     lr, [sp, #S_PC]                 @ Get PC
+       add     sp, sp, #S_FRAME_SIZE
+       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
+       .endm
+
+       .macro get_bad_stack
+       ldr     r13, _armboot_start             @ setup our mode stack
+       sub     r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+       sub     r13, r13, #(CFG_GBL_DATA_SIZE+8) @ reserved a couple spots in abort stack
+
+       str     lr, [r13]       @ save caller lr in position 0 of saved stack
+       mrs     lr, spsr        @ get the spsr
+       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
+       mov     r13, #MODE_SVC  @ prepare SVC-Mode
+       @ msr   spsr_c, r13
+       msr     spsr, r13       @ switch modes, make sure moves will execute
+       mov     lr, pc          @ capture return pc
+       movs    pc, lr          @ jump to next instruction & switch modes.
+       .endm
+
+       .macro get_irq_stack                    @ setup IRQ stack
+       ldr     sp, IRQ_STACK_START
+       .endm
+
+       .macro get_fiq_stack                    @ setup FIQ stack
+       ldr     sp, FIQ_STACK_START
+       .endm
+
+/*
+ * exception handlers
+ */
+       .align  5
+.globl undefined_instruction
+undefined_instruction:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_undefined_instruction
+
+       .align  5
+.globl software_interrupt
+software_interrupt:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_software_interrupt
+
+       .align  5
+.globl prefetch_abort
+prefetch_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_prefetch_abort
+
+       .align  5
+.globl data_abort
+data_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_data_abort
+
+       .align  5
+.globl not_used
+not_used:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_not_used
+
+#ifdef CONFIG_USE_IRQ
+       .align  5
+.globl irq
+irq:
+       get_irq_stack
+       irq_save_user_regs
+       bl      do_irq
+       irq_restore_user_regs
+
+       .align  5
+.globl fiq
+fiq:
+       get_fiq_stack
+       /* someone ought to write a more effiction fiq_save_user_regs */
+       irq_save_user_regs
+       bl      do_fiq
+       irq_restore_user_regs
+
+#else
+
+       .align  5
+.globl irq
+irq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_irq
+
+       .align  5
+.globl fiq
+fiq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_fiq
+
+#endif
index 667adfc25d05e292bed0a6cfe68be9f0c48a0ad7..eddda39e0f6b6db012986e8967f1a94d2b886b31 100644 (file)
 BIG_ENDIAN = y
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float -mbig-endian
+       -msoft-float -mbig-endian
 
-PLATFORM_CPPFLAGS += -mbig-endian -mapcs-32 -march=armv4 -mtune=strongarm1100
+PLATFORM_CPPFLAGS += -mbig-endian -march=armv4 -mtune=strongarm1100
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 33c1cfff56ca15d18ad396187fd9c51cdf21f65e..84c4339ee6b42ae431502e564ddb7a73cbcbef17 100644 (file)
@@ -68,47 +68,6 @@ PciBar *memBars[IXP425_PCI_MAX_BAR];
 PciBar *ioBars[IXP425_PCI_MAX_BAR];
 PciDevice devices[IXP425_PCI_MAX_FUNC_ON_BUS];
 
-void out_8 (volatile unsigned *addr, char val)
-{
-       *addr = val;
-}
-
-void out_le16 (volatile unsigned *addr, unsigned short val)
-{
-       *addr = cpu_to_le16 (val);
-}
-
-void out_le32 (volatile unsigned *addr, unsigned int val)
-{
-       *addr = cpu_to_le32 (val);
-}
-
-unsigned char in_8 (volatile unsigned *addr)
-{
-       unsigned char val;
-
-       val = *addr;
-       return val;
-}
-
-unsigned short in_le16 (volatile unsigned *addr)
-{
-       unsigned short val;
-
-       val = *addr;
-       val = le16_to_cpu (val);
-       return val;
-}
-
-unsigned in_le32 (volatile unsigned *addr)
-{
-       unsigned int val;
-
-       val = *addr;
-       val = le32_to_cpu (val);
-       return val;
-}
-
 int pci_read_config_dword (pci_dev_t dev, int where, unsigned int *val)
 {
        unsigned int retval;
@@ -556,9 +515,9 @@ void sys_pci_device_bars_write (void)
                pci_write_config_dword (devices[i].device,
                                        PCI_CFG_BASE_ADDRESS_0,
                                        devices[i].bar[0].address);
-               addr = (BIT (31 - devices[i].device) |
+               addr = BIT (31 - devices[i].device) |
                        (0 << PCI_NP_AD_FUNCSL) |
-                       (PCI_CFG_BASE_ADDRESS_0) ) & ~3;
+                       (PCI_CFG_BASE_ADDRESS_0 & ~3);
                pci_write_config_dword (devices[i].device,
                                        PCI_CFG_DEV_INT_LINE, devices[i].irq);
 
index cef7d26f1cb48b8c84642a58a80d050d3e3a756b..10e755bebe1ba1cadee3c5fba3e9a1e1003dba0c 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4
+PLATFORM_CPPFLAGS += -march=armv4
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# ========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index 623a01dbb9ada69e084881d1912faf5ef7467a6c..a5c50af63c951222645895c488c822acff93ee21 100644 (file)
@@ -519,7 +519,8 @@ void mii_init (void)
  *       Otherwise they hang in mii_send() !!! Sorry!
  *****************************************************************************/
 
-int miiphy_read (unsigned char addr, unsigned char reg, unsigned short *value)
+int mcf52x2_miiphy_read (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value)
 {
        short rdreg;            /* register working value */
 
@@ -537,7 +538,8 @@ int miiphy_read (unsigned char addr, unsigned char reg, unsigned short *value)
        return 0;
 }
 
-int miiphy_write (unsigned char addr, unsigned char reg, unsigned short value)
+int mcf52x2_miiphy_write (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
 {
        short rdreg;            /* register working value */
 
@@ -554,5 +556,14 @@ int miiphy_write (unsigned char addr, unsigned char reg, unsigned short value)
        return 0;
 }
 #endif /* (CONFIG_COMMANDS & CFG_CMD_MII) && !defined(CONFIG_BITBANGMII) */
-
 #endif /* CFG_CMD_NET, FEC_ENET */
+
+int mcf52x2_miiphy_initialize(bd_t *bis)
+{
+#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(FEC_ENET)
+#if (CONFIG_COMMANDS & CFG_CMD_MII) && !defined(CONFIG_BITBANGMII)
+       miiphy_register("mcf52x2phy", mcf52x2_miiphy_read, mcf52x2_miiphy_write);
+#endif
+#endif
+       return 0;
+}
index 1182266159c14040cf9321fb62b92e0ff5da65ff..c8b30c75897f46ac7ed5a43db453ba92cb4f8fb1 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = lib$(CPU).a
 
 START  = start.o
-OBJS   = asc_serial.o au1x00_serial.o au1x00_eth.o \
+OBJS   = asc_serial.o au1x00_serial.o au1x00_eth.o au1x00_usb_ohci.o \
          cpu.o interrupts.o incaip_clock.o
 SOBJS  = incaip_wdt.o cache.o
 
index b8219bf05b39d62ef570044385652fa2d21918e7..9ce9b353978b8c9d26fcc9e2973e166c1135ee85 100644 (file)
@@ -13,7 +13,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -25,8 +25,8 @@
 
 #ifdef CONFIG_AU1X00
 
-#if defined(CFG_DISCOVER_PHY) || (CONFIG_COMMANDS & CFG_CMD_MII)
-#error "PHY and MII not supported yet"
+#if defined(CFG_DISCOVER_PHY)
+#error "PHY not supported yet"
 /* We just assume that we are running 100FD for now */
 /* We all use switches, right? ;-) */
 #endif
 #include <asm/io.h>
 #include <asm/au1x00.h>
 
+#if (CONFIG_COMMANDS & CFG_CMD_MII)
+#include <miiphy.h>
+#endif
+
 /* Ethernet Transmit and Receive Buffers */
 #define DBUF_LENGTH  1520
 #define PKT_MAXBUF_SIZE                1518
@@ -172,8 +176,8 @@ static int au1x00_init(struct eth_device* dev, bd_t * bd){
                (volatile mac_fifo_t*)(MAC0_RX_DMA_ADDR+MAC_RX_BUFF0_STATUS);
        int i;
 
-       next_tx = 0;
-       next_rx = 0;
+       next_tx = TX_GET_DMA_BUFFER(fifo_tx[0].addr);
+       next_rx = RX_GET_DMA_BUFFER(fifo_rx[0].addr);
 
        /* We have to enable clocks before releasing reset */
        *macen = MAC_EN_CLOCK_ENABLE;
@@ -193,9 +197,9 @@ static int au1x00_init(struct eth_device* dev, bd_t * bd){
 
        /* Put mac addr in little endian */
 #define ea eth_get_dev()->enetaddr
-       *mac_addr_high  =       (ea[5] <<  8) | (ea[4]      ) ;
-       *mac_addr_low   =       (ea[3] << 24) | (ea[2] << 16) |
-               (ea[1] <<  8) | (ea[0]      ) ;
+       *mac_addr_high  =       (ea[5] <<  8) | (ea[4]      ) ;
+       *mac_addr_low   =       (ea[3] << 24) | (ea[2] << 16) |
+               (ea[1] <<  8) | (ea[0]      ) ;
 #undef ea
        *mac_mcast_low = 0;
        *mac_mcast_high = 0;
@@ -233,7 +237,71 @@ int au1x00_enet_initialize(bd_t *bis){
 
        eth_register(dev);
 
+#if (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_register(dev->name,
+               au1x00_miiphy_read, au1x00_miiphy_write);
+#endif
+
        return 1;
 }
 
+#if (CONFIG_COMMANDS & CFG_CMD_MII)
+int  au1x00_miiphy_read(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short * value)
+{
+       volatile u32 *mii_control_reg = (volatile u32*)(ETH0_BASE+MAC_MII_CNTRL);
+       volatile u32 *mii_data_reg = (volatile u32*)(ETH0_BASE+MAC_MII_DATA);
+       u32 mii_control;
+       unsigned int timedout = 20;
+
+       while (*mii_control_reg & MAC_MII_BUSY) {
+               udelay(1000);
+               if (--timedout == 0) {
+                       printf("au1x00_eth: miiphy_read busy timeout!!\n");
+                       return -1;
+               }
+       }
+
+       mii_control = MAC_SET_MII_SELECT_REG(reg) |
+               MAC_SET_MII_SELECT_PHY(addr) | MAC_MII_READ;
+
+       *mii_control_reg = mii_control;
+
+       timedout = 20;
+       while (*mii_control_reg & MAC_MII_BUSY) {
+               udelay(1000);
+               if (--timedout == 0) {
+                       printf("au1x00_eth: miiphy_read busy timeout!!\n");
+                       return -1;
+               }
+       }
+       *value = *mii_data_reg;
+       return 0;
+}
+
+int  au1x00_miiphy_write(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
+{
+       volatile u32 *mii_control_reg = (volatile u32*)(ETH0_BASE+MAC_MII_CNTRL);
+       volatile u32 *mii_data_reg = (volatile u32*)(ETH0_BASE+MAC_MII_DATA);
+       u32 mii_control;
+       unsigned int timedout = 20;
+
+       while (*mii_control_reg & MAC_MII_BUSY) {
+               udelay(1000);
+               if (--timedout == 0) {
+                       printf("au1x00_eth: miiphy_write busy timeout!!\n");
+                       return;
+               }
+       }
+
+       mii_control = MAC_SET_MII_SELECT_REG(reg) |
+               MAC_SET_MII_SELECT_PHY(addr) | MAC_MII_WRITE;
+
+       *mii_data_reg = value;
+       *mii_control_reg = mii_control;
+       return 0;
+}
+#endif /* CONFIG_COMMANDS & CFG_CMD_MII */
+
 #endif /* CONFIG_AU1X00 */
index ac75da591fb014ab451ad1d24833e575700362e0..42c668ee3d373a54e5609b3104742d8aa2e9b9f2 100644 (file)
@@ -70,9 +70,21 @@ void serial_setbrg (void)
 {
        volatile u32 *uart_clk = (volatile u32*)(UART0_ADDR+UART_CLK);
        volatile u32 *uart_lcr = (volatile u32*)(UART0_ADDR+UART_LCR);
+       volatile u32 *sys_powerctrl = (u32 *)SYS_POWERCTRL;
+       int sd;
+       int divisorx2;
 
-       /* Set baudrate - FIXME for bus speeds != CPU/2 */
-       *uart_clk = ((CFG_HZ/(CONFIG_BAUDRATE * 64)));
+       /* sd is system clock divisor                   */
+       /* see section 10.4.5 in au1550 datasheet       */
+       sd = (*sys_powerctrl & 0x03) + 2;
+
+       /* calulate 2x baudrate and round */
+       divisorx2 = ((CFG_HZ/(sd * 16 * CONFIG_BAUDRATE)));
+
+       if (divisorx2 & 0x01)
+               divisorx2 = divisorx2 + 1;
+
+       *uart_clk = divisorx2 / 2;
 
        /* Set parity, stop bits and word length to 8N1 */
        *uart_lcr = UART_LCR_WLEN8;
diff --git a/cpu/mips/au1x00_usb_ohci.c b/cpu/mips/au1x00_usb_ohci.c
new file mode 100644 (file)
index 0000000..dbf72dc
--- /dev/null
@@ -0,0 +1,1727 @@
+/*
+ * URB OHCI HCD (Host Controller Driver) for USB on the AU1x00.
+ *
+ * (C) Copyright 2003
+ * 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
+ *
+ * Note: Part of this code has been derived from linux
+ *
+ */
+/*
+ * IMPORTANT NOTES
+ * 1 - you MUST define LITTLEENDIAN in the configuration file for the
+ *     board or this driver will NOT work!
+ * 2 - this driver is intended for use with USB Mass Storage Devices
+ *     (BBB) ONLY. There is NO support for Interrupt or Isochronous pipes!
+ */
+
+#include <config.h>
+
+#if defined(CONFIG_AU1X00) && defined(CONFIG_USB_OHCI)
+
+/* #include <pci.h> no PCI on the AU1x00 */
+
+#include <common.h>
+#include <malloc.h>
+#include <asm/io.h>
+#include <asm/au1x00.h>
+#include <usb.h>
+#include "au1x00_usb_ohci.h"
+
+#define OHCI_USE_NPS           /* force NoPowerSwitching mode */
+#define OHCI_VERBOSE_DEBUG     /* not always helpful */
+#define OHCI_FILL_TRACE
+
+#define USBH_ENABLE_BE (1<<0)
+#define USBH_ENABLE_C  (1<<1)
+#define USBH_ENABLE_E  (1<<2)
+#define USBH_ENABLE_CE (1<<3)
+#define USBH_ENABLE_RD (1<<4)
+
+#ifdef LITTLEENDIAN
+#define USBH_ENABLE_INIT (USBH_ENABLE_CE | USBH_ENABLE_E | USBH_ENABLE_C)
+#else
+#define USBH_ENABLE_INIT (USBH_ENABLE_CE | USBH_ENABLE_E | USBH_ENABLE_C | USBH_ENABLE_BE)
+#endif
+
+
+/* For initializing controller (mask in an HCFS mode too) */
+#define OHCI_CONTROL_INIT \
+       (OHCI_CTRL_CBSR & 0x3) | OHCI_CTRL_IE | OHCI_CTRL_PLE
+
+#undef readl
+#undef writel
+
+#define readl(a)     au_readl((long)(a))
+#define writel(v,a)  au_writel((v),(int)(a))
+
+#define min_t(type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
+
+#define DEBUG
+#ifdef DEBUG
+#define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)
+#else
+#define dbg(format, arg...) do {} while(0)
+#endif /* DEBUG */
+#define err(format, arg...) printf("ERROR: " format "\n", ## arg)
+#define SHOW_INFO
+#ifdef SHOW_INFO
+#define info(format, arg...) printf("INFO: " format "\n", ## arg)
+#else
+#define info(format, arg...) do {} while(0)
+#endif
+
+#define m16_swap(x) swap_16(x)
+#define m32_swap(x) swap_32(x)
+
+/* global ohci_t */
+static ohci_t gohci;
+/* this must be aligned to a 256 byte boundary */
+struct ohci_hcca ghcca[1];
+/* a pointer to the aligned storage */
+struct ohci_hcca *phcca;
+/* this allocates EDs for all possible endpoints */
+struct ohci_device ohci_dev;
+/* urb_priv */
+urb_priv_t urb_priv;
+/* RHSC flag */
+int got_rhsc;
+/* device which was disconnected */
+struct usb_device *devgone;
+
+/*-------------------------------------------------------------------------*/
+
+/* AMD-756 (D2 rev) reports corrupt register contents in some cases.
+ * The erratum (#4) description is incorrect.  AMD's workaround waits
+ * till some bits (mostly reserved) are clear; ok for all revs.
+ */
+#define OHCI_QUIRK_AMD756 0xabcd
+#define read_roothub(hc, register, mask) ({ \
+       u32 temp = readl (&hc->regs->roothub.register); \
+       if (hc->flags & OHCI_QUIRK_AMD756) \
+               while (temp & mask) \
+                       temp = readl (&hc->regs->roothub.register); \
+       temp; })
+
+static u32 roothub_a (struct ohci *hc)
+       { return read_roothub (hc, a, 0xfc0fe000); }
+static inline u32 roothub_b (struct ohci *hc)
+       { return readl (&hc->regs->roothub.b); }
+static inline u32 roothub_status (struct ohci *hc)
+       { return readl (&hc->regs->roothub.status); }
+static u32 roothub_portstatus (struct ohci *hc, int i)
+       { return read_roothub (hc, portstatus [i], 0xffe0fce0); }
+
+
+/* forward declaration */
+static int hc_interrupt (void);
+static void
+td_submit_job (struct usb_device * dev, unsigned long pipe, void * buffer,
+       int transfer_len, struct devrequest * setup, urb_priv_t * urb, int interval);
+
+/*-------------------------------------------------------------------------*
+ * URB support functions
+ *-------------------------------------------------------------------------*/
+
+/* free HCD-private data associated with this URB */
+
+static void urb_free_priv (urb_priv_t * urb)
+{
+       int             i;
+       int             last;
+       struct td       * td;
+
+       last = urb->length - 1;
+       if (last >= 0) {
+               for (i = 0; i <= last; i++) {
+                       td = urb->td[i];
+                       if (td) {
+                               td->usb_dev = NULL;
+                               urb->td[i] = NULL;
+                       }
+               }
+       }
+}
+
+/*-------------------------------------------------------------------------*/
+
+#ifdef DEBUG
+static int sohci_get_current_frame_number (struct usb_device * dev);
+
+/* debug| print the main components of an URB
+ * small: 0) header + data packets 1) just header */
+
+static void pkt_print (struct usb_device * dev, unsigned long pipe, void * buffer,
+       int transfer_len, struct devrequest * setup, char * str, int small)
+{
+       urb_priv_t * purb = &urb_priv;
+
+       dbg("%s URB:[%4x] dev:%2d,ep:%2d-%c,type:%s,len:%d/%d stat:%#lx",
+                       str,
+                       sohci_get_current_frame_number (dev),
+                       usb_pipedevice (pipe),
+                       usb_pipeendpoint (pipe),
+                       usb_pipeout (pipe)? 'O': 'I',
+                       usb_pipetype (pipe) < 2? (usb_pipeint (pipe)? "INTR": "ISOC"):
+                               (usb_pipecontrol (pipe)? "CTRL": "BULK"),
+                       purb->actual_length,
+                       transfer_len, dev->status);
+#ifdef OHCI_VERBOSE_DEBUG
+       if (!small) {
+               int i, len;
+
+               if (usb_pipecontrol (pipe)) {
+                       printf (__FILE__ ": cmd(8):");
+                       for (i = 0; i < 8 ; i++)
+                               printf (" %02x", ((__u8 *) setup) [i]);
+                       printf ("\n");
+               }
+               if (transfer_len > 0 && buffer) {
+                       printf (__FILE__ ": data(%d/%d):",
+                               purb->actual_length,
+                               transfer_len);
+                       len = usb_pipeout (pipe)?
+                                       transfer_len: purb->actual_length;
+                       for (i = 0; i < 16 && i < len; i++)
+                               printf (" %02x", ((__u8 *) buffer) [i]);
+                       printf ("%s\n", i < len? "...": "");
+               }
+       }
+#endif
+}
+
+/* just for debugging; prints non-empty branches of the int ed tree inclusive iso eds*/
+void ep_print_int_eds (ohci_t *ohci, char * str) {
+       int i, j;
+        __u32 * ed_p;
+       for (i= 0; i < 32; i++) {
+               j = 5;
+               ed_p = &(ohci->hcca->int_table [i]);
+               if (*ed_p == 0)
+                   continue;
+               printf (__FILE__ ": %s branch int %2d(%2x):", str, i, i);
+               while (*ed_p != 0 && j--) {
+                       ed_t *ed = (ed_t *)m32_swap(ed_p);
+                       printf (" ed: %4x;", ed->hwINFO);
+                       ed_p = &ed->hwNextED;
+               }
+               printf ("\n");
+       }
+}
+
+static void ohci_dump_intr_mask (char *label, __u32 mask)
+{
+       dbg ("%s: 0x%08x%s%s%s%s%s%s%s%s%s",
+               label,
+               mask,
+               (mask & OHCI_INTR_MIE) ? " MIE" : "",
+               (mask & OHCI_INTR_OC) ? " OC" : "",
+               (mask & OHCI_INTR_RHSC) ? " RHSC" : "",
+               (mask & OHCI_INTR_FNO) ? " FNO" : "",
+               (mask & OHCI_INTR_UE) ? " UE" : "",
+               (mask & OHCI_INTR_RD) ? " RD" : "",
+               (mask & OHCI_INTR_SF) ? " SF" : "",
+               (mask & OHCI_INTR_WDH) ? " WDH" : "",
+               (mask & OHCI_INTR_SO) ? " SO" : ""
+               );
+}
+
+static void maybe_print_eds (char *label, __u32 value)
+{
+       ed_t *edp = (ed_t *)value;
+
+       if (value) {
+               dbg ("%s %08x", label, value);
+               dbg ("%08x", edp->hwINFO);
+               dbg ("%08x", edp->hwTailP);
+               dbg ("%08x", edp->hwHeadP);
+               dbg ("%08x", edp->hwNextED);
+       }
+}
+
+static char * hcfs2string (int state)
+{
+       switch (state) {
+               case OHCI_USB_RESET:    return "reset";
+               case OHCI_USB_RESUME:   return "resume";
+               case OHCI_USB_OPER:     return "operational";
+               case OHCI_USB_SUSPEND:  return "suspend";
+       }
+       return "?";
+}
+
+/* dump control and status registers */
+static void ohci_dump_status (ohci_t *controller)
+{
+       struct ohci_regs        *regs = controller->regs;
+       __u32                   temp;
+
+       temp = readl (&regs->revision) & 0xff;
+       if (temp != 0x10)
+               dbg ("spec %d.%d", (temp >> 4), (temp & 0x0f));
+
+       temp = readl (&regs->control);
+       dbg ("control: 0x%08x%s%s%s HCFS=%s%s%s%s%s CBSR=%d", temp,
+               (temp & OHCI_CTRL_RWE) ? " RWE" : "",
+               (temp & OHCI_CTRL_RWC) ? " RWC" : "",
+               (temp & OHCI_CTRL_IR) ? " IR" : "",
+               hcfs2string (temp & OHCI_CTRL_HCFS),
+               (temp & OHCI_CTRL_BLE) ? " BLE" : "",
+               (temp & OHCI_CTRL_CLE) ? " CLE" : "",
+               (temp & OHCI_CTRL_IE) ? " IE" : "",
+               (temp & OHCI_CTRL_PLE) ? " PLE" : "",
+               temp & OHCI_CTRL_CBSR
+               );
+
+       temp = readl (&regs->cmdstatus);
+       dbg ("cmdstatus: 0x%08x SOC=%d%s%s%s%s", temp,
+               (temp & OHCI_SOC) >> 16,
+               (temp & OHCI_OCR) ? " OCR" : "",
+               (temp & OHCI_BLF) ? " BLF" : "",
+               (temp & OHCI_CLF) ? " CLF" : "",
+               (temp & OHCI_HCR) ? " HCR" : ""
+               );
+
+       ohci_dump_intr_mask ("intrstatus", readl (&regs->intrstatus));
+       ohci_dump_intr_mask ("intrenable", readl (&regs->intrenable));
+
+       maybe_print_eds ("ed_periodcurrent", readl (&regs->ed_periodcurrent));
+
+       maybe_print_eds ("ed_controlhead", readl (&regs->ed_controlhead));
+       maybe_print_eds ("ed_controlcurrent", readl (&regs->ed_controlcurrent));
+
+       maybe_print_eds ("ed_bulkhead", readl (&regs->ed_bulkhead));
+       maybe_print_eds ("ed_bulkcurrent", readl (&regs->ed_bulkcurrent));
+
+       maybe_print_eds ("donehead", readl (&regs->donehead));
+}
+
+static void ohci_dump_roothub (ohci_t *controller, int verbose)
+{
+       __u32                   temp, ndp, i;
+
+       temp = roothub_a (controller);
+       ndp = (temp & RH_A_NDP);
+
+       if (verbose) {
+               dbg ("roothub.a: %08x POTPGT=%d%s%s%s%s%s NDP=%d", temp,
+                       ((temp & RH_A_POTPGT) >> 24) & 0xff,
+                       (temp & RH_A_NOCP) ? " NOCP" : "",
+                       (temp & RH_A_OCPM) ? " OCPM" : "",
+                       (temp & RH_A_DT) ? " DT" : "",
+                       (temp & RH_A_NPS) ? " NPS" : "",
+                       (temp & RH_A_PSM) ? " PSM" : "",
+                       ndp
+                       );
+               temp = roothub_b (controller);
+               dbg ("roothub.b: %08x PPCM=%04x DR=%04x",
+                       temp,
+                       (temp & RH_B_PPCM) >> 16,
+                       (temp & RH_B_DR)
+                       );
+               temp = roothub_status (controller);
+               dbg ("roothub.status: %08x%s%s%s%s%s%s",
+                       temp,
+                       (temp & RH_HS_CRWE) ? " CRWE" : "",
+                       (temp & RH_HS_OCIC) ? " OCIC" : "",
+                       (temp & RH_HS_LPSC) ? " LPSC" : "",
+                       (temp & RH_HS_DRWE) ? " DRWE" : "",
+                       (temp & RH_HS_OCI) ? " OCI" : "",
+                       (temp & RH_HS_LPS) ? " LPS" : ""
+                       );
+       }
+
+       for (i = 0; i < ndp; i++) {
+               temp = roothub_portstatus (controller, i);
+               dbg ("roothub.portstatus [%d] = 0x%08x%s%s%s%s%s%s%s%s%s%s%s%s",
+                       i,
+                       temp,
+                       (temp & RH_PS_PRSC) ? " PRSC" : "",
+                       (temp & RH_PS_OCIC) ? " OCIC" : "",
+                       (temp & RH_PS_PSSC) ? " PSSC" : "",
+                       (temp & RH_PS_PESC) ? " PESC" : "",
+                       (temp & RH_PS_CSC) ? " CSC" : "",
+
+                       (temp & RH_PS_LSDA) ? " LSDA" : "",
+                       (temp & RH_PS_PPS) ? " PPS" : "",
+                       (temp & RH_PS_PRS) ? " PRS" : "",
+                       (temp & RH_PS_POCI) ? " POCI" : "",
+                       (temp & RH_PS_PSS) ? " PSS" : "",
+
+                       (temp & RH_PS_PES) ? " PES" : "",
+                       (temp & RH_PS_CCS) ? " CCS" : ""
+                       );
+       }
+}
+
+static void ohci_dump (ohci_t *controller, int verbose)
+{
+       dbg ("OHCI controller usb-%s state", controller->slot_name);
+
+       /* dumps some of the state we know about */
+       ohci_dump_status (controller);
+       if (verbose)
+               ep_print_int_eds (controller, "hcca");
+       dbg ("hcca frame #%04x", controller->hcca->frame_no);
+       ohci_dump_roothub (controller, 1);
+}
+
+
+#endif /* DEBUG */
+
+/*-------------------------------------------------------------------------*
+ * Interface functions (URB)
+ *-------------------------------------------------------------------------*/
+
+/* get a transfer request */
+
+int sohci_submit_job(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup, int interval)
+{
+       ohci_t *ohci;
+       ed_t * ed;
+       urb_priv_t *purb_priv;
+       int i, size = 0;
+
+       ohci = &gohci;
+
+       /* when controller's hung, permit only roothub cleanup attempts
+        * such as powering down ports */
+       if (ohci->disabled) {
+               err("sohci_submit_job: EPIPE");
+               return -1;
+       }
+
+       /* every endpoint has a ed, locate and fill it */
+       if (!(ed = ep_add_ed (dev, pipe))) {
+               err("sohci_submit_job: ENOMEM");
+               return -1;
+       }
+
+       /* for the private part of the URB we need the number of TDs (size) */
+       switch (usb_pipetype (pipe)) {
+               case PIPE_BULK: /* one TD for every 4096 Byte */
+                       size = (transfer_len - 1) / 4096 + 1;
+                       break;
+               case PIPE_CONTROL: /* 1 TD for setup, 1 for ACK and 1 for every 4096 B */
+                       size = (transfer_len == 0)? 2:
+                                               (transfer_len - 1) / 4096 + 3;
+                       break;
+       }
+
+       if (size >= (N_URB_TD - 1)) {
+               err("need %d TDs, only have %d", size, N_URB_TD);
+               return -1;
+       }
+       purb_priv = &urb_priv;
+       purb_priv->pipe = pipe;
+
+       /* fill the private part of the URB */
+       purb_priv->length = size;
+       purb_priv->ed = ed;
+       purb_priv->actual_length = 0;
+
+       /* allocate the TDs */
+       /* note that td[0] was allocated in ep_add_ed */
+       for (i = 0; i < size; i++) {
+               purb_priv->td[i] = td_alloc (dev);
+               if (!purb_priv->td[i]) {
+                       purb_priv->length = i;
+                       urb_free_priv (purb_priv);
+                       err("sohci_submit_job: ENOMEM");
+                       return -1;
+               }
+       }
+
+       if (ed->state == ED_NEW || (ed->state & ED_DEL)) {
+               urb_free_priv (purb_priv);
+               err("sohci_submit_job: EINVAL");
+               return -1;
+       }
+
+       /* link the ed into a chain if is not already */
+       if (ed->state != ED_OPER)
+               ep_link (ohci, ed);
+
+       /* fill the TDs and link it to the ed */
+       td_submit_job(dev, pipe, buffer, transfer_len, setup, purb_priv, interval);
+
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+#ifdef DEBUG
+/* tell us the current USB frame number */
+
+static int sohci_get_current_frame_number (struct usb_device *usb_dev)
+{
+       ohci_t *ohci = &gohci;
+
+       return m16_swap (ohci->hcca->frame_no);
+}
+#endif
+
+/*-------------------------------------------------------------------------*
+ * ED handling functions
+ *-------------------------------------------------------------------------*/
+
+/* link an ed into one of the HC chains */
+
+static int ep_link (ohci_t *ohci, ed_t *edi)
+{
+       volatile ed_t *ed = edi;
+
+       ed->state = ED_OPER;
+
+       switch (ed->type) {
+       case PIPE_CONTROL:
+               ed->hwNextED = 0;
+               if (ohci->ed_controltail == NULL) {
+                       writel ((long)ed, &ohci->regs->ed_controlhead);
+               } else {
+                       ohci->ed_controltail->hwNextED = m32_swap (ed);
+               }
+               ed->ed_prev = ohci->ed_controltail;
+               if (!ohci->ed_controltail && !ohci->ed_rm_list[0] &&
+                       !ohci->ed_rm_list[1] && !ohci->sleeping) {
+                       ohci->hc_control |= OHCI_CTRL_CLE;
+                       writel (ohci->hc_control, &ohci->regs->control);
+               }
+               ohci->ed_controltail = edi;
+               break;
+
+       case PIPE_BULK:
+               ed->hwNextED = 0;
+               if (ohci->ed_bulktail == NULL) {
+                       writel ((long)ed, &ohci->regs->ed_bulkhead);
+               } else {
+                       ohci->ed_bulktail->hwNextED = m32_swap (ed);
+               }
+               ed->ed_prev = ohci->ed_bulktail;
+               if (!ohci->ed_bulktail && !ohci->ed_rm_list[0] &&
+                       !ohci->ed_rm_list[1] && !ohci->sleeping) {
+                       ohci->hc_control |= OHCI_CTRL_BLE;
+                       writel (ohci->hc_control, &ohci->regs->control);
+               }
+               ohci->ed_bulktail = edi;
+               break;
+       }
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* unlink an ed from one of the HC chains.
+ * just the link to the ed is unlinked.
+ * the link from the ed still points to another operational ed or 0
+ * so the HC can eventually finish the processing of the unlinked ed */
+
+static int ep_unlink (ohci_t *ohci, ed_t *ed)
+{
+       ed->hwINFO |= m32_swap (OHCI_ED_SKIP);
+
+       switch (ed->type) {
+       case PIPE_CONTROL:
+               if (ed->ed_prev == NULL) {
+                       if (!ed->hwNextED) {
+                               ohci->hc_control &= ~OHCI_CTRL_CLE;
+                               writel (ohci->hc_control, &ohci->regs->control);
+                       }
+                       writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_controlhead);
+               } else {
+                       ed->ed_prev->hwNextED = ed->hwNextED;
+               }
+               if (ohci->ed_controltail == ed) {
+                       ohci->ed_controltail = ed->ed_prev;
+               } else {
+                       ((ed_t *)m32_swap (*((__u32 *)&ed->hwNextED)))->ed_prev = ed->ed_prev;
+               }
+               break;
+
+       case PIPE_BULK:
+               if (ed->ed_prev == NULL) {
+                       if (!ed->hwNextED) {
+                               ohci->hc_control &= ~OHCI_CTRL_BLE;
+                               writel (ohci->hc_control, &ohci->regs->control);
+                       }
+                       writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_bulkhead);
+               } else {
+                       ed->ed_prev->hwNextED = ed->hwNextED;
+               }
+               if (ohci->ed_bulktail == ed) {
+                       ohci->ed_bulktail = ed->ed_prev;
+               } else {
+                       ((ed_t *)m32_swap (*((__u32 *)&ed->hwNextED)))->ed_prev = ed->ed_prev;
+               }
+               break;
+       }
+       ed->state = ED_UNLINK;
+       return 0;
+}
+
+
+/*-------------------------------------------------------------------------*/
+
+/* add/reinit an endpoint; this should be done once at the usb_set_configuration command,
+ * but the USB stack is a little bit stateless so we do it at every transaction
+ * if the state of the ed is ED_NEW then a dummy td is added and the state is changed to ED_UNLINK
+ * in all other cases the state is left unchanged
+ * the ed info fields are setted anyway even though most of them should not change */
+
+static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe)
+{
+       td_t *td;
+       ed_t *ed_ret;
+       volatile ed_t *ed;
+
+       ed = ed_ret = &ohci_dev.ed[(usb_pipeendpoint (pipe) << 1) |
+                       (usb_pipecontrol (pipe)? 0: usb_pipeout (pipe))];
+
+       if ((ed->state & ED_DEL) || (ed->state & ED_URB_DEL)) {
+               err("ep_add_ed: pending delete");
+               /* pending delete request */
+               return NULL;
+       }
+
+       if (ed->state == ED_NEW) {
+               ed->hwINFO = m32_swap (OHCI_ED_SKIP); /* skip ed */
+               /* dummy td; end of td list for ed */
+               td = td_alloc (usb_dev);
+               ed->hwTailP = m32_swap (td);
+               ed->hwHeadP = ed->hwTailP;
+               ed->state = ED_UNLINK;
+               ed->type = usb_pipetype (pipe);
+               ohci_dev.ed_cnt++;
+       }
+
+       ed->hwINFO = m32_swap (usb_pipedevice (pipe)
+                       | usb_pipeendpoint (pipe) << 7
+                       | (usb_pipeisoc (pipe)? 0x8000: 0)
+                       | (usb_pipecontrol (pipe)? 0: (usb_pipeout (pipe)? 0x800: 0x1000))
+                       | usb_pipeslow (pipe) << 13
+                       | usb_maxpacket (usb_dev, pipe) << 16);
+
+       return ed_ret;
+}
+
+/*-------------------------------------------------------------------------*
+ * TD handling functions
+ *-------------------------------------------------------------------------*/
+
+/* enqueue next TD for this URB (OHCI spec 5.2.8.2) */
+
+static void td_fill (ohci_t *ohci, unsigned int info,
+       void *data, int len,
+       struct usb_device *dev, int index, urb_priv_t *urb_priv)
+{
+       volatile td_t  *td, *td_pt;
+#ifdef OHCI_FILL_TRACE
+       int i;
+#endif
+
+       if (index > urb_priv->length) {
+               err("index > length");
+               return;
+       }
+       /* use this td as the next dummy */
+       td_pt = urb_priv->td [index];
+       td_pt->hwNextTD = 0;
+
+       /* fill the old dummy TD */
+       td = urb_priv->td [index] = (td_t *)(m32_swap (urb_priv->ed->hwTailP) & ~0xf);
+
+       td->ed = urb_priv->ed;
+       td->next_dl_td = NULL;
+       td->index = index;
+       td->data = (__u32)data;
+#ifdef OHCI_FILL_TRACE
+       if (1 || ((usb_pipetype(urb_priv->pipe) == PIPE_BULK) && usb_pipeout(urb_priv->pipe))) {
+               for (i = 0; i < len; i++)
+               printf("td->data[%d] %#2x\n",i, ((unsigned char *)(td->data+0x80000000))[i]);
+       }
+#endif
+       if (!len)
+               data = 0;
+
+       td->hwINFO = m32_swap (info);
+       td->hwCBP = m32_swap (data);
+       if (data)
+               td->hwBE = m32_swap (data + len - 1);
+       else
+               td->hwBE = 0;
+       td->hwNextTD = m32_swap (td_pt);
+       td->hwPSW [0] = m16_swap (((__u32)data & 0x0FFF) | 0xE000);
+
+       /* append to queue */
+       td->ed->hwTailP = td->hwNextTD;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* prepare all TDs of a transfer */
+
+#define kseg_to_phys(x)          ((void *)((__u32)(x) - 0x80000000))
+
+static void td_submit_job (struct usb_device *dev, unsigned long pipe, void *buffer,
+       int transfer_len, struct devrequest *setup, urb_priv_t *urb, int interval)
+{
+       ohci_t *ohci = &gohci;
+       int data_len = transfer_len;
+       void *data;
+       int cnt = 0;
+       __u32 info = 0;
+       unsigned int toggle = 0;
+
+       /* OHCI handles the DATA-toggles itself, we just use the USB-toggle bits for reseting */
+       if(usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe))) {
+               toggle = TD_T_TOGGLE;
+       } else {
+               toggle = TD_T_DATA0;
+               usb_settoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe), 1);
+       }
+       urb->td_cnt = 0;
+       if (data_len)
+               data = kseg_to_phys(buffer);
+       else
+               data = 0;
+
+       switch (usb_pipetype (pipe)) {
+       case PIPE_BULK:
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_OUT : TD_CC | TD_DP_IN ;
+               while(data_len > 4096) {
+                       td_fill (ohci, info | (cnt? TD_T_TOGGLE:toggle), data, 4096, dev, cnt, urb);
+                       data += 4096; data_len -= 4096; cnt++;
+               }
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_OUT : TD_CC | TD_R | TD_DP_IN ;
+               td_fill (ohci, info | (cnt? TD_T_TOGGLE:toggle), data, data_len, dev, cnt, urb);
+               cnt++;
+
+               if (!ohci->sleeping)
+                       writel (OHCI_BLF, &ohci->regs->cmdstatus); /* start bulk list */
+               break;
+
+       case PIPE_CONTROL:
+               info = TD_CC | TD_DP_SETUP | TD_T_DATA0;
+               td_fill (ohci, info, kseg_to_phys(setup), 8, dev, cnt++, urb);
+               if (data_len > 0) {
+                       info = usb_pipeout (pipe)?
+                               TD_CC | TD_R | TD_DP_OUT | TD_T_DATA1 : TD_CC | TD_R | TD_DP_IN | TD_T_DATA1;
+                       /* NOTE:  mishandles transfers >8K, some >4K */
+                       td_fill (ohci, info, data, data_len, dev, cnt++, urb);
+               }
+               info = usb_pipeout (pipe)?
+                       TD_CC | TD_DP_IN | TD_T_DATA1: TD_CC | TD_DP_OUT | TD_T_DATA1;
+               td_fill (ohci, info, data, 0, dev, cnt++, urb);
+               if (!ohci->sleeping)
+                       writel (OHCI_CLF, &ohci->regs->cmdstatus); /* start Control list */
+               break;
+       }
+       if (urb->length != cnt)
+               dbg("TD LENGTH %d != CNT %d", urb->length, cnt);
+}
+
+/*-------------------------------------------------------------------------*
+ * Done List handling functions
+ *-------------------------------------------------------------------------*/
+
+
+/* calculate the transfer length and update the urb */
+
+static void dl_transfer_length(td_t * td)
+{
+       __u32 tdINFO, tdBE, tdCBP;
+       urb_priv_t *lurb_priv = &urb_priv;
+
+       tdINFO = m32_swap (td->hwINFO);
+       tdBE   = m32_swap (td->hwBE);
+       tdCBP  = m32_swap (td->hwCBP);
+
+
+       if (!(usb_pipetype (lurb_priv->pipe) == PIPE_CONTROL &&
+           ((td->index == 0) || (td->index == lurb_priv->length - 1)))) {
+               if (tdBE != 0) {
+                       if (td->hwCBP == 0)
+                               lurb_priv->actual_length += tdBE - td->data + 1;
+                       else
+                               lurb_priv->actual_length += tdCBP - td->data;
+               }
+       }
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* replies to the request have to be on a FIFO basis so
+ * we reverse the reversed done-list */
+
+static td_t * dl_reverse_done_list (ohci_t *ohci)
+{
+       __u32 td_list_hc;
+       td_t *td_rev = NULL;
+       td_t *td_list = NULL;
+       urb_priv_t *lurb_priv = NULL;
+
+       td_list_hc = m32_swap (ohci->hcca->done_head) & 0xfffffff0;
+       ohci->hcca->done_head = 0;
+
+       while (td_list_hc) {
+               td_list = (td_t *)td_list_hc;
+
+               if (TD_CC_GET (m32_swap (td_list->hwINFO))) {
+                       lurb_priv = &urb_priv;
+                       dbg(" USB-error/status: %x : %p",
+                                       TD_CC_GET (m32_swap (td_list->hwINFO)), td_list);
+                       if (td_list->ed->hwHeadP & m32_swap (0x1)) {
+                               if (lurb_priv && ((td_list->index + 1) < lurb_priv->length)) {
+                                       td_list->ed->hwHeadP =
+                                               (lurb_priv->td[lurb_priv->length - 1]->hwNextTD & m32_swap (0xfffffff0)) |
+                                                                       (td_list->ed->hwHeadP & m32_swap (0x2));
+                                       lurb_priv->td_cnt += lurb_priv->length - td_list->index - 1;
+                               } else
+                                       td_list->ed->hwHeadP &= m32_swap (0xfffffff2);
+                       }
+               }
+
+               td_list->next_dl_td = td_rev;
+               td_rev = td_list;
+               td_list_hc = m32_swap (td_list->hwNextTD) & 0xfffffff0;
+       }
+       return td_list;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* td done list */
+static int dl_done_list (ohci_t *ohci, td_t *td_list)
+{
+       td_t *td_list_next = NULL;
+       ed_t *ed;
+       int cc = 0;
+       int stat = 0;
+       /* urb_t *urb; */
+       urb_priv_t *lurb_priv;
+       __u32 tdINFO, edHeadP, edTailP;
+
+       while (td_list) {
+               td_list_next = td_list->next_dl_td;
+
+               lurb_priv = &urb_priv;
+               tdINFO = m32_swap (td_list->hwINFO);
+
+               ed = td_list->ed;
+
+               dl_transfer_length(td_list);
+
+               /* error code of transfer */
+               cc = TD_CC_GET (tdINFO);
+               if (cc != 0) {
+                       dbg("ConditionCode %#x", cc);
+                       stat = cc_to_error[cc];
+               }
+
+               if (ed->state != ED_NEW) {
+                       edHeadP = m32_swap (ed->hwHeadP) & 0xfffffff0;
+                       edTailP = m32_swap (ed->hwTailP);
+
+                       /* unlink eds if they are not busy */
+                       if ((edHeadP == edTailP) && (ed->state == ED_OPER))
+                               ep_unlink (ohci, ed);
+               }
+
+               td_list = td_list_next;
+       }
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*
+ * Virtual Root Hub
+ *-------------------------------------------------------------------------*/
+
+/* Device descriptor */
+static __u8 root_hub_dev_des[] =
+{
+       0x12,       /*  __u8  bLength; */
+       0x01,       /*  __u8  bDescriptorType; Device */
+       0x10,       /*  __u16 bcdUSB; v1.1 */
+       0x01,
+       0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
+       0x00,       /*  __u8  bDeviceSubClass; */
+       0x00,       /*  __u8  bDeviceProtocol; */
+       0x08,       /*  __u8  bMaxPacketSize0; 8 Bytes */
+       0x00,       /*  __u16 idVendor; */
+       0x00,
+       0x00,       /*  __u16 idProduct; */
+       0x00,
+       0x00,       /*  __u16 bcdDevice; */
+       0x00,
+       0x00,       /*  __u8  iManufacturer; */
+       0x01,       /*  __u8  iProduct; */
+       0x00,       /*  __u8  iSerialNumber; */
+       0x01        /*  __u8  bNumConfigurations; */
+};
+
+
+/* Configuration descriptor */
+static __u8 root_hub_config_des[] =
+{
+       0x09,       /*  __u8  bLength; */
+       0x02,       /*  __u8  bDescriptorType; Configuration */
+       0x19,       /*  __u16 wTotalLength; */
+       0x00,
+       0x01,       /*  __u8  bNumInterfaces; */
+       0x01,       /*  __u8  bConfigurationValue; */
+       0x00,       /*  __u8  iConfiguration; */
+       0x40,       /*  __u8  bmAttributes;
+                Bit 7: Bus-powered, 6: Self-powered, 5 Remote-wakwup, 4..0: resvd */
+       0x00,       /*  __u8  MaxPower; */
+
+       /* interface */
+       0x09,       /*  __u8  if_bLength; */
+       0x04,       /*  __u8  if_bDescriptorType; Interface */
+       0x00,       /*  __u8  if_bInterfaceNumber; */
+       0x00,       /*  __u8  if_bAlternateSetting; */
+       0x01,       /*  __u8  if_bNumEndpoints; */
+       0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
+       0x00,       /*  __u8  if_bInterfaceSubClass; */
+       0x00,       /*  __u8  if_bInterfaceProtocol; */
+       0x00,       /*  __u8  if_iInterface; */
+
+       /* endpoint */
+       0x07,       /*  __u8  ep_bLength; */
+       0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
+       0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
+       0x03,       /*  __u8  ep_bmAttributes; Interrupt */
+       0x02,       /*  __u16 ep_wMaxPacketSize; ((MAX_ROOT_PORTS + 1) / 8 */
+       0x00,
+       0xff        /*  __u8  ep_bInterval; 255 ms */
+};
+
+static unsigned char root_hub_str_index0[] =
+{
+       0x04,                   /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       0x09,                   /*  __u8  lang ID */
+       0x04,                   /*  __u8  lang ID */
+};
+
+static unsigned char root_hub_str_index1[] =
+{
+       28,                     /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       'O',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'H',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'C',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'I',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'R',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       't',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'H',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'u',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+       'b',                    /*  __u8  Unicode */
+       0,                              /*  __u8  Unicode */
+};
+
+/* Hub class-specific descriptor is constructed dynamically */
+
+
+/*-------------------------------------------------------------------------*/
+
+#define OK(x)                  len = (x); break
+#ifdef DEBUG
+#define WR_RH_STAT(x)          {info("WR:status %#8x", (x));writel((x), &gohci.regs->roothub.status);}
+#define WR_RH_PORTSTAT(x)      {info("WR:portstatus[%d] %#8x", wIndex-1, (x));writel((x), &gohci.regs->roothub.portstatus[wIndex-1]);}
+#else
+#define WR_RH_STAT(x)          writel((x), &gohci.regs->roothub.status)
+#define WR_RH_PORTSTAT(x)      writel((x), &gohci.regs->roothub.portstatus[wIndex-1])
+#endif
+#define RD_RH_STAT             roothub_status(&gohci)
+#define RD_RH_PORTSTAT         roothub_portstatus(&gohci,wIndex-1)
+
+/* request to virtual root hub */
+
+int rh_check_port_status(ohci_t *controller)
+{
+       __u32 temp, ndp, i;
+       int res;
+
+       res = -1;
+       temp = roothub_a (controller);
+       ndp = (temp & RH_A_NDP);
+       for (i = 0; i < ndp; i++) {
+               temp = roothub_portstatus (controller, i);
+               /* check for a device disconnect */
+               if (((temp & (RH_PS_PESC | RH_PS_CSC)) ==
+                       (RH_PS_PESC | RH_PS_CSC)) &&
+                       ((temp & RH_PS_CCS) == 0)) {
+                       res = i;
+                       break;
+               }
+       }
+       return res;
+}
+
+static int ohci_submit_rh_msg(struct usb_device *dev, unsigned long pipe,
+               void *buffer, int transfer_len, struct devrequest *cmd)
+{
+       void * data = buffer;
+       int leni = transfer_len;
+       int len = 0;
+       int stat = 0;
+       __u32 datab[4];
+       __u8 *data_buf = (__u8 *)datab;
+       __u16 bmRType_bReq;
+       __u16 wValue;
+       __u16 wIndex;
+       __u16 wLength;
+
+#ifdef DEBUG
+urb_priv.actual_length = 0;
+pkt_print(dev, pipe, buffer, transfer_len, cmd, "SUB(rh)", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if ((pipe & PIPE_INTERRUPT) == PIPE_INTERRUPT) {
+               info("Root-Hub submit IRQ: NOT implemented");
+               return 0;
+       }
+
+       bmRType_bReq  = cmd->requesttype | (cmd->request << 8);
+       wValue        = m16_swap (cmd->value);
+       wIndex        = m16_swap (cmd->index);
+       wLength       = m16_swap (cmd->length);
+
+       info("Root-Hub: adr: %2x cmd(%1x): %08x %04x %04x %04x",
+               dev->devnum, 8, bmRType_bReq, wValue, wIndex, wLength);
+
+       switch (bmRType_bReq) {
+       /* Request Destination:
+          without flags: Device,
+          RH_INTERFACE: interface,
+          RH_ENDPOINT: endpoint,
+          RH_CLASS means HUB here,
+          RH_OTHER | RH_CLASS  almost ever means HUB_PORT here
+       */
+
+       case RH_GET_STATUS:
+                       *(__u16 *) data_buf = m16_swap (1); OK (2);
+       case RH_GET_STATUS | RH_INTERFACE:
+                       *(__u16 *) data_buf = m16_swap (0); OK (2);
+       case RH_GET_STATUS | RH_ENDPOINT:
+                       *(__u16 *) data_buf = m16_swap (0); OK (2);
+       case RH_GET_STATUS | RH_CLASS:
+                       *(__u32 *) data_buf = m32_swap (
+                               RD_RH_STAT & ~(RH_HS_CRWE | RH_HS_DRWE));
+                       OK (4);
+       case RH_GET_STATUS | RH_OTHER | RH_CLASS:
+                       *(__u32 *) data_buf = m32_swap (RD_RH_PORTSTAT); OK (4);
+
+       case RH_CLEAR_FEATURE | RH_ENDPOINT:
+               switch (wValue) {
+                       case (RH_ENDPOINT_STALL): OK (0);
+               }
+               break;
+
+       case RH_CLEAR_FEATURE | RH_CLASS:
+               switch (wValue) {
+                       case RH_C_HUB_LOCAL_POWER:
+                               OK(0);
+                       case (RH_C_HUB_OVER_CURRENT):
+                                       WR_RH_STAT(RH_HS_OCIC); OK (0);
+               }
+               break;
+
+       case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
+               switch (wValue) {
+                       case (RH_PORT_ENABLE):
+                                       WR_RH_PORTSTAT (RH_PS_CCS ); OK (0);
+                       case (RH_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_POCI); OK (0);
+                       case (RH_PORT_POWER):
+                                       WR_RH_PORTSTAT (RH_PS_LSDA); OK (0);
+                       case (RH_C_PORT_CONNECTION):
+                                       WR_RH_PORTSTAT (RH_PS_CSC ); OK (0);
+                       case (RH_C_PORT_ENABLE):
+                                       WR_RH_PORTSTAT (RH_PS_PESC); OK (0);
+                       case (RH_C_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_PSSC); OK (0);
+                       case (RH_C_PORT_OVER_CURRENT):
+                                       WR_RH_PORTSTAT (RH_PS_OCIC); OK (0);
+                       case (RH_C_PORT_RESET):
+                                       WR_RH_PORTSTAT (RH_PS_PRSC); OK (0);
+               }
+               break;
+
+       case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
+               switch (wValue) {
+                       case (RH_PORT_SUSPEND):
+                                       WR_RH_PORTSTAT (RH_PS_PSS ); OK (0);
+                       case (RH_PORT_RESET): /* BUG IN HUP CODE *********/
+                                       if (RD_RH_PORTSTAT & RH_PS_CCS)
+                                           WR_RH_PORTSTAT (RH_PS_PRS);
+                                       OK (0);
+                       case (RH_PORT_POWER):
+                                       WR_RH_PORTSTAT (RH_PS_PPS ); OK (0);
+                       case (RH_PORT_ENABLE): /* BUG IN HUP CODE *********/
+                                       if (RD_RH_PORTSTAT & RH_PS_CCS)
+                                           WR_RH_PORTSTAT (RH_PS_PES );
+                                       OK (0);
+               }
+               break;
+
+       case RH_SET_ADDRESS: gohci.rh.devnum = wValue; OK(0);
+
+       case RH_GET_DESCRIPTOR:
+               switch ((wValue & 0xff00) >> 8) {
+                       case (0x01): /* device descriptor */
+                               len = min_t(unsigned int,
+                                         leni,
+                                         min_t(unsigned int,
+                                             sizeof (root_hub_dev_des),
+                                             wLength));
+                               data_buf = root_hub_dev_des; OK(len);
+                       case (0x02): /* configuration descriptor */
+                               len = min_t(unsigned int,
+                                         leni,
+                                         min_t(unsigned int,
+                                             sizeof (root_hub_config_des),
+                                             wLength));
+                               data_buf = root_hub_config_des; OK(len);
+                       case (0x03): /* string descriptors */
+                               if(wValue==0x0300) {
+                                       len = min_t(unsigned int,
+                                                 leni,
+                                                 min_t(unsigned int,
+                                                     sizeof (root_hub_str_index0),
+                                                     wLength));
+                                       data_buf = root_hub_str_index0;
+                                       OK(len);
+                               }
+                               if(wValue==0x0301) {
+                                       len = min_t(unsigned int,
+                                                 leni,
+                                                 min_t(unsigned int,
+                                                     sizeof (root_hub_str_index1),
+                                                     wLength));
+                                       data_buf = root_hub_str_index1;
+                                       OK(len);
+                       }
+                       default:
+                               stat = USB_ST_STALLED;
+               }
+               break;
+
+       case RH_GET_DESCRIPTOR | RH_CLASS:
+           {
+                   __u32 temp = roothub_a (&gohci);
+
+                   data_buf [0] = 9;           /* min length; */
+                   data_buf [1] = 0x29;
+                   data_buf [2] = temp & RH_A_NDP;
+                   data_buf [3] = 0;
+                   if (temp & RH_A_PSM)        /* per-port power switching? */
+                       data_buf [3] |= 0x1;
+                   if (temp & RH_A_NOCP)       /* no overcurrent reporting? */
+                       data_buf [3] |= 0x10;
+                   else if (temp & RH_A_OCPM)  /* per-port overcurrent reporting? */
+                       data_buf [3] |= 0x8;
+
+                   /* corresponds to data_buf[4-7] */
+                   datab [1] = 0;
+                   data_buf [5] = (temp & RH_A_POTPGT) >> 24;
+                   temp = roothub_b (&gohci);
+                   data_buf [7] = temp & RH_B_DR;
+                   if (data_buf [2] < 7) {
+                       data_buf [8] = 0xff;
+                   } else {
+                       data_buf [0] += 2;
+                       data_buf [8] = (temp & RH_B_DR) >> 8;
+                       data_buf [10] = data_buf [9] = 0xff;
+                   }
+
+                   len = min_t(unsigned int, leni,
+                             min_t(unsigned int, data_buf [0], wLength));
+                   OK (len);
+               }
+
+       case RH_GET_CONFIGURATION:      *(__u8 *) data_buf = 0x01; OK (1);
+
+       case RH_SET_CONFIGURATION:      WR_RH_STAT (0x10000); OK (0);
+
+       default:
+               dbg ("unsupported root hub command");
+               stat = USB_ST_STALLED;
+       }
+
+#ifdef DEBUG
+       ohci_dump_roothub (&gohci, 1);
+#else
+       wait_ms(1);
+#endif
+
+       len = min_t(int, len, leni);
+       if (data != data_buf)
+           memcpy (data, data_buf, len);
+       dev->act_len = len;
+       dev->status = stat;
+
+#ifdef DEBUG
+       if (transfer_len)
+               urb_priv.actual_length = transfer_len;
+       pkt_print(dev, pipe, buffer, transfer_len, cmd, "RET(rh)", 0/*usb_pipein(pipe)*/);
+#else
+       wait_ms(1);
+#endif
+
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* common code for handling submit messages - used for all but root hub */
+/* accesses. */
+int submit_common_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup, int interval)
+{
+       int stat = 0;
+       int maxsize = usb_maxpacket(dev, pipe);
+       int timeout;
+
+       /* device pulled? Shortcut the action. */
+       if (devgone == dev) {
+               dev->status = USB_ST_CRC_ERR;
+               return 0;
+       }
+
+#ifdef DEBUG
+       urb_priv.actual_length = 0;
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "SUB", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if (!maxsize) {
+               err("submit_common_message: pipesize for pipe %lx is zero",
+                       pipe);
+               return -1;
+       }
+
+       if (sohci_submit_job(dev, pipe, buffer, transfer_len, setup, interval) < 0) {
+               err("sohci_submit_job failed");
+               return -1;
+       }
+
+       wait_ms(10);
+       /* ohci_dump_status(&gohci); */
+
+       /* allow more time for a BULK device to react - some are slow */
+#define BULK_TO         5000   /* timeout in milliseconds */
+       if (usb_pipetype (pipe) == PIPE_BULK)
+               timeout = BULK_TO;
+       else
+               timeout = 100;
+
+       timeout *= 4;
+       /* wait for it to complete */
+       for (;;) {
+               /* check whether the controller is done */
+               stat = hc_interrupt();
+               if (stat < 0) {
+                       stat = USB_ST_CRC_ERR;
+                       break;
+               }
+               if (stat >= 0 && stat != 0xff) {
+                       /* 0xff is returned for an SF-interrupt */
+                       break;
+               }
+               if (--timeout) {
+                       udelay(250); /* wait_ms(1); */
+               } else {
+                       err("CTL:TIMEOUT ");
+                       stat = USB_ST_CRC_ERR;
+                       break;
+               }
+       }
+       /* we got an Root Hub Status Change interrupt */
+       if (got_rhsc) {
+#ifdef DEBUG
+               ohci_dump_roothub (&gohci, 1);
+#endif
+               got_rhsc = 0;
+               /* abuse timeout */
+               timeout = rh_check_port_status(&gohci);
+               if (timeout >= 0) {
+#if 0 /* this does nothing useful, but leave it here in case that changes */
+                       /* the called routine adds 1 to the passed value */
+                       usb_hub_port_connect_change(gohci.rh.dev, timeout - 1);
+#endif
+                       /*
+                        * XXX
+                        * This is potentially dangerous because it assumes
+                        * that only one device is ever plugged in!
+                        */
+                       devgone = dev;
+               }
+       }
+
+       dev->status = stat;
+       dev->act_len = transfer_len;
+
+#ifdef DEBUG
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "RET(ctlr)", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+
+       /* free TDs in urb_priv */
+       urb_free_priv (&urb_priv);
+       return 0;
+}
+
+/* submit routines called from usb.c */
+int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len)
+{
+       info("submit_bulk_msg");
+       return submit_common_msg(dev, pipe, buffer, transfer_len, NULL, 0);
+}
+
+int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, struct devrequest *setup)
+{
+       int maxsize = usb_maxpacket(dev, pipe);
+
+       info("submit_control_msg");
+#ifdef DEBUG
+       urb_priv.actual_length = 0;
+       pkt_print(dev, pipe, buffer, transfer_len, setup, "SUB", usb_pipein(pipe));
+#else
+       wait_ms(1);
+#endif
+       if (!maxsize) {
+               err("submit_control_message: pipesize for pipe %lx is zero",
+                       pipe);
+               return -1;
+       }
+       if (((pipe >> 8) & 0x7f) == gohci.rh.devnum) {
+               gohci.rh.dev = dev;
+               /* root hub - redirect */
+               return ohci_submit_rh_msg(dev, pipe, buffer, transfer_len,
+                       setup);
+       }
+
+       return submit_common_msg(dev, pipe, buffer, transfer_len, setup, 0);
+}
+
+int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
+               int transfer_len, int interval)
+{
+       info("submit_int_msg");
+       return -1;
+}
+
+/*-------------------------------------------------------------------------*
+ * HC functions
+ *-------------------------------------------------------------------------*/
+
+/* reset the HC and BUS */
+
+static int hc_reset (ohci_t *ohci)
+{
+       int timeout = 30;
+       int smm_timeout = 50; /* 0,5 sec */
+
+       if (readl (&ohci->regs->control) & OHCI_CTRL_IR) { /* SMM owns the HC */
+               writel (OHCI_OCR, &ohci->regs->cmdstatus); /* request ownership */
+               info("USB HC TakeOver from SMM");
+               while (readl (&ohci->regs->control) & OHCI_CTRL_IR) {
+                       wait_ms (10);
+                       if (--smm_timeout == 0) {
+                               err("USB HC TakeOver failed!");
+                               return -1;
+                       }
+               }
+       }
+
+       /* Disable HC interrupts */
+       writel (OHCI_INTR_MIE, &ohci->regs->intrdisable);
+
+       dbg("USB HC reset_hc usb-%s: ctrl = 0x%X ;",
+               ohci->slot_name,
+               readl (&ohci->regs->control));
+
+       /* Reset USB (needed by some controllers) */
+       writel (0, &ohci->regs->control);
+
+       /* HC Reset requires max 10 us delay */
+       writel (OHCI_HCR,  &ohci->regs->cmdstatus);
+       while ((readl (&ohci->regs->cmdstatus) & OHCI_HCR) != 0) {
+               if (--timeout == 0) {
+                       err("USB HC reset timed out!");
+                       return -1;
+               }
+               udelay (1);
+       }
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* Start an OHCI controller, set the BUS operational
+ * enable interrupts
+ * connect the virtual root hub */
+
+static int hc_start (ohci_t * ohci)
+{
+       __u32 mask;
+       unsigned int fminterval;
+
+       ohci->disabled = 1;
+
+       /* Tell the controller where the control and bulk lists are
+        * The lists are empty now. */
+
+       writel (0, &ohci->regs->ed_controlhead);
+       writel (0, &ohci->regs->ed_bulkhead);
+
+       writel ((__u32)ohci->hcca, &ohci->regs->hcca); /* a reset clears this */
+
+       fminterval = 0x2edf;
+       writel ((fminterval * 9) / 10, &ohci->regs->periodicstart);
+       fminterval |= ((((fminterval - 210) * 6) / 7) << 16);
+       writel (fminterval, &ohci->regs->fminterval);
+       writel (0x628, &ohci->regs->lsthresh);
+
+       /* start controller operations */
+       ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER;
+       ohci->disabled = 0;
+       writel (ohci->hc_control, &ohci->regs->control);
+
+       /* disable all interrupts */
+       mask = (OHCI_INTR_SO | OHCI_INTR_WDH | OHCI_INTR_SF | OHCI_INTR_RD |
+                       OHCI_INTR_UE | OHCI_INTR_FNO | OHCI_INTR_RHSC |
+                       OHCI_INTR_OC | OHCI_INTR_MIE);
+       writel (mask, &ohci->regs->intrdisable);
+       /* clear all interrupts */
+       mask &= ~OHCI_INTR_MIE;
+       writel (mask, &ohci->regs->intrstatus);
+       /* Choose the interrupts we care about now  - but w/o MIE */
+       mask = OHCI_INTR_RHSC | OHCI_INTR_UE | OHCI_INTR_WDH | OHCI_INTR_SO;
+       writel (mask, &ohci->regs->intrenable);
+
+#ifdef OHCI_USE_NPS
+       /* required for AMD-756 and some Mac platforms */
+       writel ((roothub_a (ohci) | RH_A_NPS) & ~RH_A_PSM,
+               &ohci->regs->roothub.a);
+       writel (RH_HS_LPSC, &ohci->regs->roothub.status);
+#endif /* OHCI_USE_NPS */
+
+#define mdelay(n) ({unsigned long msec=(n); while (msec--) udelay(1000);})
+       /* POTPGT delay is bits 24-31, in 2 ms units. */
+       mdelay ((roothub_a (ohci) >> 23) & 0x1fe);
+
+       /* connect the virtual root hub */
+       ohci->rh.devnum = 0;
+
+       return 0;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/* an interrupt happens */
+
+static int
+hc_interrupt (void)
+{
+       ohci_t *ohci = &gohci;
+       struct ohci_regs *regs = ohci->regs;
+       int ints;
+       int stat = -1;
+
+       if ((ohci->hcca->done_head != 0) && !(m32_swap (ohci->hcca->done_head) & 0x01)) {
+               ints =  OHCI_INTR_WDH;
+       } else {
+               ints = readl (&regs->intrstatus);
+       }
+
+       /* dbg("Interrupt: %x frame: %x", ints, le16_to_cpu (ohci->hcca->frame_no)); */
+
+       if (ints & OHCI_INTR_RHSC) {
+               got_rhsc = 1;
+       }
+
+       if (ints & OHCI_INTR_UE) {
+               ohci->disabled++;
+               err ("OHCI Unrecoverable Error, controller usb-%s disabled",
+                       ohci->slot_name);
+               /* e.g. due to PCI Master/Target Abort */
+
+#ifdef DEBUG
+               ohci_dump (ohci, 1);
+#else
+       wait_ms(1);
+#endif
+               /* FIXME: be optimistic, hope that bug won't repeat often. */
+               /* Make some non-interrupt context restart the controller. */
+               /* Count and limit the retries though; either hardware or */
+               /* software errors can go forever... */
+               hc_reset (ohci);
+               return -1;
+       }
+
+       if (ints & OHCI_INTR_WDH) {
+               wait_ms(1);
+               writel (OHCI_INTR_WDH, &regs->intrdisable);
+               stat = dl_done_list (&gohci, dl_reverse_done_list (&gohci));
+               writel (OHCI_INTR_WDH, &regs->intrenable);
+       }
+
+       if (ints & OHCI_INTR_SO) {
+               dbg("USB Schedule overrun\n");
+               writel (OHCI_INTR_SO, &regs->intrenable);
+               stat = -1;
+       }
+
+       /* FIXME:  this assumes SOF (1/ms) interrupts don't get lost... */
+       if (ints & OHCI_INTR_SF) {
+               unsigned int frame = m16_swap (ohci->hcca->frame_no) & 1;
+               wait_ms(1);
+               writel (OHCI_INTR_SF, &regs->intrdisable);
+               if (ohci->ed_rm_list[frame] != NULL)
+                       writel (OHCI_INTR_SF, &regs->intrenable);
+               stat = 0xff;
+       }
+
+       writel (ints, &regs->intrstatus);
+       return stat;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------*/
+
+/* De-allocate all resources.. */
+
+static void hc_release_ohci (ohci_t *ohci)
+{
+       dbg ("USB HC release ohci usb-%s", ohci->slot_name);
+
+       if (!ohci->disabled)
+               hc_reset (ohci);
+}
+
+/*-------------------------------------------------------------------------*/
+
+#define __read_32bit_c0_register(source, sel)                          \
+({ int __res;                                                          \
+       if (sel == 0)                                                   \
+               __asm__ __volatile__(                                   \
+                       "mfc0\t%0, " #source "\n\t"                     \
+                       : "=r" (__res));                                \
+       else                                                            \
+               __asm__ __volatile__(                                   \
+                       ".set\tmips32\n\t"                              \
+                       "mfc0\t%0, " #source ", " #sel "\n\t"           \
+                       ".set\tmips0\n\t"                               \
+                       : "=r" (__res));                                \
+       __res;                                                          \
+})
+
+#define read_c0_prid()         __read_32bit_c0_register($15, 0)
+
+/*
+ * low level initalisation routine, called from usb.c
+ */
+static char ohci_inited = 0;
+
+int usb_lowlevel_init(void)
+{
+       u32 pin_func;
+       u32 sys_freqctrl, sys_clksrc;
+       u32 prid = read_c0_prid();
+
+       dbg("in usb_lowlevel_init\n");
+
+       /* zero and disable FREQ2 */
+       sys_freqctrl = au_readl(SYS_FREQCTRL0);
+       sys_freqctrl &= ~0xFFF00000;
+       au_writel(sys_freqctrl, SYS_FREQCTRL0);
+
+       /* zero and disable USBH/USBD clocks */
+       sys_clksrc = au_readl(SYS_CLKSRC);
+       sys_clksrc &= ~0x00007FE0;
+       au_writel(sys_clksrc, SYS_CLKSRC);
+
+       sys_freqctrl = au_readl(SYS_FREQCTRL0);
+       sys_freqctrl &= ~0xFFF00000;
+
+       sys_clksrc = au_readl(SYS_CLKSRC);
+       sys_clksrc &= ~0x00007FE0;
+
+       switch (prid & 0x000000FF) {
+       case 0x00: /* DA */
+       case 0x01: /* HA */
+       case 0x02: /* HB */
+               /* CPU core freq to 48MHz to slow it way down... */
+               au_writel(4, SYS_CPUPLL);
+
+               /*
+                * Setup 48MHz FREQ2 from CPUPLL for USB Host
+                */
+               /* FRDIV2=3 -> div by 8 of 384MHz -> 48MHz */
+               sys_freqctrl |= ((3<<22) | (1<<21) | (0<<20));
+               au_writel(sys_freqctrl, SYS_FREQCTRL0);
+
+               /* CPU core freq to 384MHz */
+               au_writel(0x20, SYS_CPUPLL);
+
+               printf("Au1000: 48MHz OHCI workaround enabled\n");
+               break;
+
+       default:  /* HC and newer */
+               /* FREQ2 = aux/2 = 48 MHz */
+               sys_freqctrl |= ((0<<22) | (1<<21) | (1<<20));
+               au_writel(sys_freqctrl, SYS_FREQCTRL0);
+               break;
+       }
+
+       /*
+        * Route 48MHz FREQ2 into USB Host and/or Device
+        */
+       sys_clksrc |= ((4<<12) | (0<<11) | (0<<10));
+       au_writel(sys_clksrc, SYS_CLKSRC);
+
+       /* configure pins GPIO[14:9] as GPIO */
+       pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8080);
+
+       au_writel(pin_func, SYS_PINFUNC);
+       au_writel(0x2800, SYS_TRIOUTCLR);
+       au_writel(0x0030, SYS_OUTPUTCLR);
+
+       dbg("OHCI board setup complete\n");
+
+       /* enable host controller */
+       au_writel(USBH_ENABLE_CE, USB_HOST_CONFIG);
+       udelay(1000);
+       au_writel(USBH_ENABLE_INIT, USB_HOST_CONFIG);
+       udelay(1000);
+
+       /* wait for reset complete (read register twice; see au1500 errata) */
+       while (au_readl(USB_HOST_CONFIG),
+              !(au_readl(USB_HOST_CONFIG) & USBH_ENABLE_RD))
+               udelay(1000);
+
+       dbg("OHCI clock running\n");
+
+       memset (&gohci, 0, sizeof (ohci_t));
+       memset (&urb_priv, 0, sizeof (urb_priv_t));
+
+       /* align the storage */
+       if ((__u32)&ghcca[0] & 0xff) {
+               err("HCCA not aligned!!");
+               return -1;
+       }
+       phcca = &ghcca[0];
+       info("aligned ghcca %p", phcca);
+       memset(&ohci_dev, 0, sizeof(struct ohci_device));
+       if ((__u32)&ohci_dev.ed[0] & 0x7) {
+               err("EDs not aligned!!");
+               return -1;
+       }
+       memset(gtd, 0, sizeof(td_t) * (NUM_TD + 1));
+       if ((__u32)gtd & 0x7) {
+               err("TDs not aligned!!");
+               return -1;
+       }
+       ptd = gtd;
+       gohci.hcca = phcca;
+       memset (phcca, 0, sizeof (struct ohci_hcca));
+
+       gohci.disabled = 1;
+       gohci.sleeping = 0;
+       gohci.irq = -1;
+       gohci.regs = (struct ohci_regs *)(USB_OHCI_BASE | 0xA0000000);
+
+       gohci.flags = 0;
+       gohci.slot_name = "au1x00";
+
+       dbg("OHCI revision: 0x%08x\n"
+              "  RH: a: 0x%08x b: 0x%08x\n",
+              readl(&gohci.regs->revision),
+              readl(&gohci.regs->roothub.a), readl(&gohci.regs->roothub.b));
+
+       if (hc_reset (&gohci) < 0)
+               goto errout;
+
+       /* FIXME this is a second HC reset; why?? */
+       writel (gohci.hc_control = OHCI_USB_RESET, &gohci.regs->control);
+       wait_ms (10);
+
+       if (hc_start (&gohci) < 0)
+               goto errout;
+
+#ifdef DEBUG
+       ohci_dump (&gohci, 1);
+#else
+       wait_ms(1);
+#endif
+       ohci_inited = 1;
+       return 0;
+
+  errout:
+       err("OHCI initialization error\n");
+       hc_release_ohci (&gohci);
+       /* Initialization failed */
+       au_writel(readl(USB_HOST_CONFIG) & ~USBH_ENABLE_CE, USB_HOST_CONFIG);
+       return -1;
+}
+
+int usb_lowlevel_stop(void)
+{
+       /* this gets called really early - before the controller has */
+       /* even been initialized! */
+       if (!ohci_inited)
+               return 0;
+       /* TODO release any interrupts, etc. */
+       /* call hc_release_ohci() here ? */
+       hc_reset (&gohci);
+       /* may not want to do this */
+       /* Disable clock */
+       au_writel(readl(USB_HOST_CONFIG) & ~USBH_ENABLE_CE, USB_HOST_CONFIG);
+       return 0;
+}
+
+#endif /* CONFIG_USB_OHCI */
diff --git a/cpu/mips/au1x00_usb_ohci.h b/cpu/mips/au1x00_usb_ohci.h
new file mode 100644 (file)
index 0000000..4ef06ff
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+ * URB OHCI HCD (Host Controller Driver) for USB.
+ *
+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ * (C) Copyright 2000-2001 David Brownell <dbrownell@users.sourceforge.net>
+ *
+ * usb-ohci.h
+ */
+
+
+static int cc_to_error[16] = {
+
+/* mapping of the OHCI CC status to error codes */
+       /* No  Error  */               0,
+       /* CRC Error  */               USB_ST_CRC_ERR,
+       /* Bit Stuff  */               USB_ST_BIT_ERR,
+       /* Data Togg  */               USB_ST_CRC_ERR,
+       /* Stall      */               USB_ST_STALLED,
+       /* DevNotResp */               -1,
+       /* PIDCheck   */               USB_ST_BIT_ERR,
+       /* UnExpPID   */               USB_ST_BIT_ERR,
+       /* DataOver   */               USB_ST_BUF_ERR,
+       /* DataUnder  */               USB_ST_BUF_ERR,
+       /* reservd    */               -1,
+       /* reservd    */               -1,
+       /* BufferOver */               USB_ST_BUF_ERR,
+       /* BuffUnder  */               USB_ST_BUF_ERR,
+       /* Not Access */               -1,
+       /* Not Access */               -1
+};
+
+/* ED States */
+
+#define ED_NEW                 0x00
+#define ED_UNLINK      0x01
+#define ED_OPER                0x02
+#define ED_DEL         0x04
+#define ED_URB_DEL     0x08
+
+/* usb_ohci_ed */
+struct ed {
+       __u32 hwINFO;
+       __u32 hwTailP;
+       __u32 hwHeadP;
+       __u32 hwNextED;
+
+       struct ed *ed_prev;
+       __u8 int_period;
+       __u8 int_branch;
+       __u8 int_load;
+       __u8 int_interval;
+       __u8 state;
+       __u8 type;
+       __u16 last_iso;
+       struct ed *ed_rm_list;
+
+       struct usb_device *usb_dev;
+       __u32 unused[3];
+} __attribute((aligned(16)));
+typedef struct ed ed_t;
+
+
+/* TD info field */
+#define TD_CC       0xf0000000
+#define TD_CC_GET(td_p) ((td_p >>28) & 0x0f)
+#define TD_CC_SET(td_p, cc) (td_p) = ((td_p) & 0x0fffffff) | (((cc) & 0x0f) << 28)
+#define TD_EC       0x0C000000
+#define TD_T        0x03000000
+#define TD_T_DATA0  0x02000000
+#define TD_T_DATA1  0x03000000
+#define TD_T_TOGGLE 0x00000000
+#define TD_R        0x00040000
+#define TD_DI       0x00E00000
+#define TD_DI_SET(X) (((X) & 0x07)<< 21)
+#define TD_DP       0x00180000
+#define TD_DP_SETUP 0x00000000
+#define TD_DP_IN    0x00100000
+#define TD_DP_OUT   0x00080000
+
+#define TD_ISO     0x00010000
+#define TD_DEL      0x00020000
+
+/* CC Codes */
+#define TD_CC_NOERROR      0x00
+#define TD_CC_CRC          0x01
+#define TD_CC_BITSTUFFING  0x02
+#define TD_CC_DATATOGGLEM  0x03
+#define TD_CC_STALL        0x04
+#define TD_DEVNOTRESP      0x05
+#define TD_PIDCHECKFAIL    0x06
+#define TD_UNEXPECTEDPID   0x07
+#define TD_DATAOVERRUN     0x08
+#define TD_DATAUNDERRUN    0x09
+#define TD_BUFFEROVERRUN   0x0C
+#define TD_BUFFERUNDERRUN  0x0D
+#define TD_NOTACCESSED     0x0F
+
+
+#define MAXPSW 1
+
+struct td {
+       __u32 hwINFO;
+       __u32 hwCBP;            /* Current Buffer Pointer */
+       __u32 hwNextTD;         /* Next TD Pointer */
+       __u32 hwBE;             /* Memory Buffer End Pointer */
+
+       __u16 hwPSW[MAXPSW];
+       __u8 unused;
+       __u8 index;
+       struct ed *ed;
+       struct td *next_dl_td;
+       struct usb_device *usb_dev;
+       int transfer_len;
+       __u32 data;
+
+       __u32 unused2[2];
+} __attribute((aligned(32)));
+typedef struct td td_t;
+
+#define OHCI_ED_SKIP   (1 << 14)
+
+/*
+ * The HCCA (Host Controller Communications Area) is a 256 byte
+ * structure defined in the OHCI spec. that the host controller is
+ * told the base address of.  It must be 256-byte aligned.
+ */
+
+#define NUM_INTS 32    /* part of the OHCI standard */
+struct ohci_hcca {
+       __u32   int_table[NUM_INTS];    /* Interrupt ED table */
+       __u16   frame_no;               /* current frame number */
+       __u16   pad1;                   /* set to 0 on each frame_no change */
+       __u32   done_head;              /* info returned for an interrupt */
+       u8              reserved_for_hc[116];
+} __attribute((aligned(256)));
+
+
+/*
+ * Maximum number of root hub ports.
+ */
+#define MAX_ROOT_PORTS 15      /* maximum OHCI root hub ports */
+
+/*
+ * This is the structure of the OHCI controller's memory mapped I/O
+ * region.  This is Memory Mapped I/O.  You must use the readl() and
+ * writel() macros defined in asm/io.h to access these!!
+ */
+struct ohci_regs {
+       /* control and status registers */
+       __u32   revision;
+       __u32   control;
+       __u32   cmdstatus;
+       __u32   intrstatus;
+       __u32   intrenable;
+       __u32   intrdisable;
+       /* memory pointers */
+       __u32   hcca;
+       __u32   ed_periodcurrent;
+       __u32   ed_controlhead;
+       __u32   ed_controlcurrent;
+       __u32   ed_bulkhead;
+       __u32   ed_bulkcurrent;
+       __u32   donehead;
+       /* frame counters */
+       __u32   fminterval;
+       __u32   fmremaining;
+       __u32   fmnumber;
+       __u32   periodicstart;
+       __u32   lsthresh;
+       /* Root hub ports */
+       struct  ohci_roothub_regs {
+               __u32   a;
+               __u32   b;
+               __u32   status;
+               __u32   portstatus[MAX_ROOT_PORTS];
+       } roothub;
+} __attribute((aligned(32)));
+
+
+/* OHCI CONTROL AND STATUS REGISTER MASKS */
+
+/*
+ * HcControl (control) register masks
+ */
+#define OHCI_CTRL_CBSR (3 << 0)        /* control/bulk service ratio */
+#define OHCI_CTRL_PLE  (1 << 2)        /* periodic list enable */
+#define OHCI_CTRL_IE   (1 << 3)        /* isochronous enable */
+#define OHCI_CTRL_CLE  (1 << 4)        /* control list enable */
+#define OHCI_CTRL_BLE  (1 << 5)        /* bulk list enable */
+#define OHCI_CTRL_HCFS (3 << 6)        /* host controller functional state */
+#define OHCI_CTRL_IR   (1 << 8)        /* interrupt routing */
+#define OHCI_CTRL_RWC  (1 << 9)        /* remote wakeup connected */
+#define OHCI_CTRL_RWE  (1 << 10)       /* remote wakeup enable */
+
+/* pre-shifted values for HCFS */
+#      define OHCI_USB_RESET   (0 << 6)
+#      define OHCI_USB_RESUME  (1 << 6)
+#      define OHCI_USB_OPER    (2 << 6)
+#      define OHCI_USB_SUSPEND (3 << 6)
+
+/*
+ * HcCommandStatus (cmdstatus) register masks
+ */
+#define OHCI_HCR       (1 << 0)        /* host controller reset */
+#define OHCI_CLF       (1 << 1)        /* control list filled */
+#define OHCI_BLF       (1 << 2)        /* bulk list filled */
+#define OHCI_OCR       (1 << 3)        /* ownership change request */
+#define OHCI_SOC       (3 << 16)       /* scheduling overrun count */
+
+/*
+ * masks used with interrupt registers:
+ * HcInterruptStatus (intrstatus)
+ * HcInterruptEnable (intrenable)
+ * HcInterruptDisable (intrdisable)
+ */
+#define OHCI_INTR_SO   (1 << 0)        /* scheduling overrun */
+#define OHCI_INTR_WDH  (1 << 1)        /* writeback of done_head */
+#define OHCI_INTR_SF   (1 << 2)        /* start frame */
+#define OHCI_INTR_RD   (1 << 3)        /* resume detect */
+#define OHCI_INTR_UE   (1 << 4)        /* unrecoverable error */
+#define OHCI_INTR_FNO  (1 << 5)        /* frame number overflow */
+#define OHCI_INTR_RHSC (1 << 6)        /* root hub status change */
+#define OHCI_INTR_OC   (1 << 30)       /* ownership change */
+#define OHCI_INTR_MIE  (1 << 31)       /* master interrupt enable */
+
+
+/* Virtual Root HUB */
+struct virt_root_hub {
+       int devnum; /* Address of Root Hub endpoint */
+       void *dev;  /* was urb */
+       void *int_addr;
+       int send;
+       int interval;
+};
+
+/* USB HUB CONSTANTS (not OHCI-specific; see hub.h) */
+
+/* destination of request */
+#define RH_INTERFACE               0x01
+#define RH_ENDPOINT                0x02
+#define RH_OTHER                   0x03
+
+#define RH_CLASS                   0x20
+#define RH_VENDOR                  0x40
+
+/* Requests: bRequest << 8 | bmRequestType */
+#define RH_GET_STATUS           0x0080
+#define RH_CLEAR_FEATURE        0x0100
+#define RH_SET_FEATURE          0x0300
+#define RH_SET_ADDRESS         0x0500
+#define RH_GET_DESCRIPTOR      0x0680
+#define RH_SET_DESCRIPTOR       0x0700
+#define RH_GET_CONFIGURATION   0x0880
+#define RH_SET_CONFIGURATION   0x0900
+#define RH_GET_STATE            0x0280
+#define RH_GET_INTERFACE        0x0A80
+#define RH_SET_INTERFACE        0x0B00
+#define RH_SYNC_FRAME           0x0C80
+/* Our Vendor Specific Request */
+#define RH_SET_EP               0x2000
+
+
+/* Hub port features */
+#define RH_PORT_CONNECTION         0x00
+#define RH_PORT_ENABLE             0x01
+#define RH_PORT_SUSPEND            0x02
+#define RH_PORT_OVER_CURRENT       0x03
+#define RH_PORT_RESET              0x04
+#define RH_PORT_POWER              0x08
+#define RH_PORT_LOW_SPEED          0x09
+
+#define RH_C_PORT_CONNECTION       0x10
+#define RH_C_PORT_ENABLE           0x11
+#define RH_C_PORT_SUSPEND          0x12
+#define RH_C_PORT_OVER_CURRENT     0x13
+#define RH_C_PORT_RESET            0x14
+
+/* Hub features */
+#define RH_C_HUB_LOCAL_POWER       0x00
+#define RH_C_HUB_OVER_CURRENT      0x01
+
+#define RH_DEVICE_REMOTE_WAKEUP    0x00
+#define RH_ENDPOINT_STALL          0x01
+
+#define RH_ACK                     0x01
+#define RH_REQ_ERR                 -1
+#define RH_NACK                    0x00
+
+
+/* OHCI ROOT HUB REGISTER MASKS */
+
+/* roothub.portstatus [i] bits */
+#define RH_PS_CCS            0x00000001        /* current connect status */
+#define RH_PS_PES            0x00000002        /* port enable status*/
+#define RH_PS_PSS            0x00000004        /* port suspend status */
+#define RH_PS_POCI           0x00000008        /* port over current indicator */
+#define RH_PS_PRS            0x00000010        /* port reset status */
+#define RH_PS_PPS            0x00000100        /* port power status */
+#define RH_PS_LSDA           0x00000200        /* low speed device attached */
+#define RH_PS_CSC            0x00010000        /* connect status change */
+#define RH_PS_PESC           0x00020000        /* port enable status change */
+#define RH_PS_PSSC           0x00040000        /* port suspend status change */
+#define RH_PS_OCIC           0x00080000        /* over current indicator change */
+#define RH_PS_PRSC           0x00100000        /* port reset status change */
+
+/* roothub.status bits */
+#define RH_HS_LPS           0x00000001         /* local power status */
+#define RH_HS_OCI           0x00000002         /* over current indicator */
+#define RH_HS_DRWE          0x00008000         /* device remote wakeup enable */
+#define RH_HS_LPSC          0x00010000         /* local power status change */
+#define RH_HS_OCIC          0x00020000         /* over current indicator change */
+#define RH_HS_CRWE          0x80000000         /* clear remote wakeup enable */
+
+/* roothub.b masks */
+#define RH_B_DR                0x0000ffff              /* device removable flags */
+#define RH_B_PPCM      0xffff0000              /* port power control mask */
+
+/* roothub.a masks */
+#define        RH_A_NDP        (0xff << 0)             /* number of downstream ports */
+#define        RH_A_PSM        (1 << 8)                /* power switching mode */
+#define        RH_A_NPS        (1 << 9)                /* no power switching */
+#define        RH_A_DT         (1 << 10)               /* device type (mbz) */
+#define        RH_A_OCPM       (1 << 11)               /* over current protection mode */
+#define        RH_A_NOCP       (1 << 12)               /* no over current protection */
+#define        RH_A_POTPGT     (0xff << 24)            /* power on to power good time */
+
+/* urb */
+#define N_URB_TD 48
+typedef struct
+{
+       ed_t *ed;
+       __u16 length;   /* number of tds associated with this request */
+       __u16 td_cnt;   /* number of tds already serviced */
+       int   state;
+       unsigned long pipe;
+       int actual_length;
+       td_t *td[N_URB_TD];     /* list pointer to all corresponding TDs associated with this request */
+} urb_priv_t;
+#define URB_DEL 1
+
+/*
+ * This is the full ohci controller description
+ *
+ * Note how the "proper" USB information is just
+ * a subset of what the full implementation needs. (Linus)
+ */
+
+
+typedef struct ohci {
+       struct ohci_hcca *hcca;         /* hcca */
+       /*dma_addr_t hcca_dma;*/
+
+       int irq;
+       int disabled;                   /* e.g. got a UE, we're hung */
+       int sleeping;
+       unsigned long flags;            /* for HC bugs */
+
+       struct ohci_regs *regs; /* OHCI controller's memory */
+
+       ed_t *ed_rm_list[2];     /* lists of all endpoints to be removed */
+       ed_t *ed_bulktail;       /* last endpoint of bulk list */
+       ed_t *ed_controltail;    /* last endpoint of control list */
+       int intrstatus;
+       __u32 hc_control;               /* copy of the hc control reg */
+       struct usb_device *dev[32];
+       struct virt_root_hub rh;
+
+       const char      *slot_name;
+} ohci_t;
+
+#define NUM_EDS 8              /* num of preallocated endpoint descriptors */
+
+struct ohci_device {
+       ed_t    ed[NUM_EDS];
+       int ed_cnt;
+};
+
+/* hcd */
+/* endpoint */
+static int ep_link(ohci_t * ohci, ed_t * ed);
+static int ep_unlink(ohci_t * ohci, ed_t * ed);
+static ed_t * ep_add_ed(struct usb_device * usb_dev, unsigned long pipe);
+
+/*-------------------------------------------------------------------------*/
+
+/* we need more TDs than EDs */
+#define NUM_TD 64
+
+/* +1 so we can align the storage */
+td_t gtd[NUM_TD+1];
+/* pointers to aligned storage */
+td_t *ptd;
+
+/* TDs ... */
+static inline struct td *
+td_alloc (struct usb_device *usb_dev)
+{
+       int i;
+       struct td       *td;
+
+       td = NULL;
+       for (i = 0; i < NUM_TD; i++) {
+               if (ptd[i].usb_dev == NULL) {
+                       td = &ptd[i];
+                       td->usb_dev = usb_dev;
+                       break;
+               }
+       }
+       return td;
+}
+
+static inline void
+ed_free (struct ed *ed)
+{
+       ed->usb_dev = NULL;
+}
index fd10747aa33ebbc0b77e621c027f93df8aa3c43a..c357615c03314daf80e5afc794f7958bfdb8bbb9 100644 (file)
@@ -26,7 +26,7 @@ MIPSFLAGS=$(shell \
 if [ "$v" -lt "14" ]; then \
        echo "-mcpu=4kc"; \
 else \
-       echo "-march=4kc -mtune=4kc -Wa,-mips_allow_branch_to_undefined"; \
+       echo "-march=4kc -mtune=4kc"; \
 fi)
 
 ifneq (,$(findstring 4KCle,$(CROSS_COMPILE)))
index 65ee8472d03c68c9f1803c7183adbcbcd08e2e26..d0515ca673f8b64755e35b2be01ee70de96d45b8 100644 (file)
@@ -102,7 +102,7 @@ int incaip_set_cpuclk (void)
        extern void ebu_init(long);
        extern void cgu_init(long);
        extern void sdram_init(long);
-       uchar tmp[64];
+       char tmp[64];
        ulong cpuclk;
 
        if (getenv_r ("cpuclk", tmp, sizeof (tmp)) > 0) {
index ff105a418401c953cd817ef8b1e42eeec30c7d23..e91e2137d704f7eb8c0fe7ab6b1907673c1f2716 100644 (file)
@@ -234,21 +234,34 @@ reset:
        li      t0, CONF_CM_UNCACHED
        mtc0    t0, CP0_CONFIG
 
+       /* Initialize GOT pointer.
+       */
+       bal     1f
+       nop
+       .word   _GLOBAL_OFFSET_TABLE_
+       1:
+       move    gp, ra
+       lw      t1, 0(ra)
+       move    gp, t1
+
 #ifdef CONFIG_INCA_IP
        /* Disable INCA-IP Watchdog.
         */
-       bal     disable_incaip_wdt
+       la      t9, disable_incaip_wdt
+       jalr    t9
        nop
 #endif
 
        /* Initialize any external memory.
         */
-       bal     lowlevel_init
+       la      t9, lowlevel_init
+       jalr    t9
        nop
 
        /* Initialize caches...
         */
-       bal     mips_cache_reset
+       la      t9, mips_cache_reset
+       jalr    t9
        nop
 
        /* ... and enable them.
@@ -260,21 +273,13 @@ reset:
        /* Set up temporary stack.
         */
        li      a0, CFG_INIT_SP_OFFSET
-       bal     mips_cache_lock
+       la      t9, mips_cache_lock
+       jalr    t9
        nop
 
        li      t0, CFG_SDRAM_BASE + CFG_INIT_SP_OFFSET
        la      sp, 0(t0)
 
-       /* Initialize GOT pointer.
-        */
-       bal     1f
-       nop
-       .word   _GLOBAL_OFFSET_TABLE_ - 1f + 4
-1:
-       move    gp, ra
-       lw      t1, 0(ra)
-       add     gp, t1
        la      t9, board_init_f
        j       t9
        nop
index d29310787dc83c007db981e595bd00bdaf1bbb3f..86c8ce68799b0ee53f91f35f7da3b67404cb1911 100644 (file)
 #if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI) && \
        defined(CONFIG_MPC5xxx_FEC)
 
+#if !(defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII))
+#error "CONFIG_MII has to be defined!"
+#endif
+
 #if (DEBUG & 0x60)
-static void tfifo_print(mpc5xxx_fec_priv *fec);
-static void rfifo_print(mpc5xxx_fec_priv *fec);
+static void tfifo_print(char *devname, mpc5xxx_fec_priv *fec);
+static void rfifo_print(char *devname, mpc5xxx_fec_priv *fec);
 #endif /* DEBUG */
 
 #if (DEBUG & 0x40)
@@ -35,9 +39,12 @@ typedef struct {
     uint8 head[16];             /* MAC header(6 + 6 + 2) + 2(aligned) */
 } NBUF;
 
+int fec5xxx_miiphy_read(char *devname, uint8 phyAddr, uint8 regAddr, uint16 * retVal);
+int fec5xxx_miiphy_write(char *devname, uint8 phyAddr, uint8 regAddr, uint16 data);
+
 /********************************************************************/
 #if (DEBUG & 0x2)
-static void mpc5xxx_fec_phydump (void)
+static void mpc5xxx_fec_phydump (char *devname)
 {
        uint16 phyStatus, i;
        uint8 phyAddr = CONFIG_PHY_ADDR;
@@ -55,7 +62,7 @@ static void mpc5xxx_fec_phydump (void)
 
        for (i = 0; i < 32; i++) {
                if (reg_mask[i]) {
-                       miiphy_read(phyAddr, i, &phyStatus);
+                       miiphy_read(devname, phyAddr, i, &phyStatus);
                        printf("Mii reg %d: 0x%04x\n", i, phyStatus);
                }
        }
@@ -291,7 +298,8 @@ static int mpc5xxx_fec_init(struct eth_device *dev, bd_t * bis)
        /*
         * Set Rx FIFO alarm and granularity value
         */
-       fec->eth->rfifo_cntrl = 0x0c000000;
+       fec->eth->rfifo_cntrl = 0x0c000000
+                               | (fec->eth->rfifo_cntrl & ~0x0f000000);
        fec->eth->rfifo_alarm = 0x0000030c;
 #if (DEBUG & 0x22)
        if (fec->eth->rfifo_status & 0x00700000 ) {
@@ -302,7 +310,8 @@ static int mpc5xxx_fec_init(struct eth_device *dev, bd_t * bis)
        /*
         * Set Tx FIFO granularity value
         */
-       fec->eth->tfifo_cntrl = 0x0c000000;
+       fec->eth->tfifo_cntrl = 0x0c000000
+                               | (fec->eth->tfifo_cntrl & ~0x0f000000);
 #if (DEBUG & 0x2)
        printf("tfifo_status: 0x%08x\n", fec->eth->tfifo_status);
        printf("tfifo_alarm: 0x%08x\n", fec->eth->tfifo_alarm);
@@ -318,7 +327,7 @@ static int mpc5xxx_fec_init(struct eth_device *dev, bd_t * bis)
         * Set individual address filter for unicast address
         * and set physical address registers.
         */
-       mpc5xxx_fec_set_hwaddr(fec, dev->enetaddr);
+       mpc5xxx_fec_set_hwaddr(fec, (char *)dev->enetaddr);
 
        /*
         * Set multicast address filter
@@ -455,7 +464,7 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
                /*
                 * Reset PHY, then delay 300ns
                 */
-               miiphy_write(phyAddr, 0x0, 0x8000);
+               miiphy_write(dev->name, phyAddr, 0x0, 0x8000);
                udelay(1000);
 
                if (fec->xcv_type == MII10) {
@@ -465,11 +474,11 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
 #if (DEBUG & 0x2)
                        printf("Forcing 10 Mbps ethernet link... ");
 #endif
-                       miiphy_read(phyAddr, 0x1, &phyStatus);
+                       miiphy_read(dev->name, phyAddr, 0x1, &phyStatus);
                        /*
-                       miiphy_write(fec, phyAddr, 0x0, 0x0100);
+                       miiphy_write(dev->name, fec, phyAddr, 0x0, 0x0100);
                        */
-                       miiphy_write(phyAddr, 0x0, 0x0180);
+                       miiphy_write(dev->name, phyAddr, 0x0, 0x0180);
 
                        timeout = 20;
                        do {    /* wait for link status to go down */
@@ -480,7 +489,7 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
 #endif
                                        break;
                                }
-                               miiphy_read(phyAddr, 0x1, &phyStatus);
+                               miiphy_read(dev->name, phyAddr, 0x1, &phyStatus);
 #if (DEBUG & 0x2)
                                printf("=");
 #endif
@@ -493,7 +502,7 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
                                        printf("failed. Link is down.\n");
                                        break;
                                }
-                               miiphy_read(phyAddr, 0x1, &phyStatus);
+                               miiphy_read(dev->name, phyAddr, 0x1, &phyStatus);
 #if (DEBUG & 0x2)
                                printf("+");
 #endif
@@ -506,12 +515,12 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
                        /*
                         * Set the auto-negotiation advertisement register bits
                         */
-                       miiphy_write(phyAddr, 0x4, 0x01e1);
+                       miiphy_write(dev->name, phyAddr, 0x4, 0x01e1);
 
                        /*
                         * Set MDIO bit 0.12 = 1(&& bit 0.9=1?) to enable auto-negotiation
                         */
-                       miiphy_write(phyAddr, 0x0, 0x1200);
+                       miiphy_write(dev->name, phyAddr, 0x0, 0x1200);
 
                        /*
                         * Wait for AN completion
@@ -527,7 +536,7 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
                                        return -1;
                                }
 
-                               if (miiphy_read(phyAddr, 0x1, &phyStatus) != 0) {
+                               if (miiphy_read(dev->name, phyAddr, 0x1, &phyStatus) != 0) {
 #if (DEBUG & 0x2)
                                        printf("PHY auto neg 1 failed 0x%04x...\n", phyStatus);
 #endif
@@ -544,7 +553,7 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
 
 #if (DEBUG & 0x2)
        if (fec->xcv_type != SEVENWIRE)
-               mpc5xxx_fec_phydump ();
+               mpc5xxx_fec_phydump (dev->name);
 #endif
 
 
@@ -629,7 +638,7 @@ static void mpc5xxx_fec_halt(struct eth_device *dev)
 #if (DEBUG & 0x60)
 /********************************************************************/
 
-static void tfifo_print(mpc5xxx_fec_priv *fec)
+static void tfifo_print(char *devname, mpc5xxx_fec_priv *fec)
 {
        uint16 phyAddr = CONFIG_PHY_ADDR;
        uint16 phyStatus;
@@ -637,7 +646,7 @@ static void tfifo_print(mpc5xxx_fec_priv *fec)
        if ((fec->eth->tfifo_lrf_ptr != fec->eth->tfifo_lwf_ptr)
                || (fec->eth->tfifo_rdptr != fec->eth->tfifo_wrptr)) {
 
-               miiphy_read(phyAddr, 0x1, &phyStatus);
+               miiphy_read(devname, phyAddr, 0x1, &phyStatus);
                printf("\nphyStatus: 0x%04x\n", phyStatus);
                printf("ecntrl:   0x%08x\n", fec->eth->ecntrl);
                printf("ievent:   0x%08x\n", fec->eth->ievent);
@@ -653,7 +662,7 @@ static void tfifo_print(mpc5xxx_fec_priv *fec)
        }
 }
 
-static void rfifo_print(mpc5xxx_fec_priv *fec)
+static void rfifo_print(char *devname, mpc5xxx_fec_priv *fec)
 {
        uint16 phyAddr = CONFIG_PHY_ADDR;
        uint16 phyStatus;
@@ -661,7 +670,7 @@ static void rfifo_print(mpc5xxx_fec_priv *fec)
        if ((fec->eth->rfifo_lrf_ptr != fec->eth->rfifo_lwf_ptr)
                || (fec->eth->rfifo_rdptr != fec->eth->rfifo_wrptr)) {
 
-               miiphy_read(phyAddr, 0x1, &phyStatus);
+               miiphy_read(devname, phyAddr, 0x1, &phyStatus);
                printf("\nphyStatus: 0x%04x\n", phyStatus);
                printf("ecntrl:   0x%08x\n", fec->eth->ecntrl);
                printf("ievent:   0x%08x\n", fec->eth->ievent);
@@ -692,7 +701,7 @@ static int mpc5xxx_fec_send(struct eth_device *dev, volatile void *eth_data,
 
 #if (DEBUG & 0x20)
        printf("tbd status: 0x%04x\n", fec->tbdBase[0].status);
-       tfifo_print(fec);
+       tfifo_print(dev->name, fec);
 #endif
 
        /*
@@ -735,7 +744,7 @@ static int mpc5xxx_fec_send(struct eth_device *dev, volatile void *eth_data,
         */
        if (fec->xcv_type != SEVENWIRE) {
                uint16 phyStatus;
-               miiphy_read(0, 0x1, &phyStatus);
+               miiphy_read(dev->name, 0, 0x1, &phyStatus);
        }
 
        /*
@@ -743,11 +752,11 @@ static int mpc5xxx_fec_send(struct eth_device *dev, volatile void *eth_data,
         */
 
 #if (DEBUG & 0x20)
-       tfifo_print(fec);
+       tfifo_print(dev->name, fec);
 #endif
        SDMA_TASK_ENABLE (FEC_XMIT_TASK_NO);
 #if (DEBUG & 0x20)
-       tfifo_print(fec);
+       tfifo_print(dev->name, fec);
 #endif
 #if (DEBUG & 0x8)
        printf( "+" );
@@ -783,7 +792,7 @@ static int mpc5xxx_fec_recv(struct eth_device *dev)
        unsigned long ievent;
        int frame_length, len = 0;
        NBUF *frame;
-       char buff[FEC_MAX_PKT_SIZE];
+       uchar buff[FEC_MAX_PKT_SIZE];
 
 #if (DEBUG & 0x1)
        printf ("mpc5xxx_fec_recv %d Start...\n", fec->rbdIndex);
@@ -872,7 +881,7 @@ int mpc5xxx_fec_initialize(bd_t * bis)
 #if defined(CONFIG_CANMB)   || defined(CONFIG_HMI1001) || \
     defined(CONFIG_ICECUBE) || defined(CONFIG_INKA4X0) || \
     defined(CONFIG_PM520)   || defined(CONFIG_TOP5200) || \
-    defined(CONFIG_TQM5200)
+    defined(CONFIG_TQM5200) || defined(CONFIG_O2DNT)
 # ifndef CONFIG_FEC_10MBIT
        fec->xcv_type = MII100;
 # else
@@ -894,6 +903,11 @@ int mpc5xxx_fec_initialize(bd_t * bis)
        sprintf(dev->name, "FEC ETHERNET");
        eth_register(dev);
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_register (dev->name,
+                       fec5xxx_miiphy_read, fec5xxx_miiphy_write);
+#endif
+
        /*
         * Try to set the mac address now. The fec mac address is
         * a garbage after reset. When not using fec for booting
@@ -910,12 +924,13 @@ int mpc5xxx_fec_initialize(bd_t * bis)
        }
 
        mpc5xxx_fec_init_phy(dev, bis);
+
        return 1;
 }
 
 /* MII-interface related functions */
 /********************************************************************/
-int miiphy_read(uint8 phyAddr, uint8 regAddr, uint16 * retVal)
+int fec5xxx_miiphy_read(char *devname, uint8 phyAddr, uint8 regAddr, uint16 * retVal)
 {
        ethernet_regs *eth = (ethernet_regs *)MPC5XXX_FEC;
        uint32 reg;             /* convenient holder for the PHY register */
@@ -957,7 +972,7 @@ int miiphy_read(uint8 phyAddr, uint8 regAddr, uint16 * retVal)
 }
 
 /********************************************************************/
-int miiphy_write(uint8 phyAddr, uint8 regAddr, uint16 data)
+int fec5xxx_miiphy_write(char *devname, uint8 phyAddr, uint8 regAddr, uint16 data)
 {
        ethernet_regs *eth = (ethernet_regs *)MPC5XXX_FEC;
        uint32 reg;             /* convenient holder for the PHY register */
index 845f7c05eff51356eed4777e3fe68b6a6bc26f63..044db46f6fb43676627c835ba844871a6e5a89d7 100644 (file)
@@ -55,8 +55,9 @@ static int  mpc_get_fdr   (int);
 
 static int mpc_reg_in(volatile u32 *reg)
 {
-       return *reg >> 24;
+       int ret = *reg >> 24;
        __asm__ __volatile__ ("eieio");
+       return ret;
 }
 
 static void mpc_reg_out(volatile u32 *reg, int val, int mask)
@@ -298,7 +299,7 @@ int i2c_probe(uchar chip)
 
 int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
 {
-       uchar                xaddr[4];
+       char                xaddr[4];
        struct mpc5xxx_i2c * regs        = (struct mpc5xxx_i2c *)I2C_BASE;
        int                  ret         = -1;
 
@@ -329,7 +330,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
                goto Done;
        }
 
-       if (receive_bytes(chip, buf, len)) {
+       if (receive_bytes(chip, (char *)buf, len)) {
                printf("i2c_read: receive_bytes failed\n");
                goto Done;
        }
@@ -342,7 +343,7 @@ Done:
 
 int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
 {
-       uchar               xaddr[4];
+       char               xaddr[4];
        struct mpc5xxx_i2c *regs        = (struct mpc5xxx_i2c *)I2C_BASE;
        int                 ret         = -1;
 
@@ -367,7 +368,7 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
                goto Done;
        }
 
-       if (send_bytes(chip, buf, len)) {
+       if (send_bytes(chip, (char *)buf, len)) {
                printf("i2c_write: send_bytes failed\n");
                goto Done;
        }
@@ -380,7 +381,7 @@ Done:
 
 uchar i2c_reg_read(uchar chip, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read(chip, reg, 1, &buf, 1);
 
index 490fcd2f6f1772e14bcdd406104a65a226b828e4..1d903459e0a746a39a9535cd3b13c830b61bf8a1 100644 (file)
@@ -49,7 +49,21 @@ static int mpc5200_read_config_dword(struct pci_controller *hose,
        *(volatile u32 *)MPC5XXX_PCI_CAR = (1 << 31) | dev | offset;
        eieio();
        udelay(10);
+#if (defined CONFIG_PF5200 || defined CONFIG_CPCI5200)
+       if (dev & 0x00ff0000) {
+               u32 val;
+               val  = in_le16((volatile u16 *)(CONFIG_PCI_IO_PHYS+2));
+               udelay(10);
+               val = val << 16;
+               val |= in_le16((volatile u16 *)(CONFIG_PCI_IO_PHYS+0));
+               *value = val;
+       } else {
+               *value = in_le32((volatile u32 *)CONFIG_PCI_IO_PHYS);
+       }
+       udelay(10);
+#else
        *value = in_le32((volatile u32 *)CONFIG_PCI_IO_PHYS);
+#endif
        eieio();
        *(volatile u32 *)MPC5XXX_PCI_CAR = 0;
        udelay(10);
@@ -131,7 +145,11 @@ void pci_mpc5xxx_init (struct pci_controller *hose)
 
        /* Disable interrupts from PCI controller */
        *(vu_long *)MPC5XXX_PCI_GSCR &= ~(7 << 12);
-       *(vu_long *)MPC5XXX_PCI_ICR &= ~(7 << 24);
+       *(vu_long *)MPC5XXX_PCI_ICR  &= ~(7 << 24);
+
+       /* Set PCI retry counter to 0 = infinite retry. */
+       /* The default of 255 is too short for slow devices. */
+       *(vu_long *)MPC5XXX_PCI_ICR &= 0xFFFFFF00;
 
        /* Disable initiator windows */
        *(vu_long *)MPC5XXX_PCI_IWCR = 0;
index 1e9628c511497f8565746b758e559be6859720e1..91e1def98cb3c33670126932230839446732680c 100644 (file)
@@ -152,14 +152,14 @@ serial_setbrg(void)
        unsigned long baseclk, div;
 
 #if defined(CONFIG_MGT5100)
-       baseclk = CFG_MPC5XXX_CLKIN / 32;
+       baseclk = (CFG_MPC5XXX_CLKIN + 16) / 32;
 #elif defined(CONFIG_MPC5200)
        baseclk = (gd->ipb_clk + 16) / 32;
 #endif
 
        /* set up UART divisor */
        div = (baseclk + (gd->baudrate/2)) / gd->baudrate;
-       psc->ctur = div >> 8;
-       psc->ctlr = div & 0xff;
+       psc->ctur = (div >> 8) & 0xFF;
+       psc->ctlr =  div & 0xff;
 }
 #endif /* CONFIG_PSC_CONSOLE */
index e974ab3494f53eee8e9f579f6cc5d282f7c8f8f9..1201e794df4a5fe7330026e82342744a60e102f9 100644 (file)
 #if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI) && \
     defined(CONFIG_MPC8220_FEC)
 
-/*#if (CONFIG_COMMANDS & CFG_CMD_NET)*/
+#if !(defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII))
+#error "CONFIG_MII has to be defined!"
+#endif
 
 #ifdef DEBUG
-static void tfifo_print (mpc8220_fec_priv * fec);
-static void rfifo_print (mpc8220_fec_priv * fec);
+static void tfifo_print (char *devname, mpc8220_fec_priv * fec);
+static void rfifo_print (char *devname, mpc8220_fec_priv * fec);
 #endif /* DEBUG */
 
 #ifdef DEBUG
@@ -36,9 +38,12 @@ typedef struct {
        u8 head[16];            /* MAC header(6 + 6 + 2) + 2(aligned) */
 } NBUF;
 
+int fec8220_miiphy_read (char *devname, u8 phyAddr, u8 regAddr, u16 * retVal);
+int fec8220_miiphy_write (char *devname, u8 phyAddr, u8 regAddr, u16 data);
+
 /********************************************************************/
 #ifdef DEBUG
-static void mpc8220_fec_phydump (void)
+static void mpc8220_fec_phydump (char *devname)
 {
        u16 phyStatus, i;
        u8 phyAddr = CONFIG_PHY_ADDR;
@@ -56,7 +61,7 @@ static void mpc8220_fec_phydump (void)
 
        for (i = 0; i < 32; i++) {
                if (reg_mask[i]) {
-                       miiphy_read (phyAddr, i, &phyStatus);
+                       miiphy_read (devname, phyAddr, i, &phyStatus);
                        printf ("Mii reg %d: 0x%04x\n", i, phyStatus);
                }
        }
@@ -330,7 +335,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
         * Set individual address filter for unicast address
         * and set physical address registers.
         */
-       mpc8220_fec_set_hwaddr (fec, dev->enetaddr);
+       mpc8220_fec_set_hwaddr (fec, (char *)(dev->enetaddr));
 
        /*
         * Set multicast address filter
@@ -400,7 +405,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
                /*
                 * Reset PHY, then delay 300ns
                 */
-               miiphy_write (phyAddr, 0x0, 0x8000);
+               miiphy_write (dev->name, phyAddr, 0x0, 0x8000);
                udelay (1000);
 
                if (fec->xcv_type == MII10) {
@@ -410,11 +415,11 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
 #ifdef DEBUG
                        printf ("Forcing 10 Mbps ethernet link... ");
 #endif
-                       miiphy_read (phyAddr, 0x1, &phyStatus);
+                       miiphy_read (dev->name, phyAddr, 0x1, &phyStatus);
                        /*
                           miiphy_write(fec, phyAddr, 0x0, 0x0100);
                         */
-                       miiphy_write (phyAddr, 0x0, 0x0180);
+                       miiphy_write (dev->name, phyAddr, 0x0, 0x0180);
 
                        timeout = 20;
                        do {    /* wait for link status to go down */
@@ -425,7 +430,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
 #endif
                                        break;
                                }
-                               miiphy_read (phyAddr, 0x1, &phyStatus);
+                               miiphy_read (dev->name, phyAddr, 0x1, &phyStatus);
 #ifdef DEBUG
                                printf ("=");
 #endif
@@ -438,7 +443,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
                                        printf ("failed. Link is down.\n");
                                        break;
                                }
-                               miiphy_read (phyAddr, 0x1, &phyStatus);
+                               miiphy_read (dev->name, phyAddr, 0x1, &phyStatus);
 #ifdef DEBUG
                                printf ("+");
 #endif
@@ -451,12 +456,12 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
                        /*
                         * Set the auto-negotiation advertisement register bits
                         */
-                       miiphy_write (phyAddr, 0x4, 0x01e1);
+                       miiphy_write (dev->name, phyAddr, 0x4, 0x01e1);
 
                        /*
                         * Set MDIO bit 0.12 = 1(&& bit 0.9=1?) to enable auto-negotiation
                         */
-                       miiphy_write (phyAddr, 0x0, 0x1200);
+                       miiphy_write (dev->name, phyAddr, 0x0, 0x1200);
 
                        /*
                         * Wait for AN completion
@@ -472,7 +477,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
                                        return -1;
                                }
 
-                               if (miiphy_read (phyAddr, 0x1, &phyStatus) !=
+                               if (miiphy_read (dev->name, phyAddr, 0x1, &phyStatus) !=
                                    0) {
 #ifdef DEBUG
                                        printf ("PHY auto neg 1 failed 0x%04x...\n", phyStatus);
@@ -495,7 +500,7 @@ static int mpc8220_fec_init (struct eth_device *dev, bd_t * bis)
 
 #ifdef DEBUG
        if (fec->xcv_type != SEVENWIRE)
-               mpc8220_fec_phydump ();
+               mpc8220_fec_phydump (dev->name);
 #endif
 
        /*
@@ -518,7 +523,7 @@ static void mpc8220_fec_halt (struct eth_device *dev)
 
 #ifdef DEBUG
        if (fec->xcv_type != SEVENWIRE)
-               mpc8220_fec_phydump ();
+               mpc8220_fec_phydump (dev->name);
 #endif
 
        /*
@@ -573,7 +578,7 @@ static void mpc8220_fec_halt (struct eth_device *dev)
 #ifdef DEBUG
 /********************************************************************/
 
-static void tfifo_print (mpc8220_fec_priv * fec)
+static void tfifo_print (char *devname, mpc8220_fec_priv * fec)
 {
        u16 phyAddr = CONFIG_PHY_ADDR;
        u16 phyStatus;
@@ -581,7 +586,7 @@ static void tfifo_print (mpc8220_fec_priv * fec)
        if ((fec->eth->tfifo_lrf_ptr != fec->eth->tfifo_lwf_ptr)
            || (fec->eth->tfifo_rdptr != fec->eth->tfifo_wrptr)) {
 
-               miiphy_read (phyAddr, 0x1, &phyStatus);
+               miiphy_read (devname, phyAddr, 0x1, &phyStatus);
                printf ("\nphyStatus: 0x%04x\n", phyStatus);
                printf ("ecntrl:   0x%08x\n", fec->eth->ecntrl);
                printf ("ievent:   0x%08x\n", fec->eth->ievent);
@@ -597,7 +602,7 @@ static void tfifo_print (mpc8220_fec_priv * fec)
        }
 }
 
-static void rfifo_print (mpc8220_fec_priv * fec)
+static void rfifo_print (char *devname, mpc8220_fec_priv * fec)
 {
        u16 phyAddr = CONFIG_PHY_ADDR;
        u16 phyStatus;
@@ -605,7 +610,7 @@ static void rfifo_print (mpc8220_fec_priv * fec)
        if ((fec->eth->rfifo_lrf_ptr != fec->eth->rfifo_lwf_ptr)
            || (fec->eth->rfifo_rdptr != fec->eth->rfifo_wrptr)) {
 
-               miiphy_read (phyAddr, 0x1, &phyStatus);
+               miiphy_read (devname, phyAddr, 0x1, &phyStatus);
                printf ("\nphyStatus: 0x%04x\n", phyStatus);
                printf ("ecntrl:   0x%08x\n", fec->eth->ecntrl);
                printf ("ievent:   0x%08x\n", fec->eth->ievent);
@@ -636,7 +641,7 @@ static int mpc8220_fec_send (struct eth_device *dev, volatile void *eth_data,
 
 #ifdef DEBUG
        printf ("tbd status: 0x%04x\n", fec->tbdBase[0].status);
-       tfifo_print (fec);
+       tfifo_print (dev->name, fec);
 #endif
 
        /*
@@ -680,7 +685,7 @@ static int mpc8220_fec_send (struct eth_device *dev, volatile void *eth_data,
        if (fec->xcv_type != SEVENWIRE) {
                u16 phyStatus;
 
-               miiphy_read (0, 0x1, &phyStatus);
+               miiphy_read (dev->name, 0, 0x1, &phyStatus);
        }
 
        /*
@@ -688,13 +693,13 @@ static int mpc8220_fec_send (struct eth_device *dev, volatile void *eth_data,
         */
 
 #ifdef DEBUG
-       tfifo_print (fec);
+       tfifo_print (dev->name, fec);
 #endif
 
        DMA_TASK_ENABLE (FEC_XMIT_TASK_NO);
 
 #ifdef DEBUG
-       tfifo_print (fec);
+       tfifo_print (dev->name, fec);
 #endif
 
 #ifdef DEBUG
@@ -842,6 +847,11 @@ int mpc8220_fec_initialize (bd_t * bis)
        sprintf (dev->name, "FEC ETHERNET");
        eth_register (dev);
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_register (dev->name,
+                       fec8220_miiphy_read, fec8220_miiphy_write);
+#endif
+
        /*
         * Try to set the mac address now. The fec mac address is
         * a garbage after reset. When not using fec for booting
@@ -875,7 +885,7 @@ int mpc8220_fec_initialize (bd_t * bis)
 
 /* MII-interface related functions */
 /********************************************************************/
-int miiphy_read (u8 phyAddr, u8 regAddr, u16 * retVal)
+int fec8220_miiphy_read (char *devname, u8 phyAddr, u8 regAddr, u16 * retVal)
 {
        ethernet_regs *eth = (ethernet_regs *) MMAP_FEC1;
        u32 reg;                /* convenient holder for the PHY register */
@@ -919,7 +929,7 @@ int miiphy_read (u8 phyAddr, u8 regAddr, u16 * retVal)
 }
 
 /********************************************************************/
-int miiphy_write (u8 phyAddr, u8 regAddr, u16 data)
+int fec8220_miiphy_write (char *devname, u8 phyAddr, u8 regAddr, u16 data)
 {
        ethernet_regs *eth = (ethernet_regs *) MMAP_FEC1;
        u32 reg;                /* convenient holder for the PHY register */
index e9d077178b10f4adcbf5ee0fa6fe9064bd0b6889..62f7c0f5d330df815284ca99031017880c66273c 100644 (file)
@@ -73,8 +73,10 @@ static int mpc_get_fdr (int);
 
 static int mpc_reg_in (volatile u32 * reg)
 {
-       return *reg >> 24;
+       int ret;
+       ret = *reg >> 24;
        __asm__ __volatile__ ("eieio");
+       return ret;
 }
 
 static void mpc_reg_out (volatile u32 * reg, int val, int mask)
@@ -324,7 +326,7 @@ int i2c_read (uchar chip, uint addr, int alen, uchar * buf, int len)
                goto Done;
        }
 
-       if (send_bytes (chip, &xaddr[4 - alen], alen)) {
+       if (send_bytes (chip, (char *)&xaddr[4 - alen], alen)) {
                printf ("i2c_read: send_bytes failed\n");
                goto Done;
        }
@@ -335,7 +337,7 @@ int i2c_read (uchar chip, uint addr, int alen, uchar * buf, int len)
                goto Done;
        }
 
-       if (receive_bytes (chip, buf, len)) {
+       if (receive_bytes (chip, (char *)buf, len)) {
                printf ("i2c_read: receive_bytes failed\n");
                goto Done;
        }
@@ -368,12 +370,12 @@ int i2c_write (uchar chip, uint addr, int alen, uchar * buf, int len)
                goto Done;
        }
 
-       if (send_bytes (chip, &xaddr[4 - alen], alen)) {
+       if (send_bytes (chip, (char *)&xaddr[4 - alen], alen)) {
                printf ("i2c_write: send_bytes failed\n");
                goto Done;
        }
 
-       if (send_bytes (chip, buf, len)) {
+       if (send_bytes (chip, (char *)buf, len)) {
                printf ("i2c_write: send_bytes failed\n");
                goto Done;
        }
@@ -386,7 +388,7 @@ int i2c_write (uchar chip, uint addr, int alen, uchar * buf, int len)
 
 uchar i2c_reg_read (uchar chip, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read (chip, reg, 1, &buf, 1);
 
index 7445a1ce3140d1b21e39da393fa1b2ce7966a2e4..3add687514c060907f3150b03f2ebd5b8c034b98 100644 (file)
@@ -264,12 +264,12 @@ int i2c_probe (uchar chip)
         * and looking for an <ACK> back.
         */
        udelay (10000);
-       return i2c_read (chip, 0, 1, (char *) &tmp, 1);
+       return i2c_read (chip, 0, 1, (uchar *) &tmp, 1);
 }
 
 uchar i2c_reg_read (uchar i2c_addr, uchar reg)
 {
-       char buf[1];
+       uchar buf[1];
 
        i2c_read (i2c_addr, reg, 1, buf, 1);
 
index 0393afabc2792d208bf6bfd09a2c110bcca787af..ed3515fcf316bde3fd9bba21d398512ff518de9f 100644 (file)
 #include <config.h>
 #include <net.h>
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+#include <miiphy.h>
+#endif
+
 #if defined(CONFIG_ETHER_ON_FCC) && (CONFIG_COMMANDS & CFG_CMD_NET) && \
        defined(CONFIG_NET_MULTI)
 
@@ -386,6 +390,12 @@ int fec_initialize(bd_t *bis)
                dev->recv   = fec_recv;
 
                eth_register(dev);
+
+#if (defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)) \
+               && defined(CONFIG_BITBANGMII)
+               miiphy_register(dev->name,
+                               bb_miiphy_read, bb_miiphy_write);
+#endif
        }
 
        return 1;
index e0ac6840815f87db632e1c5dc1f688c749808b0a..ea97ab85fbc091944b6c4a7707dfa253778751d5 100644 (file)
@@ -752,7 +752,7 @@ i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
 uchar
 i2c_reg_read(uchar chip, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read(chip, reg, 1, &buf, 1);
 
index f068e8e50da8b4749de028993929eb660b01c89e..44576deb61d8a8ed84b8271a3640380473210d75 100644 (file)
@@ -2,6 +2,10 @@
  * (C) Copyright 2003
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
+ * Copyright (c) 2005 MontaVista Software, Inc.
+ * Vitaly Bordug <vbordug@ru.mvista.com>
+ * Added support for PCI bridge on MPC8272ADS
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -230,7 +234,7 @@ static inline void pci_outl (u32 addr, u32 data)
 
 void pci_mpc8250_init (struct pci_controller *hose)
 {
-#ifdef CONFIG_MPC8266ADS
+#if defined CONFIG_MPC8266ADS || defined CONFIG_MPC8272
        DECLARE_GLOBAL_DATA_PTR;
 #endif
        u16 tempShort;
@@ -248,6 +252,27 @@ void pci_mpc8250_init (struct pci_controller *hose)
        immap->im_siu_conf.sc_siumcr =
                (immap->im_siu_conf.sc_siumcr & ~SIUMCR_LBPC11)
                | SIUMCR_LBPC01;
+#elif defined CONFIG_MPC8272
+       immap->im_siu_conf.sc_siumcr = (immap->im_siu_conf.sc_siumcr &
+                                 ~SIUMCR_BBD &
+                                 ~SIUMCR_ESE &
+                                 ~SIUMCR_PBSE &
+                                 ~SIUMCR_CDIS &
+                                 ~SIUMCR_DPPC11 &
+                                 ~SIUMCR_L2CPC11 &
+                                 ~SIUMCR_LBPC11 &
+                                 ~SIUMCR_APPC11 &
+                                 ~SIUMCR_CS10PC11 &
+                                 ~SIUMCR_BCTLC11 &
+                                 ~SIUMCR_MMR11)
+                                 | SIUMCR_DPPC11
+                                 | SIUMCR_L2CPC01
+                                 | SIUMCR_LBPC00
+                                 | SIUMCR_APPC10
+                                 | SIUMCR_CS10PC00
+                                 | SIUMCR_BCTLC00
+                                 | SIUMCR_MMR11;
+
 #else
        /*
         * Setting required to enable IRQ1-IRQ7 (SIUMCR [DPPC]),
@@ -290,7 +315,7 @@ void pci_mpc8250_init (struct pci_controller *hose)
        immap->im_memctl.memc_pcimsk0 = PCIMSK0_MASK;
        immap->im_memctl.memc_pcibr0 = PCI_MSTR0_LOCAL | PCIBR_ENABLE;
 
-#ifdef CONFIG_MPC8266ADS
+#if defined CONFIG_MPC8266ADS || defined CONFIG_MPC8272
        immap->im_memctl.memc_pcimsk1 = PCIMSK1_MASK;
        immap->im_memctl.memc_pcibr1 = PCI_MSTR1_LOCAL | PCIBR_ENABLE;
 #endif
@@ -300,7 +325,7 @@ void pci_mpc8250_init (struct pci_controller *hose)
 
        /* give it some time */
        {
-#ifdef CONFIG_MPC8266ADS
+#if defined CONFIG_MPC8266ADS || defined CONFIG_MPC8272
                /* Give the PCI cards more time to initialize before query
                   This might be good for other boards also
                 */
@@ -344,7 +369,11 @@ void pci_mpc8250_init (struct pci_controller *hose)
        immap->im_pci.pci_picmr0 = cpu_to_le32 (PICMR0_MASK_ATTRIB);    /* Size & attribute */
 
        /* See above for description - puts PCI request as highest priority */
+#ifdef CONFIG_MPC8272
+       immap->im_siu_conf.sc_ppc_alrh = 0x01236745;
+#else
        immap->im_siu_conf.sc_ppc_alrh = 0x03124567;
+#endif
 
        /* Park the bus on the PCI */
        immap->im_siu_conf.sc_ppc_acr = PPC_ACR_BUS_PARK_PCI;
@@ -370,7 +399,7 @@ void pci_mpc8250_init (struct pci_controller *hose)
        hose->last_busno = 0xff;
 
        /* System memory space */
-#ifdef CONFIG_MPC8266ADS
+#if defined CONFIG_MPC8266ADS || defined CONFIG_MPC8272
        pci_set_region (hose->regions + 0,
                        PCI_SLV_MEM_BUS,
                        PCI_SLV_MEM_LOCAL,
@@ -383,7 +412,7 @@ void pci_mpc8250_init (struct pci_controller *hose)
 #endif
 
        /* PCI memory space */
-#ifdef CONFIG_MPC8266ADS
+#if defined CONFIG_MPC8266ADS || defined CONFIG_MPC8272
        pci_set_region (hose->regions + 1,
                        PCI_MSTR_MEMIO_BUS,
                        PCI_MSTR_MEMIO_LOCAL,
index 14574f45e289042b247ec485c865a0de3d5c461e..60df4cdec6a115f66082dcaf21e0a49ae6cfe404 100644 (file)
@@ -32,7 +32,6 @@ COBJS = traps.o \
          cpu_init.o \
          speed.o \
          interrupts.o \
-         pci.o \
          i2c.o \
          spd_sdram.o
 
index c84aeb4df0fc7b6549f5cb2cee51f408d1c50efd..8c9b515fa5c72aa3346e1c282010f8b2e5c1aa9c 100644 (file)
@@ -50,7 +50,7 @@ int checkcpu(void)
                return -1;
        }
 
-       puts("CPU: MPC83xx, ");
+       puts("CPU:   MPC83xx, ");
        switch(pvr) {
        case PVR_8349_REV10:
                break;
@@ -60,7 +60,9 @@ int checkcpu(void)
                puts("Rev: Unknown\n");
                return -1;      /* Not sure what this is */
        }
-       printf("Rev: %02x at %s MHz\n",pvr & 0x0000FFFF, strmhz(buf, clock));
+       printf("Rev: %d.%d at %s MHz\n", (pvr & 0xf0) >> 4,
+               (pvr & 0x0f), strmhz(buf, clock));
+
        return 0;
 }
 
index 3db7d2cbcdca6297b6231ff6e0469669b33056b3..4e70f808a4d2e8dfe9dff69d40c3d2cc9a848286 100644 (file)
@@ -41,7 +41,7 @@
 #include <i2c.h>
 #include <asm/i2c.h>
 
-#ifdef CONFIG_MPC8349ADS
+#if defined(CONFIG_MPC8349ADS) || defined(CONFIG_TQM834X)
 i2c_t * mpc8349_i2c = (i2c_t*)(CFG_IMMRBAR + CFG_I2C_OFFSET);
 #endif
 
@@ -109,7 +109,9 @@ i2c_wait (int write)
 
                return 0;
        } while (get_timer (timeval) < I2C_TIMEOUT);
+
        debug("i2c_wait: timed out\n");
+       return -1;
 }
 
 static __inline__ int
@@ -231,12 +233,12 @@ int i2c_probe (uchar chip)
         * and looking for an <ACK> back.
         */
        udelay(10000);
-       return i2c_read (chip, 0, 1, (char *)&tmp, 1);
+       return i2c_read (chip, 0, 1, (uchar *)&tmp, 1);
 }
 
 uchar i2c_reg_read (uchar i2c_addr, uchar reg)
 {
-       char buf[1];
+       uchar buf[1];
 
        i2c_read (i2c_addr, reg, 1, buf, 1);
 
diff --git a/cpu/mpc83xx/pci.c b/cpu/mpc83xx/pci.c
deleted file mode 100644 (file)
index d5fa811..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2003 Motorola Inc.
- * Xianghua Xiao (x.xiao@motorola.com)
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- * Change log:
- *
- * 20050101: Eran Liberty (liberty@freescale.com)
- *           Initial file creating (porting from 85XX & 8260)
- */
-
-/*
- * PCI Configuration space access support for MPC85xx PCI Bridge
- */
-#include <asm/mmu.h>
-#include <asm/io.h>
-#include <common.h>
-#include <pci.h>
-
-#ifdef CONFIG_MPC8349ADS
-#include <asm/i2c.h>
-#endif
-
-#if defined(CONFIG_PCI)
-
-void
-pci_mpc83xx_init(volatile struct pci_controller *hose)
-{
-       volatile immap_t *      immr;
-       volatile clk8349_t *    clk;
-       volatile law8349_t *    pci_law;
-       volatile pot8349_t *    pci_pot;
-       volatile pcictrl8349_t *        pci_ctrl;
-       volatile pciconf8349_t *        pci_conf;
-
-       u8 val8,tmp8,ret;
-       u16 reg16,tmp16;
-       u32 val32,tmp32;
-
-       immr = (immap_t *)CFG_IMMRBAR;
-       clk = (clk8349_t *)&immr->clk;
-       pci_law = immr->sysconf.pcilaw;
-       pci_pot = immr->ios.pot;
-       pci_ctrl = immr->pci_ctrl;
-       pci_conf = immr->pci_conf;
-
-       /*
-        * Configure PCI controller and PCI_CLK_OUTPUT both in 66M mode
-        */
-       val32 = clk->occr;
-       udelay(2000);
-       clk->occr = 0xff000000;
-       udelay(2000);
-
-       /*
-        * Configure PCI Local Access Windows
-        */
-       pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR;
-       pci_law[0].ar = LAWAR_EN | LAWAR_SIZE_1G;
-       pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR;
-       pci_law[1].ar = LAWAR_EN | LAWAR_SIZE_32M;
-
-       /*
-        * Configure PCI Outbound Translation Windows
-        */
-       pci_pot[0].potar = (CFG_PCI1_MEM_BASE >> 12) & POTAR_TA_MASK;
-       pci_pot[0].pobar = (CFG_PCI1_MEM_PHYS >> 12) & POBAR_BA_MASK;
-       pci_pot[0].pocmr = POCMR_EN | (POCMR_CM_512M & POCMR_CM_MASK);
-
-       /* mapped to PCI1 IO space 0x0 to local 0xe2000000  */
-       pci_pot[1].potar = (CFG_PCI1_IO_BASE >> 12) & POTAR_TA_MASK;
-       pci_pot[1].pobar = (CFG_PCI1_IO_PHYS >> 12) & POBAR_BA_MASK;
-       pci_pot[1].pocmr = POCMR_EN | POCMR_IO | (POCMR_CM_16M & POCMR_CM_MASK);
-
-       pci_pot[3].potar = (CFG_PCI2_MEM_BASE >> 12) & POTAR_TA_MASK;
-       pci_pot[3].pobar = (CFG_PCI2_MEM_PHYS >> 12) & POBAR_BA_MASK;
-       pci_pot[3].pocmr = POCMR_EN | POCMR_DST | (POCMR_CM_512M & POCMR_CM_MASK);
-
-       /* mapped to PCI2 IO space 0x0 to local 0xe3000000  */
-       pci_pot[4].potar = (CFG_PCI2_IO_BASE >> 12) & POTAR_TA_MASK;
-       pci_pot[4].pobar = (CFG_PCI2_IO_PHYS >> 12) & POBAR_BA_MASK;
-       pci_pot[4].pocmr = POCMR_EN | POCMR_DST | POCMR_IO | (POCMR_CM_16M & POCMR_CM_MASK);
-
-       /*
-        * Configure PCI Inbound Translation Windows
-        */
-       pci_ctrl[0].pitar1 = 0x0;
-       pci_ctrl[0].pibar1 = 0x0;
-       pci_ctrl[0].piebar1 = 0x0;
-       pci_ctrl[0].piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP | PIWAR_WTT_SNOOP | PIWAR_IWS_2G;
-
-       pci_ctrl[1].pitar1 = 0x0;
-       pci_ctrl[1].pibar1 = 0x0;
-       pci_ctrl[1].piebar1 = 0x0;
-       pci_ctrl[1].piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP | PIWAR_WTT_SNOOP | PIWAR_IWS_2G;
-       /*
-        * Assign PIB PMC slot to desired PCI bus
-        */
-#ifdef CONFIG_MPC8349ADS
-       mpc8349_i2c = (i2c_t*)(CFG_IMMRBAR + CFG_I2C2_OFFSET);
-       i2c_init(CFG_I2C_SPEED,CFG_I2C_SLAVE);
-#endif
-       val8 = 0;
-       ret = i2c_write(0x23,0x6,1,&val8,1);
-       ret = i2c_write(0x23,0x7,1,&val8,1);
-       val8 = 0xff;
-       ret = i2c_write(0x23,0x2,1,&val8,1);
-       ret = i2c_write(0x23,0x3,1,&val8,1);
-
-       val8 = 0;
-       ret = i2c_write(0x26,0x6,1,&val8,1);
-       val8 = 0x34;
-       ret = i2c_write(0x26,0x7,1,&val8,1);
-#if defined(PCI_64BIT)
-       val8 = 0xf4;    /* PMC2<->PCI1  64bit */
-#elif defined(PCI_ALL_PCI1)
-       val8 = 0xf3;    /* PMC1<->PCI1,PMC2<->PCI1,PMC3<->PCI1  32bit */
-#elif defined(PCI_ONE_PCI1)
-       val8 = 0xf9;    /* PMC1<->PCI1,PMC2<->PCI2,PMC3<->PCI2  32bit */
-#elif defined(PCI_TWO_PCI1)
-       val8 = 0xf5;    /* PMC1<->PCI1,PMC2<->PCI1,PMC3<->PCI2 32bit */
-#else
-       val8 = 0xf5;
-#endif
-       ret = i2c_write(0x26,0x2,1,&val8,1);
-       val8 = 0xff;
-       ret = i2c_write(0x26,0x3,1,&val8,1);
-       val8 = 0;
-       ret = i2c_write(0x27,0x6,1,&val8,1);
-       ret = i2c_write(0x27,0x7,1,&val8,1);
-       val8 = 0xff;
-       ret = i2c_write(0x27,0x2,1,&val8,1);
-       val8 = 0xef;
-       ret = i2c_write(0x27,0x3,1,&val8,1);
-       asm("eieio");
-
-       /*
-        * Release PCI RST Output signal
-        */
-       udelay(2000);
-       pci_ctrl[0].gcr = 1;
-#ifndef PCI_64BIT
-       pci_ctrl[1].gcr = 1;
-#endif
-       udelay(2000);
-
-       hose[0].first_busno = 0;
-       hose[0].last_busno = 0xff;
-
-       pci_set_region(hose[0].regions + 0,
-                      CFG_PCI1_MEM_BASE,
-                      CFG_PCI1_MEM_PHYS,
-                      CFG_PCI1_MEM_SIZE,
-                      PCI_REGION_MEM);
-
-       pci_set_region(hose[0].regions + 1,
-                      CFG_PCI1_IO_BASE,
-                      CFG_PCI1_IO_PHYS,
-                      CFG_PCI1_IO_SIZE,
-                      PCI_REGION_IO);
-
-       hose[0].region_count = 2;
-
-       pci_setup_indirect(&hose[0],
-                          (CFG_IMMRBAR+0x8300),
-                          (CFG_IMMRBAR+0x8304));
-#define PCI_CLASS_BRIDGE       0x06
-       reg16 = 0xff;
-       tmp32 = 0xffff;
-       pci_hose_write_config_byte(&hose[0],PCI_BDF(0,0,0),PCI_CLASS_CODE,PCI_CLASS_BRIDGE);
-
-       pci_hose_read_config_word (&hose[0],PCI_BDF(0,0,0),PCI_COMMAND, &reg16);
-       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
-       pci_hose_write_config_word(&hose[0],PCI_BDF(0,0,0), PCI_COMMAND, reg16);
-
-       /*
-        * Clear non-reserved bits in status register.
-        */
-       pci_hose_write_config_word(&hose[0],PCI_BDF(0,0,0), PCI_STATUS, 0xffff);
-       pci_hose_write_config_byte(&hose[0],PCI_BDF(0,0,0), PCI_LATENCY_TIMER,0x80);
-#ifndef PCI_64BIT
-       hose[1].first_busno = 0;
-       hose[1].last_busno = 0xff;
-
-       pci_set_region(hose[1].regions + 0,
-                      CFG_PCI2_MEM_BASE,
-                      CFG_PCI2_MEM_PHYS,
-                      CFG_PCI2_MEM_SIZE,
-                      PCI_REGION_MEM);
-
-       pci_set_region(hose[1].regions + 1,
-                      CFG_PCI2_IO_BASE,
-                      CFG_PCI2_IO_PHYS,
-                      CFG_PCI2_IO_SIZE,
-                      PCI_REGION_IO);
-
-       hose[1].region_count = 2;
-
-       pci_setup_indirect(&hose[1],
-                          (CFG_IMMRBAR+0x8380),
-                          (CFG_IMMRBAR+0x8384));
-
-       pci_hose_write_config_byte(&hose[1],PCI_BDF(0,0,0),PCI_CLASS_CODE,PCI_CLASS_BRIDGE);
-       pci_hose_read_config_word (&hose[1],PCI_BDF(0,0,0), PCI_COMMAND, &reg16);
-       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
-       pci_hose_write_config_word(&hose[1],PCI_BDF(0,0,0), PCI_COMMAND, reg16);
-
-       /*
-        * Clear non-reserved bits in status register.
-        */
-       pci_hose_write_config_word(&hose[1],PCI_BDF(0,0,0), PCI_STATUS, 0xffff);
-       pci_hose_write_config_byte(&hose[1],PCI_BDF(0,0,0), PCI_LATENCY_TIMER,0x80);
-#endif
-
-#if defined(PCI_64BIT)
-       printf("PCI1 64bit on PMC2\n");
-#elif defined(PCI_ALL_PCI1)
-       printf("PCI1 32bit on PMC1 & PMC2 & PMC3\n");
-#elif defined(PCI_ONE_PCI1)
-       printf("PCI1 32bit on PMC1,PCI2 32bit on PMC2 & PMC3\n");
-#else
-       printf("PCI1 32bit on PMC1 & PMC2 & PMC3 in default\n");
-#endif
-
-#if 1
-       /*
-        * Hose scan.
-        */
-       pci_register_hose(hose);
-       hose->last_busno = pci_hose_scan(hose);
-#endif
-}
-
-#endif /* CONFIG_PCI */
index 260137da82fc5a132cd9e538e070134b68cb3442..1368fc3feaf5be720e5c852aa31d8c502fd6a285 100644 (file)
@@ -118,41 +118,50 @@ int get_clocks (void)
                return -1;
 
 #ifndef CFG_HRCW_HIGH
-# error "CFG_HRCW_HIGH must be defined in include/configs/MCP83XXADS.h"
+# error "CFG_HRCW_HIGH must be defined in board config file"
 #endif /* CFG_HCWD_HIGH */
 
 #if (CFG_HRCW_HIGH & HRCWH_PCI_HOST)
+
 # ifndef CONFIG_83XX_CLKIN
-#  error "In PCI Host Mode, CONFIG_83XX_CLKIN must be defined in include/configs/MCP83XXADS.h"
+#  error "In PCI Host Mode, CONFIG_83XX_CLKIN must be defined in board config file"
 # endif /* CONFIG_83XX_CLKIN */
 # ifdef CONFIG_83XX_PCICLK
-#  warning "In PCI Host Mode, CONFIG_83XX_PCICLK in include/configs/MCP83XXADS.h is igonred."
+#  warning "In PCI Host Mode, CONFIG_83XX_PCICLK in board config file is igonred"
 # endif /* CONFIG_83XX_PCICLK */
-/* PCI Host Mode */
+
+       /* PCI Host Mode */
        if (!(im->reset.rcwh & RCWH_PCIHOST)) {
-               /* though RCWH_PCIHOST is defined in CFG_HRCW_HIGH the im->reset.rcwhr PCI Host Mode is disabled */
-               /* FIXME: findout if there is a way to issue some warning */
+               /* though RCWH_PCIHOST is defined in CFG_HRCW_HIGH
+                * the im->reset.rcwhr PCI Host Mode is disabled
+                * FIXME: findout if there is a way to issue some warning */
                return -2;
        }
        if (im->clk.spmr & SPMR_CKID) {
-               pci_sync_in = CONFIG_83XX_CLKIN / 2; /* PCI Clock is half CONFIG_83XX_CLKIN */
+               /* PCI Clock is half CONFIG_83XX_CLKIN */
+               pci_sync_in = CONFIG_83XX_CLKIN / 2;
        }
        else {
                pci_sync_in = CONFIG_83XX_CLKIN;
        }
-#else
+
+#else /* (CFG_HRCW_HIGH & HRCWH_PCI_HOST) */
+
 # ifdef CONFIG_83XX_CLKIN
-#  warning "In PCI Agent Mode, CONFIG_83XX_CLKIN in include/configs/MCP83XXADS.h is igonred."
+#  warning "In PCI Agent Mode, CONFIG_83XX_CLKIN in board config file is igonred"
 # endif /* CONFIG_83XX_CLKIN */
 # ifndef CONFIG_83XX_PCICLK
-#  error "In PCI Agent Mode, CONFIG_83XX_PCICLK must be defined in include/configs/MCP83XXADS.h"
+#  error "In PCI Agent Mode, CONFIG_83XX_PCICLK must be defined in board config file"
 # endif /* CONFIG_83XX_PCICLK */
-/* PCI Agent Mode */
+
+       /* PCI Agent Mode */
        if (im->reset.rcwh & RCWH_PCIHOST) {
-               /* though RCWH_PCIHOST is not defined in CFG_HRCW_HIGH the im->reset.rcwhr PCI Host Mode is enabled */
+               /* though RCWH_PCIHOST is not defined in CFG_HRCW_HIGH
+                * the im->reset.rcwhr PCI Host Mode is enabled */
                return -3;
        }
        pci_sync_in = CONFIG_83XX_PCICLK;
+
 #endif /* (CFG_HRCW_HIGH | RCWH_PCIHOST) */
 
        /* we have up to date pci_sync_in */
@@ -320,6 +329,7 @@ int get_clocks (void)
        gd->lbiu_clk   = lbiu_clk  ;
        gd->lclk_clk   = lclk_clk  ;
        gd->ddr_clk    = ddr_clk   ;
+       gd->pci_clk    = pci_sync_in;
 
        gd->cpu_clk = gd->core_clk;
        gd->bus_clk = gd->lbiu_clk;
@@ -343,79 +353,14 @@ int print_clock_conf (void)
        printf("Clock configuration:\n");
        printf("  Coherent System Bus: %4d MHz\n",gd->csb_clk/1000000);
        printf("  Core:                %4d MHz\n",gd->core_clk/1000000);
-       printf("  Local Bus Controller:%4d MHz\n",gd->lbiu_clk/1000000);
+       debug("  Local Bus Controller:%4d MHz\n",gd->lbiu_clk/1000000);
        printf("  Local Bus:           %4d MHz\n",gd->lclk_clk/1000000);
-       printf("  DDR:                 %4d MHz\n",gd->ddr_clk/1000000);
-       printf("  I2C:                 %4d MHz\n",gd->i2c_clk/1000000);
-       printf("  TSEC1:               %4d MHz\n",gd->tsec1_clk/1000000);
-       printf("  TSEC2:               %4d MHz\n",gd->tsec2_clk/1000000);
-       printf("  USB MPH:             %4d MHz\n",gd->usbmph_clk/1000000);
-       printf("  USB DR:              %4d MHz\n",gd->usbdr_clk/1000000);
-
-#if 0
-       DECLARE_GLOBAL_DATA_PTR;
-
-       volatile immap_t *immap = (immap_t *) CFG_IMMR;
-       ulong sccr, dfbrg;
-       ulong scmr, corecnf, busdf, cpmdf, plldf, pllmf;
-       corecnf_t *cp;
-
-       sccr = immap->im_clkrst.car_sccr;
-       dfbrg = (sccr & SCCR_DFBRG_MSK) >> SCCR_DFBRG_SHIFT;
-
-       scmr = immap->im_clkrst.car_scmr;
-       corecnf = (scmr & SCMR_CORECNF_MSK) >> SCMR_CORECNF_SHIFT;
-       busdf = (scmr & SCMR_BUSDF_MSK) >> SCMR_BUSDF_SHIFT;
-       cpmdf = (scmr & SCMR_CPMDF_MSK) >> SCMR_CPMDF_SHIFT;
-       plldf = (scmr & SCMR_PLLDF) ? 1 : 0;
-       pllmf = (scmr & SCMR_PLLMF_MSK) >> SCMR_PLLMF_SHIFT;
-
-       cp = &corecnf_tab[corecnf];
-
-       puts (CPU_ID_STR " Clock Configuration\n - Bus-to-Core Mult ");
-
-       switch (cp->b2c_mult) {
-       case _byp:
-               puts ("BYPASS");
-               break;
+       debug("  DDR:                 %4d MHz\n",gd->ddr_clk/1000000);
+       debug("  I2C:                 %4d MHz\n",gd->i2c_clk/1000000);
+       debug("  TSEC1:               %4d MHz\n",gd->tsec1_clk/1000000);
+       debug("  TSEC2:               %4d MHz\n",gd->tsec2_clk/1000000);
+       debug("  USB MPH:             %4d MHz\n",gd->usbmph_clk/1000000);
+       debug("  USB DR:              %4d MHz\n",gd->usbdr_clk/1000000);
 
-       case _off:
-               puts ("OFF");
-               break;
-
-       case _unk:
-               puts ("UNKNOWN");
-               break;
-
-       default:
-               printf ("%d%sx",
-                       cp->b2c_mult / 2,
-                       (cp->b2c_mult % 2) ? ".5" : "");
-               break;
-       }
-
-       printf (", VCO Div %d, 60x Bus Freq %s, Core Freq %s\n",
-                       cp->vco_div, cp->freq_60x, cp->freq_core);
-
-       printf (" - dfbrg %ld, corecnf 0x%02lx, busdf %ld, cpmdf %ld, "
-                       "plldf %ld, pllmf %ld\n", dfbrg, corecnf, busdf, cpmdf, plldf,
-                       pllmf);
-
-       printf (" - vco_out %10ld, scc_clk %10ld, brg_clk %10ld\n",
-                       gd->vco_out, gd->scc_clk, gd->brg_clk);
-
-       printf (" - cpu_clk %10ld, cpm_clk %10ld, bus_clk %10ld\n",
-                       gd->cpu_clk, gd->cpm_clk, gd->bus_clk);
-
-       if (sccr & SCCR_PCI_MODE) {
-               uint pci_div;
-
-               pci_div = ( (sccr & SCCR_PCI_MODCK) ? 2 : 1) *
-                       ( ( (sccr & SCCR_PCIDF_MSK) >> SCCR_PCIDF_SHIFT) + 1);
-
-               printf (" - pci_clk %10ld\n", (gd->cpm_clk * 2) / pci_div);
-       }
-       putc ('\n');
-#endif
        return 0;
 }
index cbbb3a402036b53d768a1fd4c85cd34914cc1a62..d15d2424929eacb0437130a50b702718b35d13dd 100644 (file)
 #include <config.h>
 #include <net.h>
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+#include <miiphy.h>
+#endif
+
 #if defined(CONFIG_CPM2)
 
 #if defined(CONFIG_ETHER_ON_FCC) && (CONFIG_COMMANDS & CFG_CMD_NET) && \
@@ -303,7 +307,9 @@ static int fec_init(struct eth_device* dev, bd_t *bis)
      * Allocate space in the reserved FCC area of DPRAM for the
      * internal buffers.  No one uses this space (yet), so we
      * can do this.  Later, we will add resource management for
-     * this area. CPM_FCC_SPECIAL_BASE: 0xb000.
+     * this area.
+     * CPM_FCC_SPECIAL_BASE:   0xB000 for MPC8540, MPC8560
+     *                         0x9000 for MPC8541, MPC8555
      */
     mem_addr = CPM_FCC_SPECIAL_BASE + ((info->ether_index) * 64);
     pram_ptr->fen_genfcc.fcc_riptr = mem_addr;
@@ -451,6 +457,12 @@ int fec_initialize(bd_t *bis)
                dev->recv   = fec_recv;
 
                eth_register(dev);
+
+#if (defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)) \
+               && defined(CONFIG_BITBANGMII)
+               miiphy_register(dev->name,
+                               bb_miiphy_read, bb_miiphy_write);
+#endif
        }
 
        return 1;
index 2d0848799584164a7468948e1fc94ae9af541218..32dcf5d47e507d447f352ad1914779ac2380d1f5 100644 (file)
@@ -245,12 +245,12 @@ int i2c_probe (uchar chip)
         * and looking for an <ACK> back.
         */
        udelay(10000);
-       return i2c_read (chip, 0, 1, (char *)&tmp, 1);
+       return i2c_read (chip, 0, 1, (uchar *)&tmp, 1);
 }
 
 uchar i2c_reg_read (uchar i2c_addr, uchar reg)
 {
-       char buf[1];
+       uchar buf[1];
 
        i2c_read (i2c_addr, reg, 1, buf, 1);
 
index 069fe4e69a6911c5104612d39557ba330b071182..a94493e0802c9424e575b0cd94cd98ff7debf586 100644 (file)
@@ -61,16 +61,6 @@ pci_mpc85xx_init(struct pci_controller *hose)
                           (CFG_IMMR+0x8000),
                           (CFG_IMMR+0x8004));
 
-       pci_read_config_word (PCI_BDF(0,0,0), PCI_COMMAND, &reg16);
-       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
-       pci_write_config_word(PCI_BDF(0,0,0), PCI_COMMAND, reg16);
-
-       /*
-        * Clear non-reserved bits in status register.
-        */
-       pci_write_config_word(PCI_BDF(0,0,0), PCI_STATUS, 0xffff);
-       pci_write_config_byte(PCI_BDF(0,0,0), PCI_LATENCY_TIMER,0x80);
-
        pcix->potar1   = (CFG_PCI1_MEM_BASE >> 12) & 0x000fffff;
        pcix->potear1  = 0x00000000;
        pcix->powbar1  = (CFG_PCI1_MEM_BASE >> 12) & 0x000fffff;
@@ -93,6 +83,16 @@ pci_mpc85xx_init(struct pci_controller *hose)
         */
        pci_register_hose(hose);
 
+       pci_read_config_word (PCI_BDF(0,0,0), PCI_COMMAND, &reg16);
+       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
+       pci_write_config_word(PCI_BDF(0,0,0), PCI_COMMAND, reg16);
+
+       /*
+        * Clear non-reserved bits in status register.
+        */
+       pci_write_config_word(PCI_BDF(0,0,0), PCI_STATUS, 0xffff);
+       pci_write_config_byte(PCI_BDF(0,0,0), PCI_LATENCY_TIMER,0x80);
+
 #if defined(CONFIG_MPC8555CDS) || defined(CONFIG_MPC8541CDS)
        /*
         * This is a SW workaround for an apparent HW problem
index 5f75bc1aff9e69175671616261acb0489bc87fb9..7ac65736bc03f697863ea7a058ed151ec8c59fbe 100644 (file)
@@ -995,6 +995,11 @@ relocate_code:
 7:     sync                    /* Wait for all icbi to complete on bus */
        isync
 
+       /*
+        * Re-point the IVPR at RAM
+        */
+       mtspr   IVPR,r10
+
 /*
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
index f8f56a317938d83649efb477b678b1978c0e0cc6..d2f5d888440b215ec67e9709d09d6ac27d38af54 100644 (file)
 
 #if defined(WANT_MII)
 #include <miiphy.h>
+
+#if !(defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII))
+#error "CONFIG_MII has to be defined!"
+#endif
+
 #endif
 
 #if defined(CONFIG_RMII) && !defined(WANT_MII)
 static int mii_discover_phy(struct eth_device *dev);
 #endif
 
+int fec8xx_miiphy_read(char *devname, unsigned char addr,
+               unsigned char  reg, unsigned short *value);
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value);
+
 static struct ether_fcc_info_s
 {
        int ether_index;
@@ -169,6 +179,11 @@ int fec_initialize(bd_t *bis)
                dev->recv = fec_recv;
 
                eth_register(dev);
+
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+               miiphy_register(dev->name,
+                       fec8xx_miiphy_read, fec8xx_miiphy_write);
+#endif
        }
        return 1;
 }
@@ -712,7 +727,7 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
        /*
         * adapt the RMII speed to the speed of the phy
         */
-       if (miiphy_speed (efis->actual_phy_addr) == _100BASET) {
+       if (miiphy_speed (dev->name, efis->actual_phy_addr) == _100BASET) {
                fec_100Mbps (dev);
        } else {
                fec_10Mbps (dev);
@@ -723,7 +738,7 @@ static int fec_init (struct eth_device *dev, bd_t * bd)
        /*
         * adapt to the half/full speed settings
         */
-       if (miiphy_duplex (efis->actual_phy_addr) == FULL) {
+       if (miiphy_duplex (dev->name, efis->actual_phy_addr) == FULL) {
                fec_full_duplex (dev);
        } else {
                fec_half_duplex (dev);
@@ -969,7 +984,8 @@ void mii_init (void)
  *       Otherwise they hang in mii_send() !!! Sorry!
  *****************************************************************************/
 
-int miiphy_read(unsigned char addr, unsigned char  reg, unsigned short *value)
+int fec8xx_miiphy_read(char *devname, unsigned char addr,
+               unsigned char  reg, unsigned short *value)
 {
        short rdreg;    /* register working value */
 
@@ -985,7 +1001,8 @@ int miiphy_read(unsigned char addr, unsigned char  reg, unsigned short *value)
        return 0;
 }
 
-int miiphy_write(unsigned char  addr, unsigned char  reg, unsigned short value)
+int fec8xx_miiphy_write(char *devname, unsigned char  addr,
+               unsigned char  reg, unsigned short value)
 {
        short rdreg;    /* register working value */
 #ifdef MII_DEBUG
index baa3552b078f5a0fee32006ae216b51ea6cefe95..682db53edb10d9807e015f03b717682087fe308b 100644 (file)
@@ -724,7 +724,7 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
 uchar
 i2c_reg_read(uchar i2c_addr, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);
 
index 9213d101a72d20511ccbec5441f850b07de1de3c..e318ed0d298aefa9bc84c0ee4e27d0a2a1522083 100644 (file)
@@ -525,11 +525,11 @@ int spi_post_test (int flags)
 
        for (i = 0; i < TEST_NUM; i++) {
                for (l = TEST_MIN_LENGTH; l <= TEST_MAX_LENGTH; l += 8) {
-                       packet_fill (txbuf, l);
+                       packet_fill ((char *)txbuf, l);
 
                        spi_xfer (l);
 
-                       if (packet_check (rxbuf, l) < 0) {
+                       if (packet_check ((char *)rxbuf, l) < 0) {
                                goto Done;
                        }
                }
index f2b8814c83112b2131b0ca55b5c364dc22df9d97..ee60477ab8f18753450a25c15860dbd763725665 100644 (file)
@@ -447,9 +447,9 @@ static void video_drawchars (int xx, int yy, unsigned char *s, int count)
        }
 }
 
-static inline void video_drawstring (int xx, int yy, unsigned char *s)
+static inline void video_drawstring (int xx, int yy, char *s)
 {
-       video_drawchars (xx, yy, s, strlen (s));
+       video_drawchars (xx, yy, (unsigned char *)s, strlen (s));
 }
 
 /* Relative to console plotting functions */
@@ -474,7 +474,7 @@ static void video_putchar (int xx, int yy, unsigned char c)
 
 static inline void video_putstring (int xx, int yy, unsigned char *s)
 {
-       video_putchars (xx, yy, s, strlen (s));
+       video_putchars (xx, yy, (unsigned char *)s, strlen ((char *)s));
 }
 
 /************************************************************************/
diff --git a/cpu/ppc4xx/405gp_enet.c b/cpu/ppc4xx/405gp_enet.c
deleted file mode 100644 (file)
index 968f0ce..0000000
+++ /dev/null
@@ -1,1062 +0,0 @@
-/*-----------------------------------------------------------------------------+
- *
- *       This source code has been made available to you by IBM on an AS-IS
- *       basis.  Anyone receiving this source is licensed under IBM
- *       copyrights to use it in any way he or she deems fit, including
- *       copying it, modifying it, compiling it, and redistributing it either
- *       with or without modifications.  No license under IBM patents or
- *       patent applications is to be implied by the copyright license.
- *
- *       Any user of this software should understand that IBM cannot provide
- *       technical support for this software and will not be responsible for
- *       any consequences resulting from the use of this software.
- *
- *       Any person who transfers this source code or any derivative work
- *       must include the IBM copyright notice, this paragraph, and the
- *       preceding two paragraphs in the transferred software.
- *
- *       COPYRIGHT   I B M   CORPORATION 1995
- *       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
- *-----------------------------------------------------------------------------*/
-/*-----------------------------------------------------------------------------+
- *
- *  File Name:  enetemac.c
- *
- *  Function:   Device driver for the ethernet EMAC3 macro on the 405GP.
- *
- *  Author:     Mark Wisner
- *
- *  Change Activity-
- *
- *  Date        Description of Change                                       BY
- *  ---------   ---------------------                                       ---
- *  05-May-99   Created                                                     MKW
- *  27-Jun-99   Clean up                                                    JWB
- *  16-Jul-99   Added MAL error recovery and better IP packet handling      MKW
- *  29-Jul-99   Added Full duplex support                                   MKW
- *  06-Aug-99   Changed names for Mal CR reg                                MKW
- *  23-Aug-99   Turned off SYE when running at 10Mbs                        MKW
- *  24-Aug-99   Marked descriptor empty after call_xlc                      MKW
- *  07-Sep-99   Set MAL RX buffer size reg to ENET_MAX_MTU_ALIGNED / 16     MCG
- *              to avoid chaining maximum sized packets. Push starting
- *              RX descriptor address up to the next cache line boundary.
- *  16-Jan-00   Added support for booting with IP of 0x0                    MKW
- *  15-Mar-00   Updated enetInit() to enable broadcast addresses in the
- *             EMAC_RXM register.                                          JWB
- *  12-Mar-01   anne-sophie.harnois@nextream.fr
- *               - Variables are compatible with those already defined in
- *                include/net.h
- *              - Receive buffer descriptor ring is used to send buffers
- *                to the user
- *              - Info print about send/received/handled packet number if
- *                INFO_405_ENET is set
- *  17-Apr-01   stefan.roese@esd-electronics.com
- *              - MAL reset in "eth_halt" included
- *              - Enet speed and duplex output now in one line
- *  08-May-01   stefan.roese@esd-electronics.com
- *              - MAL error handling added (eth_init called again)
- *  13-Nov-01   stefan.roese@esd-electronics.com
- *              - Set IST bit in EMAC_M1 reg upon 100MBit or full duplex
- *  04-Jan-02   stefan.roese@esd-electronics.com
- *              - Wait for PHY auto negotiation to complete added
- *  06-Feb-02   stefan.roese@esd-electronics.com
- *              - Bug fixed in waiting for auto negotiation to complete
- *  26-Feb-02   stefan.roese@esd-electronics.com
- *              - rx and tx buffer descriptors now allocated (no fixed address
- *                used anymore)
- *  17-Jun-02   stefan.roese@esd-electronics.com
- *              - MAL error debug printf 'M' removed (rx de interrupt may
- *                occur upon many incoming packets with only 4 rx buffers).
- *  21-Nov-03   pavel.bartusek@sysgo.com
- *              - set ZMII bridge speed on 440
- *
- *-----------------------------------------------------------------------------*/
-
-#include <common.h>
-#include <asm/processor.h>
-#include <ppc4xx.h>
-#include <commproc.h>
-#include <405gp_enet.h>
-#include <405_mal.h>
-#include <miiphy.h>
-#include <net.h>
-#include <malloc.h>
-#include "vecnum.h"
-
-#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
-  ( defined(CONFIG_440)   && !defined(CONFIG_NET_MULTI))
-
-#if !defined(CONFIG_NET_MULTI) || !defined(CONFIG_405EP)
-/* 405GP, 440 with !CONFIG_NET_MULTI. For 440 only EMAC0 is supported */
-#define EMAC_NUM_DEV        1
-#else
-/* 440EP && CONFIG_NET_MULTI */
-#define EMAC_NUM_DEV        2
-#endif
-
-#define EMAC_RESET_TIMEOUT 1000        /* 1000 ms reset timeout */
-#define PHY_AUTONEGOTIATE_TIMEOUT 4000 /* 4000 ms autonegotiate timeout */
-
-/* Ethernet Transmit and Receive Buffers */
-/* AS.HARNOIS
- * In the same way ENET_MAX_MTU and ENET_MAX_MTU_ALIGNED are set from
- * PKTSIZE and PKTSIZE_ALIGN (include/net.h)
- */
-#define ENET_MAX_MTU           PKTSIZE
-#define ENET_MAX_MTU_ALIGNED   PKTSIZE_ALIGN
-
-/* define the number of channels implemented */
-#define EMAC_RXCHL      EMAC_NUM_DEV
-#define EMAC_TXCHL      EMAC_NUM_DEV
-
-/*-----------------------------------------------------------------------------+
- * Defines for MAL/EMAC interrupt conditions as reported in the UIC (Universal
- * Interrupt Controller).
- *-----------------------------------------------------------------------------*/
-#define MAL_UIC_ERR ( UIC_MAL_SERR | UIC_MAL_TXDE  | UIC_MAL_RXDE)
-#define MAL_UIC_DEF  (UIC_MAL_RXEOB | MAL_UIC_ERR)
-#define EMAC_UIC_DEF UIC_ENET
-#define EMAC_UIC_DEF1 UIC_ENET1
-#define SEL_UIC_DEF(p) (p ? UIC_ENET1 : UIC_ENET )
-
-
-/*-----------------------------------------------------------------------------+
- * Global variables. TX and RX descriptors and buffers.
- *-----------------------------------------------------------------------------*/
-/* IER globals */
-static uint32_t mal_ier;
-
-#if !defined(CONFIG_NET_MULTI)
-struct eth_device *emac0_dev;
-#endif
-
-/*-----------------------------------------------------------------------------+
- * Prototypes and externals.
- *-----------------------------------------------------------------------------*/
-static void enet_rcv (struct eth_device *dev, unsigned long malisr);
-
-int enetInt (struct eth_device *dev);
-static void mal_err (struct eth_device *dev, unsigned long isr,
-                    unsigned long uic, unsigned long maldef,
-                    unsigned long mal_errr);
-static void emac_err (struct eth_device *dev, unsigned long isr);
-
-/*-----------------------------------------------------------------------------+
-| ppc_405x_eth_halt
-| Disable MAL channel, and EMACn
-|
-|
-+-----------------------------------------------------------------------------*/
-static void ppc_4xx_eth_halt (struct eth_device *dev)
-{
-       EMAC_405_HW_PST hw_p = dev->priv;
-       uint32_t failsafe = 10000;
-
-       mtdcr (malier, 0x00000000); /* disable mal interrupts */
-       out32 (EMAC_IER + hw_p->hw_addr, 0x00000000);   /* disable emac interrupts */
-
-       /* 1st reset MAL channel */
-       /* Note: writing a 0 to a channel has no effect */
-       mtdcr (maltxcarr, (MAL_CR_MMSR >> (hw_p->devnum * 2)));
-       mtdcr (malrxcarr, (MAL_CR_MMSR >> hw_p->devnum));
-
-       /* wait for reset */
-       while (mfdcr (malrxcasr) & (MAL_CR_MMSR >> hw_p->devnum)) {
-               udelay (1000);  /* Delay 1 MS so as not to hammer the register */
-               failsafe--;
-               if (failsafe == 0)
-                       break;
-       }
-
-       /* EMAC RESET */
-       out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
-
-       hw_p->print_speed = 1;  /* print speed message again next time */
-
-       return;
-}
-
-static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
-{
-       int i;
-       unsigned long reg;
-       unsigned long msr;
-       unsigned long speed;
-       unsigned long duplex;
-       unsigned long failsafe;
-       unsigned mode_reg;
-       unsigned short devnum;
-       unsigned short reg_short;
-
-       EMAC_405_HW_PST hw_p = dev->priv;
-       /* before doing anything, figure out if we have a MAC address */
-       /* if not, bail */
-       if (memcmp (dev->enetaddr, "\0\0\0\0\0\0", 6) == 0)
-               return -1;
-
-       msr = mfmsr ();
-       mtmsr (msr & ~(MSR_EE));        /* disable interrupts */
-
-       devnum = hw_p->devnum;
-
-#ifdef INFO_405_ENET
-       /* AS.HARNOIS
-        * We should have :
-        * hw_p->stats.pkts_handled <=  hw_p->stats.pkts_rx <= hw_p->stats.pkts_handled+PKTBUFSRX
-        * In the most cases hw_p->stats.pkts_handled = hw_p->stats.pkts_rx, but it
-        * is possible that new packets (without relationship with
-        * current transfer) have got the time to arrived before
-        * netloop calls eth_halt
-        */
-       printf ("About preceeding transfer (eth%d):\n"
-               "- Sent packet number %d\n"
-               "- Received packet number %d\n"
-               "- Handled packet number %d\n",
-               hw_p->devnum,
-               hw_p->stats.pkts_tx,
-               hw_p->stats.pkts_rx, hw_p->stats.pkts_handled);
-
-       hw_p->stats.pkts_tx = 0;
-       hw_p->stats.pkts_rx = 0;
-       hw_p->stats.pkts_handled = 0;
-#endif
-
-       /* MAL RESET */
-       mtdcr (malmcr, MAL_CR_MMSR);
-       /* wait for reset */
-       while (mfdcr (malmcr) & MAL_CR_MMSR) {
-       };
-
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       out32 (ZMII_FER, 0);
-       udelay(100);
-       /* set RII mode */
-       out32 (ZMII_FER, ZMII_RMII | ZMII_MDI0);
-#elif defined(CONFIG_440)
-       /* set RMII mode */
-       out32 (ZMII_FER, ZMII_RMII | ZMII_MDI0);
-#endif /* CONFIG_440 */
-
-       /* MAL Channel RESET */
-       /* 1st reset MAL channel */
-       /* Note: writing a 0 to a channel has no effect */
-       mtdcr (maltxcarr, (MAL_TXRX_CASR >> (hw_p->devnum * 2)));
-       mtdcr (malrxcarr, (MAL_TXRX_CASR >> hw_p->devnum));
-
-       /* wait for reset */
-       /* TBS:  should have udelay and failsafe here */
-       failsafe = 10000;
-       /* wait for reset */
-       while (mfdcr (malrxcasr) & (MAL_CR_MMSR >> hw_p->devnum)) {
-               udelay (1000);  /* Delay 1 MS so as not to hammer the register */
-               failsafe--;
-               if (failsafe == 0)
-                       break;
-
-       }
-
-       hw_p->tx_err_index = 0; /* Transmit Error Index for tx_err_log */
-       hw_p->rx_err_index = 0; /* Receive Error Index for rx_err_log */
-
-       hw_p->rx_slot = 0;      /* MAL Receive Slot */
-       hw_p->rx_i_index = 0;   /* Receive Interrupt Queue Index */
-       hw_p->rx_u_index = 0;   /* Receive User Queue Index */
-
-       hw_p->tx_slot = 0;      /* MAL Transmit Slot */
-       hw_p->tx_i_index = 0;   /* Transmit Interrupt Queue Index */
-       hw_p->tx_u_index = 0;   /* Transmit User Queue Index */
-
-       __asm__ volatile ("eieio");
-
-       /* reset emac so we have access to the phy */
-
-       out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
-       __asm__ volatile ("eieio");
-
-       failsafe = 1000;
-       while ((in32 (EMAC_M0 + hw_p->hw_addr) & (EMAC_M0_SRST)) && failsafe) {
-               udelay (1000);
-               failsafe--;
-       }
-
-#if defined(CONFIG_NET_MULTI)
-       reg = hw_p->devnum ? CONFIG_PHY1_ADDR : CONFIG_PHY_ADDR;
-#else
-       reg = CONFIG_PHY_ADDR;
-#endif
-       /* wait for PHY to complete auto negotiation */
-       reg_short = 0;
-#ifndef CONFIG_CS8952_PHY
-       miiphy_read (reg, PHY_BMSR, &reg_short);
-
-       /*
-        * Wait if PHY is capable of autonegotiation and autonegotiation is not complete
-        */
-       if ((reg_short & PHY_BMSR_AUTN_ABLE)
-           && !(reg_short & PHY_BMSR_AUTN_COMP)) {
-               puts ("Waiting for PHY auto negotiation to complete");
-               i = 0;
-               while (!(reg_short & PHY_BMSR_AUTN_COMP)) {
-                       /*
-                        * Timeout reached ?
-                        */
-                       if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
-                               puts (" TIMEOUT !\n");
-                               break;
-                       }
-
-                       if ((i++ % 1000) == 0) {
-                               putc ('.');
-                       }
-                       udelay (1000);  /* 1 ms */
-                       miiphy_read (reg, PHY_BMSR, &reg_short);
-               }
-               puts (" done\n");
-               udelay (500000);        /* another 500 ms (results in faster booting) */
-       }
-#endif
-       speed = miiphy_speed (reg);
-       duplex = miiphy_duplex (reg);
-
-       if (hw_p->print_speed) {
-               hw_p->print_speed = 0;
-               printf ("ENET Speed is %d Mbps - %s duplex connection\n",
-                       (int) speed, (duplex == HALF) ? "HALF" : "FULL");
-       }
-
-       mtdcr (malmcr, MAL_CR_PLBB | MAL_CR_OPBBL | MAL_CR_LEA | MAL_CR_PLBLT_DEFAULT);
-       /* Errata 1.12: MAL_1 -- Disable MAL bursting */
-       if (get_pvr() == PVR_440GP_RB) {
-               mtdcr (malmcr, mfdcr(malmcr) & ~MAL_CR_PLBB);
-       }
-
-       /* 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 (((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;
-       }
-
-       hw_p->alloc_rx_buf =
-               (mal_desc_t *) malloc ((sizeof (mal_desc_t) * NUM_RX_BUFF) +
-                                      ((2 * CFG_CACHELINE_SIZE) - 2));
-       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;
-       }
-
-       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);
-               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
-       }
-
-       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];
-               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) rx[i].data_ptr);
-#endif
-       }
-
-       reg = 0x00000000;
-       reg |= dev->enetaddr[0];        /* set high address */
-       reg = reg << 8;
-       reg |= dev->enetaddr[1];
-
-       out32 (EMAC_IAH + hw_p->hw_addr, reg);
-
-       reg = 0x00000000;
-       reg |= dev->enetaddr[2];        /* set low address  */
-       reg = reg << 8;
-       reg |= dev->enetaddr[3];
-       reg = reg << 8;
-       reg |= dev->enetaddr[4];
-       reg = reg << 8;
-       reg |= dev->enetaddr[5];
-
-       out32 (EMAC_IAL + hw_p->hw_addr, reg);
-
-       switch (devnum) {
-#if defined(CONFIG_NET_MULTI)
-       case 1:
-               /* setup MAL tx & rx channel pointers */
-               /* For 405EP, the EMAC1 tx channel 0 is MAL tx channel 2 */
-               mtdcr (maltxctp2r, hw_p->tx);
-               mtdcr (malrxctp1r, hw_p->rx);
-               /* set RX buffer size */
-               mtdcr (malrcbs1, ENET_MAX_MTU_ALIGNED / 16);
-               break;
-#endif
-       case 0:
-       default:
-               /* setup MAL tx & rx channel pointers */
-               mtdcr (maltxctp0r, hw_p->tx);
-               mtdcr (malrxctp0r, hw_p->rx);
-               /* set RX buffer size */
-               mtdcr (malrcbs0, ENET_MAX_MTU_ALIGNED / 16);
-               break;
-       }
-
-       /* Enable MAL transmit and receive channels */
-       mtdcr (maltxcasr, (MAL_TXRX_CASR >> (hw_p->devnum * 2)));
-       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);
-
-       /* set receive fifo to 4k and tx fifo to 2k */
-       mode_reg = in32 (EMAC_M1 + hw_p->hw_addr);
-       mode_reg |= EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K;
-
-       /* set speed */
-       if (speed == _100BASET)
-               mode_reg = mode_reg | EMAC_M1_MF_100MBPS | EMAC_M1_IST;
-       else
-               mode_reg = mode_reg & ~0x00C00000;      /* 10 MBPS */
-       if (duplex == FULL)
-               mode_reg = mode_reg | 0x80000000 | EMAC_M1_IST;
-
-       out32 (EMAC_M1 + hw_p->hw_addr, mode_reg);
-
-#if defined(CONFIG_440)
-       /* set speed in the ZMII bridge */
-       if (speed == _100BASET)
-               out32(ZMII_SSR, in32(ZMII_SSR) | 0x10000000);
-       else
-               out32(ZMII_SSR, in32(ZMII_SSR) & ~0x10000000);
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       mfsdr(sdr_mfr, reg);
-       /* set speed */
-       if (speed == _100BASET) {
-               out32(ZMII_SSR, in32(ZMII_SSR) | 0x10000000);
-               reg = (reg & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_RMII_100M;
-       } else {
-               reg = (reg & ~SDR0_MFR_ZMII_MODE_MASK) | SDR0_MFR_ZMII_MODE_RMII_10M;
-               out32(ZMII_SSR, in32(ZMII_SSR) & ~0x10000000);
-       }
-       mtsdr(sdr_mfr, reg);
-#endif
-#endif
-
-       /* 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);
-
-       /* 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 */
-
-#if defined(CONFIG_440)
-       /* 440GP has a 64 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x0f002000);
-       out32 (EMAC_TXM1 + hw_p->hw_addr, 0xf8640000);
-#else
-       /* 405s have a 16 byte burst length */
-       out32 (EMAC_RX_HI_LO_WMARK + hw_p->hw_addr, 0x0f002000);
-#endif
-
-       /* Frame gap set */
-       out32 (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);
-
-       if (hw_p->first_init == 0) {
-               /*
-                * Connect interrupt service routines
-                */
-               irq_install_handler (VECNUM_ETH0 + (hw_p->devnum * 2),
-                                    (interrupt_handler_t *) enetInt, dev);
-       }
-
-       mtmsr (msr);            /* enable interrupts again */
-
-       hw_p->bis = bis;
-       hw_p->first_init = 1;
-
-       return (1);
-}
-
-
-static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr, int len)
-{
-       struct enet_frame *ef_ptr;
-       ulong time_start, time_now;
-       unsigned long temp_txm0;
-       EMAC_405_HW_PST hw_p = dev->priv;
-
-       ef_ptr = (struct enet_frame *) ptr;
-
-       /*-----------------------------------------------------------------------+
-        *  Copy in our address into the frame.
-        *-----------------------------------------------------------------------*/
-       (void) memcpy (ef_ptr->source_addr, dev->enetaddr, ENET_ADDR_LENGTH);
-
-       /*-----------------------------------------------------------------------+
-        * If frame is too long or too short, modify length.
-        *-----------------------------------------------------------------------*/
-       /* TBS: where does the fragment go???? */
-       if (len > ENET_MAX_MTU)
-               len = ENET_MAX_MTU;
-
-       /*   memcpy ((void *) &tx_buff[tx_slot], (const void *) ptr, len); */
-       memcpy ((void *) hw_p->txbuf_ptr, (const void *) ptr, len);
-
-       /*-----------------------------------------------------------------------+
-        * set TX Buffer busy, and send it
-        *-----------------------------------------------------------------------*/
-       hw_p->tx[hw_p->tx_slot].ctrl = (MAL_TX_CTRL_LAST |
-                                       EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP) &
-               ~(EMAC_TX_CTRL_ISA | EMAC_TX_CTRL_RSA);
-       if ((NUM_TX_BUFF - 1) == hw_p->tx_slot)
-               hw_p->tx[hw_p->tx_slot].ctrl |= MAL_TX_CTRL_WRAP;
-
-       hw_p->tx[hw_p->tx_slot].data_len = (short) len;
-       hw_p->tx[hw_p->tx_slot].ctrl |= MAL_TX_CTRL_READY;
-
-       __asm__ volatile ("eieio");
-
-       out32 (EMAC_TXM0 + hw_p->hw_addr,
-              in32 (EMAC_TXM0 + hw_p->hw_addr) | EMAC_TXM0_GNP0);
-#ifdef INFO_405_ENET
-       hw_p->stats.pkts_tx++;
-#endif
-
-       /*-----------------------------------------------------------------------+
-        * poll unitl the packet is sent and then make sure it is OK
-        *-----------------------------------------------------------------------*/
-       time_start = get_timer (0);
-       while (1) {
-               temp_txm0 = in32 (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
-                        * If there is an error, an interrupt should
-                        * happen when we return
-                        */
-                       time_now = get_timer (0);
-                       if ((time_now - time_start) > 3000) {
-                               return (-1);
-                       }
-               } else {
-                       return (len);
-               }
-       }
-}
-
-#if defined(CONFIG_440)
-int enetInt (struct eth_device *dev)
-{
-       int serviced;
-       int rc = -1;                            /* default to not us */
-       unsigned long mal_isr;
-       unsigned long emac_isr = 0;
-       unsigned long mal_rx_eob;
-       unsigned long my_uic0msr, my_uic1msr;
-       EMAC_405_HW_PST hw_p;
-
-       /*
-        * Because the mal is generic, we need to get the current
-        * eth device
-        */
-#if defined(CONFIG_NET_MULTI)
-       dev = eth_get_dev();
-#else
-       dev = emac0_dev;
-#endif
-       hw_p = dev->priv;
-
-       /* enter loop that stays in interrupt code until nothing to service */
-       do {
-               serviced = 0;
-
-               my_uic0msr = mfdcr (uic0msr);
-               my_uic1msr = mfdcr (uic1msr);
-
-               if (!(my_uic0msr & UIC_MRE)
-                   && !(my_uic1msr & (UIC_ETH0 | UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                       /* not for us */
-                       return (rc);
-               }
-
-               /* get and clear controller status interrupts */
-               /* look at Mal and EMAC interrupts */
-               if ((my_uic0msr & UIC_MRE)
-                   || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                       /* we have a MAL interrupt */
-                       mal_isr = mfdcr (malesr);
-                       /* look for mal error */
-                       if (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE)) {
-                               mal_err (dev, mal_isr, my_uic0msr, MAL_UIC_DEF, MAL_UIC_ERR);
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-               if (UIC_ETH0 & my_uic1msr) {    /* look for EMAC errors */
-                       emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
-                       if ((hw_p->emac_ier & emac_isr) != 0) {
-                               emac_err (dev, emac_isr);
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-               if ((hw_p->emac_ier & emac_isr)
-                   || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                       mtdcr (uic0sr, UIC_MRE); /* Clear */
-                       mtdcr (uic1sr, UIC_ETH0 | UIC_MS | UIC_MTDE | UIC_MRDE); /* Clear */
-                       return (rc);            /* we had errors so get out */
-               }
-
-               /* handle MAL RX EOB  interupt from a receive */
-               /* check for EOB on valid channels            */
-               if (my_uic0msr & UIC_MRE) {
-                       mal_rx_eob = mfdcr (malrxeobisr);
-                       if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel 0 */
-                               /* clear EOB
-                                  mtdcr(malrxeobisr, mal_rx_eob); */
-                               enet_rcv (dev, emac_isr);
-                               /* indicate that we serviced an interrupt */
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-               mtdcr (uic0sr, UIC_MRE); /* Clear */
-               mtdcr (uic1sr, UIC_ETH0 | UIC_MS | UIC_MTDE | UIC_MRDE); /* Clear */
-       } while (serviced);
-
-       return (rc);
-}
-
-#else /* CONFIG_440 */
-
-int enetInt (struct eth_device *dev)
-{
-       int serviced;
-       int rc = -1;            /* default to not us */
-       unsigned long mal_isr;
-       unsigned long emac_isr = 0;
-       unsigned long mal_rx_eob;
-       unsigned long my_uicmsr;
-
-       EMAC_405_HW_PST hw_p;
-
-       /*
-        * Because the mal is generic, we need to get the current
-        * eth device
-        */
-#if defined(CONFIG_NET_MULTI)
-       dev = eth_get_dev();
-#else
-       dev = emac0_dev;
-#endif
-
-       hw_p = dev->priv;
-
-       /* enter loop that stays in interrupt code until nothing to service */
-       do {
-               serviced = 0;
-
-               my_uicmsr = mfdcr (uicmsr);
-
-               if ((my_uicmsr & (MAL_UIC_DEF | EMAC_UIC_DEF)) == 0) {  /* not for us */
-                       return (rc);
-               }
-               /* get and clear controller status interrupts */
-               /* look at Mal and EMAC interrupts */
-               if ((MAL_UIC_DEF & my_uicmsr) != 0) {   /* we have a MAL interrupt */
-                       mal_isr = mfdcr (malesr);
-                       /* look for mal error */
-                       if ((my_uicmsr & MAL_UIC_ERR) != 0) {
-                               mal_err (dev, mal_isr, my_uicmsr, MAL_UIC_DEF, MAL_UIC_ERR);
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-
-               /* 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);
-                       if ((hw_p->emac_ier & emac_isr) != 0) {
-                               emac_err (dev, emac_isr);
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-               if (((hw_p->emac_ier & emac_isr) != 0) || ((MAL_UIC_ERR & my_uicmsr) != 0)) {
-                       mtdcr (uicsr, MAL_UIC_DEF | SEL_UIC_DEF(hw_p->devnum)); /* Clear */
-                       return (rc);            /* we had errors so get out */
-               }
-
-               /* handle MAX TX EOB interrupt from a tx */
-               if (my_uicmsr & UIC_MAL_TXEOB) {
-                       mal_rx_eob = mfdcr (maltxeobisr);
-                       mtdcr (maltxeobisr, mal_rx_eob);
-                       mtdcr (uicsr, UIC_MAL_TXEOB);
-               }
-               /* handle MAL RX EOB  interupt from a receive */
-               /* check for EOB on valid channels            */
-               if (my_uicmsr & UIC_MAL_RXEOB)
-               {
-                       mal_rx_eob = mfdcr (malrxeobisr);
-                       if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel x */
-                               /* clear EOB
-                                mtdcr(malrxeobisr, mal_rx_eob); */
-                               enet_rcv (dev, emac_isr);
-                               /* indicate that we serviced an interrupt */
-                               serviced = 1;
-                               rc = 0;
-                       }
-               }
-               mtdcr (uicsr, MAL_UIC_DEF|EMAC_UIC_DEF|EMAC_UIC_DEF1);  /* Clear */
-       }
-       while (serviced);
-
-       return (rc);
-}
-#endif
-/*-----------------------------------------------------------------------------+
- *  MAL Error Routine
- *-----------------------------------------------------------------------------*/
-static void mal_err (struct eth_device *dev, unsigned long isr,
-                    unsigned long uic, unsigned long maldef,
-                    unsigned long mal_errr)
-{
-       EMAC_405_HW_PST hw_p = dev->priv;
-
-       mtdcr (malesr, isr);    /* clear interrupt */
-
-       /* clear DE interrupt */
-       mtdcr (maltxdeir, 0xC0000000);
-       mtdcr (malrxdeir, 0x80000000);
-
-#ifdef INFO_405_ENET
-       printf ("\nMAL error occured.... ISR = %lx UIC = = %lx  MAL_DEF = %lx  MAL_ERR= %lx \n", isr, uic, maldef, mal_errr);
-#endif
-
-       eth_init (hw_p->bis);   /* start again... */
-}
-
-/*-----------------------------------------------------------------------------+
- *  EMAC Error Routine
- *-----------------------------------------------------------------------------*/
-static void emac_err (struct eth_device *dev, unsigned long isr)
-{
-       EMAC_405_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);
-}
-
-/*-----------------------------------------------------------------------------+
- *  enet_rcv() handles the ethernet receive data
- *-----------------------------------------------------------------------------*/
-static void enet_rcv (struct eth_device *dev, unsigned long malisr)
-{
-       struct enet_frame *ef_ptr;
-       unsigned long data_len;
-       unsigned long rx_eob_isr;
-       EMAC_405_HW_PST hw_p = dev->priv;
-
-       int handled = 0;
-       int i;
-       int loop_count = 0;
-
-       rx_eob_isr = mfdcr (malrxeobisr);
-       if ((0x80000000 >> hw_p->devnum) & rx_eob_isr) {
-               /* clear EOB */
-               mtdcr (malrxeobisr, rx_eob_isr);
-
-               /* EMAC RX done */
-               while (1) {     /* do all */
-                       i = hw_p->rx_slot;
-
-                       if ((MAL_RX_CTRL_EMPTY & hw_p->rx[i].ctrl)
-                           || (loop_count >= NUM_RX_BUFF))
-                               break;
-                       loop_count++;
-                       hw_p->rx_slot++;
-                       if (NUM_RX_BUFF == hw_p->rx_slot)
-                               hw_p->rx_slot = 0;
-                       handled++;
-                       data_len = (unsigned long) hw_p->rx[i].data_len;        /* Get len */
-                       if (data_len) {
-                               if (data_len > ENET_MAX_MTU)    /* Check len */
-                                       data_len = 0;
-                               else {
-                                       if (EMAC_RX_ERRORS & hw_p->rx[i].ctrl) {        /* Check Errors */
-                                               data_len = 0;
-                                               hw_p->stats.rx_err_log[hw_p->
-                                                                      rx_err_index]
-                                                       = hw_p->rx[i].ctrl;
-                                               hw_p->rx_err_index++;
-                                               if (hw_p->rx_err_index ==
-                                                   MAX_ERR_LOG)
-                                                       hw_p->rx_err_index =
-                                                               0;
-                                       }       /* emac_erros */
-                               }       /* data_len < max mtu */
-                       }       /* if data_len */
-                       if (!data_len) {        /* no data */
-                               hw_p->rx[i].ctrl |= MAL_RX_CTRL_EMPTY;  /* Free Recv Buffer */
-
-                               hw_p->stats.data_len_err++;     /* Error at Rx */
-                       }
-
-                       /* !data_len */
-                       /* AS.HARNOIS */
-                       /* Check if user has already eaten buffer */
-                       /* if not => ERROR */
-                       else if (hw_p->rx_ready[hw_p->rx_i_index] != -1) {
-                               if (hw_p->is_receiving)
-                                       printf ("ERROR : Receive buffers are full!\n");
-                               break;
-                       } else {
-                               hw_p->stats.rx_frames++;
-                               hw_p->stats.rx += data_len;
-                               ef_ptr = (struct enet_frame *) hw_p->rx[i].
-                                       data_ptr;
-#ifdef INFO_405_ENET
-                               hw_p->stats.pkts_rx++;
-#endif
-                               /* AS.HARNOIS
-                                * use ring buffer
-                                */
-                               hw_p->rx_ready[hw_p->rx_i_index] = i;
-                               hw_p->rx_i_index++;
-                               if (NUM_RX_BUFF == hw_p->rx_i_index)
-                                       hw_p->rx_i_index = 0;
-
-                               /* printf("X");  /|* test-only *|/ */
-
-                               /*  AS.HARNOIS
-                                * free receive buffer only when
-                                * buffer has been handled (eth_rx)
-                                rx[i].ctrl |= MAL_RX_CTRL_EMPTY;
-                                */
-                       }       /* if data_len */
-               }               /* while */
-       }                       /* if EMACK_RXCHL */
-}
-
-
-static int ppc_4xx_eth_rx (struct eth_device *dev)
-{
-       int length;
-       int user_index;
-       unsigned long msr;
-       EMAC_405_HW_PST hw_p = dev->priv;
-
-       hw_p->is_receiving = 1; /* tell driver */
-
-       for (;;) {
-               /* AS.HARNOIS
-                * use ring buffer and
-                * get index from rx buffer desciptor queue
-                */
-               user_index = hw_p->rx_ready[hw_p->rx_u_index];
-               if (user_index == -1) {
-                       length = -1;
-                       break;  /* nothing received - leave for() loop */
-               }
-
-               msr = mfmsr ();
-               mtmsr (msr & ~(MSR_EE));
-
-               length = hw_p->rx[user_index].data_len;
-
-               /* Pass the packet up to the protocol layers. */
-               /*       NetReceive(NetRxPackets[rxIdx], length - 4); */
-               /*       NetReceive(NetRxPackets[i], length); */
-               NetReceive (NetRxPackets[user_index], length - 4);
-               /* Free Recv Buffer */
-               hw_p->rx[user_index].ctrl |= MAL_RX_CTRL_EMPTY;
-               /* Free rx buffer descriptor queue */
-               hw_p->rx_ready[hw_p->rx_u_index] = -1;
-               hw_p->rx_u_index++;
-               if (NUM_RX_BUFF == hw_p->rx_u_index)
-                       hw_p->rx_u_index = 0;
-
-#ifdef INFO_405_ENET
-               hw_p->stats.pkts_handled++;
-#endif
-
-               mtmsr (msr);    /* Enable IRQ's */
-       }
-
-       hw_p->is_receiving = 0; /* tell driver */
-
-       return length;
-}
-
-static int virgin = 0;
-int ppc_4xx_eth_initialize (bd_t * bis)
-{
-       struct eth_device *dev;
-       int eth_num = 0;
-
-       EMAC_405_HW_PST hw = NULL;
-
-       for (eth_num = 0; eth_num < EMAC_NUM_DEV; eth_num++) {
-
-               /* Allocate device structure */
-               dev = (struct eth_device *) malloc (sizeof (*dev));
-               if (dev == NULL) {
-                       printf ("ppc_405x_eth_initialize: "
-                               "Cannot allocate eth_device %d\n", eth_num);
-                       return (-1);
-               }
-               memset(dev, 0, sizeof(*dev));
-               /* Allocate our private use data */
-               hw = (EMAC_405_HW_PST) malloc (sizeof (*hw));
-               if (hw == NULL) {
-                       printf ("ppc_405x_eth_initialize: "
-                               "Cannot allocate private hw data for eth_device %d",
-                               eth_num);
-                       free (dev);
-                       return (-1);
-               }
-               memset(hw, 0, sizeof(*hw));
-
-               switch (eth_num) {
-               case 0:
-                       hw->hw_addr = 0;
-                       memcpy (dev->enetaddr, bis->bi_enetaddr, 6);
-                       break;
-#if defined(CONFIG_NET_MULTI)
-               case 1:
-                       hw->hw_addr = 0x100;
-                       memcpy (dev->enetaddr, bis->bi_enet1addr, 6);
-                       break;
-#endif
-               default:
-                       hw->hw_addr = 0;
-                       memcpy (dev->enetaddr, bis->bi_enetaddr, 6);
-                       break;
-               }
-
-               hw->devnum = eth_num;
-               hw->print_speed = 1;
-
-               sprintf (dev->name, "ppc_405x_eth%d", eth_num);
-               dev->priv = (void *) hw;
-               dev->init = ppc_4xx_eth_init;
-               dev->halt = ppc_4xx_eth_halt;
-               dev->send = ppc_4xx_eth_send;
-               dev->recv = ppc_4xx_eth_rx;
-
-               if (0 == virgin) {
-                       /* set the MAL IER ??? names may change with new spec ??? */
-                       mal_ier =
-                               MAL_IER_DE | MAL_IER_NE | MAL_IER_TE |
-                               MAL_IER_OPBE | MAL_IER_PLBE;
-                       mtdcr (malesr, 0xffffffff);     /* clear pending interrupts */
-                       mtdcr (maltxdeir, 0xffffffff);  /* clear pending interrupts */
-                       mtdcr (malrxdeir, 0xffffffff);  /* clear pending interrupts */
-                       mtdcr (malier, mal_ier);
-
-                       /* install MAL interrupt handler */
-                       irq_install_handler (VECNUM_MS,
-                                            (interrupt_handler_t *) enetInt,
-                                            dev);
-                       irq_install_handler (VECNUM_MTE,
-                                            (interrupt_handler_t *) enetInt,
-                                            dev);
-                       irq_install_handler (VECNUM_MRE,
-                                            (interrupt_handler_t *) enetInt,
-                                            dev);
-                       irq_install_handler (VECNUM_TXDE,
-                                            (interrupt_handler_t *) enetInt,
-                                            dev);
-                       irq_install_handler (VECNUM_RXDE,
-                                            (interrupt_handler_t *) enetInt,
-                                            dev);
-                       virgin = 1;
-               }
-
-#if defined(CONFIG_NET_MULTI)
-               eth_register (dev);
-#else
-               emac0_dev = dev;
-#endif
-
-       }                       /* end for each supported device */
-
-       return (1);
-}
-
-#if !defined(CONFIG_NET_MULTI)
-void eth_halt (void) {
-       if (emac0_dev) {
-               ppc_4xx_eth_halt(emac0_dev);
-               free(emac0_dev);
-               emac0_dev = NULL;
-       }
-}
-
-int eth_init (bd_t *bis)
-{
-       ppc_4xx_eth_initialize(bis);
-       return(ppc_4xx_eth_init(emac0_dev, bis));
-}
-
-int eth_send(volatile void *packet, int length)
-{
-
-       return (ppc_4xx_eth_send(emac0_dev, packet, length));
-}
-
-int eth_rx(void)
-{
-       return (ppc_4xx_eth_rx(emac0_dev));
-}
-#endif
-
-#endif /* CONFIG_405 */
index 89be137a868e6ae6ff0e223de0e3033b9c0c5285..f6b29e9d6e194a57ec4add1f715bae83ae2fbd38 100644 (file)
 
 #ifdef CONFIG_PCI
 
+#if defined(CONFIG_PMC405)
+ushort pmc405_pci_subsys_deviceid(void);
+#endif
+
 /*#define DEBUG*/
 
 /*-----------------------------------------------------------------------------+
@@ -96,13 +100,10 @@ void pci_405gp_init(struct pci_controller *hose)
        unsigned short temp_short;
        unsigned long ptmpcila[2] = {CFG_PCI_PTM1PCI, CFG_PCI_PTM2PCI};
 #if defined(CONFIG_CPCI405) || defined(CONFIG_PMC405)
-       unsigned long ptmla[2]    = {bd->bi_memstart, bd->bi_flashstart};
-       unsigned long ptmms[2]    = {~(bd->bi_memsize - 1) | 1, ~(bd->bi_flashsize - 1) | 1};
        char *ptmla_str, *ptmms_str;
-#else
+#endif
        unsigned long ptmla[2]    = {CFG_PCI_PTM1LA, CFG_PCI_PTM2LA};
        unsigned long ptmms[2]    = {CFG_PCI_PTM1MS, CFG_PCI_PTM2MS};
-#endif
 #if defined(CONFIG_PIP405) || defined (CONFIG_MIP405)
        unsigned long pmmla[3]    = {0x80000000, 0xA0000000, 0};
        unsigned long pmmma[3]    = {0xE0000001, 0xE0000001, 0};
@@ -431,27 +432,33 @@ static struct pci_controller ppc440_hose = {0};
 void pci_440_init (struct pci_controller *hose)
 {
        int reg_num = 0;
-       unsigned long strap;
 
+#ifndef CONFIG_DISABLE_PISE_TEST
        /*--------------------------------------------------------------------------+
         * The PCI initialization sequence enable bit must be set ... if not abort
         * pci setup since updating the bit requires chip reset.
         *--------------------------------------------------------------------------*/
-#if defined (CONFIG_440GX) || defined (CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
+       unsigned long strap;
+
        mfsdr(sdr_sdstp1,strap);
-       if ( (strap & 0x00010000) == 0 ){
+       if ((strap & SDR0_SDSTP1_PISE_MASK) == 0) {
                printf("PCI: SDR0_STRP1[PISE] not set.\n");
                printf("PCI: Configuration aborted.\n");
                return;
        }
-#else
+#elif defined(CONFIG_440GP)
+       unsigned long strap;
+
        strap = mfdcr(cpc0_strp1);
-       if( (strap & 0x00040000) == 0 ){
+       if ((strap & CPC0_STRP1_PISE_MASK) == 0) {
                printf("PCI: CPC0_STRP1[PISE] not set.\n");
                printf("PCI: Configuration aborted.\n");
                return;
        }
 #endif
+#endif /* CONFIG_DISABLE_PISE_TEST */
+
        /*--------------------------------------------------------------------------+
         * PCI controller init
         *--------------------------------------------------------------------------*/
@@ -460,26 +467,26 @@ void pci_440_init (struct pci_controller *hose)
 
        pci_set_region(hose->regions + reg_num++,
                       0x00000000,
-                          PCIX0_IOBASE,
-                          0x10000,
-                          PCI_REGION_IO);
+                      PCIX0_IOBASE,
+                      0x10000,
+                      PCI_REGION_IO);
 
        pci_set_region(hose->regions + reg_num++,
                       CFG_PCI_TARGBASE,
-                          CFG_PCI_MEMBASE,
-                          0x10000000,
-                          PCI_REGION_MEM );
+                      CFG_PCI_MEMBASE,
+                      0x10000000,
+                      PCI_REGION_MEM );
        hose->region_count = reg_num;
 
        pci_setup_indirect(hose, PCIX0_CFGADR, PCIX0_CFGDATA);
 
 #if defined(CFG_PCI_PRE_INIT)
-    /* Let board change/modify hose & do initial checks */
-    if( pci_pre_init (hose) == 0 ){
-       printf("PCI: Board-specific initialization failed.\n");
-       printf("PCI: Configuration aborted.\n");
-       return;
-    }
+       /* Let board change/modify hose & do initial checks */
+       if (pci_pre_init (hose) == 0) {
+               printf("PCI: Board-specific initialization failed.\n");
+               printf("PCI: Configuration aborted.\n");
+               return;
+       }
 #endif
 
        pci_register_hose( hose );
@@ -490,9 +497,9 @@ void pci_440_init (struct pci_controller *hose)
 #if defined(CFG_PCI_TARGET_INIT)
        pci_target_init(hose);                /* Let board setup pci target */
 #else
-    out16r( PCIX0_SBSYSVID, CFG_PCI_SUBSYS_VENDORID );
-    out16r( PCIX0_SBSYSID, CFG_PCI_SUBSYS_ID );
-    out16r( PCIX0_CLS, 0x00060000 ); /* Bridge, host bridge */
+       out16r( PCIX0_SBSYSVID, CFG_PCI_SUBSYS_VENDORID );
+       out16r( PCIX0_SBSYSID, CFG_PCI_SUBSYS_ID );
+       out16r( PCIX0_CLS, 0x00060000 ); /* Bridge, host bridge */
 #endif
 
 #if defined(CONFIG_440GX)
@@ -518,24 +525,24 @@ void pci_440_init (struct pci_controller *hose)
        out32r( PCIX0_POM0PCIAL, CFG_PCI_MEMBASE );
        out32r( PCIX0_POM0PCIAH, 0x00000000 );
        out32r( PCIX0_POM0SA, 0xf0000001 ); /* 256MB, enabled */
-    out32r( PCIX0_STS, in32r( PCIX0_STS ) & ~0x0000fff8 );
+       out32r( PCIX0_STS, in32r( PCIX0_STS ) & ~0x0000fff8 );
 #endif
 
        /*--------------------------------------------------------------------------+
         * PCI host configuration -- we don't make any assumptions here ... the
-     * _board_must_indicate_ what to do -- there's just too many runtime
-     * scenarios in environments like cPCI, PPMC, etc. to make a determination
-     * based on hard-coded values or state of arbiter enable.
+        * _board_must_indicate_ what to do -- there's just too many runtime
+        * scenarios in environments like cPCI, PPMC, etc. to make a determination
+        * based on hard-coded values or state of arbiter enable.
         *--------------------------------------------------------------------------*/
-    if( is_pci_host(hose) ){
+       if (is_pci_host(hose)) {
 #ifdef CONFIG_PCI_SCAN_SHOW
-       printf("PCI:   Bus Dev VenId DevId Class Int\n");
+               printf("PCI:   Bus Dev VenId DevId Class Int\n");
 #endif
 #if !defined(CONFIG_440EP) && !defined(CONFIG_440GR)
-       out16r( PCIX0_CMD, in16r( PCIX0_CMD ) | PCI_COMMAND_MASTER);
+               out16r( PCIX0_CMD, in16r( PCIX0_CMD ) | PCI_COMMAND_MASTER);
 #endif
-       hose->last_busno = pci_hose_scan(hose);
-    }
+               hose->last_busno = pci_hose_scan(hose);
+       }
 }
 
 
similarity index 69%
rename from cpu/ppc4xx/440gx_enet.c
rename to cpu/ppc4xx/4xx_enet.c
index d0b6c158644cf158638e27e5489d650146199c32..86dc2d066e8118cc3827460967c59f0c4928dbac 100644 (file)
 /*-----------------------------------------------------------------------------+
  *
- *       This source code has been made available to you by IBM on an AS-IS
- *       basis.  Anyone receiving this source is licensed under IBM
- *       copyrights to use it in any way he or she deems fit, including
- *       copying it, modifying it, compiling it, and redistributing it either
- *       with or without modifications.  No license under IBM patents or
- *       patent applications is to be implied by the copyright license.
+ *      This source code has been made available to you by IBM on an AS-IS
+ *      basis.  Anyone receiving this source is licensed under IBM
+ *      copyrights to use it in any way he or she deems fit, including
+ *      copying it, modifying it, compiling it, and redistributing it either
+ *      with or without modifications.  No license under IBM patents or
+ *      patent applications is to be implied by the copyright license.
  *
- *       Any user of this software should understand that IBM cannot provide
- *       technical support for this software and will not be responsible for
- *       any consequences resulting from the use of this software.
+ *      Any user of this software should understand that IBM cannot provide
+ *      technical support for this software and will not be responsible for
+ *      any consequences resulting from the use of this software.
  *
- *       Any person who transfers this source code or any derivative work
- *       must include the IBM copyright notice, this paragraph, and the
- *       preceding two paragraphs in the transferred software.
+ *      Any person who transfers this source code or any derivative work
+ *      must include the IBM copyright notice, this paragraph, and the
+ *      preceding two paragraphs in the transferred software.
  *
- *       COPYRIGHT   I B M   CORPORATION 1995
- *       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
+ *      COPYRIGHT   I B M   CORPORATION 1995
+ *      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
  *-----------------------------------------------------------------------------*/
 /*-----------------------------------------------------------------------------+
  *
- *  File Name:  enetemac.c
+ *  File Name: enetemac.c
  *
- *  Function:   Device driver for the ethernet EMAC3 macro on the 405GP.
+ *  Function:  Device driver for the ethernet EMAC3 macro on the 405GP.
  *
- *  Author:     Mark Wisner
+ *  Author:    Mark Wisner
  *
  *  Change Activity-
  *
- *  Date        Description of Change                                       BY
- *  ---------   ---------------------                                       ---
- *  05-May-99   Created                                                     MKW
- *  27-Jun-99   Clean up                                                    JWB
- *  16-Jul-99   Added MAL error recovery and better IP packet handling      MKW
- *  29-Jul-99   Added Full duplex support                                   MKW
- *  06-Aug-99   Changed names for Mal CR reg                                MKW
- *  23-Aug-99   Turned off SYE when running at 10Mbs                        MKW
- *  24-Aug-99   Marked descriptor empty after call_xlc                      MKW
- *  07-Sep-99   Set MAL RX buffer size reg to ENET_MAX_MTU_ALIGNED / 16     MCG
- *              to avoid chaining maximum sized packets. Push starting
- *              RX descriptor address up to the next cache line boundary.
- *  16-Jan-00   Added support for booting with IP of 0x0                    MKW
- *  15-Mar-00   Updated enetInit() to enable broadcast addresses in the
- *             EMAC_RXM register.                                          JWB
- *  12-Mar-01   anne-sophie.harnois@nextream.fr
- *               - Variables are compatible with those already defined in
- *                include/net.h
- *              - Receive buffer descriptor ring is used to send buffers
- *                to the user
- *              - Info print about send/received/handled packet number if
- *                INFO_405_ENET is set
- *  17-Apr-01   stefan.roese@esd-electronics.com
- *              - MAL reset in "eth_halt" included
- *              - Enet speed and duplex output now in one line
- *  08-May-01   stefan.roese@esd-electronics.com
- *              - MAL error handling added (eth_init called again)
- *  13-Nov-01   stefan.roese@esd-electronics.com
- *              - Set IST bit in EMAC_M1 reg upon 100MBit or full duplex
- *  04-Jan-02   stefan.roese@esd-electronics.com
- *              - Wait for PHY auto negotiation to complete added
- *  06-Feb-02   stefan.roese@esd-electronics.com
- *              - Bug fixed in waiting for auto negotiation to complete
- *  26-Feb-02   stefan.roese@esd-electronics.com
- *              - rx and tx buffer descriptors now allocated (no fixed address
- *                used anymore)
- *  17-Jun-02   stefan.roese@esd-electronics.com
- *              - MAL error debug printf 'M' removed (rx de interrupt may
- *                occur upon many incoming packets with only 4 rx buffers).
+ *  Date       Description of Change                                       BY
+ *  ---------  ---------------------                                       ---
+ *  05-May-99  Created                                                     MKW
+ *  27-Jun-99  Clean up                                                    JWB
+ *  16-Jul-99  Added MAL error recovery and better IP packet handling      MKW
+ *  29-Jul-99  Added Full duplex support                                   MKW
+ *  06-Aug-99  Changed names for Mal CR reg                                MKW
+ *  23-Aug-99  Turned off SYE when running at 10Mbs                        MKW
+ *  24-Aug-99  Marked descriptor empty after call_xlc                      MKW
+ *  07-Sep-99  Set MAL RX buffer size reg to ENET_MAX_MTU_ALIGNED / 16     MCG
+ *             to avoid chaining maximum sized packets. Push starting
+ *             RX descriptor address up to the next cache line boundary.
+ *  16-Jan-00  Added support for booting with IP of 0x0                    MKW
+ *  15-Mar-00  Updated enetInit() to enable broadcast addresses in the
+ *             EMAC_RXM register.                                          JWB
+ *  12-Mar-01  anne-sophie.harnois@nextream.fr
+ *              - Variables are compatible with those already defined in
+ *               include/net.h
+ *             - Receive buffer descriptor ring is used to send buffers
+ *               to the user
+ *             - Info print about send/received/handled packet number if
+ *               INFO_405_ENET is set
+ *  17-Apr-01  stefan.roese@esd-electronics.com
+ *             - MAL reset in "eth_halt" included
+ *             - Enet speed and duplex output now in one line
+ *  08-May-01  stefan.roese@esd-electronics.com
+ *             - MAL error handling added (eth_init called again)
+ *  13-Nov-01  stefan.roese@esd-electronics.com
+ *             - Set IST bit in EMAC_M1 reg upon 100MBit or full duplex
+ *  04-Jan-02  stefan.roese@esd-electronics.com
+ *             - Wait for PHY auto negotiation to complete added
+ *  06-Feb-02  stefan.roese@esd-electronics.com
+ *             - Bug fixed in waiting for auto negotiation to complete
+ *  26-Feb-02  stefan.roese@esd-electronics.com
+ *             - rx and tx buffer descriptors now allocated (no fixed address
+ *               used anymore)
+ *  17-Jun-02  stefan.roese@esd-electronics.com
+ *             - MAL error debug printf 'M' removed (rx de interrupt may
+ *               occur upon many incoming packets with only 4 rx buffers).
  *-----------------------------------------------------------------------------*
- *  17-Nov-03   travis.sawyer@sandburst.com
- *              - ported from 405gp_enet.c to utilized upto 4 EMAC ports
- *                in the 440GX.  This port should work with the 440GP
- *                (2 EMACs) also
+ *  17-Nov-03  travis.sawyer@sandburst.com
+ *             - ported from 405gp_enet.c to utilized upto 4 EMAC ports
+ *               in the 440GX.  This port should work with the 440GP
+ *               (2 EMACs) also
+ *  15-Aug-05  sr@denx.de
+ *             - merged 405gp_enet.c and 440gx_enet.c to generic 4xx_enet.c
+                 now handling all 4xx cpu's.
  *-----------------------------------------------------------------------------*/
 
 #include <config.h>
-#if defined(CONFIG_440) && defined(CONFIG_NET_MULTI)
-
 #include <common.h>
 #include <net.h>
 #include <asm/processor.h>
-#include <ppc440.h>
 #include <commproc.h>
-#include <440gx_enet.h>
+#include <ppc4xx.h>
+#include <ppc4xx_enet.h>
 #include <405_mal.h>
 #include <miiphy.h>
 #include <malloc.h>
 #include "vecnum.h"
 
+/*
+ * Only compile for platform with AMCC EMAC ethernet controller and
+ * network support enabled.
+ * Remark: CONFIG_405 describes Xilinx PPC405 FPGA without EMAC controller!
+ */
+#if (CONFIG_COMMANDS & CFG_CMD_NET) && !defined(CONFIG_405) && !defined(CONFIG_IOP480)
 
-#define EMAC_RESET_TIMEOUT 1000        /* 1000 ms reset timeout */
-#define PHY_AUTONEGOTIATE_TIMEOUT 4000 /* 4000 ms autonegotiate timeout */
+#if !(defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII))
+#error "CONFIG_MII has to be defined!"
+#endif
+
+#if defined(CONFIG_NETCONSOLE) && !defined(CONFIG_NET_MULTI)
+#error "CONFIG_NET_MULTI has to be defined for NetConsole"
+#endif
 
+#define EMAC_RESET_TIMEOUT 1000 /* 1000 ms reset timeout */
+#define PHY_AUTONEGOTIATE_TIMEOUT 4000 /* 4000 ms autonegotiate timeout */
 
 /* Ethernet Transmit and Receive Buffers */
 /* AS.HARNOIS
  * In the same way ENET_MAX_MTU and ENET_MAX_MTU_ALIGNED are set from
  * PKTSIZE and PKTSIZE_ALIGN (include/net.h)
  */
-#define ENET_MAX_MTU           PKTSIZE
+#define ENET_MAX_MTU          PKTSIZE
 #define ENET_MAX_MTU_ALIGNED   PKTSIZE_ALIGN
 
-
-/* define the number of channels implemented */
-#define EMAC_RXCHL      EMAC_NUM_DEV
-#define EMAC_TXCHL      EMAC_NUM_DEV
-
 /*-----------------------------------------------------------------------------+
  * Defines for MAL/EMAC interrupt conditions as reported in the UIC (Universal
  * Interrupt Controller).
 #define MAL_UIC_ERR ( UIC_MAL_SERR | UIC_MAL_TXDE  | UIC_MAL_RXDE)
 #define MAL_UIC_DEF  (UIC_MAL_RXEOB | MAL_UIC_ERR)
 #define EMAC_UIC_DEF UIC_ENET
+#define EMAC_UIC_DEF1 UIC_ENET1
+#define SEL_UIC_DEF(p) (p ? UIC_ENET1 : UIC_ENET )
 
-#undef INFO_440_ENET
+#undef INFO_4XX_ENET
 
-#define BI_PHYMODE_NONE  0
-#define BI_PHYMODE_ZMII  1
+#define BI_PHYMODE_NONE         0
+#define BI_PHYMODE_ZMII         1
 #define BI_PHYMODE_RGMII 2
 
+
 /*-----------------------------------------------------------------------------+
  * Global variables. TX and RX descriptors and buffers.
  *-----------------------------------------------------------------------------*/
 /* IER globals */
 static uint32_t mal_ier;
 
+#if !defined(CONFIG_NET_MULTI)
+struct eth_device *emac0_dev = NULL;
+#endif
+
+/*
+ * Get count of EMAC devices (doesn't have to be the max. possible number
+ * supported by the cpu)
+ */
+#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
+
 /*-----------------------------------------------------------------------------+
  * Prototypes and externals.
  *-----------------------------------------------------------------------------*/
@@ -137,46 +167,52 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
                     unsigned long mal_errr);
 static void emac_err (struct eth_device *dev, unsigned long isr);
 
+extern int phy_setup_aneg (char *devname, unsigned char addr);
+extern int emac4xx_miiphy_read (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value);
+extern int emac4xx_miiphy_write (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value);
+
 /*-----------------------------------------------------------------------------+
-| ppc_440x_eth_halt
+| ppc_4xx_eth_halt
 | Disable MAL channel, and EMACn
-|
-|
 +-----------------------------------------------------------------------------*/
-static void ppc_440x_eth_halt (struct eth_device *dev)
+static void ppc_4xx_eth_halt (struct eth_device *dev)
 {
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
        uint32_t failsafe = 10000;
 
        out32 (EMAC_IER + hw_p->hw_addr, 0x00000000);   /* disable emac interrupts */
 
        /* 1st reset MAL channel */
        /* Note: writing a 0 to a channel has no effect */
+#if defined(CONFIG_405EP) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+       mtdcr (maltxcarr, (MAL_CR_MMSR >> (hw_p->devnum * 2)));
+#else
        mtdcr (maltxcarr, (MAL_CR_MMSR >> hw_p->devnum));
+#endif
        mtdcr (malrxcarr, (MAL_CR_MMSR >> hw_p->devnum));
 
        /* wait for reset */
-       while (mfdcr (maltxcasr) & (MAL_CR_MMSR >> hw_p->devnum)) {
+       while (mfdcr (malrxcasr) & (MAL_CR_MMSR >> hw_p->devnum)) {
                udelay (1000);  /* Delay 1 MS so as not to hammer the register */
                failsafe--;
                if (failsafe == 0)
                        break;
-
        }
 
        /* EMAC RESET */
        out32 (EMAC_M0 + hw_p->hw_addr, EMAC_M0_SRST);
 
+#ifndef CONFIG_NETCONSOLE
        hw_p->print_speed = 1;  /* print speed message again next time */
+#endif
 
        return;
 }
 
-extern int phy_setup_aneg (unsigned char addr);
-extern int miiphy_reset (unsigned char addr);
-
 #if defined (CONFIG_440GX)
-int ppc_440x_eth_setup_bridge(int devnum, bd_t * bis)
+int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
 {
        unsigned long pfc1;
        unsigned long zmiifer;
@@ -267,10 +303,10 @@ int ppc_440x_eth_setup_bridge(int devnum, bd_t * bis)
 }
 #endif
 
-static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
+static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 {
        int i, j;
-       unsigned long reg;
+       unsigned long reg = 0;
        unsigned long msr;
        unsigned long speed;
        unsigned long duplex;
@@ -278,30 +314,36 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        unsigned mode_reg;
        unsigned short devnum;
        unsigned short reg_short;
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
        sys_info_t sysinfo;
 #if defined(CONFIG_440GX)
-       int ethgroup;
+       int ethgroup = -1;
+#endif
 #endif
 
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
 
        /* before doing anything, figure out if we have a MAC address */
        /* if not, bail */
-       if (memcmp (dev->enetaddr, "\0\0\0\0\0\0", 6) == 0)
+       if (memcmp (dev->enetaddr, "\0\0\0\0\0\0", 6) == 0) {
+               printf("ERROR: ethaddr not set!\n");
                return -1;
+       }
 
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
        /* Need to get the OPB frequency so we can access the PHY */
        get_sys_info (&sysinfo);
+#endif
 
        msr = mfmsr ();
        mtmsr (msr & ~(MSR_EE));        /* disable interrupts */
 
        devnum = hw_p->devnum;
 
-#ifdef INFO_440_ENET
+#ifdef INFO_4XX_ENET
        /* AS.HARNOIS
         * We should have :
-        * hw_p->stats.pkts_handled <=  hw_p->stats.pkts_rx <= hw_p->stats.pkts_handled+PKTBUFSRX
+        * hw_p->stats.pkts_handled <=  hw_p->stats.pkts_rx <= hw_p->stats.pkts_handled+PKTBUFSRX
         * In the most cases hw_p->stats.pkts_handled = hw_p->stats.pkts_rx, but it
         * is possible that new packets (without relationship with
         * current transfer) have got the time to arrived before
@@ -320,31 +362,8 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        hw_p->stats.pkts_handled = 0;
 #endif
 
-       /* MAL Channel RESET */
-       /* 1st reset MAL channel */
-       /* Note: writing a 0 to a channel has no effect */
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       mtdcr (maltxcarr, (MAL_TXRX_CASR >> (hw_p->devnum*2)));
-#else
-       mtdcr (maltxcarr, (MAL_TXRX_CASR >> hw_p->devnum));
-#endif
-
-       mtdcr (malrxcarr, (MAL_TXRX_CASR >> hw_p->devnum));
-
-       /* wait for reset */
-       /* TBS:  should have udelay and failsafe here */
-       failsafe = 10000;
-       /* wait for reset */
-       while (mfdcr (maltxcasr) & (MAL_CR_MMSR >> hw_p->devnum)) {
-               udelay (1000);  /* Delay 1 MS so as not to hammer the register */
-               failsafe--;
-               if (failsafe == 0)
-                       break;
-
-       }
-
-       hw_p->tx_err_index = 0; /* Transmit Error Index for tx_err_log */
-       hw_p->rx_err_index = 0; /* Receive Error Index for rx_err_log */
+       hw_p->tx_err_index = 0; /* Transmit Error Index for tx_err_log */
+       hw_p->rx_err_index = 0; /* Receive Error Index for rx_err_log */
 
        hw_p->rx_slot = 0;      /* MAL Receive Slot */
        hw_p->rx_i_index = 0;   /* Receive Interrupt Queue Index */
@@ -354,6 +373,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        hw_p->tx_i_index = 0;   /* Transmit Interrupt Queue Index */
        hw_p->tx_u_index = 0;   /* Transmit User Queue Index */
 
+#if defined(CONFIG_440) && !defined(CONFIG_440SP)
        /* set RMII mode */
        /* NOTE: 440GX spec states that mode is mutually exclusive */
        /* NOTE: Therefore, disable all other EMACS, since we handle */
@@ -363,9 +383,12 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        udelay (100);
 
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       out32 (ZMII_FER, (ZMII_FER_RMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
+       out32 (ZMII_FER, (ZMII_FER_RMII | ZMII_FER_MDI) << ZMII_FER_V (devnum));
 #elif defined(CONFIG_440GX)
-       ethgroup = ppc_440x_eth_setup_bridge(devnum, bis);
+       ethgroup = ppc_4xx_eth_setup_bridge(devnum, bis);
+#elif defined(CONFIG_440GP)
+       /* set RMII mode */
+       out32 (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));
@@ -378,6 +401,8 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
 #endif
 
        out32 (ZMII_SSR, ZMII_SSR_SP << ZMII_SSR_V(devnum));
+#endif /* defined(CONFIG_440) && !defined(CONFIG_440SP) */
+
        __asm__ volatile ("eieio");
 
        /* reset emac so we have access to the phy */
@@ -391,7 +416,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                failsafe--;
        }
 
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
        /* Whack the M1 register */
        mode_reg = 0x0;
        mode_reg &= ~0x00000038;
@@ -406,7 +431,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                mode_reg |= EMAC_M1_OBCI_GT100;
 
        out32 (EMAC_M1 + hw_p->hw_addr, mode_reg);
-#endif /*  defined(CONFIG_440GX) */
+#endif /* defined(CONFIG_440GX) || defined(CONFIG_440SP) */
 
        /* wait for PHY to complete auto negotiation */
        reg_short = 0;
@@ -415,9 +440,11 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        case 0:
                reg = CONFIG_PHY_ADDR;
                break;
+#if defined (CONFIG_PHY1_ADDR)
        case 1:
                reg = CONFIG_PHY1_ADDR;
                break;
+#endif
 #if defined (CONFIG_440GX)
        case 2:
                reg = CONFIG_PHY2_ADDR;
@@ -433,15 +460,15 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
 
        bis->bi_phynum[devnum] = reg;
 
-#ifndef CONFIG_NO_PHY_RESET
+#if defined(CONFIG_PHY_RESET)
        /*
         * Reset the phy, only if its the first time through
         * otherwise, just check the speeds & feeds
         */
        if (hw_p->first_init == 0) {
-               miiphy_reset (reg);
+               miiphy_reset (dev->name, reg);
 
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
 #if defined(CONFIG_CIS8201_PHY)
                /*
                 * Cicada 8201 PHY needs to have an extended register whacked
@@ -449,9 +476,9 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                 */
                if ( ((devnum == 2) || (devnum ==3)) && (4 == ethgroup) ) {
 #if defined(CONFIG_CIS8201_SHORT_ETCH)
-                       miiphy_write (reg, 23, 0x1300);
+                       miiphy_write (dev->name, reg, 23, 0x1300);
 #else
-                       miiphy_write (reg, 23, 0x1000);
+                       miiphy_write (dev->name, reg, 23, 0x1000);
 #endif
                        /*
                         * Vitesse VSC8201/Cicada CIS8201 errata:
@@ -459,26 +486,26 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                         * This work around (provided by Vitesse) changes
                         * the default timer convergence from 8ms to 12ms
                         */
-                       miiphy_write (reg, 0x1f, 0x2a30);
-                       miiphy_write (reg, 0x08, 0x0200);
-                       miiphy_write (reg, 0x1f, 0x52b5);
-                       miiphy_write (reg, 0x02, 0x0004);
-                       miiphy_write (reg, 0x01, 0x0671);
-                       miiphy_write (reg, 0x00, 0x8fae);
-                       miiphy_write (reg, 0x1f, 0x2a30);
-                       miiphy_write (reg, 0x08, 0x0000);
-                       miiphy_write (reg, 0x1f, 0x0000);
+                       miiphy_write (dev->name, reg, 0x1f, 0x2a30);
+                       miiphy_write (dev->name, reg, 0x08, 0x0200);
+                       miiphy_write (dev->name, reg, 0x1f, 0x52b5);
+                       miiphy_write (dev->name, reg, 0x02, 0x0004);
+                       miiphy_write (dev->name, reg, 0x01, 0x0671);
+                       miiphy_write (dev->name, reg, 0x00, 0x8fae);
+                       miiphy_write (dev->name, reg, 0x1f, 0x2a30);
+                       miiphy_write (dev->name, reg, 0x08, 0x0000);
+                       miiphy_write (dev->name, reg, 0x1f, 0x0000);
                        /* end Vitesse/Cicada errata */
                }
 #endif
 #endif
                /* Start/Restart autonegotiation */
-               phy_setup_aneg (reg);
+               phy_setup_aneg (dev->name, reg);
                udelay (1000);
        }
-#endif /* CONFIG_NO_PHY_RESET */
+#endif /* defined(CONFIG_PHY_RESET) */
 
-       miiphy_read (reg, PHY_BMSR, &reg_short);
+       miiphy_read (dev->name, reg, PHY_BMSR, &reg_short);
 
        /*
         * Wait if PHY is capable of autonegotiation and autonegotiation is not complete
@@ -500,15 +527,16 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                                putc ('.');
                        }
                        udelay (1000);  /* 1 ms */
-                       miiphy_read (reg, PHY_BMSR, &reg_short);
+                       miiphy_read (dev->name, reg, PHY_BMSR, &reg_short);
 
                }
                puts (" done\n");
                udelay (500000);        /* another 500 ms (results in faster booting) */
        }
-#endif
-       speed = miiphy_speed (reg);
-       duplex = miiphy_duplex (reg);
+#endif /* #ifndef CONFIG_CS8952_PHY */
+
+       speed = miiphy_speed (dev->name, reg);
+       duplex = miiphy_duplex (dev->name, reg);
 
        if (hw_p->print_speed) {
                hw_p->print_speed = 0;
@@ -516,6 +544,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                        (int) speed, (duplex == HALF) ? "HALF" : "FULL");
        }
 
+#if defined(CONFIG_440) && !defined(CONFIG_440SP)
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
        mfsdr(sdr_mfr, reg);
        if (speed == 100) {
@@ -543,9 +572,10 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
 
                out32 (RGMII_SSR, reg);
        }
+#endif /* defined(CONFIG_440) && !defined(CONFIG_440SP) */
 
        /* set the Mal configuration reg */
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
        mtdcr (malmcr, MAL_CR_PLBB | MAL_CR_OPBBL | MAL_CR_LEA |
               MAL_CR_PLBLT_DEFAULT | MAL_CR_EOPIE | 0x00330000);
 #else
@@ -632,7 +662,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        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]; */
+               /*       rx[i].data_ptr = (char *) &rx_buff[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;
@@ -665,13 +695,15 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        switch (devnum) {
        case 1:
                /* setup MAL tx & rx channel pointers */
-#if defined (CONFIG_440EP) || defined (CONFIG_440GR)
+#if defined (CONFIG_405EP) || defined (CONFIG_440EP) || defined (CONFIG_440GR)
                mtdcr (maltxctp2r, hw_p->tx);
 #else
                mtdcr (maltxctp1r, hw_p->tx);
 #endif
+#if defined(CONFIG_440)
                mtdcr (maltxbattr, 0x0);
                mtdcr (malrxbattr, 0x0);
+#endif
                mtdcr (malrxctp1r, hw_p->rx);
                /* set RX buffer size */
                mtdcr (malrcbs1, ENET_MAX_MTU_ALIGNED / 16);
@@ -680,8 +712,8 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        case 2:
                /* setup MAL tx & rx channel pointers */
                mtdcr (maltxbattr, 0x0);
-               mtdcr (maltxctp2r, hw_p->tx);
                mtdcr (malrxbattr, 0x0);
+               mtdcr (maltxctp2r, hw_p->tx);
                mtdcr (malrxctp2r, hw_p->rx);
                /* set RX buffer size */
                mtdcr (malrcbs2, ENET_MAX_MTU_ALIGNED / 16);
@@ -699,9 +731,11 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        case 0:
        default:
                /* setup MAL tx & rx channel pointers */
+#if defined(CONFIG_440)
                mtdcr (maltxbattr, 0x0);
-               mtdcr (maltxctp0r, hw_p->tx);
                mtdcr (malrxbattr, 0x0);
+#endif
+               mtdcr (maltxctp0r, hw_p->tx);
                mtdcr (malrxctp0r, hw_p->rx);
                /* set RX buffer size */
                mtdcr (malrcbs0, ENET_MAX_MTU_ALIGNED / 16);
@@ -709,7 +743,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        }
 
        /* Enable MAL transmit and receive channels */
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_405EP) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
        mtdcr (maltxcasr, (MAL_TXRX_CASR >> (hw_p->devnum*2)));
 #else
        mtdcr (maltxcasr, (MAL_TXRX_CASR >> hw_p->devnum));
@@ -724,9 +758,16 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        mode_reg |= EMAC_M1_RFS_4K | EMAC_M1_TX_FIFO_2K;
 
        /* set speed */
-       if (speed == _1000BASET)
+       if (speed == _1000BASET) {
+#if defined(CONFIG_440SP)
+#define SDR0_PFC1_EM_1000      0x00200000
+               unsigned long pfc1;
+               mfsdr (sdr_pfc1, pfc1);
+               pfc1 |= SDR0_PFC1_EM_1000;
+               mtsdr (sdr_pfc1, pfc1);
+#endif
                mode_reg = mode_reg | EMAC_M1_MF_1000MBPS | EMAC_M1_IST;
-       else if (speed == _100BASET)
+       else if (speed == _100BASET)
                mode_reg = mode_reg | EMAC_M1_MF_100MBPS | EMAC_M1_IST;
        else
                mode_reg = mode_reg & ~0x00C00000;      /* 10 MBPS */
@@ -744,9 +785,14 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        /* set transmit request threshold register */
        out32 (EMAC_TRTR + hw_p->hw_addr, 0x18000000);  /* 256 byte threshold */
 
-       /* set receive  low/high water mark register */
+       /* set receive  low/high water mark register */
+#if defined(CONFIG_440)
        /* 440GP has a 64 byte burst length */
        out32 (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);
+#endif /* defined(CONFIG_440) */
        out32 (EMAC_TXM1 + hw_p->hw_addr, 0xf8640000);
 
        /* Set fifo limit entry in tx mode 0 */
@@ -755,8 +801,7 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
        out32 (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_PTLE | EMAC_ISR_ORE | EMAC_ISR_IRE;
+       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;
 
@@ -767,8 +812,6 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
                /*
                 * Connect interrupt service routines
                 */
-               irq_install_handler (VECNUM_EWU0 + (hw_p->devnum * 2),
-                                    (interrupt_handler_t *) enetInt, dev);
                irq_install_handler (VECNUM_ETH0 + (hw_p->devnum * 2),
                                     (interrupt_handler_t *) enetInt, dev);
        }
@@ -782,13 +825,13 @@ static int ppc_440x_eth_init (struct eth_device *dev, bd_t * bis)
 }
 
 
-static int ppc_440x_eth_send (struct eth_device *dev, volatile void *ptr,
+static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
                              int len)
 {
        struct enet_frame *ef_ptr;
        ulong time_start, time_now;
        unsigned long temp_txm0;
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
 
        ef_ptr = (struct enet_frame *) ptr;
 
@@ -823,7 +866,7 @@ static int ppc_440x_eth_send (struct eth_device *dev, volatile void *ptr,
 
        out32 (EMAC_TXM0 + hw_p->hw_addr,
               in32 (EMAC_TXM0 + hw_p->hw_addr) | EMAC_TXM0_GNP0);
-#ifdef INFO_440_ENET
+#ifdef INFO_4XX_ENET
        hw_p->stats.pkts_tx++;
 #endif
 
@@ -850,6 +893,20 @@ static int ppc_440x_eth_send (struct eth_device *dev, volatile void *ptr,
 }
 
 
+#if defined (CONFIG_440)
+
+#if defined(CONFIG_440SP)
+/*
+ * Hack: On 440SP all enet irq sources are located on UIC1
+ * Needs some cleanup. --sr
+ */
+#define UIC0MSR                uic1msr
+#define UIC0SR         uic1sr
+#else
+#define UIC0MSR                uic0msr
+#define UIC0SR         uic0sr
+#endif
+
 int enetInt (struct eth_device *dev)
 {
        int serviced;
@@ -862,30 +919,31 @@ int enetInt (struct eth_device *dev)
 #if defined(CONFIG_440GX)
        unsigned long my_uic2msr;
 #endif
-       EMAC_440GX_HW_PST hw_p;
+       EMAC_4XX_HW_PST hw_p;
 
        /*
         * Because the mal is generic, we need to get the current
         * eth device
         */
-       dev = eth_get_dev ();
+#if defined(CONFIG_NET_MULTI)
+       dev = eth_get_dev();
+#else
+       dev = emac0_dev;
+#endif
 
        hw_p = dev->priv;
 
-
        /* enter loop that stays in interrupt code until nothing to service */
        do {
                serviced = 0;
 
-               my_uic0msr = mfdcr (uic0msr);
+               my_uic0msr = mfdcr (UIC0MSR);
                my_uic1msr = mfdcr (uic1msr);
 #if defined(CONFIG_440GX)
                my_uic2msr = mfdcr (uic2msr);
 #endif
                if (!(my_uic0msr & (UIC_MRE | UIC_MTE))
-                   && !(my_uic1msr &
-                        (UIC_ETH0 | UIC_ETH1 | UIC_MS | UIC_MTDE |
-                         UIC_MRDE))) {
+                   && !(my_uic1msr & (UIC_ETH0 | UIC_ETH1 | UIC_MS | UIC_MTDE | UIC_MRDE))) {
                        /* not for us */
                        return (rc);
                }
@@ -923,12 +981,13 @@ int enetInt (struct eth_device *dev)
                        }
                        if ((hw_p->emac_ier & emac_isr)
                            || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                               mtdcr (uic0sr, UIC_MRE | UIC_MTE);      /* Clear */
+                               mtdcr (UIC0SR, UIC_MRE | UIC_MTE);      /* Clear */
                                mtdcr (uic1sr, UIC_ETH0 | UIC_MS | UIC_MTDE | UIC_MRDE);        /* Clear */
                                return (rc);    /* we had errors so get out */
                        }
                }
 
+#if !defined(CONFIG_440SP)
                if (hw_p->devnum == 1) {
                        if (UIC_ETH1 & my_uic1msr) {    /* look for EMAC errors */
                                emac_isr = in32 (EMAC_ISR + hw_p->hw_addr);
@@ -940,7 +999,7 @@ int enetInt (struct eth_device *dev)
                        }
                        if ((hw_p->emac_ier & emac_isr)
                            || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                               mtdcr (uic0sr, UIC_MRE | UIC_MTE);      /* Clear */
+                               mtdcr (UIC0SR, UIC_MRE | UIC_MTE);      /* Clear */
                                mtdcr (uic1sr, UIC_ETH1 | UIC_MS | UIC_MTDE | UIC_MRDE);        /* Clear */
                                return (rc);    /* we had errors so get out */
                        }
@@ -957,7 +1016,7 @@ int enetInt (struct eth_device *dev)
                        }
                        if ((hw_p->emac_ier & emac_isr)
                            || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                               mtdcr (uic0sr, UIC_MRE | UIC_MTE);      /* Clear */
+                               mtdcr (UIC0SR, UIC_MRE | UIC_MTE);      /* Clear */
                                mtdcr (uic1sr, UIC_MS | UIC_MTDE | UIC_MRDE);   /* Clear */
                                mtdcr (uic2sr, UIC_ETH2);
                                return (rc);    /* we had errors so get out */
@@ -975,24 +1034,26 @@ int enetInt (struct eth_device *dev)
                        }
                        if ((hw_p->emac_ier & emac_isr)
                            || (my_uic1msr & (UIC_MS | UIC_MTDE | UIC_MRDE))) {
-                               mtdcr (uic0sr, UIC_MRE | UIC_MTE);      /* Clear */
+                               mtdcr (UIC0SR, UIC_MRE | UIC_MTE);      /* Clear */
                                mtdcr (uic1sr, UIC_MS | UIC_MTDE | UIC_MRDE);   /* Clear */
                                mtdcr (uic2sr, UIC_ETH3);
                                return (rc);    /* we had errors so get out */
                        }
                }
 #endif /* CONFIG_440GX */
+#endif /* !CONFIG_440SP */
+
                /* handle MAX TX EOB interrupt from a tx */
                if (my_uic0msr & UIC_MTE) {
                        mal_rx_eob = mfdcr (maltxeobisr);
                        mtdcr (maltxeobisr, mal_rx_eob);
-                       mtdcr (uic0sr, UIC_MTE);
+                       mtdcr (UIC0SR, UIC_MTE);
                }
                /* handle MAL RX EOB  interupt from a receive */
                /* check for EOB on valid channels            */
                if (my_uic0msr & UIC_MRE) {
                        mal_rx_eob = mfdcr (malrxeobisr);
-                       if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel x */
+                       if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel x */
                                /* clear EOB
                                   mtdcr(malrxeobisr, mal_rx_eob); */
                                enet_rcv (dev, emac_isr);
@@ -1001,7 +1062,8 @@ int enetInt (struct eth_device *dev)
                                rc = 0;
                        }
                }
-               mtdcr (uic0sr, UIC_MRE);        /* Clear */
+
+               mtdcr (UIC0SR, UIC_MRE);        /* Clear */
                mtdcr (uic1sr, UIC_MS | UIC_MTDE | UIC_MRDE);   /* Clear */
                switch (hw_p->devnum) {
                case 0:
@@ -1026,6 +1088,96 @@ int enetInt (struct eth_device *dev)
        return (rc);
 }
 
+#else /* CONFIG_440 */
+
+int enetInt (struct eth_device *dev)
+{
+       int serviced;
+       int rc = -1;            /* default to not us */
+       unsigned long mal_isr;
+       unsigned long emac_isr = 0;
+       unsigned long mal_rx_eob;
+       unsigned long my_uicmsr;
+
+       EMAC_4XX_HW_PST hw_p;
+
+       /*
+        * Because the mal is generic, we need to get the current
+        * eth device
+        */
+#if defined(CONFIG_NET_MULTI)
+       dev = eth_get_dev();
+#else
+       dev = emac0_dev;
+#endif
+
+       hw_p = dev->priv;
+
+       /* enter loop that stays in interrupt code until nothing to service */
+       do {
+               serviced = 0;
+
+               my_uicmsr = mfdcr (uicmsr);
+
+               if ((my_uicmsr & (MAL_UIC_DEF | EMAC_UIC_DEF)) == 0) {  /* not for us */
+                       return (rc);
+               }
+               /* get and clear controller status interrupts */
+               /* look at Mal and EMAC interrupts */
+               if ((MAL_UIC_DEF & my_uicmsr) != 0) {   /* we have a MAL interrupt */
+                       mal_isr = mfdcr (malesr);
+                       /* look for mal error */
+                       if ((my_uicmsr & MAL_UIC_ERR) != 0) {
+                               mal_err (dev, mal_isr, my_uicmsr, MAL_UIC_DEF, MAL_UIC_ERR);
+                               serviced = 1;
+                               rc = 0;
+                       }
+               }
+
+               /* 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);
+                       if ((hw_p->emac_ier & emac_isr) != 0) {
+                               emac_err (dev, emac_isr);
+                               serviced = 1;
+                               rc = 0;
+                       }
+               }
+               if (((hw_p->emac_ier & emac_isr) != 0) || ((MAL_UIC_ERR & my_uicmsr) != 0)) {
+                       mtdcr (uicsr, MAL_UIC_DEF | SEL_UIC_DEF(hw_p->devnum)); /* Clear */
+                       return (rc);            /* we had errors so get out */
+               }
+
+               /* handle MAX TX EOB interrupt from a tx */
+               if (my_uicmsr & UIC_MAL_TXEOB) {
+                       mal_rx_eob = mfdcr (maltxeobisr);
+                       mtdcr (maltxeobisr, mal_rx_eob);
+                       mtdcr (uicsr, UIC_MAL_TXEOB);
+               }
+               /* handle MAL RX EOB  interupt from a receive */
+               /* check for EOB on valid channels            */
+               if (my_uicmsr & UIC_MAL_RXEOB)
+               {
+                       mal_rx_eob = mfdcr (malrxeobisr);
+                       if ((mal_rx_eob & (0x80000000 >> hw_p->devnum)) != 0) { /* call emac routine for channel x */
+                               /* clear EOB
+                                mtdcr(malrxeobisr, mal_rx_eob); */
+                               enet_rcv (dev, emac_isr);
+                               /* indicate that we serviced an interrupt */
+                               serviced = 1;
+                               rc = 0;
+                       }
+               }
+               mtdcr (uicsr, MAL_UIC_DEF|EMAC_UIC_DEF|EMAC_UIC_DEF1);  /* Clear */
+       }
+       while (serviced);
+
+       return (rc);
+}
+
+#endif /* CONFIG_440 */
+
 /*-----------------------------------------------------------------------------+
  *  MAL Error Routine
  *-----------------------------------------------------------------------------*/
@@ -1033,7 +1185,7 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
                     unsigned long uic, unsigned long maldef,
                     unsigned long mal_errr)
 {
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
 
        mtdcr (malesr, isr);    /* clear interrupt */
 
@@ -1041,8 +1193,8 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
        mtdcr (maltxdeir, 0xC0000000);
        mtdcr (malrxdeir, 0x80000000);
 
-#ifdef INFO_440_ENET
-       printf ("\nMAL error occured.... ISR = %lx UIC = = %lx  MAL_DEF = %lx  MAL_ERR= %lx \n", isr, uic, maldef, mal_errr);
+#ifdef INFO_4XX_ENET
+       printf ("\nMAL error occured.... ISR = %lx UIC = = %lx  MAL_DEF = %lx  MAL_ERR= %lx \n", isr, uic, maldef, mal_errr);
 #endif
 
        eth_init (hw_p->bis);   /* start again... */
@@ -1053,7 +1205,7 @@ static void mal_err (struct eth_device *dev, unsigned long isr,
  *-----------------------------------------------------------------------------*/
 static void emac_err (struct eth_device *dev, unsigned long isr)
 {
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       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);
@@ -1067,7 +1219,7 @@ static void enet_rcv (struct eth_device *dev, unsigned long malisr)
        struct enet_frame *ef_ptr;
        unsigned long data_len;
        unsigned long rx_eob_isr;
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
 
        int handled = 0;
        int i;
@@ -1127,7 +1279,7 @@ static void enet_rcv (struct eth_device *dev, unsigned long malisr)
                                hw_p->stats.rx += data_len;
                                ef_ptr = (struct enet_frame *) hw_p->rx[i].
                                        data_ptr;
-#ifdef INFO_440_ENET
+#ifdef INFO_4XX_ENET
                                hw_p->stats.pkts_rx++;
 #endif
                                /* AS.HARNOIS
@@ -1138,8 +1290,6 @@ static void enet_rcv (struct eth_device *dev, unsigned long malisr)
                                if (NUM_RX_BUFF == hw_p->rx_i_index)
                                        hw_p->rx_i_index = 0;
 
-                               /* printf("X");  /|* test-only *|/ */
-
                                /*  AS.HARNOIS
                                 * free receive buffer only when
                                 * buffer has been handled (eth_rx)
@@ -1151,14 +1301,14 @@ static void enet_rcv (struct eth_device *dev, unsigned long malisr)
 }
 
 
-static int ppc_440x_eth_rx (struct eth_device *dev)
+static int ppc_4xx_eth_rx (struct eth_device *dev)
 {
        int length;
        int user_index;
        unsigned long msr;
-       EMAC_440GX_HW_PST hw_p = dev->priv;
+       EMAC_4XX_HW_PST hw_p = dev->priv;
 
-       hw_p->is_receiving = 1; /* tell driver */
+       hw_p->is_receiving = 1; /* tell driver */
 
        for (;;) {
                /* AS.HARNOIS
@@ -1177,8 +1327,8 @@ static int ppc_440x_eth_rx (struct eth_device *dev)
                length = hw_p->rx[user_index].data_len;
 
                /* Pass the packet up to the protocol layers. */
-               /*       NetReceive(NetRxPackets[rxIdx], length - 4); */
-               /*       NetReceive(NetRxPackets[i], length); */
+               /*       NetReceive(NetRxPackets[rxIdx], length - 4); */
+               /*       NetReceive(NetRxPackets[i], length); */
                NetReceive (NetRxPackets[user_index], length - 4);
                /* Free Recv Buffer */
                hw_p->rx[user_index].ctrl |= MAL_RX_CTRL_EMPTY;
@@ -1188,24 +1338,24 @@ static int ppc_440x_eth_rx (struct eth_device *dev)
                if (NUM_RX_BUFF == hw_p->rx_u_index)
                        hw_p->rx_u_index = 0;
 
-#ifdef INFO_440_ENET
+#ifdef INFO_4XX_ENET
                hw_p->stats.pkts_handled++;
 #endif
 
                mtmsr (msr);    /* Enable IRQ's */
        }
 
-       hw_p->is_receiving = 0; /* tell driver */
+       hw_p->is_receiving = 0; /* tell driver */
 
        return length;
 }
 
-int ppc_440x_eth_initialize (bd_t * bis)
+int ppc_4xx_eth_initialize (bd_t * bis)
 {
        static int virgin = 0;
        struct eth_device *dev;
        int eth_num = 0;
-       EMAC_440GX_HW_PST hw = NULL;
+       EMAC_4XX_HW_PST hw = NULL;
 
 #if defined(CONFIG_440GX)
        unsigned long pfc1;
@@ -1229,11 +1379,11 @@ int ppc_440x_eth_initialize (bd_t * bis)
        bis->bi_phymode[3] = 2;
 
 #if defined (CONFIG_440GX)
-       ppc_440x_eth_setup_bridge(0, bis);
+       ppc_4xx_eth_setup_bridge(0, bis);
 #endif
 #endif
 
-       for (eth_num = 0; eth_num < EMAC_NUM_DEV; eth_num++) {
+       for (eth_num = 0; eth_num < LAST_EMAC_NUM; eth_num++) {
 
                /* See if we can actually bring up the interface, otherwise, skip it */
                switch (eth_num) {
@@ -1273,16 +1423,16 @@ int ppc_440x_eth_initialize (bd_t * bis)
                /* Allocate device structure */
                dev = (struct eth_device *) malloc (sizeof (*dev));
                if (dev == NULL) {
-                       printf ("ppc_440x_eth_initialize: "
+                       printf ("ppc_4xx_eth_initialize: "
                                "Cannot allocate eth_device %d\n", eth_num);
                        return (-1);
                }
                memset(dev, 0, sizeof(*dev));
 
                /* Allocate our private use data */
-               hw = (EMAC_440GX_HW_PST) malloc (sizeof (*hw));
+               hw = (EMAC_4XX_HW_PST) malloc (sizeof (*hw));
                if (hw == NULL) {
-                       printf ("ppc_440x_eth_initialize: "
+                       printf ("ppc_4xx_eth_initialize: "
                                "Cannot allocate private hw data for eth_device %d",
                                eth_num);
                        free (dev);
@@ -1319,12 +1469,12 @@ int ppc_440x_eth_initialize (bd_t * bis)
                hw->devnum = eth_num;
                hw->print_speed = 1;
 
-               sprintf (dev->name, "ppc_440x_eth%d", eth_num);
+               sprintf (dev->name, "ppc_4xx_eth%d", eth_num);
                dev->priv = (void *) hw;
-               dev->init = ppc_440x_eth_init;
-               dev->halt = ppc_440x_eth_halt;
-               dev->send = ppc_440x_eth_send;
-               dev->recv = ppc_440x_eth_rx;
+               dev->init = ppc_4xx_eth_init;
+               dev->halt = ppc_4xx_eth_halt;
+               dev->send = ppc_4xx_eth_send;
+               dev->recv = ppc_4xx_eth_rx;
 
                if (0 == virgin) {
                        /* set the MAL IER ??? names may change with new spec ??? */
@@ -1355,9 +1505,60 @@ int ppc_440x_eth_initialize (bd_t * bis)
                        virgin = 1;
                }
 
+#if defined(CONFIG_NET_MULTI)
                eth_register (dev);
+#else
+               emac0_dev = dev;
+#endif
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+               miiphy_register (dev->name,
+                                emac4xx_miiphy_read, emac4xx_miiphy_write);
+#endif
 
        }                       /* end for each supported device */
        return (1);
 }
-#endif /* CONFIG_440 && CONFIG_NET_MULTI */
+
+
+#if !defined(CONFIG_NET_MULTI)
+void eth_halt (void) {
+       if (emac0_dev) {
+               ppc_4xx_eth_halt(emac0_dev);
+               free(emac0_dev);
+               emac0_dev = NULL;
+       }
+}
+
+int eth_init (bd_t *bis)
+{
+       ppc_4xx_eth_initialize(bis);
+       if (emac0_dev) {
+               return ppc_4xx_eth_init(emac0_dev, bis);
+       } else {
+               printf("ERROR: ethaddr not set!\n");
+               return -1;
+       }
+}
+
+int eth_send(volatile void *packet, int length)
+{
+       return (ppc_4xx_eth_send(emac0_dev, packet, length));
+}
+
+int eth_rx(void)
+{
+       return (ppc_4xx_eth_rx(emac0_dev));
+}
+
+int emac4xx_miiphy_initialize (bd_t * bis)
+{
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_register ("ppc_4xx_eth0",
+                        emac4xx_miiphy_read, emac4xx_miiphy_write);
+#endif
+
+       return 0;
+}
+#endif /* !defined(CONFIG_NET_MULTI) */
+
+#endif /* #if (CONFIG_COMMANDS & CFG_CMD_NET) */
index 5b16754c50a1f36a12a713174f06fb0b4900c58e..c5634570054b92169442cb040b56b3f11c70cffc 100644 (file)
@@ -27,10 +27,10 @@ LIB = lib$(CPU).a
 
 START  = start.o resetvec.o kgdb.o
 AOBJS  = dcr.o
-COBJS  = 405gp_enet.o 405gp_pci.o 440gx_enet.o \
+COBJS  = 405gp_pci.o 4xx_enet.o \
          bedbug_405.o commproc.o \
          cpu.o cpu_init.o i2c.o interrupts.o \
-         miiphy.o miiphy_440.o sdram.o serial.o \
+         miiphy.o sdram.o serial.o \
          spd_sdram.o speed.o traps.o usb_ohci.o usbdev.o
 
 OBJS   = $(AOBJS) $(COBJS)
index 23752f3940bc06e1ad5776da0f2a4ca6ce0ffeaa..a3c2119764c9c1c5f60505ded11f8a73eef96a7c 100644 (file)
@@ -25,7 +25,7 @@ int bedbug405_clear __P ((int));
 \f
 
 /* ======================================================================
- * Initialize the global bug_ctx structure for the IBM PPC405. Clear all
+ * Initialize the global bug_ctx structure for the AMCC PPC405.        Clear all
  * of the breakpoints.
  * ====================================================================== */
 
index a9bb89ad0a7021fdfa7013035578b787ab37d697..a26533c59c7e553e94143138f30cc623f2a6abe0 100644 (file)
 
 
 #if defined(CONFIG_440)
-static int do_chip_reset( unsigned long sys0, unsigned long sys1 );
+#define FREQ_EBC               (sys_info.freqEPB)
+#else
+#define FREQ_EBC               (sys_info.freqPLB / sys_info.pllExtBusDiv)
 #endif
 
-/* ------------------------------------------------------------------------- */
+#if defined(CONFIG_405GP) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
 
-int checkcpu (void)
+#define PCI_ASYNC
+
+int pci_async_enabled(void)
 {
-#if defined(CONFIG_405GP) || \
-    defined(CONFIG_405CR) || \
-    defined(CONFIG_405EP) || \
-    defined(CONFIG_440)   || \
-    defined(CONFIG_IOP480)
-       uint pvr = get_pvr();
+#if defined(CONFIG_405GP)
+       return (mfdcr(strap) & PSR_PCI_ASYNC_EN);
 #endif
-#if defined(CONFIG_405GP) || \
-    defined(CONFIG_405CR) || \
-    defined(CONFIG_405EP) || \
-    defined(CONFIG_IOP480)
-       DECLARE_GLOBAL_DATA_PTR;
 
+#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
+       unsigned long val;
+
+       mfsdr(sdr_sdstp1, val);
+       return (val & SDR0_SDSTP1_PAME_MASK);
+#endif
+}
+#endif
+
+#if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && !defined(CONFIG_405)
+int pci_arbiter_enabled(void)
+{
+#if defined(CONFIG_405GP)
+       return (mfdcr(strap) & PSR_PCI_ARBIT_EN);
+#endif
+
+#if defined(CONFIG_405EP)
+       return (mfdcr(cpc0_pci) & CPC0_PCI_ARBIT_EN);
+#endif
+
+#if defined(CONFIG_440GP)
+       return (mfdcr(cpc0_strp1) & CPC0_STRP1_PAE_MASK);
+#endif
+
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
+       unsigned long val;
+
+       mfsdr(sdr_sdstp1, val);
+       return (val & SDR0_SDSTP1_PAE_MASK);
+#endif
+}
+#endif
+
+#if defined(CONFIG_405EP)|| defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
+       defined(CONFIG_440GX) || defined(CONFIG_440SP)
+
+#define I2C_BOOTROM
+
+int i2c_bootrom_enabled(void)
+{
+#if defined(CONFIG_405EP)
+       return (mfdcr(cpc0_boot) & CPC0_BOOT_SEP);
+#endif
+
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
+       unsigned long val;
+
+       mfsdr(sdr_sdcs, val);
+       return (val & SDR0_SDCS_SDD);
+#endif
+}
+#endif
+
+
+#if defined(CONFIG_440)
+static int do_chip_reset(unsigned long sys0, unsigned long sys1);
+#endif
+
+
+int checkcpu (void)
+{
+#if !defined(CONFIG_405)       /* not used on Xilinx 405 FPGA implementations */
+       DECLARE_GLOBAL_DATA_PTR;
+       uint pvr = get_pvr();
        ulong clock = gd->cpu_clk;
        char buf[32];
-#endif
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_405EP)
-       PPC405_SYS_INFO sys_info;
+#if !defined(CONFIG_IOP480)
+       sys_info_t sys_info;
 
        puts ("CPU:   ");
 
        get_sys_info(&sys_info);
 
-#ifdef CONFIG_405GP
-       puts ("AMCC PowerPC 405GP");
-       if (pvr == PVR_405GPR_RB) {
-               putc('r');
-       }
-       puts (" Rev. ");
-#endif
-#ifdef CONFIG_405CR
-       puts ("AMCC PowerPC 405CR Rev. ");
+       puts("AMCC PowerPC 4");
+
+#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_405EP)
+       puts("05");
 #endif
-#ifdef CONFIG_405EP
-       puts ("AMCC PowerPC 405EP Rev. ");
+#if defined(CONFIG_440)
+       puts("40");
 #endif
+
        switch (pvr) {
        case PVR_405GP_RB:
-       case PVR_405GPR_RB:
-               putc('B');
+               puts("GP Rev. B");
                break;
+
        case PVR_405GP_RC:
-#ifdef CONFIG_405CR
-       case PVR_405CR_RC:
-#endif
-               putc('C');
+               puts("GP Rev. C");
                break;
+
        case PVR_405GP_RD:
-               putc('D');
+               puts("GP Rev. D");
                break;
+
 #ifdef CONFIG_405GP
-       case PVR_405GP_RE:
-               putc('E');
+       case PVR_405GP_RE: /* 405GP rev E and 405CR rev C have same PVR */
+               puts("GP Rev. E");
                break;
 #endif
+
        case PVR_405CR_RA:
-               putc('A');
+               puts("CR Rev. A");
                break;
+
        case PVR_405CR_RB:
-       case PVR_405EP_RB:
-               putc('B');
+               puts("CR Rev. B");
                break;
-       default:
-               printf ("? (PVR=%08x)", pvr);
-               break;
-       }
 
-       printf (" at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n", strmhz(buf, clock),
-              sys_info.freqPLB / 1000000,
-              sys_info.freqPLB / sys_info.pllOpbDiv / 1000000,
-              sys_info.freqPLB / sys_info.pllExtBusDiv / 1000000);
-
-#if defined(CONFIG_405GP)
-       if (mfdcr(strap) & PSR_PCI_ASYNC_EN) {
-               printf ("       PCI async ext clock used, ");
-       } else {
-               printf ("       PCI sync clock at %lu MHz, ",
-                      sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
-       }
-       printf ("%sternal PCI arbiter enabled\n",
-               (mfdcr(strap) & PSR_PCI_ARBIT_EN) ? "in" : "ex");
-#elif defined(CONFIG_405EP)
-       printf ("       IIC Boot EEPROM %sabled\n",
-               (mfdcr(cpc0_boot) & CPC0_BOOT_SEP) ? "en" : "dis");
-       printf ("       PCI async ext clock used, ");
-       printf ("%sternal PCI arbiter enabled\n",
-               (mfdcr(cpc0_pci) & CPC0_PCI_ARBIT_EN) ? "in" : "ex");
+#ifdef CONFIG_405CR
+       case PVR_405CR_RC: /* 405GP rev E and 405CR rev C have same PVR */
+               puts("CR Rev. C");
+               break;
 #endif
 
-#if defined(CONFIG_405EP)
-       printf ("       16 kB I-Cache 16 kB D-Cache");
-#else
-       printf ("       16 kB I-Cache %d kB D-Cache",
-               ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);
-#endif
-#endif  /* defined(CONFIG_405GP) || defined(CONFIG_405CR) */
+       case PVR_405GPR_RB:
+               puts("GPr Rev. B");
+               break;
 
-#ifdef CONFIG_IOP480
-       printf ("PLX IOP480 (PVR=%08x)", pvr);
-       printf (" at %s MHz:", strmhz(buf, clock));
-       printf (" %u kB I-Cache", 4);
-       printf (" %u kB D-Cache", 2);
-#endif
+       case PVR_405EP_RB:
+               puts("EP Rev. B");
+               break;
 
 #if defined(CONFIG_440)
-       puts ("AMCC PowerPC 440");
-       switch(pvr) {
        case PVR_440GP_RB:
                puts("GP Rev. B");
                /* See errata 1.12: CHIP_4 */
@@ -166,40 +191,103 @@ int checkcpu (void)
                                        mfdcr(cpc0_strp1) );
                }
                break;
+
        case PVR_440GP_RC:
                puts("GP Rev. C");
                break;
+
        case PVR_440GX_RA:
                puts("GX Rev. A");
                break;
+
        case PVR_440GX_RB:
                puts("GX Rev. B");
                break;
+
        case PVR_440GX_RC:
                puts("GX Rev. C");
                break;
-#if defined(CONFIG_440GR)
-       case PVR_440EP_RA:
-               puts("GR Rev. A");
-               break;
-       case PVR_440EP_RB:
-               puts("GR Rev. B");
+
+       case PVR_440GX_RF:
+               puts("GX Rev. F");
                break;
-#else
+
        case PVR_440EP_RA:
                puts("EP Rev. A");
                break;
-       case PVR_440EP_RB:
+
+#ifdef CONFIG_440EP
+       case PVR_440EP_RB: /* 440EP rev B and 440GR rev A have same PVR */
                puts("EP Rev. B");
                break;
-#endif
+#endif /*  CONFIG_440EP */
+
+#ifdef CONFIG_440GR
+       case PVR_440GR_RA: /* 440EP rev B and 440GR rev A have same PVR */
+               puts("GR Rev. A");
+               break;
+#endif /* CONFIG_440GR */
+#endif /* CONFIG_440 */
+
+       case PVR_440SP_RA:
+               puts("SP Rev. A");
+               break;
+
+       case PVR_440SP_RB:
+               puts("SP Rev. B");
+               break;
 
        default:
                printf (" UNKNOWN (PVR=%08x)", pvr);
                break;
        }
+
+       printf (" at %s MHz (PLB=%lu, OPB=%lu, EBC=%lu MHz)\n", strmhz(buf, clock),
+              sys_info.freqPLB / 1000000,
+              sys_info.freqPLB / sys_info.pllOpbDiv / 1000000,
+              FREQ_EBC / 1000000);
+
+#if defined(I2C_BOOTROM)
+       printf ("       I2C boot EEPROM %sabled\n", i2c_bootrom_enabled() ? "en" : "dis");
+#endif
+
+#if defined(CONFIG_PCI)
+       printf ("       Internal PCI arbiter %sabled", pci_arbiter_enabled() ? "en" : "dis");
+#endif
+
+#if defined(PCI_ASYNC)
+       if (pci_async_enabled()) {
+               printf (", PCI async ext clock used");
+       } else {
+               printf (", PCI sync clock at %lu MHz",
+                      sys_info.freqPLB / sys_info.pllPciDiv / 1000000);
+       }
+#endif
+
+#if defined(CONFIG_PCI)
+       putc('\n');
 #endif
-       puts ("\n");
+
+#if defined(CONFIG_405EP)
+       printf ("       16 kB I-Cache 16 kB D-Cache");
+#elif defined(CONFIG_440)
+       printf ("       32 kB I-Cache 32 kB D-Cache");
+#else
+       printf ("       16 kB I-Cache %d kB D-Cache",
+               ((pvr | 0x00000001) == PVR_405GPR_RB) ? 16 : 8);
+#endif
+#endif /* !defined(CONFIG_IOP480) */
+
+#if defined(CONFIG_IOP480)
+       printf ("PLX IOP480 (PVR=%08x)", pvr);
+       printf (" at %s MHz:", strmhz(buf, clock));
+       printf (" %u kB I-Cache", 4);
+       printf (" %u kB D-Cache", 2);
+#endif
+
+#endif /* !defined(CONFIG_405) */
+
+       putc ('\n');
 
        return 0;
 }
@@ -230,8 +318,7 @@ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 }
 
 #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.
@@ -252,31 +339,13 @@ int do_chip_reset (unsigned long sys0, unsigned long sys1)
  */
 unsigned long get_tbclk (void)
 {
-#if defined(CONFIG_440)
-
+#if !defined(CONFIG_IOP480)
        sys_info_t  sys_info;
 
        get_sys_info(&sys_info);
        return (sys_info.freqProcessor);
-
-#elif defined(CONFIG_405GP) || \
-      defined(CONFIG_405CR) || \
-      defined(CONFIG_405) || \
-      defined(CONFIG_405EP)
-
-       PPC405_SYS_INFO sys_info;
-
-       get_sys_info(&sys_info);
-       return (sys_info.freqProcessor);
-
-#elif defined(CONFIG_IOP480)
-
-       return (66000000);
-
 #else
-
-# error get_tbclk() not implemented
-
+       return (66000000);
 #endif
 
 }
index 68e1a450ca774a959c51f9f5df65dbfbb3b92b34..79cfba3a4511d1892c967e012ba5b352b5878a55 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <common.h>
 #include <watchdog.h>
-#include <405gp_enet.h>
+#include <ppc4xx_enet.h>
 #include <asm/processor.h>
 #include <ppc4xx.h>
 
index 3a644a4cc4f106fea735a0a4c264bbb5135809df..be94b571ff20ba2f0ab7586237cd7d5769c58bc7 100644 (file)
@@ -428,7 +428,7 @@ int i2c_write (uchar chip, uint addr, int alen, uchar * buffer, int len)
  */
 uchar i2c_reg_read(uchar i2c_addr, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read(i2c_addr, reg, 1, &buf, 1);
 
index cb9dccdc35babb33be34c826c7ca5590b7fb394a..f26f2a203a0e8c0c3b43edab5c0ec6c3381b62c4 100644 (file)
@@ -1,42 +1,44 @@
 /*-----------------------------------------------------------------------------+
   |
-  |       This source code has been made available to you by IBM on an AS-IS
-  |       basis.  Anyone receiving this source is licensed under IBM
-  |       copyrights to use it in any way he or she deems fit, including
-  |       copying it, modifying it, compiling it, and redistributing it either
-  |       with or without modifications.  No license under IBM patents or
-  |       patent applications is to be implied by the copyright license.
+  |      This source code has been made available to you by IBM on an AS-IS
+  |      basis.  Anyone receiving this source is licensed under IBM
+  |      copyrights to use it in any way he or she deems fit, including
+  |      copying it, modifying it, compiling it, and redistributing it either
+  |      with or without modifications.  No license under IBM patents or
+  |      patent applications is to be implied by the copyright license.
   |
-  |       Any user of this software should understand that IBM cannot provide
-  |       technical support for this software and will not be responsible for
-  |       any consequences resulting from the use of this software.
+  |      Any user of this software should understand that IBM cannot provide
+  |      technical support for this software and will not be responsible for
+  |      any consequences resulting from the use of this software.
   |
-  |       Any person who transfers this source code or any derivative work
-  |       must include the IBM copyright notice, this paragraph, and the
-  |       preceding two paragraphs in the transferred software.
+  |      Any person who transfers this source code or any derivative work
+  |      must include the IBM copyright notice, this paragraph, and the
+  |      preceding two paragraphs in the transferred software.
   |
-  |       COPYRIGHT   I B M   CORPORATION 1995
-  |       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
+  |      COPYRIGHT   I B M   CORPORATION 1995
+  |      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
   +-----------------------------------------------------------------------------*/
 /*-----------------------------------------------------------------------------+
   |
-  |  File Name:  miiphy.c
+  |  File Name:         miiphy.c
   |
-  |  Function:   This module has utilities for accessing the MII PHY through
+  |  Function:  This module has utilities for accessing the MII PHY through
   |           the EMAC3 macro.
   |
-  |  Author:     Mark Wisner
+  |  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
+  |  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 <asm/processor.h>
 #include <ppc_asm.tmpl>
 #include <commproc.h>
-#include <405gp_enet.h>
+#include <ppc4xx_enet.h>
 #include <405_mal.h>
 #include <miiphy.h>
 
-#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
-  (defined(CONFIG_440) && !defined(CONFIG_NET_MULTI))
 
 /***********************************************************/
-/* Dump out to the screen PHY regs                         */
+/* Dump out to the screen PHY regs                        */
 /***********************************************************/
 
-void miiphy_dump (unsigned char addr)
+void miiphy_dump (char *devname, unsigned char addr)
 {
        unsigned long i;
        unsigned short data;
 
 
        for (i = 0; i < 0x1A; i++) {
-               if (miiphy_read (addr, i, &data)) {
+               if (miiphy_read (devname, addr, i, &data)) {
                        printf ("read error for reg %lx\n", i);
                        return;
                }
@@ -72,75 +72,128 @@ void miiphy_dump (unsigned char addr)
                if (i == 0x07)
                        i = 0x0f;
 
-       } /* end for loop */
-} /* end dump */
+       }                       /* end for loop */
+}                              /* end dump */
 
 
 /***********************************************************/
-/* read a phy reg and return the value with a rc           */
-/* Note: We are referencing to EMAC_STACR register         */
-/* @(EMAC_BASE + 92) because  of:                          */
-/* - 405EP has only STACR for EMAC0 pinned out             */
-/* - 405GP has onle one EMAC0                              */
-/* - For 440 this module gets compiled only for            */
-/*   !CONFIG_NET_MULTI, i.e. only EMAC0 is supported.      */
+/* (Re)start autonegotiation                              */
 /***********************************************************/
+int phy_setup_aneg (char *devname, unsigned char addr)
+{
+       unsigned short ctl, 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 |
+               PHY_ANLPAR_10);
+       miiphy_write (devname, addr, PHY_ANAR, adv);
 
-int miiphy_read (unsigned char addr, unsigned char reg,
-                                unsigned short *value)
+       /* 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);
+
+       return 0;
+}
+
+
+/***********************************************************/
+/* read a phy reg and return the value with a rc          */
+/***********************************************************/
+unsigned int miiphy_getemac_offset (void)
 {
-       unsigned long sta_reg;          /* STA scratch area */
+#if (defined(CONFIG_440) && !defined(CONFIG_440SP)) && defined(CONFIG_NET_MULTI)
+       unsigned long zmii;
+       unsigned long eoffset;
+
+       /* Need to find out which mdi port we're using */
+       zmii = in32 (ZMII_FER);
+
+       if (zmii & (ZMII_FER_MDI << ZMII_FER_V (0))) {
+               /* using port 0 */
+               eoffset = 0;
+       } 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))) {
+               /* using port 2 */
+               eoffset = 0x400;
+       } else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (3))) {
+               /* using port 3 */
+               eoffset = 0x600;
+       } else {
+               /* None of the mdi ports are enabled! */
+               /* enable port 0 */
+               zmii |= ZMII_FER_MDI << ZMII_FER_V (0);
+               out32 (ZMII_FER, zmii);
+               eoffset = 0;
+               /* need to soft reset port 0 */
+               zmii = in32 (EMAC_M0);
+               zmii |= EMAC_M0_SRST;
+               out32 (EMAC_M0, zmii);
+       }
+
+       return (eoffset);
+#else
+       return 0;
+#endif
+}
+
+
+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_STACR_OC) == 0) {
+       while ((in32 (EMAC_STACR + emac_reg) & EMAC_STACR_OC) == 0) {
                udelay (7);
                if (i > 5) {
-#if 0  /* test-only */
+#if 0
                        printf ("read err 1\n");
 #endif
                        return -1;
                }
                i++;
        }
-       sta_reg = reg;                          /* reg address */
+       sta_reg = reg;          /* reg address */
        /* set clock (50Mhz) and read flags */
+#if defined(CONFIG_440GX)
+       sta_reg |= EMAC_STACR_READ;
+#else
        sta_reg = (sta_reg | EMAC_STACR_READ) & ~EMAC_STACR_CLK_100MHZ;
-#ifdef CONFIG_PHY_CLK_FREQ
+#endif
+
+#if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX)
        sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ;
 #endif
        sta_reg = sta_reg | (addr << 5);        /* Phy address */
 
-       out32 (EMAC_STACR, sta_reg);
-#if 0  /* test-only */
+       out32 (EMAC_STACR + emac_reg, sta_reg);
+#if 0                          /* test-only */
        printf ("a2: write: EMAC_STACR=0x%0x\n", sta_reg);      /* test-only */
 #endif
 
-#ifdef CONFIG_PHY_CMD_DELAY
-       udelay (CONFIG_PHY_CMD_DELAY);          /* Intel LXT971A needs this */
-#endif
-       sta_reg = in32 (EMAC_STACR);
+       sta_reg = in32 (EMAC_STACR + emac_reg);
        i = 0;
        while ((sta_reg & EMAC_STACR_OC) == 0) {
                udelay (7);
                if (i > 5) {
-#if 0  /* test-only */
-                       printf ("read err 2\n");
-#endif
                        return -1;
                }
                i++;
-               sta_reg = in32 (EMAC_STACR);
+               sta_reg = in32 (EMAC_STACR + emac_reg);
        }
        if ((sta_reg & EMAC_STACR_PHYE) != 0) {
-#if 0  /* test-only */
-               printf ("read err 3\n");
-               printf ("a2: read: EMAC_STACR=0x%0lx, i=%d\n",
-                       sta_reg, (int) i);      /* test-only */
-#endif
                return -1;
        }
 
@@ -148,58 +201,60 @@ int miiphy_read (unsigned char addr, unsigned char reg,
        return 0;
 
 
-} /* phy_read */
+}                              /* phy_read */
 
 
 /***********************************************************/
-/* write a phy reg and return the value with a rc           */
+/* write a phy reg and return the value with a rc          */
 /***********************************************************/
 
-int miiphy_write (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 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;
 
-       while ((in32 (EMAC_STACR) & EMAC_STACR_OC) == 0) {
+       while ((in32 (EMAC_STACR + emac_reg) & EMAC_STACR_OC) == 0) {
                if (i > 5)
                        return -1;
                udelay (7);
                i++;
        }
        sta_reg = 0;
-       sta_reg = reg;                          /* reg address */
+       sta_reg = reg;          /* reg address */
        /* set clock (50Mhz) and read flags */
+#if defined(CONFIG_440GX)
+       sta_reg |= EMAC_STACR_WRITE;
+#else
        sta_reg = (sta_reg | EMAC_STACR_WRITE) & ~EMAC_STACR_CLK_100MHZ;
-#ifdef CONFIG_PHY_CLK_FREQ
-       sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ; /* Set clock frequency (PLB freq. dependend) */
+#endif
+
+#if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX)
+       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 */
        memcpy (&sta_reg, &value, 2);   /* put in data */
 
-       out32 (EMAC_STACR, sta_reg);
+       out32 (EMAC_STACR + emac_reg, sta_reg);
 
-#ifdef CONFIG_PHY_CMD_DELAY
-       udelay (CONFIG_PHY_CMD_DELAY);          /* Intel LXT971A needs this */
-#endif
        /* wait for completion */
        i = 0;
-       sta_reg = in32 (EMAC_STACR);
+       sta_reg = in32 (EMAC_STACR + emac_reg);
        while ((sta_reg & EMAC_STACR_OC) == 0) {
                udelay (7);
                if (i > 5)
                        return -1;
                i++;
-               sta_reg = in32 (EMAC_STACR);
+               sta_reg = in32 (EMAC_STACR + emac_reg);
        }
 
        if ((sta_reg & EMAC_STACR_PHYE) != 0)
                return -1;
        return 0;
 
-} /* phy_read */
-
-#endif /* CONFIG_405GP */
+}                              /* phy_write */
diff --git a/cpu/ppc4xx/miiphy_440.c b/cpu/ppc4xx/miiphy_440.c
deleted file mode 100644 (file)
index 6320fea..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/*-----------------------------------------------------------------------------+
-  |
-  |      This source code has been made available to you by IBM on an AS-IS
-  |      basis.  Anyone receiving this source is licensed under IBM
-  |      copyrights to use it in any way he or she deems fit, including
-  |      copying it, modifying it, compiling it, and redistributing it either
-  |      with or without modifications.  No license under IBM patents or
-  |      patent applications is to be implied by the copyright license.
-  |
-  |      Any user of this software should understand that IBM cannot provide
-  |      technical support for this software and will not be responsible for
-  |      any consequences resulting from the use of this software.
-  |
-  |      Any person who transfers this source code or any derivative work
-  |      must include the IBM copyright notice, this paragraph, and the
-  |      preceding two paragraphs in the transferred software.
-  |
-  |      COPYRIGHT   I B M   CORPORATION 1995
-  |      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-  +-----------------------------------------------------------------------------*/
-/*-----------------------------------------------------------------------------+
-  |
-  |  File Name:         miiphy.c
-  |
-  |  Function:  This module has utilities for accessing the MII PHY through
-  |           the EMAC3 macro.
-  |
-  |  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 <ppc_asm.tmpl>
-#include <commproc.h>
-#include <440gx_enet.h>
-#include <405_mal.h>
-#include <miiphy.h>
-
-#if defined(CONFIG_440) && defined(CONFIG_NET_MULTI)
-
-
-/***********************************************************/
-/* Dump out to the screen PHY regs                        */
-/***********************************************************/
-
-void miiphy_dump (unsigned char addr)
-{
-       unsigned long i;
-       unsigned short data;
-
-
-       for (i = 0; i < 0x1A; i++) {
-               if (miiphy_read (addr, i, &data)) {
-                       printf ("read error for reg %lx\n", i);
-                       return;
-               }
-               printf ("Phy reg %lx ==> %4x\n", i, data);
-
-               /* jump to the next set of regs */
-               if (i == 0x07)
-                       i = 0x0f;
-
-       }                       /* end for loop */
-}                              /* end dump */
-
-
-/***********************************************************/
-/* (Re)start autonegotiation                              */
-/***********************************************************/
-int phy_setup_aneg (unsigned char addr)
-{
-       unsigned short ctl, adv;
-
-       /* Setup standard advertise */
-       miiphy_read (addr, PHY_ANAR, &adv);
-       adv |= (PHY_ANLPAR_ACK | PHY_ANLPAR_RF | PHY_ANLPAR_T4 |
-               PHY_ANLPAR_TXFD | PHY_ANLPAR_TX | PHY_ANLPAR_10FD |
-               PHY_ANLPAR_10);
-       miiphy_write (addr, PHY_ANAR, adv);
-
-       /* Start/Restart aneg */
-       miiphy_read (addr, PHY_BMCR, &ctl);
-       ctl |= (PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
-       miiphy_write (addr, PHY_BMCR, ctl);
-
-       return 0;
-}
-
-
-/***********************************************************/
-/* read a phy reg and return the value with a rc          */
-/***********************************************************/
-unsigned int miiphy_getemac_offset (void)
-{
-       unsigned long zmii;
-       unsigned long eoffset;
-
-       /* Need to find out which mdi port we're using */
-       zmii = in32 (ZMII_FER);
-
-       if (zmii & (ZMII_FER_MDI << ZMII_FER_V (0))) {
-               /* using port 0 */
-               eoffset = 0;
-       } 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))) {
-               /* using port 2 */
-               eoffset = 0x400;
-       } else if (zmii & (ZMII_FER_MDI << ZMII_FER_V (3))) {
-               /* using port 3 */
-               eoffset = 0x600;
-       } else {
-               /* None of the mdi ports are enabled! */
-               /* enable port 0 */
-               zmii |= ZMII_FER_MDI << ZMII_FER_V (0);
-               out32 (ZMII_FER, zmii);
-               eoffset = 0;
-               /* need to soft reset port 0 */
-               zmii = in32 (EMAC_M0);
-               zmii |= EMAC_M0_SRST;
-               out32 (EMAC_M0, zmii);
-       }
-
-       return (eoffset);
-
-}
-
-
-int miiphy_read (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) == 0) {
-               udelay (7);
-               if (i > 5) {
-#if 0
-                       printf ("read err 1\n");
-#endif
-                       return -1;
-               }
-               i++;
-       }
-       sta_reg = reg;          /* reg address */
-       /* set clock (50Mhz) and read flags */
-#if defined(CONFIG_440GX)
-       sta_reg |= EMAC_STACR_READ;
-#else
-       sta_reg = (sta_reg | EMAC_STACR_READ) & ~EMAC_STACR_CLK_100MHZ;
-#endif
-
-#if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX)
-       sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ;
-#endif
-       sta_reg = sta_reg | (addr << 5);        /* Phy address */
-
-       out32 (EMAC_STACR + emac_reg, sta_reg);
-#if 0                          /* test-only */
-       printf ("a2: write: EMAC_STACR=0x%0x\n", sta_reg);      /* test-only */
-#endif
-
-       sta_reg = in32 (EMAC_STACR + emac_reg);
-       i = 0;
-       while ((sta_reg & EMAC_STACR_OC) == 0) {
-               udelay (7);
-               if (i > 5) {
-                       return -1;
-               }
-               i++;
-               sta_reg = in32 (EMAC_STACR + emac_reg);
-       }
-       if ((sta_reg & EMAC_STACR_PHYE) != 0) {
-               return -1;
-       }
-
-       *value = *(short *) (&sta_reg);
-       return 0;
-
-
-}                              /* phy_read */
-
-
-/***********************************************************/
-/* write a phy reg and return the value with a rc          */
-/***********************************************************/
-
-int miiphy_write (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;
-
-       while ((in32 (EMAC_STACR + emac_reg) & EMAC_STACR_OC) == 0) {
-               if (i > 5)
-                       return -1;
-               udelay (7);
-               i++;
-       }
-       sta_reg = 0;
-       sta_reg = reg;          /* reg address */
-       /* set clock (50Mhz) and read flags */
-#if defined(CONFIG_440GX)
-       sta_reg |= EMAC_STACR_WRITE;
-#else
-       sta_reg = (sta_reg | EMAC_STACR_WRITE) & ~EMAC_STACR_CLK_100MHZ;
-#endif
-
-#if defined(CONFIG_PHY_CLK_FREQ) && !defined(CONFIG_440GX)
-       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 */
-       memcpy (&sta_reg, &value, 2);   /* put in data */
-
-       out32 (EMAC_STACR + emac_reg, sta_reg);
-
-       /* wait for completion */
-       i = 0;
-       sta_reg = in32 (EMAC_STACR + emac_reg);
-       while ((sta_reg & EMAC_STACR_OC) == 0) {
-               udelay (7);
-               if (i > 5)
-                       return -1;
-               i++;
-               sta_reg = in32 (EMAC_STACR + emac_reg);
-       }
-
-       if ((sta_reg & EMAC_STACR_PHYE) != 0)
-               return -1;
-       return 0;
-
-}                              /* phy_write */
-
-#endif /* CONFIG_405GP */
index d1ad21203da11bbf93c9a0eb6f54b03d8c38d71c..e9548cdcf3dff7fb1fbe464b6dd245ef2a3da5ad 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
  * (C) Copyright 2002-2004
  * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
  *
@@ -39,6 +42,7 @@ struct sdram_conf_s {
 
 typedef struct sdram_conf_s sdram_conf_t;
 
+#ifndef CFG_SDRAM_TABLE
 sdram_conf_t mb0cf[] = {
        {(128 << 20), 0x000A4001},      /* (0-128MB) Address Mode 3, 13x10(4) */
        {(64 << 20),  0x00084001},      /* (0-64MB) Address Mode 3, 13x9(4)   */
@@ -46,9 +50,18 @@ sdram_conf_t mb0cf[] = {
        {(16 << 20),  0x00046001},      /* (0-16MB) Address Mode 4, 12x8(4)   */
        {(4 << 20),   0x00008001},      /* (0-4MB) Address Mode 5, 11x8(2)    */
 };
+#else
+sdram_conf_t mb0cf[] = CFG_SDRAM_TABLE;
+#endif
+
 #define        N_MB0CF (sizeof(mb0cf) / sizeof(mb0cf[0]))
 
 
+#ifndef CONFIG_440
+
+/*
+ * Autodetect onboard SDRAM on 405 platforms
+ */
 void sdram_init(void)
 {
        ulong sdtr1;
@@ -105,4 +118,61 @@ void sdram_init(void)
        }
 }
 
+#else /* CONFIG_440 */
+
+/*
+ * Autodetect onboard DDR SDRAM on 440 platforms
+ *
+ * NOTE: Some of the hardcoded values are hardware dependant,
+ *       so this should be extended for other future boards
+ *       using this routine!
+ */
+long int initdram(int board_type)
+{
+       int i;
+
+       for (i=0; i<N_MB0CF; i++) {
+               /*
+                * Disable memory controller.
+                */
+               mtsdram(mem_cfg0, 0x00000000);
+
+               /*
+                * 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, 0x00000000); /* wrcp=0 dcd=0                */
+               mtsdram(mem_clktr, 0x40000000); /* clkp=1 (90 deg wr) dcdt=0    */
+
+               /*
+                * Following for CAS Latency = 2.5 @ 133 MHz PLB
+                */
+               mtsdram(mem_b0cr, mb0cf[i].reg);
+               mtsdram(mem_tr0, 0x41094012);
+               mtsdram(mem_tr1, 0x80800800);   /* SS=T2 SL=STAGE 3 CD=1 CT=0x00*/
+               mtsdram(mem_rtr, 0x7e000000);   /* Interval 15.20µs @ 133MHz 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       */
+               udelay(10000);
+
+               if (get_ram_size(0, mb0cf[i].size) == mb0cf[i].size) {
+                       /*
+                        * OK, size detected -> all done
+                        */
+                       return mb0cf[i].size;
+               }
+       }
+
+       return 0;                               /* nothing found !              */
+}
+
+#endif /* CONFIG_440 */
+
 #endif /* CONFIG_SDRAM_BANK0 */
index 8cf7dab3a29e36fe82abe70c70ab62acce397372..e7f6bcbe1e8bed440382e9556d272ba3c7eda1c0 100644 (file)
@@ -276,7 +276,12 @@ int serial_tstc ()
 #define UART0_BASE  CFG_PERIPHERAL_BASE + 0x00000200
 #define UART1_BASE  CFG_PERIPHERAL_BASE + 0x00000300
 #endif
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+
+#if defined(CONFIG_440SP)
+#define UART2_BASE  CFG_PERIPHERAL_BASE + 0x00000600
+#endif
+
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
 #define CR0_MASK        0xdfffffff
 #define CR0_EXTCLK_ENA  0x00800000
 #define CR0_UDIV_POS    0
@@ -306,21 +311,21 @@ int serial_tstc ()
 #if defined(CONFIG_UART1_CONSOLE)
 #define ACTING_UART0_BASE      UART1_BASE
 #define ACTING_UART1_BASE      UART0_BASE
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
 #define UART0_SDR           sdr_uart1
 #define UART1_SDR           sdr_uart0
 #endif /* CONFIG_440GX */
 #else
 #define ACTING_UART0_BASE      UART0_BASE
 #define ACTING_UART1_BASE      UART1_BASE
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
 #define UART0_SDR           sdr_uart0
 #define UART1_SDR           sdr_uart1
 #endif /* CONFIG_440GX */
 #endif
 
 #if defined(CONFIG_405EP) && defined(CFG_EXT_SERIAL_CLOCK)
-#error "External serial clock not supported on IBM PPC405EP!"
+#error "External serial clock not supported on AMCC PPC405EP!"
 #endif
 
 #define UART_RBR    0x00
@@ -436,7 +441,7 @@ int serial_init(void)
        unsigned long tmp;
 #endif
 
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
 #if defined(CONFIG_SERIAL_MULTI)
        if (UART0_BASE == dev_base) {
                mfsdr(UART0_SDR,reg);
@@ -465,7 +470,7 @@ int serial_init(void)
        serial_divs (gd->baudrate, &udiv, &bdiv);
 #endif
 
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
        reg |= udiv << CR0_UDIV_POS;    /* set the UART divisor */
 #if defined(CONFIG_SERIAL_MULTI)
        if (UART0_BASE == dev_base) {
index a8cfcd4e75888129f2f1555bdd1e1aaa7cd85299..ebd5f3998f3998ea35caeabd568df049c0e14f99 100644 (file)
@@ -14,7 +14,7 @@
  *
  * (C) Copyright 2002
  * Jun Gu, Artesyn Technology, jung@artesyncp.com
- * Support for IBM 440 based on OpenBIOS draminit.c from IBM.
+ * Support for AMCC 440 based on OpenBIOS draminit.c from IBM.
  *
  * (C) Copyright 2005
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
 /*
  * Set default values
  */
-#ifndef        CFG_I2C_SPEED
-#define        CFG_I2C_SPEED   50000
+#ifndef CFG_I2C_SPEED
+#define CFG_I2C_SPEED  50000
 #endif
 
-#ifndef        CFG_I2C_SLAVE
-#define        CFG_I2C_SLAVE   0xFE
+#ifndef CFG_I2C_SLAVE
+#define CFG_I2C_SLAVE  0xFE
 #endif
 
-#define ONE_BILLION         1000000000
+#define ONE_BILLION    1000000000
 
-#ifndef  CONFIG_440              /* for 405 WALNUT/SYCAMORE/BUBINGA boards */
+#ifndef         CONFIG_440             /* for 405 WALNUT/SYCAMORE/BUBINGA boards */
 
-#define  SDRAM0_CFG_DCE          0x80000000
-#define  SDRAM0_CFG_SRE          0x40000000
-#define  SDRAM0_CFG_PME          0x20000000
-#define  SDRAM0_CFG_MEMCHK       0x10000000
-#define  SDRAM0_CFG_REGEN        0x08000000
-#define  SDRAM0_CFG_ECCDD        0x00400000
-#define  SDRAM0_CFG_EMDULR       0x00200000
-#define  SDRAM0_CFG_DRW_SHIFT    (31-6)
-#define  SDRAM0_CFG_BRPF_SHIFT   (31-8)
+#define         SDRAM0_CFG_DCE         0x80000000
+#define         SDRAM0_CFG_SRE         0x40000000
+#define         SDRAM0_CFG_PME         0x20000000
+#define         SDRAM0_CFG_MEMCHK      0x10000000
+#define         SDRAM0_CFG_REGEN       0x08000000
+#define         SDRAM0_CFG_ECCDD       0x00400000
+#define         SDRAM0_CFG_EMDULR      0x00200000
+#define         SDRAM0_CFG_DRW_SHIFT   (31-6)
+#define         SDRAM0_CFG_BRPF_SHIFT  (31-8)
 
-#define  SDRAM0_TR_CASL_SHIFT    (31-8)
-#define  SDRAM0_TR_PTA_SHIFT     (31-13)
-#define  SDRAM0_TR_CTP_SHIFT     (31-15)
-#define  SDRAM0_TR_LDF_SHIFT     (31-17)
-#define  SDRAM0_TR_RFTA_SHIFT    (31-29)
-#define  SDRAM0_TR_RCD_SHIFT     (31-31)
+#define         SDRAM0_TR_CASL_SHIFT   (31-8)
+#define         SDRAM0_TR_PTA_SHIFT    (31-13)
+#define         SDRAM0_TR_CTP_SHIFT    (31-15)
+#define         SDRAM0_TR_LDF_SHIFT    (31-17)
+#define         SDRAM0_TR_RFTA_SHIFT   (31-29)
+#define         SDRAM0_TR_RCD_SHIFT    (31-31)
 
-#define  SDRAM0_RTR_SHIFT        (31-15)
-#define  SDRAM0_ECCCFG_SHIFT     (31-11)
+#define         SDRAM0_RTR_SHIFT       (31-15)
+#define         SDRAM0_ECCCFG_SHIFT    (31-11)
 
 /* SDRAM0_CFG enable macro  */
 #define SDRAM0_CFG_BRPF(x) ( ( x & 0x3)<< SDRAM0_CFG_BRPF_SHIFT )
 
-#define SDRAM0_BXCR_SZ_MASK  0x000e0000
-#define SDRAM0_BXCR_AM_MASK  0x0000e000
+#define SDRAM0_BXCR_SZ_MASK    0x000e0000
+#define SDRAM0_BXCR_AM_MASK    0x0000e000
 
-#define SDRAM0_BXCR_SZ_SHIFT (31-14)
-#define SDRAM0_BXCR_AM_SHIFT (31-18)
+#define SDRAM0_BXCR_SZ_SHIFT   (31-14)
+#define SDRAM0_BXCR_AM_SHIFT   (31-18)
 
-#define SDRAM0_BXCR_SZ(x)  ( (( x << SDRAM0_BXCR_SZ_SHIFT) & SDRAM0_BXCR_SZ_MASK) )
-#define SDRAM0_BXCR_AM(x)  ( (( x << SDRAM0_BXCR_AM_SHIFT) & SDRAM0_BXCR_AM_MASK) )
+#define SDRAM0_BXCR_SZ(x)      ( (( x << SDRAM0_BXCR_SZ_SHIFT) & SDRAM0_BXCR_SZ_MASK) )
+#define SDRAM0_BXCR_AM(x)      ( (( x << SDRAM0_BXCR_AM_SHIFT) & SDRAM0_BXCR_AM_MASK) )
 
 #ifdef CONFIG_SPDDRAM_SILENT
 # define SPD_ERR(x) do { return 0; } while (0)
@@ -108,7 +108,7 @@ int spd_read(uint addr);
  * This function is reading data from the DIMM module EEPROM over the SPD bus
  * and uses that to program the sdram controller.
  *
- * This works on boards that has the same schematics that the IBM walnut has.
+ * This works on boards that has the same schematics that the AMCC walnut has.
  *
  * Input: null for default I2C spd functions or a pointer to a custom function
  * returning spd_data.
@@ -175,7 +175,7 @@ long int spd_sdram(int(read_spd)(uint addr))
         * data from DIMM:
         * 27   IN Row Precharge Time ( t RP)
         * 29   MIN RAS to CAS Delay ( t RCD)
-        * 127   Component and Clock Detail ,clk0-clk3, junction temp, CAS
+        * 127   Component and Clock Detail ,clk0-clk3, junction temp, CAS
         * -------------------------------------------------------------------*/
 
        /*
@@ -184,18 +184,18 @@ long int spd_sdram(int(read_spd)(uint addr))
         */
 
        tmp = read_spd(127) & 0x6;
-       if (tmp == 0x02){          /* only cas = 2 supported */
+       if (tmp == 0x02) {              /* only cas = 2 supported */
                min_cas = 2;
-/*               t_ck = read_spd(9); */
-/*               t_ac = read_spd(10); */
-       } else if (tmp == 0x04) {         /* only cas = 3 supported */
+/*             t_ck = read_spd(9); */
+/*             t_ac = read_spd(10); */
+       } else if (tmp == 0x04) {       /* only cas = 3 supported */
                min_cas = 3;
-/*               t_ck = read_spd(9); */
-/*               t_ac = read_spd(10); */
-       } else if (tmp == 0x06) {         /* 2,3 supported, so use 2 */
+/*             t_ck = read_spd(9); */
+/*             t_ac = read_spd(10); */
+       } else if (tmp == 0x06) {       /* 2,3 supported, so use 2 */
                min_cas = 2;
-/*               t_ck = read_spd(23); */
-/*               t_ac = read_spd(24); */
+/*             t_ck = read_spd(23); */
+/*             t_ac = read_spd(24); */
        } else {
                SPD_ERR("SDRAM - unsupported CAS latency \n");
        }
@@ -263,7 +263,7 @@ long int spd_sdram(int(read_spd)(uint addr))
        }
        /* convert from nsec to bus cycles */
        tmp = (tmp * 10) / bus_period_x_10;
-       sdram0_rtr = (tmp & 0x3ff8) <<  SDRAM0_RTR_SHIFT;
+       sdram0_rtr = (tmp & 0x3ff8) <<  SDRAM0_RTR_SHIFT;
 
        /*------------------------------------------------------------------
         * determine the number of banks used
@@ -292,7 +292,7 @@ long int spd_sdram(int(read_spd)(uint addr))
        else if (tmp==4)
                bank_cnt *= 4;
        else
-               bank_cnt = 8;           /* 8 is an error code */
+               bank_cnt = 8;           /* 8 is an error code */
 
        if (bank_cnt > 4)       /* we only have 4 banks to work with */
                SPD_ERR("SDRAM - unsupported module rows for this width\n");
@@ -323,7 +323,7 @@ long int spd_sdram(int(read_spd)(uint addr))
        total_size *= read_spd(5);      /* mult by module rows (dimm sides) */
 
        /*------------------------------------------------------------------
-        * map  rows * cols * banks to a mode
+        * map  rows * cols * banks to a mode
         * -------------------------------------------------------------------*/
 
        switch (row) {
@@ -388,9 +388,9 @@ long int spd_sdram(int(read_spd)(uint addr))
        bank_size = total_size / bank_cnt;
        /* convert bank size to bank size code for ppc4xx
           by takeing log2(bank_size) - 22 */
-       tmp = bank_size;                /* start with tmp = bank_size */
+       tmp = bank_size;                /* start with tmp = bank_size */
        bank_code = 0;                  /* and bank_code = 0 */
-       while (tmp > 1) {               /* this takes log2 of tmp */
+       while (tmp > 1) {               /* this takes log2 of tmp */
                bank_code++;            /* and stores result in bank_code */
                tmp = tmp >> 1;
        }                               /* bank_code is now log2(bank_size) */
@@ -444,7 +444,7 @@ long int spd_sdram(int(read_spd)(uint addr))
 #endif
        mtsdram0( mem_sdtr1 , sdram0_tr );
 
-       /* SDRAM have a power on delay,  500 micro should do */
+       /* SDRAM have a power on delay,  500 micro should do */
        udelay(500);
        sdram0_cfg = SDRAM0_CFG_DCE | SDRAM0_CFG_BRPF(1) | SDRAM0_CFG_ECCDD | SDRAM0_CFG_EMDULR;
        if (ecc_on)
@@ -456,7 +456,7 @@ long int spd_sdram(int(read_spd)(uint addr))
 
 int spd_read(uint addr)
 {
-       char data[2];
+       uchar data[2];
 
        if (i2c_read(SPD_EEPROM_ADDRESS, addr, 1, data, 1) == 0)
                return (int)data[0];
@@ -464,172 +464,172 @@ int spd_read(uint addr)
                return 0;
 }
 
-#else                             /* CONFIG_440 */
+#else /* CONFIG_440 */
 
 /*-----------------------------------------------------------------------------
   |  Memory Controller Options 0
   +-----------------------------------------------------------------------------*/
-#define SDRAM_CFG0_DCEN           0x80000000  /* SDRAM Controller Enable      */
-#define SDRAM_CFG0_MCHK_MASK      0x30000000  /* Memory data errchecking mask */
-#define SDRAM_CFG0_MCHK_NON       0x00000000  /* No ECC generation            */
-#define SDRAM_CFG0_MCHK_GEN       0x20000000  /* ECC generation               */
-#define SDRAM_CFG0_MCHK_CHK       0x30000000  /* ECC generation and checking  */
-#define SDRAM_CFG0_RDEN           0x08000000  /* Registered DIMM enable       */
-#define SDRAM_CFG0_PMUD           0x04000000  /* Page management unit         */
-#define SDRAM_CFG0_DMWD_MASK      0x02000000  /* DRAM width mask              */
-#define SDRAM_CFG0_DMWD_32        0x00000000  /* 32 bits                      */
-#define SDRAM_CFG0_DMWD_64        0x02000000  /* 64 bits                      */
-#define SDRAM_CFG0_UIOS_MASK      0x00C00000  /* Unused IO State              */
-#define SDRAM_CFG0_PDP            0x00200000  /* Page deallocation policy     */
+#define SDRAM_CFG0_DCEN                0x80000000      /* SDRAM Controller Enable      */
+#define SDRAM_CFG0_MCHK_MASK   0x30000000      /* Memory data errchecking mask */
+#define SDRAM_CFG0_MCHK_NON    0x00000000      /* No ECC generation            */
+#define SDRAM_CFG0_MCHK_GEN    0x20000000      /* ECC generation               */
+#define SDRAM_CFG0_MCHK_CHK    0x30000000      /* ECC generation and checking  */
+#define SDRAM_CFG0_RDEN                0x08000000      /* Registered DIMM enable       */
+#define SDRAM_CFG0_PMUD                0x04000000      /* Page management unit         */
+#define SDRAM_CFG0_DMWD_MASK   0x02000000      /* DRAM width mask              */
+#define SDRAM_CFG0_DMWD_32     0x00000000      /* 32 bits                      */
+#define SDRAM_CFG0_DMWD_64     0x02000000      /* 64 bits                      */
+#define SDRAM_CFG0_UIOS_MASK   0x00C00000      /* Unused IO State              */
+#define SDRAM_CFG0_PDP         0x00200000      /* Page deallocation policy     */
 
 /*-----------------------------------------------------------------------------
   |  Memory Controller Options 1
   +-----------------------------------------------------------------------------*/
-#define SDRAM_CFG1_SRE            0x80000000  /* Self-Refresh Entry           */
-#define SDRAM_CFG1_PMEN           0x40000000  /* Power Management Enable      */
+#define SDRAM_CFG1_SRE         0x80000000      /* Self-Refresh Entry           */
+#define SDRAM_CFG1_PMEN                0x40000000      /* Power Management Enable      */
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM DEVPOT Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_DEVOPT_DLL          0x80000000
-#define SDRAM_DEVOPT_DS           0x40000000
+#define SDRAM_DEVOPT_DLL       0x80000000
+#define SDRAM_DEVOPT_DS                0x40000000
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM MCSTS Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_MCSTS_MRSC          0x80000000
-#define SDRAM_MCSTS_SRMS          0x40000000
-#define SDRAM_MCSTS_CIS           0x20000000
+#define SDRAM_MCSTS_MRSC       0x80000000
+#define SDRAM_MCSTS_SRMS       0x40000000
+#define SDRAM_MCSTS_CIS                0x20000000
 
 /*-----------------------------------------------------------------------------
   |  SDRAM Refresh Timer Register
   +-----------------------------------------------------------------------------*/
-#define SDRAM_RTR_RINT_MASK       0xFFFF0000
+#define SDRAM_RTR_RINT_MASK      0xFFFF0000
 #define SDRAM_RTR_RINT_ENCODE(n)  (((n) << 16) & SDRAM_RTR_RINT_MASK)
-#define sdram_HZ_to_ns(hertz)     (1000000000/(hertz))
+#define sdram_HZ_to_ns(hertz)    (1000000000/(hertz))
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM UABus Base Address Reg
   +-----------------------------------------------------------------------------*/
-#define SDRAM_UABBA_UBBA_MASK     0x0000000F
+#define SDRAM_UABBA_UBBA_MASK  0x0000000F
 
 /*-----------------------------------------------------------------------------+
   |  Memory Bank 0-7 configuration
   +-----------------------------------------------------------------------------*/
-#define SDRAM_BXCR_SDBA_MASK      0xff800000      /* Base address             */
-#define SDRAM_BXCR_SDSZ_MASK      0x000e0000      /* Size                     */
-#define SDRAM_BXCR_SDSZ_8         0x00020000      /*   8M                     */
-#define SDRAM_BXCR_SDSZ_16        0x00040000      /*  16M                     */
-#define SDRAM_BXCR_SDSZ_32        0x00060000      /*  32M                     */
-#define SDRAM_BXCR_SDSZ_64        0x00080000      /*  64M                     */
-#define SDRAM_BXCR_SDSZ_128       0x000a0000      /* 128M                     */
-#define SDRAM_BXCR_SDSZ_256       0x000c0000      /* 256M                     */
-#define SDRAM_BXCR_SDSZ_512       0x000e0000      /* 512M                     */
-#define SDRAM_BXCR_SDAM_MASK      0x0000e000      /* Addressing mode          */
-#define SDRAM_BXCR_SDAM_1         0x00000000      /*   Mode 1                 */
-#define SDRAM_BXCR_SDAM_2         0x00002000      /*   Mode 2                 */
-#define SDRAM_BXCR_SDAM_3         0x00004000      /*   Mode 3                 */
-#define SDRAM_BXCR_SDAM_4         0x00006000      /*   Mode 4                 */
-#define SDRAM_BXCR_SDBE           0x00000001      /* Memory Bank Enable       */
+#define SDRAM_BXCR_SDBA_MASK   0xff800000        /* Base address             */
+#define SDRAM_BXCR_SDSZ_MASK   0x000e0000        /* Size                     */
+#define SDRAM_BXCR_SDSZ_8      0x00020000        /*   8M                     */
+#define SDRAM_BXCR_SDSZ_16     0x00040000        /*  16M                     */
+#define SDRAM_BXCR_SDSZ_32     0x00060000        /*  32M                     */
+#define SDRAM_BXCR_SDSZ_64     0x00080000        /*  64M                     */
+#define SDRAM_BXCR_SDSZ_128    0x000a0000        /* 128M                     */
+#define SDRAM_BXCR_SDSZ_256    0x000c0000        /* 256M                     */
+#define SDRAM_BXCR_SDSZ_512    0x000e0000        /* 512M                     */
+#define SDRAM_BXCR_SDAM_MASK   0x0000e000        /* Addressing mode          */
+#define SDRAM_BXCR_SDAM_1      0x00000000        /*   Mode 1                 */
+#define SDRAM_BXCR_SDAM_2      0x00002000        /*   Mode 2                 */
+#define SDRAM_BXCR_SDAM_3      0x00004000        /*   Mode 3                 */
+#define SDRAM_BXCR_SDAM_4      0x00006000        /*   Mode 4                 */
+#define SDRAM_BXCR_SDBE                0x00000001        /* Memory Bank Enable       */
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM TR0 Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_TR0_SDWR_MASK       0x80000000
-#define   SDRAM_TR0_SDWR_2_CLK    0x00000000
-#define   SDRAM_TR0_SDWR_3_CLK    0x80000000
-#define SDRAM_TR0_SDWD_MASK       0x40000000
-#define   SDRAM_TR0_SDWD_0_CLK    0x00000000
-#define   SDRAM_TR0_SDWD_1_CLK    0x40000000
-#define SDRAM_TR0_SDCL_MASK       0x01800000
-#define   SDRAM_TR0_SDCL_2_0_CLK  0x00800000
-#define   SDRAM_TR0_SDCL_2_5_CLK  0x01000000
-#define   SDRAM_TR0_SDCL_3_0_CLK  0x01800000
-#define SDRAM_TR0_SDPA_MASK       0x000C0000
-#define   SDRAM_TR0_SDPA_2_CLK    0x00040000
-#define   SDRAM_TR0_SDPA_3_CLK    0x00080000
-#define   SDRAM_TR0_SDPA_4_CLK    0x000C0000
-#define SDRAM_TR0_SDCP_MASK       0x00030000
-#define   SDRAM_TR0_SDCP_2_CLK    0x00000000
-#define   SDRAM_TR0_SDCP_3_CLK    0x00010000
-#define   SDRAM_TR0_SDCP_4_CLK    0x00020000
-#define   SDRAM_TR0_SDCP_5_CLK    0x00030000
-#define SDRAM_TR0_SDLD_MASK       0x0000C000
-#define   SDRAM_TR0_SDLD_1_CLK    0x00000000
-#define   SDRAM_TR0_SDLD_2_CLK    0x00004000
-#define SDRAM_TR0_SDRA_MASK       0x0000001C
-#define   SDRAM_TR0_SDRA_6_CLK    0x00000000
-#define   SDRAM_TR0_SDRA_7_CLK    0x00000004
-#define   SDRAM_TR0_SDRA_8_CLK    0x00000008
-#define   SDRAM_TR0_SDRA_9_CLK    0x0000000C
-#define   SDRAM_TR0_SDRA_10_CLK   0x00000010
-#define   SDRAM_TR0_SDRA_11_CLK   0x00000014
-#define   SDRAM_TR0_SDRA_12_CLK   0x00000018
-#define   SDRAM_TR0_SDRA_13_CLK   0x0000001C
-#define SDRAM_TR0_SDRD_MASK       0x00000003
-#define   SDRAM_TR0_SDRD_2_CLK    0x00000001
-#define   SDRAM_TR0_SDRD_3_CLK    0x00000002
-#define   SDRAM_TR0_SDRD_4_CLK    0x00000003
+#define SDRAM_TR0_SDWR_MASK    0x80000000
+#define         SDRAM_TR0_SDWR_2_CLK   0x00000000
+#define         SDRAM_TR0_SDWR_3_CLK   0x80000000
+#define SDRAM_TR0_SDWD_MASK    0x40000000
+#define         SDRAM_TR0_SDWD_0_CLK   0x00000000
+#define         SDRAM_TR0_SDWD_1_CLK   0x40000000
+#define SDRAM_TR0_SDCL_MASK    0x01800000
+#define         SDRAM_TR0_SDCL_2_0_CLK 0x00800000
+#define         SDRAM_TR0_SDCL_2_5_CLK 0x01000000
+#define         SDRAM_TR0_SDCL_3_0_CLK 0x01800000
+#define SDRAM_TR0_SDPA_MASK    0x000C0000
+#define         SDRAM_TR0_SDPA_2_CLK   0x00040000
+#define         SDRAM_TR0_SDPA_3_CLK   0x00080000
+#define         SDRAM_TR0_SDPA_4_CLK   0x000C0000
+#define SDRAM_TR0_SDCP_MASK    0x00030000
+#define         SDRAM_TR0_SDCP_2_CLK   0x00000000
+#define         SDRAM_TR0_SDCP_3_CLK   0x00010000
+#define         SDRAM_TR0_SDCP_4_CLK   0x00020000
+#define         SDRAM_TR0_SDCP_5_CLK   0x00030000
+#define SDRAM_TR0_SDLD_MASK    0x0000C000
+#define         SDRAM_TR0_SDLD_1_CLK   0x00000000
+#define         SDRAM_TR0_SDLD_2_CLK   0x00004000
+#define SDRAM_TR0_SDRA_MASK    0x0000001C
+#define         SDRAM_TR0_SDRA_6_CLK   0x00000000
+#define         SDRAM_TR0_SDRA_7_CLK   0x00000004
+#define         SDRAM_TR0_SDRA_8_CLK   0x00000008
+#define         SDRAM_TR0_SDRA_9_CLK   0x0000000C
+#define         SDRAM_TR0_SDRA_10_CLK  0x00000010
+#define         SDRAM_TR0_SDRA_11_CLK  0x00000014
+#define         SDRAM_TR0_SDRA_12_CLK  0x00000018
+#define         SDRAM_TR0_SDRA_13_CLK  0x0000001C
+#define SDRAM_TR0_SDRD_MASK    0x00000003
+#define         SDRAM_TR0_SDRD_2_CLK   0x00000001
+#define         SDRAM_TR0_SDRD_3_CLK   0x00000002
+#define         SDRAM_TR0_SDRD_4_CLK   0x00000003
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM TR1 Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_TR1_RDSS_MASK         0xC0000000
-#define   SDRAM_TR1_RDSS_TR0        0x00000000
-#define   SDRAM_TR1_RDSS_TR1        0x40000000
-#define   SDRAM_TR1_RDSS_TR2        0x80000000
-#define   SDRAM_TR1_RDSS_TR3        0xC0000000
-#define SDRAM_TR1_RDSL_MASK         0x00C00000
-#define   SDRAM_TR1_RDSL_STAGE1     0x00000000
-#define   SDRAM_TR1_RDSL_STAGE2     0x00400000
-#define   SDRAM_TR1_RDSL_STAGE3     0x00800000
-#define SDRAM_TR1_RDCD_MASK         0x00000800
-#define   SDRAM_TR1_RDCD_RCD_0_0    0x00000000
-#define   SDRAM_TR1_RDCD_RCD_1_2    0x00000800
-#define SDRAM_TR1_RDCT_MASK         0x000001FF
-#define   SDRAM_TR1_RDCT_ENCODE(x)  (((x) << 0) & SDRAM_TR1_RDCT_MASK)
-#define   SDRAM_TR1_RDCT_DECODE(x)  (((x) & SDRAM_TR1_RDCT_MASK) >> 0)
-#define   SDRAM_TR1_RDCT_MIN        0x00000000
-#define   SDRAM_TR1_RDCT_MAX        0x000001FF
+#define SDRAM_TR1_RDSS_MASK    0xC0000000
+#define         SDRAM_TR1_RDSS_TR0     0x00000000
+#define         SDRAM_TR1_RDSS_TR1     0x40000000
+#define         SDRAM_TR1_RDSS_TR2     0x80000000
+#define         SDRAM_TR1_RDSS_TR3     0xC0000000
+#define SDRAM_TR1_RDSL_MASK    0x00C00000
+#define         SDRAM_TR1_RDSL_STAGE1  0x00000000
+#define         SDRAM_TR1_RDSL_STAGE2  0x00400000
+#define         SDRAM_TR1_RDSL_STAGE3  0x00800000
+#define SDRAM_TR1_RDCD_MASK    0x00000800
+#define         SDRAM_TR1_RDCD_RCD_0_0 0x00000000
+#define         SDRAM_TR1_RDCD_RCD_1_2 0x00000800
+#define SDRAM_TR1_RDCT_MASK    0x000001FF
+#define         SDRAM_TR1_RDCT_ENCODE(x)  (((x) << 0) & SDRAM_TR1_RDCT_MASK)
+#define         SDRAM_TR1_RDCT_DECODE(x)  (((x) & SDRAM_TR1_RDCT_MASK) >> 0)
+#define         SDRAM_TR1_RDCT_MIN     0x00000000
+#define         SDRAM_TR1_RDCT_MAX     0x000001FF
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM WDDCTR Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_WDDCTR_WRCP_MASK       0xC0000000
-#define   SDRAM_WDDCTR_WRCP_0DEG     0x00000000
-#define   SDRAM_WDDCTR_WRCP_90DEG    0x40000000
-#define   SDRAM_WDDCTR_WRCP_180DEG   0x80000000
-#define SDRAM_WDDCTR_DCD_MASK        0x000001FF
+#define SDRAM_WDDCTR_WRCP_MASK 0xC0000000
+#define         SDRAM_WDDCTR_WRCP_0DEG   0x00000000
+#define         SDRAM_WDDCTR_WRCP_90DEG  0x40000000
+#define         SDRAM_WDDCTR_WRCP_180DEG 0x80000000
+#define SDRAM_WDDCTR_DCD_MASK  0x000001FF
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM CLKTR Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_CLKTR_CLKP_MASK       0xC0000000
-#define   SDRAM_CLKTR_CLKP_0DEG     0x00000000
-#define   SDRAM_CLKTR_CLKP_90DEG    0x40000000
-#define   SDRAM_CLKTR_CLKP_180DEG   0x80000000
-#define SDRAM_CLKTR_DCDT_MASK       0x000001FF
+#define SDRAM_CLKTR_CLKP_MASK  0xC0000000
+#define         SDRAM_CLKTR_CLKP_0DEG    0x00000000
+#define         SDRAM_CLKTR_CLKP_90DEG   0x40000000
+#define         SDRAM_CLKTR_CLKP_180DEG  0x80000000
+#define SDRAM_CLKTR_DCDT_MASK  0x000001FF
 
 /*-----------------------------------------------------------------------------+
   |  SDRAM DLYCAL Options
   +-----------------------------------------------------------------------------*/
-#define SDRAM_DLYCAL_DLCV_MASK      0x000003FC
-#define   SDRAM_DLYCAL_DLCV_ENCODE(x) (((x)<<2) & SDRAM_DLYCAL_DLCV_MASK)
-#define   SDRAM_DLYCAL_DLCV_DECODE(x) (((x) & SDRAM_DLYCAL_DLCV_MASK)>>2)
+#define SDRAM_DLYCAL_DLCV_MASK 0x000003FC
+#define         SDRAM_DLYCAL_DLCV_ENCODE(x) (((x)<<2) & SDRAM_DLYCAL_DLCV_MASK)
+#define         SDRAM_DLYCAL_DLCV_DECODE(x) (((x) & SDRAM_DLYCAL_DLCV_MASK)>>2)
 
 /*-----------------------------------------------------------------------------+
   |  General Definition
   +-----------------------------------------------------------------------------*/
-#define DEFAULT_SPD_ADDR1   0x53
-#define DEFAULT_SPD_ADDR2   0x52
-#define MAXBANKS            4               /* at most 4 dimm banks */
-#define MAX_SPD_BYTES       256
-#define NUMHALFCYCLES       4
-#define NUMMEMTESTS         8
-#define NUMMEMWORDS         8
-#define MAXBXCR             4
-#define TRUE                1
-#define FALSE               0
+#define DEFAULT_SPD_ADDR1      0x53
+#define DEFAULT_SPD_ADDR2      0x52
+#define MAXBANKS               4               /* at most 4 dimm banks */
+#define MAX_SPD_BYTES          256
+#define NUMHALFCYCLES          4
+#define NUMMEMTESTS            8
+#define NUMMEMWORDS            8
+#define MAXBXCR                        4
+#define TRUE                   1
+#define FALSE                  0
 
 const unsigned long test[NUMMEMTESTS][NUMMEMWORDS] = {
        {0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
@@ -650,42 +650,53 @@ const unsigned long test[NUMMEMTESTS][NUMMEMWORDS] = {
         0xAA55AA55, 0xAA55AA55}
 };
 
+/* bank_parms is used to sort the bank sizes by descending order */
+struct bank_param {
+       unsigned long cr;
+       unsigned long bank_size_bytes;
+};
+
+typedef struct bank_param BANKPARMS;
+
+#ifdef CFG_SIMULATE_SPD_EEPROM
+extern unsigned char cfg_simulate_spd_eeprom[128];
+#endif
 
 unsigned char spd_read(uchar chip, uint addr);
 
 void get_spd_info(unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks);
+                 unsigned long  num_dimm_banks);
 
 void check_mem_type
 (unsigned long* dimm_populated,
  unsigned char* iic0_dimm_addr,
- unsigned long  num_dimm_banks);
+ unsigned long num_dimm_banks);
 
 void check_volt_type
 (unsigned long* dimm_populated,
  unsigned char* iic0_dimm_addr,
- unsigned long  num_dimm_banks);
+ unsigned long num_dimm_banks);
 
 void program_cfg0(unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks);
+                 unsigned long  num_dimm_banks);
 
 void program_cfg1(unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks);
+                 unsigned long  num_dimm_banks);
 
 void program_rtr (unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks);
+                 unsigned long  num_dimm_banks);
 
 void program_tr0 (unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks);
+                 unsigned long  num_dimm_banks);
 
 void program_tr1 (void);
 
-void program_ecc (unsigned long  num_bytes);
+void program_ecc (unsigned long         num_bytes);
 
 unsigned
 long  program_bxcr(unsigned long* dimm_populated,
@@ -696,7 +707,7 @@ long  program_bxcr(unsigned long* dimm_populated,
  * This function is reading data from the DIMM module EEPROM over the SPD bus
  * and uses that to program the sdram controller.
  *
- * This works on boards that has the same schematics that the IBM walnut has.
+ * This works on boards that has the same schematics that the AMCC walnut has.
  *
  * BUG: Don't handle ECC memory
  * BUG: A few values in the TR register is currently hardcoded
@@ -708,7 +719,7 @@ long int spd_sdram(void) {
        unsigned long total_size;
        unsigned long cfg0;
        unsigned long mcsts;
-       unsigned long num_dimm_banks;               /* on board dimm banks */
+       unsigned long num_dimm_banks;               /* on board dimm banks */
 
        num_dimm_banks = sizeof(iic0_dimm_addr);
 
@@ -806,9 +817,19 @@ long int spd_sdram(void) {
        return total_size;
 }
 
-unsigned char spd_read(uchar chip, uint addr) {
+unsigned char spd_read(uchar chip, uint addr)
+{
        unsigned char data[2];
 
+#ifdef CFG_SIMULATE_SPD_EEPROM
+       if (chip == CFG_SIMULATE_SPD_EEPROM) {
+               /*
+                * Onboard spd eeprom requested -> simulate values
+                */
+               return cfg_simulate_spd_eeprom[addr];
+       }
+#endif /* CFG_SIMULATE_SPD_EEPROM */
+
        if (i2c_probe(chip) == 0) {
                if (i2c_read(chip, addr, 1, data, 1) == 0) {
                        return data[0];
@@ -820,7 +841,7 @@ unsigned char spd_read(uchar chip, uint addr) {
 
 void get_spd_info(unsigned long*   dimm_populated,
                  unsigned char*   iic0_dimm_addr,
-                 unsigned long    num_dimm_banks)
+                 unsigned long    num_dimm_banks)
 {
        unsigned long dimm_num;
        unsigned long dimm_found;
@@ -910,7 +931,7 @@ void check_volt_type(unsigned long*   dimm_populated,
 
 void program_cfg0(unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks)
+                 unsigned long  num_dimm_banks)
 {
        unsigned long dimm_num;
        unsigned long cfg0;
@@ -1000,7 +1021,7 @@ void program_cfg0(unsigned long* dimm_populated,
 
 void program_cfg1(unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks)
+                 unsigned long  num_dimm_banks)
 {
        unsigned long cfg1;
        mfsdram(mem_cfg1, cfg1);
@@ -1018,7 +1039,7 @@ void program_cfg1(unsigned long* dimm_populated,
 
 void program_rtr (unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks)
+                 unsigned long  num_dimm_banks)
 {
        unsigned long dimm_num;
        unsigned long bus_period_x_10;
@@ -1079,7 +1100,7 @@ void program_rtr (unsigned long* dimm_populated,
 
 void program_tr0 (unsigned long* dimm_populated,
                  unsigned char* iic0_dimm_addr,
-                 unsigned long  num_dimm_banks)
+                 unsigned long  num_dimm_banks)
 {
        unsigned long dimm_num;
        unsigned long tr0;
@@ -1138,7 +1159,7 @@ void program_tr0 (unsigned long* dimm_populated,
        for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
                if (dimm_populated[dimm_num] == TRUE) {
                        wcsbc = spd_read(iic0_dimm_addr[dimm_num], 15);
-                       t_rp_ns  = spd_read(iic0_dimm_addr[dimm_num], 27) >> 2;
+                       t_rp_ns  = spd_read(iic0_dimm_addr[dimm_num], 27) >> 2;
                        t_rcd_ns = spd_read(iic0_dimm_addr[dimm_num], 29) >> 2;
                        t_ras_ns = spd_read(iic0_dimm_addr[dimm_num], 30);
                        cas_bit = spd_read(iic0_dimm_addr[dimm_num], 18);
@@ -1213,7 +1234,7 @@ void program_tr0 (unsigned long* dimm_populated,
        /*
         * Program SD_WR and SD_WCSBC fields
         */
-       tr0 |= SDRAM_TR0_SDWR_2_CLK;                /* Write Recovery: 2 CLK */
+       tr0 |= SDRAM_TR0_SDWR_2_CLK;                /* Write Recovery: 2 CLK */
        switch (wcsbc) {
        case 0:
                tr0 |= SDRAM_TR0_SDWD_0_CLK;
@@ -1591,35 +1612,56 @@ unsigned long program_bxcr(unsigned long* dimm_populated,
 {
        unsigned long dimm_num;
        unsigned long bank_base_addr;
-       unsigned long bank_size_bytes;
        unsigned long cr;
        unsigned long i;
+       unsigned long j;
        unsigned long temp;
        unsigned char num_row_addr;
        unsigned char num_col_addr;
        unsigned char num_banks;
        unsigned char bank_size_id;
-
-#ifndef CONFIG_BAMBOO
-       unsigned long bxcr_num;
+       unsigned long ctrl_bank_num[MAXBANKS];
+       unsigned long bx_cr_num;
+       unsigned long largest_size_index;
+       unsigned long largest_size;
+       unsigned long current_size_index;
+       BANKPARMS bank_parms[MAXBXCR];
+       unsigned long sorted_bank_num[MAXBXCR]; /* DDR Controller bank number table (sorted by size) */
+       unsigned long sorted_bank_size[MAXBXCR]; /* DDR Controller bank size table (sorted by size)*/
 
        /*
         * Set the BxCR regs.  First, wipe out the bank config registers.
         */
-       for (bxcr_num = 0; bxcr_num < MAXBXCR; bxcr_num++) {
-               mtdcr(memcfga, mem_b0cr + (bxcr_num << 2));
+       for (bx_cr_num = 0; bx_cr_num < MAXBXCR; bx_cr_num++) {
+               mtdcr(memcfga, mem_b0cr + (bx_cr_num << 2));
                mtdcr(memcfgd, 0x00000000);
+               bank_parms[bx_cr_num].bank_size_bytes = 0;
        }
+
+#ifdef CONFIG_BAMBOO
+       /*
+        * This next section is hardware dependent and must be programmed
+        * to match the hardware.  For bammboo, the following holds...
+        * 1. SDRAM0_B0CR: Bank 0 of dimm 0 ctrl_bank_num : 0
+        * 2. SDRAM0_B1CR: Bank 0 of dimm 1 ctrl_bank_num : 1
+        * 3. SDRAM0_B2CR: Bank 1 of dimm 1 ctrl_bank_num : 1
+        * 4. SDRAM0_B3CR: Bank 0 of dimm 2 ctrl_bank_num : 3
+        * ctrl_bank_num corresponds to the first usable DDR controller bank number by DIMM
+        */
+       ctrl_bank_num[0] = 0;
+       ctrl_bank_num[1] = 1;
+       ctrl_bank_num[2] = 3;
+#else
+       ctrl_bank_num[0] = 0;
+       ctrl_bank_num[1] = 1;
+       ctrl_bank_num[2] = 2;
+       ctrl_bank_num[3] = 3;
 #endif
 
        /*
         * reset the bank_base address
         */
-#ifndef CONFIG_BAMBOO
        bank_base_addr = CFG_SDRAM_BASE;
-#else
-       bank_base_addr = CFG_SDRAM_ONBOARD_SIZE;
-#endif
 
        for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
                if (dimm_populated[dimm_num] == TRUE) {
@@ -1632,7 +1674,6 @@ unsigned long program_bxcr(unsigned long* dimm_populated,
                         * Set the SDRAM0_BxCR regs
                         */
                        cr = 0;
-                       bank_size_bytes = 4 * 1024 * 1024 * bank_size_id;
                        switch (bank_size_id) {
                        case 0x02:
                                cr |= SDRAM_BXCR_SDSZ_8;
@@ -1691,50 +1732,60 @@ unsigned long program_bxcr(unsigned long* dimm_populated,
                         */
                        cr |= SDRAM_BXCR_SDBE;
 
-                       /*------------------------------------------------------------------
-                         | This next section is hardware dependent and must be programmed
-                         | to match the hardware.
-                         +-----------------------------------------------------------------*/
-                       if (dimm_num == 0) {
-                               for (i = 0; i < num_banks; i++) {
-#ifndef CONFIG_BAMBOO
-                                       mtdcr(memcfga, mem_b0cr + (i << 2));
-#else
-                                       mtdcr(memcfga, mem_b1cr + (i << 2));
-#endif
-                                       temp = mfdcr(memcfgd) & ~(SDRAM_BXCR_SDBA_MASK |
-                                                                 SDRAM_BXCR_SDSZ_MASK |
-                                                                 SDRAM_BXCR_SDAM_MASK |
-                                                                 SDRAM_BXCR_SDBE);
-                                       cr |= temp;
-                                       cr |= bank_base_addr & SDRAM_BXCR_SDBA_MASK;
-                                       mtdcr(memcfgd, cr);
-                                       bank_base_addr += bank_size_bytes;
-                               }
-                       } else {
-                               for (i = 0; i < num_banks; i++) {
-#ifndef CONFIG_BAMBOO
-                                       mtdcr(memcfga, mem_b2cr + (i << 2));
-#else
-                                       mtdcr(memcfga, mem_b3cr + (i << 2));
-#endif
-                                       temp = mfdcr(memcfgd) & ~(SDRAM_BXCR_SDBA_MASK |
-                                                                 SDRAM_BXCR_SDSZ_MASK |
-                                                                 SDRAM_BXCR_SDAM_MASK |
-                                                                 SDRAM_BXCR_SDBE);
-                                       cr |= temp;
-                                       cr |= bank_base_addr & SDRAM_BXCR_SDBA_MASK;
-                                       mtdcr(memcfgd, cr);
-                                       bank_base_addr += bank_size_bytes;
-                               }
+                       for (i = 0; i < num_banks; i++) {
+                               bank_parms[ctrl_bank_num[dimm_num]+i].bank_size_bytes =
+                                       (4 * 1024 * 1024) * bank_size_id;
+                               bank_parms[ctrl_bank_num[dimm_num]+i].cr = cr;
                        }
                }
        }
 
+       /* Initialize sort tables */
+       for (i = 0; i < MAXBXCR; i++) {
+               sorted_bank_num[i] = i;
+               sorted_bank_size[i] = bank_parms[i].bank_size_bytes;
+       }
+
+       for (i = 0; i < MAXBXCR-1; i++) {
+               largest_size = sorted_bank_size[i];
+               largest_size_index = 255;
+
+               /* Find the largest remaining value */
+               for (j = i + 1; j < MAXBXCR; j++) {
+                       if (sorted_bank_size[j] > largest_size) {
+                               /* Save largest remaining value and its index */
+                               largest_size = sorted_bank_size[j];
+                               largest_size_index = j;
+                       }
+               }
+
+               if (largest_size_index != 255) {
+                       /* Swap the current and largest values */
+                       current_size_index = sorted_bank_num[largest_size_index];
+                       sorted_bank_size[largest_size_index] = sorted_bank_size[i];
+                       sorted_bank_size[i] = largest_size;
+                       sorted_bank_num[largest_size_index] = sorted_bank_num[i];
+                       sorted_bank_num[i] = current_size_index;
+               }
+       }
+
+       /* Set the SDRAM0_BxCR regs thanks to sort tables */
+       for (bx_cr_num = 0, bank_base_addr = 0; bx_cr_num < MAXBXCR; bx_cr_num++) {
+               if (bank_parms[sorted_bank_num[bx_cr_num]].bank_size_bytes) {
+                       mtdcr(memcfga, mem_b0cr + (sorted_bank_num[bx_cr_num] << 2));
+                       temp = mfdcr(memcfgd) & ~(SDRAM_BXCR_SDBA_MASK | SDRAM_BXCR_SDSZ_MASK |
+                                                 SDRAM_BXCR_SDAM_MASK | SDRAM_BXCR_SDBE);
+                       temp = temp | (bank_base_addr & SDRAM_BXCR_SDBA_MASK) |
+                               bank_parms[sorted_bank_num[bx_cr_num]].cr;
+                       mtdcr(memcfgd, temp);
+                       bank_base_addr += bank_parms[sorted_bank_num[bx_cr_num]].bank_size_bytes;
+               }
+       }
+
        return(bank_base_addr);
 }
 
-void program_ecc (unsigned long  num_bytes)
+void program_ecc (unsigned long         num_bytes)
 {
        unsigned long bank_base_addr;
        unsigned long current_address;
index 469f97d6f0cf47246399256b7b8205e1796dfb71..553c491e245bab4a6527ac8fab12f3ec29b3f2a6 100644 (file)
@@ -283,7 +283,7 @@ ulong get_PCI_freq (void)
        return sys_info.freqPCI;
 }
 
-#elif !defined(CONFIG_440GX)
+#elif !defined(CONFIG_440GX) && !defined(CONFIG_440SP)
 void get_sys_info (sys_info_t * sysInfo)
 {
        unsigned long strp0;
@@ -381,6 +381,13 @@ ulong get_OPB_freq (void)
 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) {
+       sysInfo->freqProcessor = 240 * 1000 * 1000;
+       sysInfo->freqPLB = 80 * 1000 * 1000;
+       sysInfo->freqPCI = 33 * 1000 * 1000;
+}
+
 #elif defined(CONFIG_405)
 
 void get_sys_info (sys_info_t * sysInfo) {
index 003c5b6bf19cc9bf7ae1383eb9cc569aaf096257..48b430d14d8583042f68dd2741fba99326f8fa9b 100644 (file)
@@ -42,7 +42,7 @@
 /*      LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M */
 /*------------------------------------------------------------------------------- */
 
-/*  U-Boot - Startup Code for IBM 4xx PowerPC based Embedded Boards
+/*  U-Boot - Startup Code for AMCC 4xx PowerPC based Embedded Boards
  *
  *
  *  The processor starts at 0xfffffffc and the code is executed
@@ -166,7 +166,7 @@ _start_440:
        mtspr   srr1,r0
        mtspr   csrr0,r0
        mtspr   csrr1,r0
-#if defined (CONFIG_440GX) /* NOTE: 440GX adds machine check status regs */
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP) /* NOTE: 440GX adds machine check status regs */
        mtspr   mcsrr0,r0
        mtspr   mcsrr1,r0
        mfspr   r1, mcsr
@@ -394,7 +394,7 @@ __440gx_msr_continue:
        addi    r3,r3,32
        bdnz    ..d_ag
 #else
-#if defined (CONFIG_440GX)
+#if defined (CONFIG_440GX) || defined(CONFIG_440SP)
        mtdcr   l2_cache_cfg,r0         /* Ensure L2 Cache is off */
 #endif
        mtdcr   isram0_sb1cr,r0         /* Disable bank 1 */
@@ -409,7 +409,7 @@ __440gx_msr_continue:
        mtdcr   isram0_pmeg,r1
 
        lis     r1,0x8000               /* BAS = 8000_0000 */
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
        ori     r1,r1,0x0980            /* first 64k */
        mtdcr   isram0_sb0cr,r1
        lis     r1,0x8001
@@ -432,7 +432,6 @@ __440gx_msr_continue:
        /*----------------------------------------------------------------*/
        lis     r1,CFG_INIT_RAM_ADDR@h
        ori     r1,r1,CFG_INIT_SP_OFFSET@l
-
        li      r0,0
        stwu    r0,-4(r1)
        stwu    r0,-4(r1)               /* Terminate call chain */
@@ -444,6 +443,8 @@ __440gx_msr_continue:
        stw     r0,+12(r1)              /* Save return addr (underflow vect) */
 
        GET_GOT
+
+       bl      cpu_init_f      /* run low-level CPU init code     (from Flash) */
        bl      board_init_f
 
 #endif /* CONFIG_440 */
@@ -975,12 +976,8 @@ invalidate_icache:
 invalidate_dcache:
        addi    r6,0,0x0000             /* clear GPR 6 */
        /* Do loop for # of dcache congruence classes. */
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
        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
-#else
-       addi    r7,r0, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)
-#endif
                                        /* NOTE: dccci invalidates both */
        mtctr   r7                      /* ways in the D cache */
 ..dcloop:
@@ -1001,15 +998,10 @@ flush_dcache:
        mtdccr  r10
 
        /* do loop for # of congruence classes. */
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
        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 */
-#else
-       addi    r10,r0,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)
-       addi    r11,r0,(CFG_DCACHE_SIZE / 2) /* D cache set size - 2 way sets */
-#endif
        mtctr   r10
        addi    r10,r0,(0xE000-0x10000) /* start at 0xFFFFE000 */
        add     r11,r10,r11             /* add to get to other side of cache line */
@@ -1231,9 +1223,9 @@ relocate_code:
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
        dccci   0,0                         /* Invalidate data cache, now no longer our stack */
        sync
-       addi    r1,r0,0x0000        /* Tlb entry #0 */
+       addi    r1,r0,0x0000            /* TLB entry #0 */
        tlbre   r0,r1,0x0002            /* Read contents */
-       ori     r0,r0,0x0c00        /* Or in the inhibit, write through bit */
+       ori     r0,r0,0x0c00            /* Or in the inhibit, write through bit */
        tlbwe   r0,r1,0x0002            /* Save it out */
        isync
 #endif
index 1038975a2d451b5e83b60319079eaf3e1558d765..cbfe41db9cc0b33eb8a74dc9e2d525b0eb6def81 100644 (file)
 #ifndef _VECNUMS_H_
 #define _VECNUMS_H_
 
-#if defined(CONFIG_440)
+#if defined(CONFIG_440SP)
+
+/* UIC 0 */
+#define VECNUM_U0           0           /* UART0                        */
+#define VECNUM_U1           1           /* UART1                        */
+#define VECNUM_IIC0         2           /* IIC0                         */
+#define VECNUM_IIC1         3           /* IIC1                         */
+#define VECNUM_PIM          4           /* PCI inbound message          */
+#define VECNUM_PCRW         5           /* PCI command reg write        */
+#define VECNUM_PPM          6           /* PCI power management         */
+#define VECNUM_UIC1NC       30          /* UIC1 non-critical interrupt  */
+#define VECNUM_UIC1C        31          /* UIC1 critical interrupt      */
+
+/* UIC 1 */
+#define VECNUM_EIR0         (32 + 0)   /* External interrupt 0         */
+#define VECNUM_MS           (32 + 1)   /* MAL SERR                     */
+#define VECNUM_TXDE         (32 + 2)   /* MAL TXDE                     */
+#define VECNUM_RXDE         (32 + 3)   /* MAL RXDE                     */
+#define VECNUM_MTE          (32 + 6)   /* MAL Tx EOB                   */
+#define VECNUM_MRE          (32 + 7)   /* MAL Rx EOB                   */
+#define VECNUM_CT0          (32 + 12)  /* GPT compare timer 0          */
+#define VECNUM_CT1          (32 + 13)  /* GPT compare timer 1          */
+#define VECNUM_CT2          (32 + 14)  /* GPT compare timer 2          */
+#define VECNUM_CT3          (32 + 15)  /* GPT compare timer 3          */
+#define VECNUM_CT4          (32 + 16)  /* GPT compare timer 4          */
+#define VECNUM_ETH0         (32 + 28)  /* Ethernet interrupt status    */
+#define VECNUM_EWU0         (32 + 29)  /* Emac  wakeup                 */
+
+#elif defined(CONFIG_440)
 
 /* UIC 0 */
 #define VECNUM_U0           0           /* UART0                        */
index 6030c49c2e4ec9e953fa6548cd0966c536af661f..fb810ca7c26fb88d95034e9545c25bde9b077e00 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
 #PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv5 -mtune=xscale
+PLATFORM_CPPFLAGS += -march=armv5 -mtune=xscale
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# ========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index a1c5dd10a5cd23e1aa9d6e012309220f5f8a94d8..6dc9c463a2e38f6a7186b11da7fddc32c8816ac8 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=arm7tdmi -msoft-float
+PLATFORM_CPPFLAGS += -march=armv4 -mtune=arm7tdmi -msoft-float
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# ========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index c40dcf861498cd0dbb6e9f3dc817a43ae73681ba..5be7dfb2f755618339bac2e2194a30354bf9432c 100644 (file)
 #
 
 PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
-       -mshort-load-bytes -msoft-float
+       -msoft-float
 
-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
+PLATFORM_CPPFLAGS += -march=armv4 -mtune=strongarm1100
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# ========================================================================
+PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
index a37c32d9e2e2af2c41f227670c0903f6f1bc7cd5..133ee7988343aa0e130a19232c0f8933a86143dc 100644 (file)
@@ -75,7 +75,7 @@ static int test_block_type(unsigned char *buffer)
            (buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) ) {
                return (-1);
        } /* no DOS Signature at all */
-       if(strncmp(&buffer[DOS_PBR_FSTYPE_OFFSET],"FAT",3)==0)
+       if(strncmp((char *)&buffer[DOS_PBR_FSTYPE_OFFSET],"FAT",3)==0)
                return DOS_PBR; /* is PBR */
        return DOS_MBR;     /* Is MBR */
 }
@@ -195,23 +195,23 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
                        switch(dev_desc->if_type) {
                                case IF_TYPE_IDE:
                                case IF_TYPE_ATAPI:
-                                       sprintf (info->name, "hd%c%d\n", 'a' + dev_desc->dev, part_num);
+                                       sprintf ((char *)info->name, "hd%c%d\n", 'a' + dev_desc->dev, part_num);
                                        break;
                                case IF_TYPE_SCSI:
-                                       sprintf (info->name, "sd%c%d\n", 'a' + dev_desc->dev, part_num);
+                                       sprintf ((char *)info->name, "sd%c%d\n", 'a' + dev_desc->dev, part_num);
                                        break;
                                case IF_TYPE_USB:
-                                       sprintf (info->name, "usbd%c%d\n", 'a' + dev_desc->dev, part_num);
+                                       sprintf ((char *)info->name, "usbd%c%d\n", 'a' + dev_desc->dev, part_num);
                                        break;
                                case IF_TYPE_DOC:
-                                       sprintf (info->name, "docd%c%d\n", 'a' + dev_desc->dev, part_num);
+                                       sprintf ((char *)info->name, "docd%c%d\n", 'a' + dev_desc->dev, part_num);
                                        break;
                                default:
-                                       sprintf (info->name, "xx%c%d\n", 'a' + dev_desc->dev, part_num);
+                                       sprintf ((char *)info->name, "xx%c%d\n", 'a' + dev_desc->dev, part_num);
                                        break;
                        }
                        /* sprintf(info->type, "%d, pt->sys_ind); */
-                       sprintf (info->type, "U-Boot");
+                       sprintf ((char *)info->type, "U-Boot");
                        return 0;
                }
 
index ee8c7c6f29b4d57a456ff77e42e2831d9a5e4a88..073532436e8bc90587310d248780a822148f8ba5 100644 (file)
@@ -87,7 +87,7 @@ int get_partition_info_iso_verb(block_dev_desc_t * dev_desc, int part_num, disk_
                                dev_desc->dev, part_num);
                return (-1);
        }
-       if(strncmp(ppr->stand_ident,"CD001",5)!=0) {
+       if(strncmp((char *)ppr->stand_ident,"CD001",5)!=0) {
                if(verb)
                        printf ("** Wrong ISO Ident: %s on %d:%d **\n",
                                ppr->stand_ident,dev_desc->dev, part_num);
@@ -154,23 +154,23 @@ int get_partition_info_iso_verb(block_dev_desc_t * dev_desc, int part_num, disk_
        /* the validation entry seems to be ok, now search the "partition" */
        entry_num=0;
        offset=0x20;
-       sprintf (info->type, "U-Boot");
+       sprintf ((char *)info->type, "U-Boot");
        switch(dev_desc->if_type) {
                case IF_TYPE_IDE:
                case IF_TYPE_ATAPI:
-                       sprintf (info->name, "hd%c%d\n", 'a' + dev_desc->dev, part_num);
+                       sprintf ((char *)info->name, "hd%c%d\n", 'a' + dev_desc->dev, part_num);
                        break;
                case IF_TYPE_SCSI:
-                       sprintf (info->name, "sd%c%d\n", 'a' + dev_desc->dev, part_num);
+                       sprintf ((char *)info->name, "sd%c%d\n", 'a' + dev_desc->dev, part_num);
                        break;
                case IF_TYPE_USB:
-                       sprintf (info->name, "usbd%c%d\n", 'a' + dev_desc->dev, part_num);
+                       sprintf ((char *)info->name, "usbd%c%d\n", 'a' + dev_desc->dev, part_num);
                        break;
                case IF_TYPE_DOC:
-                       sprintf (info->name, "docd%c%d\n", 'a' + dev_desc->dev, part_num);
+                       sprintf ((char *)info->name, "docd%c%d\n", 'a' + dev_desc->dev, part_num);
                        break;
                default:
-                       sprintf (info->name, "xx%c%d\n", 'a' + dev_desc->dev, part_num);
+                       sprintf ((char *)info->name, "xx%c%d\n", 'a' + dev_desc->dev, part_num);
                        break;
        }
        /* the bootcatalog (including validation Entry) is limited to 2048Bytes
index be7f1bee1f1b8a73ffad5fe08684b202995e7909..44d34785499773dca1d5a38a1297110ea71479e7 100644 (file)
@@ -28,7 +28,7 @@ I2C Edge Conditions:
 
 Notes
 -----
-!!!THIS IS AN UNDOCUMENTED I2C BUS BUG, NOT A IBM 4xx BUG!!!
+!!!THIS IS AN UNDOCUMENTED I2C BUS BUG, NOT A AMCC 4xx BUG!!!
 
 This reset edge condition could possibly be present in every I2C
 controller and device available. For boards where a I2C bus reset
diff --git a/doc/README-integrator b/doc/README-integrator
new file mode 100644 (file)
index 0000000..ce8a9d2
--- /dev/null
@@ -0,0 +1,110 @@
+
+               U-Boot for ARM Integrator Development Platforms
+
+                       Peter Pearse, ARM Ltd.
+                       peter.pearse@arm.com
+                            www.arm.com
+
+Manuals available from :-
+http://www.arm.com/products/DevTools/Hardware_Platforms.html
+
+Overview :
+--------
+There are two Integrator variants - Integrator/AP and Integrator/CP.
+Each may be fitted with a variety of core modules (CMs).
+Each CM consists of a ARM processor core and associated hardware e.g
+       FPGA implementing various controllers and/or register
+       SSRAM
+       SDRAM
+       RAM controllers
+       clock generators etc.
+CMs may be fitted with varying amounts of SDRAM using a DIMM socket.
+
+Boot Methods :
+------------
+Integrator platforms can be configured to use U-Boot in at least three ways :-
+a) Run ARM boot monitor, manually run U-Boot image from flash
+b) Run ARM boot monitor, automatically run U-Boot image from flash
+c) Run U-Boot image direct from flash.
+
+In cases a) and b) the ARM boot monitor will have configured the CM and mapped
+writeable memory to 0x00000000 in the Integrator address space.
+U-Boot has to carry out minimal configration before standard code is run.
+
+In case c) it may be necessary for U-Boot to perform CM dependent initialization.
+
+Configuring U-Boot :
+------------------
+       The makefile contains targets for Integrator platforms of both types
+fitted with all current variants of CM. If these targets are to be used with
+boot process c) above then CONFIG_INIT_CRITICAL may need to be defined to ensure
+that the CM is correctly configured.
+
+       There are also targets independent of CM. These may not be suitable for
+boot process c) above. They have been preserved for backward compatibility with
+existing build processes.
+
+Code Hierarchy Applied :
+----------------------
+Code specific to initialization of a particular ARM processor has been placed in
+cpu/arm<>/start.S so that it may be used by other boards.
+
+However, to avoid duplicating code through all processor files, a generic core
+for ARM Integrator CMs has been added
+
+       cpu/arm_intcm
+
+Otherwise. for example,  the standard CM reset via the CM control register would
+need placing in each CM processor file......
+
+Code specific to the initialization of the CM, rather than the cpu, and initialization
+of the Integrator board itself, has been placed in
+
+       board/integrator<>/platform.S
+       board/integrator<>/integrator<>.c
+
+Targets
+=======
+The U-Boot make targets map to the available core modules as below.
+
+Integrator/AP is no longer available from ARM.
+Core modules marked ** are also no longer available.
+
+ap720t_config          ** CM720T
+ap920t_config          ** CM920T
+ap926ejs_config        Integrator Core Module for ARM926EJ-STM
+ap946es_config         Integrator Core Module for ARM946E-STM
+cp920t_config          ** CM920T
+cp926ejs_config        Integrator Core Module for ARM926EJ-STM
+cp946es_config         Integrator Core Module for ARM946E-STM
+cp1136_config          Integrator Core Module ARM1136JF-S  TM
+
+The final groups of targets are for core modules where no explicit cpu
+code has yet been added to U-Boot i.e. they all use the same U-Boot binary
+using the generic "arm_intcm" core:
+
+ap966_config                   Integrator Core Module for ARM966E-S TM
+ap922_config                   Integrator Core Module for ARM922T TM with ETM
+ap922_XA10_config              Integrator Core Module for ARM922T using Altera Excalibur
+ap7_config                     ** CM7TDMI
+integratorap_config
+ap_config
+
+
+cp966_config                   Integrator Core Module for ARM966E-S TM
+cp922_config                   Integrator Core Module for ARM922T TM with ETM
+cp922_XA10_config              Integrator Core Module for ARM922T using Altera Excalibur
+cp1026_config                  Integrator Core Module ARM1026EJ-S TM
+integratorcp_config
+cp_config
+
+The Makefile targets call board/integrator<>/split_by_variant.sh
+to configure various defines in include/configs/integrator<>.h
+to indicate the core module & core configuration and ensure that
+board/integrator<>/u-boot.lds loads the cpu object first in the U-Boot image.
+
+*********************************
+Because of this mechanism
+> make clean
+must be run before each change in configuration
+*********************************
diff --git a/doc/README.OFT b/doc/README.OFT
new file mode 100644 (file)
index 0000000..dd1c632
--- /dev/null
@@ -0,0 +1,28 @@
+Open Firmware Flat Tree and usage.
+----------------------------------
+
+As part of the ongoing cleanup of the Linux PPC trees, the preferred
+way to pass bootloader and board setup information is the open
+firmware flat tree.
+
+Please take a look at the following email discussion for some
+background.
+
+  http://ozlabs.org/pipermail/linuxppc-dev/2005-August/019408.html
+  http://ozlabs.org/pipermail/linuxppc-dev/2005-August/019362.html
+
+The generated tree is part static and part dynamic.
+
+There is a static part which is compiled in with DTC and a dynamic
+part which is programmatically appended.
+
+You'll need a fairly recent DTC tool, which is available by git at
+
+  rsync://ozlabs.org/dtc/dtc.git
+
+The xxd binary dumper is needed too which I got from
+
+  ftp://ftp.uni-erlangen.de/pub/utilities/etc/xxd-1.10.tar.gz
+
+
+Pantelis Antoniou, 13 Oct 2005
index b506c01ce1c0813128218f46d6e00eb4fee25a8f..a41b69acedb8817fe1ddd1eca2ed50696879dd0e 100644 (file)
@@ -253,7 +253,7 @@ bootfile=telemetry
 hostname=sp1
 ethaddr=00:03:47:97:E4:6B
 load=tftp 100000 u-boot.bin
-update=protect off all;era FFF00000 FFF3FFFF;cp.b 100000 FFF00000 $(filesize);saveenv
+update=protect off all;era FFF00000 FFF3FFFF;cp.b 100000 FFF00000 ${filesize};saveenv
 filesize=1f304
 gatewayip=145.17.228.1
 netmask=255.255.255.0
@@ -308,7 +308,7 @@ Protected 1 sectors
 You can put these commands into some environment variables;
 
 => setenv load tftp 100000 u-boot.bin
-=> setenv update protect off all\;era FFF00000 FFF3FFFF\;cp.b 100000 FFF00000 \$(filesize)\;saveenv
+=> setenv update protect off all\;era FFF00000 FFF3FFFF\;cp.b 100000 FFF00000 \${filesize}\;saveenv
 => saveenv
 
 Then you just have to type "run load" then "run update"
index 56aeb090c1e4397a0984b1f4577d32ca4c5ffbb5..9cfb4217fe1e9cf42ab3a79b99431cd946a668d1 100644 (file)
@@ -2,7 +2,7 @@ BEDBUG Support for U-Boot
 --------------------------
 
 These changes implement the bedbug (emBEDded deBUGger) debugger in U-Boot.
-A specific implementation is made for the IBM405 processor but other flavors
+A specific implementation is made for the AMCC 405 processor but other flavors
 can be easily implemented.
 
 #####################
@@ -58,7 +58,7 @@ can be easily implemented.
        routines are common to all PowerPC processors.
 
 ./cpu/ppc4xx/bedbug_405.c
-       IBM PPC405 specific debugger routines.
+       AMCC  PPC405 specific debugger routines.
 
 
 Bedbug support for the MPC860
index bb8375a6b81316224b804caba22df486660d6a09..622bef537488f9da204e13f008eadf0ff1796fe5 100644 (file)
@@ -118,11 +118,11 @@ see the following:
 
    at the Altera Standard 32 to SRAM:
 
-       ==> cp.b 800000 40000 $(filesize)
+       ==> cp.b 800000 40000 ${filesize}
 
    at the Microtronix LDK 2.0 to SDRAM:
 
-       ==> cp.b 1010000 8000000 $(filesize)
+       ==> cp.b 1010000 8000000 ${filesize}
 
 U-Boot will now automatically start when the board is powered on or
 reset using the Standard-32 configuration. To start U-Boot with the
index 6e2a8115a48f845fc84e6d04c54c292639986173..8b030dbb54631ccb82084f53bb05b4d940e165f2 100644 (file)
@@ -1,9 +1,9 @@
-                          IBM Ebony Board
+                          AMCC Ebony Board
 
                    Last Update: September 12, 2002
 =======================================================================
 
-This file contains some handy info regarding U-Boot and the IBM
+This file contains some handy info regarding U-Boot and the AMCC
 Ebony evalutation board. See the README.ppc440 for additional
 information.
 
index c9ef6e6c81673579d9db1c1daf6c2331fa75d084..27c5b927836e007a471db03fb39ae218481cdd85 100644 (file)
@@ -5,7 +5,7 @@ Xilinx ML300 platform
 ---------------
 
 The Xilinx ML300 board is based on the Virtex-II Pro FPGA with
-integrated IBM PowerPC 405 core. The board is normally booted from
+integrated AMCC PowerPC 405 core. The board is normally booted from
 System ACE CF. U-Boot is then run out of main memory.
 
 An FPGA is a configurable and thus very flexible device. To
index 08d6831fb62abfc9233df043b3d29bfe02276471..f0cf782a8fc92434943ccd3ef9d1f59ae246fcf4 100644 (file)
@@ -130,7 +130,7 @@ Updated 13-July-2004 Jon Loeliger
        include/configs/MPC8540ADS.h
        include/configs/MPC8560ADS.h
 
-    CONFIG_BOOKE           BOOKE(e.g. Motorola MPC85xx, IBM 440, etc)
+    CONFIG_BOOKE           BOOKE(e.g. Motorola MPC85xx, AMCC 440, etc)
     CONFIG_E500                    BOOKE e500 family(Motorola)
     CONFIG_MPC85xx         MPC8540,MPC8560 and their derivatives
     CONFIG_MPC8540         MPC8540 specific
index 403735d0f32f4580d5a630a8fe25884ba8529d59..9ac3a184cb8181c4d14a6dc5cab5292bbbe1f949 100644 (file)
@@ -1,9 +1,9 @@
-                          IBM Ocotea Board
+                          AMCC Ocotea Board
 
                    Last Update: March 2, 2004
 =======================================================================
 
-This file contains some handy info regarding U-Boot and the IBM
+This file contains some handy info regarding U-Boot and the AMCC
 Ocotea 440gx  evalutation board. See the README.ppc440 for additional
 information.
 
@@ -53,7 +53,7 @@ Special note about the Cicada CIS8201:
        This has been done in the 440gx_enet.c file with a #ifdef/endif
        pair.
 
-IBM does not store the EMAC ethernet addresses within their PIBS bootloader.
+AMCC does not store the EMAC ethernet addresses within their PIBS bootloader.
 The addresses contained in the config header file are from my particular
 board and you _*should*_ change them to reflect your board either in the
 config file and/or in your environment variables.  I found the addresses on
index 0044aa0f91b87dd762bee808526b7fe00c52d1c4..25dd2a237814460dc082b3682b1741088ed63be0 100644 (file)
@@ -75,8 +75,8 @@ powering the board you should see the following message:
 
 U-Boot 1.1.3 (Apr  5 2005 - 22:59:57)
 
-IBM PowerPC 440 GX Rev. C
-Board: IBM 440GX Evaluation Board
+AMCC PowerPC 440 GX Rev. C
+Board: AMCC 440GX Evaluation Board
        VCO: 1066 MHz
        CPU: 533 MHz
        PLB: 152 MHz
index 95d63fc5085f518f4ef9f8ed8545ee45730c6766..08f34f589faf08b63934c5463433c2bea2246791 100644 (file)
@@ -12,7 +12,7 @@ and enabled via the CONFIG_440 flag. It is largely based on the
 405gp code. A sample board support implementation is contained
 in the board/ebony directory.
 
-All testing was performed using the IBM Ebony board using both
+All testing was performed using the AMCC Ebony board using both
 Rev B and Rev C silicon. However, since the Rev B. silicon has
 extensive errata, support for Rev B. is minimal (it boots, and
 features such as i2c, pci, tftpboot, etc. seem to work ok).
index 26a556e59ad499f532369abd8557c09c40885dc1..e6176ed86aedc2d208a5e4a78cda7428d1b5ca53 100644 (file)
@@ -34,7 +34,7 @@ OBJS  = 3c589.o 5701rls.o ali512x.o \
          i8042.o i82365.o inca-ip_sw.o keyboard.o \
          lan91c96.o \
          natsemi.o ne2000.o netarm_eth.o netconsole.o \
-         ns16550.o ns8382x.o ns87308.o omap1510_i2c.o \
+         ns16550.o ns8382x.o ns87308.o ns7520_eth.o omap1510_i2c.o \
          omap24xx_i2c.o pci.o pci_auto.o pci_indirect.o \
          pcnet.o plb2800_eth.o \
          ps2ser.o ps2mult.o pc_keyb.o \
index 1eaac4771ed2b0be00de4d3062ab90c657e91db3..9727aebbcb2ffe03f51f752add36e0ed9e97978c 100644 (file)
@@ -130,6 +130,16 @@ CONFIG_VIDEO_HW_CURSOR:         - Uses the hardware cursor capability of the
 #define VIDEO_HW_BITBLT
 #endif
 
+/*****************************************************************************/
+/* Defines for the SED13806 driver                                          */
+/*****************************************************************************/
+#ifdef CONFIG_VIDEO_SM501
+
+#ifdef CONFIG_HH405
+#define VIDEO_FB_LITTLE_ENDIAN
+#endif
+#endif
+
 /*****************************************************************************/
 /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc            */
 /*****************************************************************************/
@@ -372,6 +382,8 @@ static const int video_font_draw_table32[16][4] = {
            { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff } };
 
 
+int gunzip(void *, int, unsigned char *, unsigned long *);
+
 /******************************************************************************/
 
 static void video_drawchars (int xx, int yy, unsigned char *s, int count)
@@ -489,7 +501,7 @@ static void video_drawchars (int xx, int yy, unsigned char *s, int count)
 
 static inline void video_drawstring (int xx, int yy, unsigned char *s)
 {
-       video_drawchars (xx, yy, s, strlen (s));
+       video_drawchars (xx, yy, s, strlen ((char *)s));
 }
 
 /*****************************************************************************/
@@ -536,12 +548,12 @@ void console_cursor (int state)
                sprintf (info, " %02d:%02d:%02d ", tm.tm_hour, tm.tm_min,
                         tm.tm_sec);
                video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH,
-                                 VIDEO_INFO_Y, info);
+                                 VIDEO_INFO_Y, (uchar *)info);
 
                sprintf (info, "%02d.%02d.%04d", tm.tm_mday, tm.tm_mon,
                         tm.tm_year);
                video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH,
-                                 VIDEO_INFO_Y + 1 * VIDEO_FONT_HEIGHT, info);
+                                 VIDEO_INFO_Y + 1 * VIDEO_FONT_HEIGHT, (uchar *)info);
        }
 #endif
 
@@ -751,13 +763,49 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
        unsigned colors;
        unsigned long compression;
        bmp_color_table_entry_t cte;
+#ifdef CONFIG_VIDEO_BMP_GZIP
+       unsigned char *dst = NULL;
+       ulong len;
+#endif
 
        WATCHDOG_RESET ();
 
        if (!((bmp->header.signature[0] == 'B') &&
              (bmp->header.signature[1] == 'M'))) {
+
+#ifdef CONFIG_VIDEO_BMP_GZIP
+               /*
+                * Could be a gzipped bmp image, try to decrompress...
+                */
+               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 *)bmp_image, &len) != 0) {
+                       printf ("Error: no valid bmp or bmp.gz image at %lx\n", bmp_image);
+                       free(dst);
+                       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;
+
+               if (!((bmp->header.signature[0] == 'B') &&
+                     (bmp->header.signature[1] == 'M'))) {
+                       printf ("Error: no valid bmp.gz image at %lx\n", bmp_image);
+                       return 1;
+               }
+#else
                printf ("Error: no valid bmp image at %lx\n", bmp_image);
                return 1;
+#endif /* CONFIG_VIDEO_BMP_GZIP */
        }
 
        width = le32_to_cpu (bmp->header.width);
@@ -947,6 +995,13 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
                        le16_to_cpu (bmp->header.bit_count));
                break;
        }
+
+#ifdef CONFIG_VIDEO_BMP_GZIP
+       if (dst) {
+               free(dst);
+       }
+#endif
+
        return (0);
 }
 #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
@@ -1061,11 +1116,10 @@ static void *video_logo (void)
        }
 #endif /* CONFIG_SPLASH_SCREEN */
 
-
        logo_plot (video_fb_address, VIDEO_COLS, 0, 0);
 
        sprintf (info, " %s", &version_string);
-       video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info);
+       video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *)info);
 
 #ifdef CONFIG_CONSOLE_EXTRA_INFO
        {
@@ -1076,7 +1130,7 @@ static void *video_logo (void)
                        if (*info)
                                video_drawstring (VIDEO_INFO_X,
                                                  VIDEO_INFO_Y + i * VIDEO_FONT_HEIGHT,
-                                                 info);
+                                                 (uchar *)info);
                }
        }
 #endif
index 3d0f2045011f1009258629ae45a8bbac9bd8ffa5..4b7a1107a9a5b6fa905d357c438521f495c91923 100644 (file)
@@ -47,7 +47,6 @@
 #include <common.h>
 #include <asm/processor.h>
 #include <asm/byteorder.h>
-#include <linux/byteorder/swab.h>
 #include <environment.h>
 #ifdef CFG_FLASH_CFI_DRIVER
 
@@ -167,9 +166,15 @@ typedef union {
 
 #define NUM_ERASE_REGIONS 4
 
+/* use CFG_MAX_FLASH_BANKS_DETECT if defined */
+#ifdef CFG_MAX_FLASH_BANKS_DETECT
+static ulong bank_base[CFG_MAX_FLASH_BANKS_DETECT] = CFG_FLASH_BANKS_LIST;
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS_DETECT];   /* FLASH chips info */
+#else
 static ulong bank_base[CFG_MAX_FLASH_BANKS] = CFG_FLASH_BANKS_LIST;
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];          /* FLASH chips info */
+#endif
 
-flash_info_t flash_info[CFG_MAX_FLASH_BANKS];  /* info for FLASH chips   */
 
 /*-----------------------------------------------------------------------
  * Functions
@@ -185,11 +190,13 @@ static int flash_isequal (flash_info_t * info, flash_sect_t sect, uint offset, u
 static int flash_isset (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
 static int flash_toggle (flash_info_t * info, flash_sect_t sect, uint offset, uchar cmd);
 static int flash_detect_cfi (flash_info_t * info);
-static ulong flash_get_size (ulong base, int banknum);
+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, flash_sect_t sector,
                                    ulong tout, char *prompt);
+#if defined(CFG_ENV_IS_IN_FLASH) || defined(CFG_ENV_ADDR_REDUND) || (CFG_MONITOR_BASE >= CFG_FLASH_BASE)
 static flash_info_t *flash_get_info(ulong base);
+#endif
 #ifdef CFG_FLASH_USE_BUFFER_WRITE
 static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp, int len);
 #endif
@@ -220,7 +227,7 @@ static void flash_printqry (flash_info_t * info, flash_sect_t sect)
        cfiptr_t cptr;
        int x, y;
 
-       for (x = 0; x < 0x40; x += 16 / info->portwidth) {
+       for (x = 0; x < 0x40; x += 16U / info->portwidth) {
                cptr.cp =
                        flash_make_addr (info, sect,
                                         x + FLASH_OFFSET_CFI_RESP);
@@ -333,8 +340,10 @@ unsigned long flash_init (void)
                flash_info[i].flash_id = FLASH_UNKNOWN;
                size += flash_info[i].size = flash_get_size (bank_base[i], i);
                if (flash_info[i].flash_id == FLASH_UNKNOWN) {
+#ifndef CFG_FLASH_QUIET_TEST
                        printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",
                                i, flash_info[i].size, flash_info[i].size << 20);
+#endif /* CFG_FLASH_QUIET_TEST */
                }
        }
 
@@ -366,10 +375,11 @@ unsigned long flash_init (void)
 
 /*-----------------------------------------------------------------------
  */
+#if defined(CFG_ENV_IS_IN_FLASH) || defined(CFG_ENV_ADDR_REDUND) || (CFG_MONITOR_BASE >= CFG_FLASH_BASE)
 static flash_info_t *flash_get_info(ulong base)
 {
        int i;
-       flash_info_t * info;
+       flash_info_t * info = 0;
 
        for (i = 0; i < CFG_MAX_FLASH_BANKS; i ++) {
                info = & flash_info[i];
@@ -380,6 +390,7 @@ static flash_info_t *flash_get_info(ulong base)
 
        return i == CFG_MAX_FLASH_BANKS ? 0 : info;
 }
+#endif
 
 /*-----------------------------------------------------------------------
  */
@@ -498,11 +509,11 @@ void flash_print_info (flash_info_t * info)
                        info->start[i],
                        erased ? " E" : "  ",
                        info->protect[i] ? "RO " : "   ");
-#else
+#else  /* ! CFG_FLASH_EMPTY_INFO */
                if ((i % 5) == 0)
                        printf ("\n   ");
                printf (" %08lX%s",
-                       info->start[i], info->protect[i] ? " (RO)  " : "     ");
+                       info->start[i], info->protect[i] ? " (RO)" : "     ");
 #endif
        }
        putc ('\n');
@@ -639,7 +650,7 @@ void flash_read_user_serial (flash_info_t * info, void *buffer, int offset,
        src = flash_make_addr (info, 0, FLASH_OFFSET_USER_PROTECTION);
        flash_write_cmd (info, 0, 0, FLASH_CMD_READ_ID);
        memcpy (dst, src + offset, len);
-       flash_write_cmd (info, 0, 0, FLASH_CMD_RESET);
+       flash_write_cmd (info, 0, 0, info->cmd_reset);
 }
 
 /*
@@ -653,7 +664,7 @@ void flash_read_factory_serial (flash_info_t * info, void *buffer, int offset,
        src = flash_make_addr (info, 0, FLASH_OFFSET_INTEL_PROTECTION);
        flash_write_cmd (info, 0, 0, FLASH_CMD_READ_ID);
        memcpy (buffer, src + offset, len);
-       flash_write_cmd (info, 0, 0, FLASH_CMD_RESET);
+       flash_write_cmd (info, 0, 0, info->cmd_reset);
 }
 
 #endif /* CFG_FLASH_PROTECTION */
@@ -738,7 +749,7 @@ static int flash_full_status_check (flash_info_t * info, flash_sect_t sector,
                        if (flash_isset (info, sector, 0, FLASH_STATUS_VPENS))
                                puts ("Vpp Low Error.\n");
                }
-               flash_write_cmd (info, sector, 0, FLASH_CMD_RESET);
+               flash_write_cmd (info, sector, 0, info->cmd_reset);
                break;
        default:
                break;
@@ -797,32 +808,14 @@ 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)
 {
        int i;
-
-#if defined(__LITTLE_ENDIAN)
-       ushort stmpw;
-       uint   stmpi;
-#endif
        uchar *cp = (uchar *) cmdbuf;
 
-       for (i = 0; i < info->portwidth; i++)
-               *cp++ = ((i + 1) & (info->chipwidth - 1)) ? '\0' : cmd;
 #if defined(__LITTLE_ENDIAN)
-       switch (info->portwidth) {
-       case FLASH_CFI_8BIT:
-               break;
-       case FLASH_CFI_16BIT:
-               stmpw = *(ushort *) cmdbuf;
-               *(ushort *) cmdbuf = __swab16 (stmpw);
-               break;
-       case FLASH_CFI_32BIT:
-               stmpi = *(uint *) cmdbuf;
-               *(uint *) cmdbuf = __swab32 (stmpi);
-               break;
-       default:
-               puts ("WARNING: flash_make_cmd: unsuppported LittleEndian mode\n");
-               break;
-       }
+       for (i = info->portwidth; i > 0; i--)
+#else
+       for (i = 1; i <= info->portwidth; i++)
 #endif
+               *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
 }
 
 /*
@@ -997,7 +990,7 @@ static int flash_detect_cfi (flash_info_t * info)
                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, 0, info->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')
@@ -1022,7 +1015,7 @@ static int flash_detect_cfi (flash_info_t * info)
  * The following code cannot be run from FLASH!
  *
  */
-static ulong flash_get_size (ulong base, int banknum)
+ulong flash_get_size (ulong base, int banknum)
 {
        flash_info_t *info = &flash_info[banknum];
        int i, j;
@@ -1121,7 +1114,7 @@ static ulong flash_get_size (ulong base, int banknum)
                }
        }
 
-       flash_write_cmd (info, 0, 0, FLASH_CMD_RESET);
+       flash_write_cmd (info, 0, 0, info->cmd_reset);
        return (info->size);
 }
 
index 7bcf19f5ddc69ae133a4ed4ca98d388d7f7c6b5a..29d82e4c4351976f8b045b82674de3a4d15aa6a0 100644 (file)
@@ -272,6 +272,9 @@ struct ctfb_chips_properties {
 
 static const struct ctfb_chips_properties chips[] = {
        {PCI_DEVICE_ID_CT_69000, 0x200000, 1, 4, -2, 3, 257, 100, 220},
+#ifdef CONFIG_USE_CPCIDVI
+       {PCI_DEVICE_ID_CT_69030, 0x400000, 1, 4, -2, 3, 257, 100, 220},
+#endif
        {PCI_DEVICE_ID_CT_65555, 0x100000, 16, 4, 0, 1, 255, 48, 220},  /* NOT TESTED */
        {0, 0, 0, 0, 0, 0, 0, 0, 0}     /* Terminator */
 };
@@ -957,6 +960,9 @@ SetDrawingEngine (int bits_per_pixel)
 */
 static struct pci_device_id supported[] = {
        {PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69000},
+#ifdef CONFIG_USE_CPCIDVI
+       {PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69030},
+#endif
        {}
 };
 
@@ -1121,7 +1127,22 @@ video_hw_init (void)
        pGD->cprBase = pci_mem_base;    /* Dummy */
        /* set up Hardware */
 
+#ifdef CONFIG_USE_CPCIDVI
+       if (device_id == PCI_DEVICE_ID_CT_69030) {
+               ctWrite (CT_MSR_W_O, 0x0b);
+               ctWrite (0x3cd, 0x13);
+               ctWrite_i (CT_FP_O, 0x02, 0x00);
+               ctWrite_i (CT_FP_O, 0x05, 0x00);
+               ctWrite_i (CT_FP_O, 0x06, 0x00);
+               ctWrite (0x3c2, 0x0b);
+               ctWrite_i (CT_FP_O, 0x02, 0x10);
+               ctWrite_i (CT_FP_O, 0x01, 0x09);
+       } else {
+               ctWrite (CT_MSR_W_O, 0x01);
+       }
+#else
        ctWrite (CT_MSR_W_O, 0x01);
+#endif
 
        /* set the extended Registers */
        ctLoadRegs (CT_XR_O, xreg);
index 5386d9269b61400482b9102da699e711ea5e3e06..c43cd5ec2fe918ca1cad7d59a618fc15e1b4f122 100644 (file)
@@ -214,7 +214,7 @@ int dc21x4x_initialize(bd_t *bis)
 {
        int                     idx=0;
        int                     card_number = 0;
-       int                     cfrv;
+       unsigned int            cfrv;
        unsigned char           timer;
        pci_dev_t               devbusfn;
        unsigned int            iobase;
@@ -708,7 +708,7 @@ static int write_srom(struct eth_device *dev, u_long ioaddr, int index, int new_
 #ifndef CONFIG_TULIP_FIX_DAVICOM
 static void read_hw_addr(struct eth_device *dev, bd_t *bis)
 {
-       u_short tmp, *p = (short *)(&dev->enetaddr[0]);
+       u_short tmp, *p = (u_short *)(&dev->enetaddr[0]);
        int i, j = 0;
 
        for (i = 0; i < (ETH_ALEN >> 1); i++) {
index cc50c26874f637cc38a26d2401203b26315fc201..927acbb26737a20e02962f67047e192545a870a1 100644 (file)
@@ -112,6 +112,7 @@ static int e1000_detect_gig_phy(struct e1000_hw *hw);
        readl((a)->hw_addr + E1000_##reg + ((offset) << 2)))
 #define E1000_WRITE_FLUSH(a) {uint32_t x; x = E1000_READ_REG(a, STATUS);}
 
+#ifndef CONFIG_AP1000 /* remove for warnings */
 /******************************************************************************
  * Raises the EEPROM's clock input.
  *
@@ -478,6 +479,7 @@ e1000_validate_eeprom_checksum(struct eth_device *nic)
                return -E1000_ERR_EEPROM;
        }
 }
+#endif /* #ifndef CONFIG_AP1000 */
 
 /******************************************************************************
  * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
@@ -488,6 +490,7 @@ e1000_validate_eeprom_checksum(struct eth_device *nic)
 static int
 e1000_read_mac_addr(struct eth_device *nic)
 {
+#ifndef CONFIG_AP1000
        struct e1000_hw *hw = nic->priv;
        uint16_t offset;
        uint16_t eeprom_data;
@@ -509,6 +512,32 @@ e1000_read_mac_addr(struct eth_device *nic)
                /* Invert the last bit if this is the second device */
                nic->enetaddr[5] += 1;
        }
+#else
+       /*
+        * The AP1000's e1000 has no eeprom; the MAC address is stored in the
+        * environment variables.  Currently this does not support the addition
+        * of a PMC e1000 card, which is certainly a possibility, so this should
+        * be updated to properly use the env variable only for the onboard e1000
+        */
+
+       int ii;
+       char *s, *e;
+
+       DEBUGFUNC();
+
+       s = getenv ("ethaddr");
+       if (s == NULL){
+               return -E1000_ERR_EEPROM;
+       }
+       else{
+               for(ii = 0; ii < 6; ii++) {
+                       nic->enetaddr[ii] = s ? simple_strtoul (s, &e, 16) : 0;
+                       if (s){
+                               s = (*e) ? e + 1 : e;
+                       }
+               }
+       }
+#endif
        return 0;
 }
 
@@ -876,6 +905,7 @@ e1000_setup_link(struct eth_device *nic)
 
        DEBUGFUNC();
 
+#ifndef CONFIG_AP1000
        /* Read and store word 0x0F of the EEPROM. This word contains bits
         * that determine the hardware's default PAUSE (flow control) mode,
         * a bit that determines whether the HW defaults to enabling or
@@ -888,6 +918,11 @@ e1000_setup_link(struct eth_device *nic)
                DEBUGOUT("EEPROM Read Error\n");
                return -E1000_ERR_EEPROM;
        }
+#else
+       /* we have to hardcode the proper value for our hardware. */
+       /* this value is for the 82540EM pci card used for prototyping, and it works. */
+       eeprom_data = 0xb220;
+#endif
 
        if (hw->fc == e1000_fc_default) {
                if ((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
@@ -2787,7 +2822,7 @@ e1000_poll(struct eth_device *nic)
        if (!(le32_to_cpu(rd->status)) & E1000_RXD_STAT_DD)
                return 0;
        /*DEBUGOUT("recv: packet len=%d \n", rd->length); */
-       NetReceive(packet, le32_to_cpu(rd->length));
+       NetReceive((uchar *)packet, le32_to_cpu(rd->length));
        fill_rx(hw);
        return 1;
 }
@@ -2950,12 +2985,14 @@ e1000_initialize(bd_t * bis)
                        free(nic);
                        return 0;
                }
+#ifndef CONFIG_AP1000
                if (e1000_validate_eeprom_checksum(nic) < 0) {
                        printf("The EEPROM Checksum Is Not Valid\n");
                        free(hw);
                        free(nic);
                        return 0;
                }
+#endif
                e1000_read_mac_addr(nic);
 
                E1000_WRITE_REG(hw, PBA, E1000_DEFAULT_PBA);
index 906159ee3c53390742040a99bfccbba4a3f62332..04c17f69f6e6d94a3b96a1519989a215c9cec1ba 100644 (file)
@@ -26,6 +26,7 @@
 #include <net.h>
 #include <asm/io.h>
 #include <pci.h>
+#include <miiphy.h>
 
 #undef DEBUG
 
 
        /* Ethernet chip registers.
         */
-#define SCBStatus              0       /* Rx/Command Unit Status *Word* */
-#define SCBIntAckByte          1       /* Rx/Command Unit STAT/ACK byte */
-#define SCBCmd                 2       /* Rx/Command Unit Command *Word* */
-#define SCBIntrCtlByte         3       /* Rx/Command Unit Intr.Control Byte */
-#define SCBPointer             4       /* General purpose pointer. */
-#define SCBPort                8       /* Misc. commands and operands. */
-#define SCBflash               12      /* Flash memory control. */
-#define SCBeeprom              14      /* EEPROM memory control. */
-#define SCBCtrlMDI             16      /* MDI interface control. */
-#define SCBEarlyRx             20      /* Early receive byte count. */
-#define SCBGenControl          28      /* 82559 General Control Register */
-#define SCBGenStatus           29      /* 82559 General Status register */
+#define SCBStatus              0       /* Rx/Command Unit Status *Word* */
+#define SCBIntAckByte          1       /* Rx/Command Unit STAT/ACK byte */
+#define SCBCmd                 2       /* Rx/Command Unit Command *Word* */
+#define SCBIntrCtlByte         3       /* Rx/Command Unit Intr.Control Byte */
+#define SCBPointer             4       /* General purpose pointer. */
+#define SCBPort                        8       /* Misc. commands and operands. */
+#define SCBflash               12      /* Flash memory control. */
+#define SCBeeprom              14      /* EEPROM memory control. */
+#define SCBCtrlMDI             16      /* MDI interface control. */
+#define SCBEarlyRx             20      /* Early receive byte count. */
+#define SCBGenControl          28      /* 82559 General Control Register */
+#define SCBGenStatus           29      /* 82559 General Status register */
 
        /* 82559 SCB status word defnitions
         */
-#define SCB_STATUS_CX          0x8000  /* CU finished command (transmit) */
-#define SCB_STATUS_FR          0x4000  /* frame received */
-#define SCB_STATUS_CNA         0x2000  /* CU left active state */
-#define SCB_STATUS_RNR         0x1000  /* receiver left ready state */
-#define SCB_STATUS_MDI         0x0800  /* MDI read/write cycle done */
-#define SCB_STATUS_SWI         0x0400  /* software generated interrupt */
-#define SCB_STATUS_FCP         0x0100  /* flow control pause interrupt */
+#define SCB_STATUS_CX          0x8000  /* CU finished command (transmit) */
+#define SCB_STATUS_FR          0x4000  /* frame received */
+#define SCB_STATUS_CNA         0x2000  /* CU left active state */
+#define SCB_STATUS_RNR         0x1000  /* receiver left ready state */
+#define SCB_STATUS_MDI         0x0800  /* MDI read/write cycle done */
+#define SCB_STATUS_SWI         0x0400  /* software generated interrupt */
+#define SCB_STATUS_FCP         0x0100  /* flow control pause interrupt */
 
-#define SCB_INTACK_MASK        0xFD00  /* all the above */
+#define SCB_INTACK_MASK                0xFD00  /* all the above */
 
-#define SCB_INTACK_TX          (SCB_STATUS_CX | SCB_STATUS_CNA)
-#define SCB_INTACK_RX          (SCB_STATUS_FR | SCB_STATUS_RNR)
+#define SCB_INTACK_TX          (SCB_STATUS_CX | SCB_STATUS_CNA)
+#define SCB_INTACK_RX          (SCB_STATUS_FR | SCB_STATUS_RNR)
 
        /* System control block commands
         */
 /* CU Commands */
-#define CU_NOP                 0x0000
-#define        CU_START                0x0010
-#define        CU_RESUME               0x0020
-#define        CU_STATSADDR            0x0040  /* Load Dump Statistics ctrs addr */
-#define        CU_SHOWSTATS            0x0050  /* Dump statistics counters. */
-#define        CU_ADDR_LOAD            0x0060  /* Base address to add to CU commands */
-#define        CU_DUMPSTATS            0x0070  /* Dump then reset stats counters. */
+#define CU_NOP                 0x0000
+#define CU_START               0x0010
+#define CU_RESUME              0x0020
+#define CU_STATSADDR           0x0040  /* Load Dump Statistics ctrs addr */
+#define CU_SHOWSTATS           0x0050  /* Dump statistics counters. */
+#define CU_ADDR_LOAD           0x0060  /* Base address to add to CU commands */
+#define CU_DUMPSTATS           0x0070  /* Dump then reset stats counters. */
 
 /* RUC Commands */
-#define RUC_NOP                0x0000
-#define        RUC_START               0x0001
-#define        RUC_RESUME              0x0002
-#define RUC_ABORT              0x0004
-#define        RUC_ADDR_LOAD           0x0006  /* (seems not to clear on acceptance) */
-#define RUC_RESUMENR           0x0007
-
-#define CU_CMD_MASK            0x00f0
-#define RU_CMD_MASK            0x0007
-
-#define SCB_M                  0x0100  /* 0 = enable interrupt, 1 = disable */
-#define SCB_SWI                0x0200  /* 1 - cause device to interrupt */
-
-#define CU_STATUS_MASK         0x00C0
-#define RU_STATUS_MASK         0x003C
-
-#define RU_STATUS_IDLE         (0<<2)
-#define RU_STATUS_SUS          (1<<2)
-#define RU_STATUS_NORES        (2<<2)
-#define RU_STATUS_READY        (4<<2)
-#define RU_STATUS_NO_RBDS_SUS   ((1<<2)|(8<<2))
+#define RUC_NOP                        0x0000
+#define RUC_START              0x0001
+#define RUC_RESUME             0x0002
+#define RUC_ABORT              0x0004
+#define RUC_ADDR_LOAD          0x0006  /* (seems not to clear on acceptance) */
+#define RUC_RESUMENR           0x0007
+
+#define CU_CMD_MASK            0x00f0
+#define RU_CMD_MASK            0x0007
+
+#define SCB_M                  0x0100  /* 0 = enable interrupt, 1 = disable */
+#define SCB_SWI                        0x0200  /* 1 - cause device to interrupt */
+
+#define CU_STATUS_MASK         0x00C0
+#define RU_STATUS_MASK         0x003C
+
+#define RU_STATUS_IDLE         (0<<2)
+#define RU_STATUS_SUS          (1<<2)
+#define RU_STATUS_NORES                (2<<2)
+#define RU_STATUS_READY                (4<<2)
+#define RU_STATUS_NO_RBDS_SUS  ((1<<2)|(8<<2))
 #define RU_STATUS_NO_RBDS_NORES ((2<<2)|(8<<2))
 #define RU_STATUS_NO_RBDS_READY ((4<<2)|(8<<2))
 
@@ -138,27 +139,27 @@ struct RxFD {
 };
 
 #define RFD_STATUS_C           0x8000  /* completion of received frame */
-#define RFD_STATUS_OK          0x2000  /* frame received with no errors */
-
-#define RFD_CONTROL_EL         0x8000  /* 1=last RFD in RFA */
-#define RFD_CONTROL_S          0x4000  /* 1=suspend RU after receiving frame */
-#define RFD_CONTROL_H          0x0010  /* 1=RFD is a header RFD */
-#define RFD_CONTROL_SF         0x0008  /* 0=simplified, 1=flexible mode */
-
-#define RFD_COUNT_MASK         0x3fff
-#define RFD_COUNT_F            0x4000
-#define RFD_COUNT_EOF          0x8000
-
-#define RFD_RX_CRC             0x0800  /* crc error */
-#define RFD_RX_ALIGNMENT       0x0400  /* alignment error */
-#define RFD_RX_RESOURCE        0x0200  /* out of space, no resources */
-#define RFD_RX_DMA_OVER        0x0100  /* DMA overrun */
-#define RFD_RX_SHORT           0x0080  /* short frame error */
-#define RFD_RX_LENGTH          0x0020
-#define RFD_RX_ERROR           0x0010  /* receive error */
-#define RFD_RX_NO_ADR_MATCH    0x0004  /* no address match */
-#define RFD_RX_IA_MATCH        0x0002  /* individual address does not match */
-#define RFD_RX_TCO             0x0001  /* TCO indication */
+#define RFD_STATUS_OK          0x2000  /* frame received with no errors */
+
+#define RFD_CONTROL_EL         0x8000  /* 1=last RFD in RFA */
+#define RFD_CONTROL_S          0x4000  /* 1=suspend RU after receiving frame */
+#define RFD_CONTROL_H          0x0010  /* 1=RFD is a header RFD */
+#define RFD_CONTROL_SF         0x0008  /* 0=simplified, 1=flexible mode */
+
+#define RFD_COUNT_MASK         0x3fff
+#define RFD_COUNT_F            0x4000
+#define RFD_COUNT_EOF          0x8000
+
+#define RFD_RX_CRC             0x0800  /* crc error */
+#define RFD_RX_ALIGNMENT       0x0400  /* alignment error */
+#define RFD_RX_RESOURCE                0x0200  /* out of space, no resources */
+#define RFD_RX_DMA_OVER                0x0100  /* DMA overrun */
+#define RFD_RX_SHORT           0x0080  /* short frame error */
+#define RFD_RX_LENGTH          0x0020
+#define RFD_RX_ERROR           0x0010  /* receive error */
+#define RFD_RX_NO_ADR_MATCH    0x0004  /* no address match */
+#define RFD_RX_IA_MATCH                0x0002  /* individual address does not match */
+#define RFD_RX_TCO             0x0001  /* TCO indication */
 
        /* Transmit frame descriptors
         */
@@ -176,45 +177,45 @@ struct TxFD {                             /* Transmit frame descriptor set. */
 };
 
 #define TxCB_CMD_TRANSMIT      0x0004  /* transmit command */
-#define TxCB_CMD_SF            0x0008  /* 0=simplified, 1=flexible mode */
-#define TxCB_CMD_NC            0x0010  /* 0=CRC insert by controller */
-#define TxCB_CMD_I             0x2000  /* generate interrupt on completion */
-#define TxCB_CMD_S             0x4000  /* suspend on completion */
-#define TxCB_CMD_EL            0x8000  /* last command block in CBL */
+#define TxCB_CMD_SF            0x0008  /* 0=simplified, 1=flexible mode */
+#define TxCB_CMD_NC            0x0010  /* 0=CRC insert by controller */
+#define TxCB_CMD_I             0x2000  /* generate interrupt on completion */
+#define TxCB_CMD_S             0x4000  /* suspend on completion */
+#define TxCB_CMD_EL            0x8000  /* last command block in CBL */
 
-#define TxCB_COUNT_MASK        0x3fff
-#define TxCB_COUNT_EOF         0x8000
+#define TxCB_COUNT_MASK                0x3fff
+#define TxCB_COUNT_EOF         0x8000
 
        /* The Speedo3 Rx and Tx frame/buffer descriptors.
         */
 struct descriptor {                    /* A generic descriptor. */
        volatile u16 status;
        volatile u16 command;
-       volatile u32 link;              /* struct descriptor *  */
+       volatile u32 link;              /* struct descriptor *  */
 
        unsigned char params[0];
 };
 
-#define CFG_CMD_EL             0x8000
-#define CFG_CMD_SUSPEND        0x4000
-#define CFG_CMD_INT            0x2000
-#define CFG_CMD_IAS            0x0001  /* individual address setup */
-#define CFG_CMD_CONFIGURE      0x0002  /* configure */
+#define CFG_CMD_EL             0x8000
+#define CFG_CMD_SUSPEND                0x4000
+#define CFG_CMD_INT            0x2000
+#define CFG_CMD_IAS            0x0001  /* individual address setup */
+#define CFG_CMD_CONFIGURE      0x0002  /* configure */
 
-#define CFG_STATUS_C           0x8000
-#define CFG_STATUS_OK          0x2000
+#define CFG_STATUS_C           0x8000
+#define CFG_STATUS_OK          0x2000
 
        /* Misc.
         */
-#define NUM_RX_DESC            PKTBUFSRX
-#define NUM_TX_DESC            1       /* Number of TX descriptors   */
+#define NUM_RX_DESC            PKTBUFSRX
+#define NUM_TX_DESC            1       /* Number of TX descriptors   */
 
 #define TOUT_LOOP              1000000
 
 #define ETH_ALEN               6
 
-static struct RxFD rx_ring[NUM_RX_DESC];       /* RX descriptor ring         */
-static struct TxFD tx_ring[NUM_TX_DESC];       /* TX descriptor ring         */
+static struct RxFD rx_ring[NUM_RX_DESC];       /* RX descriptor ring         */
+static struct TxFD tx_ring[NUM_TX_DESC];       /* TX descriptor ring         */
 static int rx_next;                    /* RX descriptor ring pointer */
 static int tx_next;                    /* TX descriptor ring pointer */
 static int tx_threshold;
@@ -271,8 +272,124 @@ static inline void OUTL (struct eth_device *dev, int command, u_long addr)
        *(volatile u32 *) ((addr + dev->iobase)) = cpu_to_le32 (command);
 }
 
-       /* Wait for the chip get the command.
-        */
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+static inline int INL (struct eth_device *dev, u_long addr)
+{
+       return le32_to_cpu (*(volatile u32 *) (addr + dev->iobase));
+}
+
+static int get_phyreg (struct eth_device *dev, unsigned char addr,
+               unsigned char reg, unsigned short *value)
+{
+       int cmd;
+       int timeout = 50;
+
+       /* read requested data */
+       cmd = (2 << 26) | ((addr & 0x1f) << 21) | ((reg & 0x1f) << 16);
+       OUTL (dev, cmd, SCBCtrlMDI);
+
+       do {
+               udelay(1000);
+               cmd = INL (dev, SCBCtrlMDI);
+       } while (!(cmd & (1 << 28)) && (--timeout));
+
+       if (timeout == 0)
+               return -1;
+
+       *value = (unsigned short) (cmd & 0xffff);
+
+       return 0;
+}
+
+static int set_phyreg (struct eth_device *dev, unsigned char addr,
+               unsigned char reg, unsigned short value)
+{
+       int cmd;
+       int timeout = 50;
+
+       /* write requested data */
+       cmd = (1 << 26) | ((addr & 0x1f) << 21) | ((reg & 0x1f) << 16);
+       OUTL (dev, cmd | value, SCBCtrlMDI);
+
+       while (!(INL (dev, SCBCtrlMDI) & (1 << 28)) && (--timeout))
+               udelay(1000);
+
+       if (timeout == 0)
+               return -1;
+
+       return 0;
+}
+
+/* Check if given phyaddr is valid, i.e. there is a PHY connected.
+ * Do this by checking model value field from ID2 register.
+ */
+static struct eth_device* verify_phyaddr (char *devname, unsigned char addr)
+{
+       struct eth_device *dev;
+       unsigned short value;
+       unsigned char model;
+
+       dev = eth_get_dev_by_name(devname);
+       if (dev == NULL) {
+               printf("%s: no such device\n", devname);
+               return NULL;
+       }
+
+       /* read id2 register */
+       if (get_phyreg(dev, addr, PHY_PHYIDR2, &value) != 0) {
+               printf("%s: mii read timeout!\n", devname);
+               return NULL;
+       }
+
+       /* get model */
+       model = (unsigned char)((value >> 4) & 0x003f);
+
+       if (model == 0) {
+               printf("%s: no PHY at address %d\n", devname, addr);
+               return NULL;
+       }
+
+       return dev;
+}
+
+static int eepro100_miiphy_read (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value)
+{
+       struct eth_device *dev;
+
+       dev = verify_phyaddr(devname, addr);
+       if (dev == NULL)
+               return -1;
+
+       if (get_phyreg(dev, addr, reg, value) != 0) {
+               printf("%s: mii read timeout!\n", devname);
+               return -1;
+       }
+
+       return 0;
+}
+
+static int eepro100_miiphy_write (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
+{
+       struct eth_device *dev;
+
+       dev = verify_phyaddr(devname, addr);
+       if (dev == NULL)
+               return -1;
+
+       if (set_phyreg(dev, addr, reg, value) != 0) {
+               printf("%s: mii write timeout!\n", devname);
+               return -1;
+       }
+
+       return 0;
+}
+
+#endif /* defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) */
+
+/* Wait for the chip get the command.
+*/
 static int wait_for_eepro100 (struct eth_device *dev)
 {
        int i;
@@ -345,6 +462,12 @@ int eepro100_initialize (bd_t * bis)
 
                eth_register (dev);
 
+#if defined (CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+               /* register mii command access routines */
+               miiphy_register(dev->name,
+                               eepro100_miiphy_read, eepro100_miiphy_write);
+#endif
+
                card_number++;
 
                /* Set the latency timer for value.
@@ -723,12 +846,12 @@ int eepro100_write_eeprom (struct eth_device* dev, int location, int addr_len, u
     OUTW(dev, EE_ENB | dataval, SCBeeprom);
     udelay(1);
 
-    datalong = datalong << 1; /* Adjust significant data bit*/
+    datalong = datalong << 1;  /* Adjust significant data bit*/
     }
 
     /* Finish up command  (toggle CS) */
     OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom);
-    udelay(1);                /* delay for more than 250 ns */
+    udelay(1);                 /* delay for more than 250 ns */
     OUTW(dev, EE_ENB, SCBeeprom);
 
     /* Wait for programming ready (D0 = 1) */
index e21978dc249a16dbdb06947c418226f0d27f920c..5f273a267d5ef66ca303a35d6f721dbd5b4b4f85 100644 (file)
 
 #ifdef CONFIG_I8042_KBD
 
+#ifdef CONFIG_USE_CPCIDVI
+extern u8  gt_cpcidvi_in8(u32 offset);
+extern void gt_cpcidvi_out8(u32 offset, u8 data);
+
+#define in8(a)     gt_cpcidvi_in8(a)
+#define out8(a, b) gt_cpcidvi_out8(a,b)
+#endif
+
 #include <i8042.h>
 
 /* defines */
@@ -318,6 +326,13 @@ int i8042_kbd_init (void)
     int keymap, try;
     char *penv;
 
+#ifdef CONFIG_USE_CPCIDVI
+    if ((penv = getenv ("console")) != NULL) {
+            if (strncmp (penv, "serial", 7) == 0) {
+                   return -1;
+           }
+    }
+#endif
     /* Init keyboard device (default US layout) */
     keymap = KBD_US;
     if ((penv = getenv ("keymap")) != NULL)
@@ -633,7 +648,11 @@ static int kbd_reset (void)
     if (kbd_input_empty() == 0)
        return -1;
 
+#ifdef CONFIG_USE_CPCIDVI
+    out8 (I8042_COMMAND_REG, 0x60);
+#else
     out8 (I8042_DATA_REG, 0x60);
+#endif
 
     if (kbd_input_empty() == 0)
        return -1;
index 5c2afcef231cb8e8766b1737f62951b3f54f35a3..b7d7455b9d083ee415fb2f351e12914b38c9e7cb 100644 (file)
@@ -78,17 +78,27 @@ typedef unsigned long int           dword;
 
 #ifdef CONFIG_PXA250
 
-#define        SMC_inl(r)      (*((volatile dword *)(SMC_BASE_ADDRESS+( r * 4 ))))
-#define        SMC_inw(r)      (*((volatile word *)(SMC_BASE_ADDRESS+( r * 4 ))))
-#define SMC_inb(p)     ({ \
-       unsigned int __p = (unsigned int)(SMC_BASE_ADDRESS + (p * 4)); \
-       unsigned int __v = *(volatile unsigned short *)((__p) & ~1); \
+#ifdef CONFIG_LUBBOCK
+#define        SMC_IO_SHIFT    2
+#undef USE_32_BIT
+
+#else
+#define        SMC_IO_SHIFT    0
+#endif
+
+#define        SMCREG(r)       (SMC_BASE_ADDRESS+((r)<<SMC_IO_SHIFT))
+
+#define        SMC_inl(r)      (*((volatile dword *)SMCREG(r)))
+#define        SMC_inw(r)      (*((volatile word *)SMCREG(r)))
+#define SMC_inb(p) ({ \
+       unsigned int __p = p; \
+       unsigned int __v = SMC_inw(__p & ~1); \
        if (__p & 1) __v >>= 8; \
        else __v &= 0xff; \
        __v; })
 
-#define        SMC_outl(d,r)   (*((volatile dword *)(SMC_BASE_ADDRESS+(r * 4))) = d)
-#define        SMC_outw(d,r)   (*((volatile word *)(SMC_BASE_ADDRESS+(r * 4))) = d)
+#define        SMC_outl(d,r)   (*((volatile dword *)SMCREG(r)) = d)
+#define        SMC_outw(d,r)   (*((volatile word *)SMCREG(r)) = d)
 #define        SMC_outb(d,r)   ({      word __d = (byte)(d);  \
                                word __w = SMC_inw((r)&~1);  \
                                __w &= ((r)&1) ? 0x00FF : 0xFF00;  \
index b421d4c1c36c34b83fca1dad5c96e3178da90820..07e2549352c72e61fa8ed760692eeea585938903 100644 (file)
@@ -19,6 +19,8 @@
  * $Id: diskonchip.c,v 1.45 2005/01/05 18:05:14 dwmw2 Exp $
  */
 
+#include <common.h>
+#ifdef CONFIG_NEW_NAND_CODE
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/sched.h>
@@ -1780,3 +1782,4 @@ module_exit(cleanup_nanddoc);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
 MODULE_DESCRIPTION("M-Systems DiskOnChip 2000, Millennium and Millennium Plus device driver\n");
+#endif /* CONFIG_NEW_NAND_CODE */
index d187c89ea1311011cfa8b4311da3ca4769a9b984..bc85005b2af28429898691143ca2a13ee4e2da0b 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <common.h>
 
+#ifdef CONFIG_NEW_NAND_CODE
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
 
 #include <nand.h>
@@ -46,12 +47,12 @@ static void nand_init_chip(struct mtd_info *mtd, struct nand_chip *nand,
 {
        mtd->priv = nand;
 
-       nand->IO_ADDR_R = nand->IO_ADDR_W = base_addr;
+       nand->IO_ADDR_R = nand->IO_ADDR_W = (void  __iomem *)base_addr;
        board_nand_init(nand);
 
        if (nand_scan(mtd, 1) == 0) {
                if (!mtd->name)
-                       mtd->name = default_nand_name;
+                       mtd->name = (char *)default_nand_name;
        } else
                mtd->name = NULL;
 
@@ -60,12 +61,16 @@ static void nand_init_chip(struct mtd_info *mtd, struct nand_chip *nand,
 void nand_init(void)
 {
        int i;
-
+       unsigned int size = 0;
        for (i = 0; i < CFG_MAX_NAND_DEVICE; i++) {
                nand_init_chip(&nand_info[i], &nand_chip[i], base_address[i]);
+               size += nand_info[i].size;
                if (nand_curr_device == -1)
                        nand_curr_device = i;
-       }
+}
+       printf("%lu MiB\n", size / (1024 * 1024));
 }
 
 #endif
+#endif /* CONFIG_NEW_NAND_CODE */
+
index 9ec5af9d714559ad6c655c2006c7f183ff4cf44f..b039c3cd8c1b4ac1c8bdb2535c56b9963f3183dd 100644 (file)
@@ -71,6 +71,7 @@
 #endif
 
 #include <common.h>
+#ifdef CONFIG_NEW_NAND_CODE
 
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
 
@@ -847,11 +848,13 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *this, int state)
        else
                this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
 
-       reset_timer_masked();
+       reset_timer();
 
        while (1) {
-               if (get_timer_masked() > timeo)
+               if (get_timer(0) > timeo) {
+                       printf("Timeout!");
                        return 0;
+                       }
 
                if (this->dev_ready) {
                        if (this->dev_ready(mtd))
@@ -862,6 +865,10 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *this, int state)
                }
        }
 
+       /* XXX nand device 1 on dave (PPChameleonEVB) needs more time */
+       reset_timer();
+       while (get_timer(0) < 10);
+
        return this->read_byte(mtd);
 }
 #endif
@@ -2393,9 +2400,6 @@ int nand_scan (struct mtd_info *mtd, int maxchips)
                        if (nand_manuf_ids[j].id == nand_maf_id)
                                break;
                }
-               printk (KERN_INFO "NAND device: Manufacturer ID:"
-                       " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id,
-                       nand_manuf_ids[j].name , nand_flash_ids[i].name);
                break;
        }
 
@@ -2656,3 +2660,5 @@ void nand_release (struct mtd_info *mtd)
 }
 
 #endif
+#endif /* CONFIG_NEW_NAND_CODE */
+
index dfa88a3af6f0073c4e6a98979e2aac0a7b9737d7..f4813088b5e3ed45a61ee3571458704f30f0cb6c 100644 (file)
@@ -54,6 +54,7 @@
 
 #include <common.h>
 
+#ifdef CONFIG_NEW_NAND_CODE
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
 
 #include <malloc.h>
@@ -261,8 +262,6 @@ static void create_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
        loff_t from;
        size_t readlen, ooblen;
 
-       printk (KERN_INFO "Scanning device for bad blocks\n");
-
        if (bd->options & NAND_BBT_SCANALLPAGES)
                len = 1 << (this->bbt_erase_shift - this->page_shift);
        else {
@@ -298,8 +297,6 @@ static void create_bbt (struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
                for (j = 0; j < len; j++) {
                        if (check_pattern (&buf[j * scanlen], scanlen, mtd->oobblock, bd)) {
                                this->bbt[i >> 3] |= 0x03 << (i & 0x6);
-                               printk (KERN_WARNING "Bad eraseblock %d at 0x%08x\n",
-                                       i >> 1, (unsigned int) from);
                                break;
                        }
                }
@@ -1054,3 +1051,5 @@ int nand_isbad_bbt (struct mtd_info *mtd, loff_t offs, int allowbbt)
 }
 
 #endif
+#endif /* CONFIG_NEW_NAND_CODE */
+
index 6e11c22858c3d3b73db913e2b53750f912c90f51..4e610c1123e5f5b458805c15a7d230699b5645c9 100644 (file)
 
 #include <common.h>
 
+#ifdef CONFIG_NEW_NAND_CODE
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
 
+#include<linux/mtd/mtd.h>
 /*
  * Pre-calculated 256-way 1 byte column parity
  */
@@ -241,3 +243,5 @@ int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_cha
 }
 
 #endif /* CONFIG_COMMANDS & CFG_CMD_NAND */
+#endif /* CONFIG_NEW_NAND_CODE */
+
index 39882cc76b24b8e59a853047bcfbd9952c888345..d3553261073759edd943f6cc30f96f6ef6e62768 100644 (file)
  * published by the Free Software Foundation.
  *
  */
+
 #include <common.h>
 
+#ifdef CONFIG_NEW_NAND_CODE
 #if (CONFIG_COMMANDS & CFG_CMD_NAND)
 
 #include <linux/mtd/nand.h>
@@ -125,3 +127,5 @@ struct nand_manufacturers nand_manuf_ids[] = {
        {0x0, "Unknown"}
 };
 #endif
+#endif /* CONFIG_NEW_NAND_CODE */
+
index 1c1b9a09b802af2d97cd2ed08214701e556de0dd..b009db63ebe404f5e816b8a0de22d7050f222fb7 100644 (file)
@@ -756,6 +756,7 @@ natsemi_send(struct eth_device *dev, volatile void *packet, int length)
 {
        u32 i, status = 0;
        u32 tx_status = 0;
+       vu_long *res = (vu_long *)&tx_status;
 
        /* Stop the transmitter */
        OUTL(dev, TxOff, ChipCmd);
@@ -781,7 +782,7 @@ natsemi_send(struct eth_device *dev, volatile void *packet, int length)
        OUTL(dev, TxOn, ChipCmd);
 
        for (i = 0;
-            ((vu_long)tx_status = le32_to_cpu(txd.cmdsts)) & DescOwn;
+            (*res = le32_to_cpu(txd.cmdsts)) & DescOwn;
             i++) {
                if (i >= TOUT_LOOP) {
                        printf
index 9cf6cd6339951cbe7b1f91b73a061bb5c4c57653..9a0a24f3ac4bd8fb402723e00295fd12d220991a 100644 (file)
 #include <devices.h>
 #include <net.h>
 
-#ifndef CONFIG_NET_MULTI
-#error define CONFIG_NET_MULTI to use netconsole
-#endif
-
 static char input_buffer[512];
 static int input_size = 0;             /* char count in input buffer */
 static int input_offset = 0;           /* offset to valid chars in input buffer */
diff --git a/drivers/ns7520_eth.c b/drivers/ns7520_eth.c
new file mode 100644 (file)
index 0000000..a5a20df
--- /dev/null
@@ -0,0 +1,859 @@
+/***********************************************************************
+ *
+ * Copyright (C) 2005 by Videon Central, Inc.
+ *
+ * $Id$
+ * @Author: Arthur Shipkowski
+ * @Descr: Ethernet driver for the NS7520. Uses polled Ethernet, like
+ *     the older netarmeth driver.  Note that attempting to filter
+ *     broadcast and multicast out in the SAFR register will cause
+ *     bad things due to released errata.
+ * @References: [1] NS7520 Hardware Reference, December 2003
+ *             [2] Intel LXT971 Datasheet #249414 Rev. 02
+ *
+ ***********************************************************************/
+
+#include <common.h>
+
+#if defined(CONFIG_DRIVER_NS7520_ETHERNET)
+
+#include <net.h>               /* NetSendPacket */
+#include <asm/arch/netarm_registers.h>
+#include <asm/arch/netarm_dma_module.h>
+
+#include "ns7520_eth.h"                /* for Ethernet and PHY */
+
+/**
+ * Send an error message to the terminal.
+ */
+#define ERROR(x) \
+do { \
+       char *__foo = strrchr(__FILE__, '/'); \
+       \
+       printf("%s: %d: %s(): ", (__foo == NULL ? __FILE__ : (__foo + 1)), \
+                       __LINE__, __FUNCTION__); \
+       printf x; printf("\n"); \
+} while (0);
+
+/* some definition to make transistion to linux easier */
+
+#define NS7520_DRIVER_NAME     "eth"
+#define KERN_WARNING           "Warning:"
+#define KERN_ERR               "Error:"
+#define KERN_INFO              "Info:"
+
+#if 1
+# define DEBUG
+#endif
+
+#ifdef DEBUG
+# define printk                        printf
+
+# define DEBUG_INIT            0x0001
+# define DEBUG_MINOR           0x0002
+# define DEBUG_RX              0x0004
+# define DEBUG_TX              0x0008
+# define DEBUG_INT             0x0010
+# define DEBUG_POLL            0x0020
+# define DEBUG_LINK            0x0040
+# define DEBUG_MII             0x0100
+# define DEBUG_MII_LOW         0x0200
+# define DEBUG_MEM             0x0400
+# define DEBUG_ERROR           0x4000
+# define DEBUG_ERROR_CRIT      0x8000
+
+static int nDebugLvl = DEBUG_ERROR_CRIT;
+
+# define DEBUG_ARGS0( FLG, a0 ) if( ( nDebugLvl & (FLG) ) == (FLG) ) \
+               printf("%s: " a0, __FUNCTION__, 0, 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS1( FLG, a0, a1 ) if( ( nDebugLvl & (FLG) ) == (FLG)) \
+               printf("%s: " a0, __FUNCTION__, (int)(a1), 0, 0, 0, 0, 0 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 ) if( (nDebugLvl & (FLG)) ==(FLG))\
+               printf("%s: " a0, __FUNCTION__, (int)(a1), (int)(a2), 0, 0,0,0 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 ) if((nDebugLvl &(FLG))==(FLG))\
+               printf("%s: "a0,__FUNCTION__,(int)(a1),(int)(a2),(int)(a3),0,0,0)
+# define DEBUG_FN( FLG ) if( (nDebugLvl & (FLG)) == (FLG) ) \
+               printf("\r%s:line %d\n", (int)__FUNCTION__, __LINE__, 0,0,0,0);
+# define ASSERT( expr, func ) if( !( expr ) ) { \
+               printf( "Assertion failed! %s:line %d %s\n", \
+               (int)__FUNCTION__,__LINE__,(int)(#expr),0,0,0); \
+               func }
+#else                          /* DEBUG */
+# define printk(...)
+# define DEBUG_ARGS0( FLG, a0 )
+# define DEBUG_ARGS1( FLG, a0, a1 )
+# define DEBUG_ARGS2( FLG, a0, a1, a2 )
+# define DEBUG_ARGS3( FLG, a0, a1, a2, a3 )
+# define DEBUG_FN( n )
+# define ASSERT(expr, func)
+#endif                         /* DEBUG */
+
+#define NS7520_MII_NEG_DELAY           (5*CFG_HZ)      /* in s */
+#define TX_TIMEOUT                     (5*CFG_HZ)      /* in s */
+#define RX_STALL_WORKAROUND_CNT 100
+
+static int ns7520_eth_reset(void);
+
+static void ns7520_link_auto_negotiate(void);
+static void ns7520_link_update_egcr(void);
+static void ns7520_link_print_changed(void);
+
+/* the PHY stuff */
+
+static char ns7520_mii_identify_phy(void);
+static unsigned short ns7520_mii_read(unsigned short uiRegister);
+static void ns7520_mii_write(unsigned short uiRegister,
+                            unsigned short uiData);
+static unsigned int ns7520_mii_get_clock_divisor(unsigned int
+                                                unMaxMDIOClk);
+static unsigned int ns7520_mii_poll_busy(void);
+
+static unsigned int nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+static unsigned int uiLastLinkStatus;
+static PhyType phyDetected = PHY_NONE;
+
+/***********************************************************************
+ * @Function: eth_init
+ * @Return: -1 on failure otherwise 0
+ * @Descr: Initializes the ethernet engine and uses either FS Forth's default
+ *        MAC addr or the one in environment
+ ***********************************************************************/
+
+int eth_init(bd_t * pbis)
+{
+       unsigned char aucMACAddr[6];
+       char *pcTmp = getenv("ethaddr");
+       char *pcEnd;
+       int i;
+
+       DEBUG_FN(DEBUG_INIT);
+
+       /* no need to check for hardware */
+
+       if (!ns7520_eth_reset())
+               return -1;
+
+       if (NULL == pcTmp)
+               return -1;
+
+       for (i = 0; i < 6; i++) {
+               aucMACAddr[i] =
+                   pcTmp ? simple_strtoul(pcTmp, &pcEnd, 16) : 0;
+               pcTmp = (*pcTmp) ? pcEnd + 1 : pcEnd;
+       }
+
+       /* configure ethernet address */
+
+       *get_eth_reg_addr(NS7520_ETH_SA1) =
+           aucMACAddr[5] << 8 | aucMACAddr[4];
+       *get_eth_reg_addr(NS7520_ETH_SA2) =
+           aucMACAddr[3] << 8 | aucMACAddr[2];
+       *get_eth_reg_addr(NS7520_ETH_SA3) =
+           aucMACAddr[1] << 8 | aucMACAddr[0];
+
+       /* enable hardware */
+
+       *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
+       *get_eth_reg_addr(NS7520_ETH_SUPP) = NS7520_ETH_SUPP_JABBER;
+       *get_eth_reg_addr(NS7520_ETH_MAC1) = NS7520_ETH_MAC1_RXEN;
+
+       /* the linux kernel may give packets < 60 bytes, for example arp */
+       *get_eth_reg_addr(NS7520_ETH_MAC2) = NS7520_ETH_MAC2_CRCEN |
+           NS7520_ETH_MAC2_PADEN | NS7520_ETH_MAC2_HUGE;
+
+       /* Broadcast/multicast allowed; if you don't set this even unicast chokes */
+       /* Based on NS7520 errata documentation */
+       *get_eth_reg_addr(NS7520_ETH_SAFR) =
+           NS7520_ETH_SAFR_BROAD | NS7520_ETH_SAFR_PRM;
+
+       /* enable receive and transmit FIFO, use 10/100 Mbps MII */
+       *get_eth_reg_addr(NS7520_ETH_EGCR) |=
+           NS7520_ETH_EGCR_ETXWM_75 |
+           NS7520_ETH_EGCR_ERX |
+           NS7520_ETH_EGCR_ERXREG |
+           NS7520_ETH_EGCR_ERXBR | NS7520_ETH_EGCR_ETX;
+
+       return 0;
+}
+
+/***********************************************************************
+ * @Function: eth_send
+ * @Return: -1 on timeout otherwise 1
+ * @Descr: sends one frame by DMA
+ ***********************************************************************/
+
+int eth_send(volatile void *pPacket, int nLen)
+{
+       int i, length32, retval = 1;
+       char *pa;
+       unsigned int *pa32, lastp = 0, rest;
+       unsigned int status;
+
+       pa = (char *) pPacket;
+       pa32 = (unsigned int *) pPacket;
+       length32 = nLen / 4;
+       rest = nLen % 4;
+
+       /* make sure there's no garbage in the last word */
+       switch (rest) {
+       case 0:
+               lastp = pa32[length32 - 1];
+               length32--;
+               break;
+       case 1:
+               lastp = pa32[length32] & 0x000000ff;
+               break;
+       case 2:
+               lastp = pa32[length32] & 0x0000ffff;
+               break;
+       case 3:
+               lastp = pa32[length32] & 0x00ffffff;
+               break;
+       }
+
+       while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+               NS7520_ETH_EGSR_TXREGE)
+              == 0) {
+       }
+
+       /* write to the fifo */
+       for (i = 0; i < length32; i++)
+               *get_eth_reg_addr(NS7520_ETH_FIFO) = pa32[i];
+
+       /* the last word is written to an extra register, this
+          starts the transmission */
+       *get_eth_reg_addr(NS7520_ETH_FIFOL) = lastp;
+
+       /* Wait for it to be done */
+       while ((*get_eth_reg_addr(NS7520_ETH_EGSR) & NS7520_ETH_EGSR_TXBC)
+              == 0) {
+       }
+       status = (*get_eth_reg_addr(NS7520_ETH_ETSR));
+       *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_TXBC;      /* Clear it now */
+
+       if (status & NS7520_ETH_ETSR_TXOK) {
+               retval = 0;     /* We're OK! */
+       } else if (status & NS7520_ETH_ETSR_TXDEF) {
+               printf("Deferred, we'll see.\n");
+               retval = 0;
+       } else if (status & NS7520_ETH_ETSR_TXAL) {
+               printf("Late collision error, %d collisions.\n",
+                      (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
+                      NS7520_ETH_ETSR_TXCOLC);
+       } else if (status & NS7520_ETH_ETSR_TXAEC) {
+               printf("Excessive collisions: %d\n",
+                      (*get_eth_reg_addr(NS7520_ETH_ETSR)) &
+                      NS7520_ETH_ETSR_TXCOLC);
+       } else if (status & NS7520_ETH_ETSR_TXAED) {
+               printf("Excessive deferral on xmit.\n");
+       } else if (status & NS7520_ETH_ETSR_TXAUR) {
+               printf("Packet underrun.\n");
+       } else if (status & NS7520_ETH_ETSR_TXAJ) {
+               printf("Jumbo packet error.\n");
+       } else {
+               printf("Error: Should never get here.\n");
+       }
+
+       return (retval);
+}
+
+/***********************************************************************
+ * @Function: eth_rx
+ * @Return: size of last frame in bytes or 0 if no frame available
+ * @Descr: gives one frame to U-Boot which has been copied by DMA engine already
+ *        to NetRxPackets[ 0 ].
+ ***********************************************************************/
+
+int eth_rx(void)
+{
+       int i;
+       unsigned short rxlen;
+       unsigned short totrxlen = 0;
+       unsigned int *addr;
+       unsigned int rxstatus, lastrxlen;
+       char *pa;
+
+       /* If RXBR is 1, data block was received */
+       while (((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+               NS7520_ETH_EGSR_RXBR) == NS7520_ETH_EGSR_RXBR) {
+
+               /* get status register and the length of received block */
+               rxstatus = *get_eth_reg_addr(NS7520_ETH_ERSR);
+               rxlen = (rxstatus & NS7520_ETH_ERSR_RXSIZE) >> 16;
+
+               /* clear RXBR to make fifo available */
+               *get_eth_reg_addr(NS7520_ETH_EGSR) = NS7520_ETH_EGSR_RXBR;
+
+               if (rxstatus & NS7520_ETH_ERSR_ROVER) {
+                       printf("Receive overrun, resetting FIFO.\n");
+                       *get_eth_reg_addr(NS7520_ETH_EGCR) &=
+                           ~NS7520_ETH_EGCR_ERX;
+                       udelay(20);
+                       *get_eth_reg_addr(NS7520_ETH_EGCR) |=
+                           NS7520_ETH_EGCR_ERX;
+               }
+               if (rxlen == 0) {
+                       printf("Nothing.\n");
+                       return 0;
+               }
+
+               addr = (unsigned int *) NetRxPackets[0];
+               pa = (char *) NetRxPackets[0];
+
+               /* read the fifo */
+               for (i = 0; i < rxlen / 4; i++) {
+                       *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
+                       addr++;
+               }
+
+               if ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+                   NS7520_ETH_EGSR_RXREGR) {
+                       /* RXFDB indicates wether the last word is 1,2,3 or 4 bytes long */
+                       lastrxlen =
+                           ((*get_eth_reg_addr(NS7520_ETH_EGSR)) &
+                            NS7520_ETH_EGSR_RXFDB_MA) >> 28;
+                       *addr = *get_eth_reg_addr(NS7520_ETH_FIFO);
+                       switch (lastrxlen) {
+                       case 1:
+                               *addr &= 0xff000000;
+                               break;
+                       case 2:
+                               *addr &= 0xffff0000;
+                               break;
+                       case 3:
+                               *addr &= 0xffffff00;
+                               break;
+                       }
+               }
+
+               /* Pass the packet up to the protocol layers. */
+               NetReceive(NetRxPackets[0], rxlen - 4);
+               totrxlen += rxlen - 4;
+       }
+
+       return totrxlen;
+}
+
+/***********************************************************************
+ * @Function: eth_halt
+ * @Return: n/a
+ * @Descr: stops the ethernet engine
+ ***********************************************************************/
+
+void eth_halt(void)
+{
+       DEBUG_FN(DEBUG_INIT);
+
+       *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_RXEN;
+       *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~(NS7520_ETH_EGCR_ERX |
+                                               NS7520_ETH_EGCR_ERXDMA |
+                                               NS7520_ETH_EGCR_ERXREG |
+                                               NS7520_ETH_EGCR_ERXBR |
+                                               NS7520_ETH_EGCR_ETX |
+                                               NS7520_ETH_EGCR_ETXDMA);
+}
+
+/***********************************************************************
+ * @Function: ns7520_eth_reset
+ * @Return: 0 on failure otherwise 1
+ * @Descr: resets the ethernet interface and the PHY,
+ *        performs auto negotiation or fixed modes
+ ***********************************************************************/
+
+static int ns7520_eth_reset(void)
+{
+       DEBUG_FN(DEBUG_MINOR);
+
+       /* Reset important registers */
+       *get_eth_reg_addr(NS7520_ETH_EGCR) = 0; /* Null it out! */
+       *get_eth_reg_addr(NS7520_ETH_MAC1) &= NS7520_ETH_MAC1_SRST;
+       *get_eth_reg_addr(NS7520_ETH_MAC2) = 0;
+       /* Reset MAC */
+       *get_eth_reg_addr(NS7520_ETH_EGCR) |= NS7520_ETH_EGCR_MAC_RES;
+       udelay(5);
+       *get_eth_reg_addr(NS7520_ETH_EGCR) &= ~NS7520_ETH_EGCR_MAC_RES;
+
+       /* reset and initialize PHY */
+
+       *get_eth_reg_addr(NS7520_ETH_MAC1) &= ~NS7520_ETH_MAC1_SRST;
+
+       /* we don't support hot plugging of PHY, therefore we don't reset
+          phyDetected and nPhyMaxMdioClock here. The risk is if the setting is
+          incorrect the first open
+          may detect the PHY correctly but succeding will fail
+          For reseting the PHY and identifying we have to use the standard
+          MDIO CLOCK value 2.5 MHz only after hardware reset
+          After having identified the PHY we will do faster */
+
+       *get_eth_reg_addr(NS7520_ETH_MCFG) =
+           ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
+
+       /* reset PHY */
+       ns7520_mii_write(PHY_COMMON_CTRL, PHY_COMMON_CTRL_RESET);
+       ns7520_mii_write(PHY_COMMON_CTRL, 0);
+
+       udelay(3000);           /* [2] p.70 says at least 300us reset recovery time. */
+
+       /* MII clock has been setup to default, ns7520_mii_identify_phy should
+          work for all */
+
+       if (!ns7520_mii_identify_phy()) {
+               printk(KERN_ERR NS7520_DRIVER_NAME
+                      ": Unsupported PHY, aborting\n");
+               return 0;
+       }
+
+       /* now take the highest MDIO clock possible after detection */
+       *get_eth_reg_addr(NS7520_ETH_MCFG) =
+           ns7520_mii_get_clock_divisor(nPhyMaxMdioClock);
+
+       /* PHY has been detected, so there can be no abort reason and we can
+          finish initializing ethernet */
+
+       uiLastLinkStatus = 0xff;        /* undefined */
+
+       ns7520_link_auto_negotiate();
+
+       if (phyDetected == PHY_LXT971A)
+               /* set LED2 to link mode */
+               ns7520_mii_write(PHY_LXT971_LED_CFG,
+                                (PHY_LXT971_LED_CFG_LINK_ACT <<
+                                 PHY_LXT971_LED_CFG_SHIFT_LED2) |
+                                (PHY_LXT971_LED_CFG_TRANSMIT <<
+                                 PHY_LXT971_LED_CFG_SHIFT_LED1));
+
+       return 1;
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_auto_negotiate
+ * @Return: void
+ * @Descr: performs auto-negotation of link.
+ ***********************************************************************/
+
+static void ns7520_link_auto_negotiate(void)
+{
+       unsigned long ulStartJiffies;
+       unsigned short uiStatus;
+
+       DEBUG_FN(DEBUG_LINK);
+
+       /* run auto-negotation */
+       /* define what we are capable of */
+       ns7520_mii_write(PHY_COMMON_AUTO_ADV,
+                        PHY_COMMON_AUTO_ADV_100BTXFD |
+                        PHY_COMMON_AUTO_ADV_100BTX |
+                        PHY_COMMON_AUTO_ADV_10BTFD |
+                        PHY_COMMON_AUTO_ADV_10BT |
+                        PHY_COMMON_AUTO_ADV_802_3);
+       /* start auto-negotiation */
+       ns7520_mii_write(PHY_COMMON_CTRL,
+                        PHY_COMMON_CTRL_AUTO_NEG |
+                        PHY_COMMON_CTRL_RES_AUTO);
+
+       /* wait for completion */
+
+       ulStartJiffies = get_timer(0);
+       while (get_timer(0) < ulStartJiffies + NS7520_MII_NEG_DELAY) {
+               uiStatus = ns7520_mii_read(PHY_COMMON_STAT);
+               if ((uiStatus &
+                    (PHY_COMMON_STAT_AN_COMP | PHY_COMMON_STAT_LNK_STAT))
+                   ==
+                   (PHY_COMMON_STAT_AN_COMP | PHY_COMMON_STAT_LNK_STAT)) {
+                       /* lucky we are, auto-negotiation succeeded */
+                       ns7520_link_print_changed();
+                       ns7520_link_update_egcr();
+                       return;
+               }
+       }
+
+       DEBUG_ARGS0(DEBUG_LINK, "auto-negotiation timed out\n");
+       /* ignore invalid link settings */
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_update_egcr
+ * @Return: void
+ * @Descr: updates the EGCR and MAC2 link status after mode change or
+ *        auto-negotation
+ ***********************************************************************/
+
+static void ns7520_link_update_egcr(void)
+{
+       unsigned int unEGCR;
+       unsigned int unMAC2;
+       unsigned int unIPGT;
+
+       DEBUG_FN(DEBUG_LINK);
+
+       unEGCR = *get_eth_reg_addr(NS7520_ETH_EGCR);
+       unMAC2 = *get_eth_reg_addr(NS7520_ETH_MAC2);
+       unIPGT =
+           *get_eth_reg_addr(NS7520_ETH_IPGT) & ~NS7520_ETH_IPGT_IPGT;
+
+       unEGCR &= ~NS7520_ETH_EGCR_EFULLD;
+       unMAC2 &= ~NS7520_ETH_MAC2_FULLD;
+       if ((uiLastLinkStatus & PHY_LXT971_STAT2_DUPLEX_MODE)
+           == PHY_LXT971_STAT2_DUPLEX_MODE) {
+               unEGCR |= NS7520_ETH_EGCR_EFULLD;
+               unMAC2 |= NS7520_ETH_MAC2_FULLD;
+               unIPGT |= 0x15; /* see [1] p. 167 */
+       } else
+               unIPGT |= 0x12; /* see [1] p. 167 */
+
+       *get_eth_reg_addr(NS7520_ETH_MAC2) = unMAC2;
+       *get_eth_reg_addr(NS7520_ETH_EGCR) = unEGCR;
+       *get_eth_reg_addr(NS7520_ETH_IPGT) = unIPGT;
+}
+
+/***********************************************************************
+ * @Function: ns7520_link_print_changed
+ * @Return: void
+ * @Descr: checks whether the link status has changed and if so prints
+ *        the new mode
+ ***********************************************************************/
+
+static void ns7520_link_print_changed(void)
+{
+       unsigned short uiStatus;
+       unsigned short uiControl;
+
+       DEBUG_FN(DEBUG_LINK);
+
+       uiControl = ns7520_mii_read(PHY_COMMON_CTRL);
+
+       if ((uiControl & PHY_COMMON_CTRL_AUTO_NEG) ==
+           PHY_COMMON_CTRL_AUTO_NEG) {
+               /* PHY_COMMON_STAT_LNK_STAT is only set on autonegotiation */
+               uiStatus = ns7520_mii_read(PHY_COMMON_STAT);
+
+               if (!(uiStatus & PHY_COMMON_STAT_LNK_STAT)) {
+                       printk(KERN_WARNING NS7520_DRIVER_NAME
+                              ": link down\n");
+                       /* @TODO Linux: carrier_off */
+               } else {
+                       /* @TODO Linux: carrier_on */
+                       if (phyDetected == PHY_LXT971A) {
+                               uiStatus =
+                                   ns7520_mii_read(PHY_LXT971_STAT2);
+                               uiStatus &=
+                                   (PHY_LXT971_STAT2_100BTX |
+                                    PHY_LXT971_STAT2_DUPLEX_MODE |
+                                    PHY_LXT971_STAT2_AUTO_NEG);
+
+                               /* mask out all uninteresting parts */
+                       }
+                       /* other PHYs must store there link information in
+                          uiStatus as PHY_LXT971 */
+               }
+       } else {
+               /* mode has been forced, so uiStatus should be the same as the
+                  last link status, enforce printing */
+               uiStatus = uiLastLinkStatus;
+               uiLastLinkStatus = 0xff;
+       }
+
+       if (uiStatus != uiLastLinkStatus) {
+               /* save current link status */
+               uiLastLinkStatus = uiStatus;
+
+               /* print new link status */
+
+               printk(KERN_INFO NS7520_DRIVER_NAME
+                      ": link mode %i Mbps %s duplex %s\n",
+                      (uiStatus & PHY_LXT971_STAT2_100BTX) ? 100 : 10,
+                      (uiStatus & PHY_LXT971_STAT2_DUPLEX_MODE) ? "full" :
+                      "half",
+                      (uiStatus & PHY_LXT971_STAT2_AUTO_NEG) ? "(auto)" :
+                      "");
+       }
+}
+
+/***********************************************************************
+ * the MII low level stuff
+ ***********************************************************************/
+
+/***********************************************************************
+ * @Function: ns7520_mii_identify_phy
+ * @Return: 1 if supported PHY has been detected otherwise 0
+ * @Descr: checks for supported PHY and prints the IDs.
+ ***********************************************************************/
+
+static char ns7520_mii_identify_phy(void)
+{
+       unsigned short uiID1;
+       unsigned short uiID2;
+       unsigned char *szName;
+       char cRes = 0;
+
+       DEBUG_FN(DEBUG_MII);
+
+       phyDetected = (PhyType) uiID1 = ns7520_mii_read(PHY_COMMON_ID1);
+
+       switch (phyDetected) {
+       case PHY_LXT971A:
+               szName = "LXT971A";
+               uiID2 = ns7520_mii_read(PHY_COMMON_ID2);
+               nPhyMaxMdioClock = PHY_LXT971_MDIO_MAX_CLK;
+               cRes = 1;
+               break;
+       case PHY_NONE:
+       default:
+               /* in case uiID1 == 0 && uiID2 == 0 we may have the wrong
+                  address or reset sets the wrong NS7520_ETH_MCFG_CLKS */
+
+               uiID2 = 0;
+               szName = "unknown";
+               nPhyMaxMdioClock = PHY_MDIO_MAX_CLK;
+               phyDetected = PHY_NONE;
+       }
+
+       printk(KERN_INFO NS7520_DRIVER_NAME
+              ": PHY (0x%x, 0x%x) = %s detected\n", uiID1, uiID2, szName);
+
+       return cRes;
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_read
+ * @Return: the data read from PHY register uiRegister
+ * @Descr: the data read may be invalid if timed out. If so, a message
+ *        is printed but the invalid data is returned.
+ *        The fixed device address is being used.
+ ***********************************************************************/
+
+static unsigned short ns7520_mii_read(unsigned short uiRegister)
+{
+       DEBUG_FN(DEBUG_MII_LOW);
+
+       /* write MII register to be read */
+       *get_eth_reg_addr(NS7520_ETH_MADR) =
+           CONFIG_PHY_ADDR << 8 | uiRegister;
+
+       *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
+
+       if (!ns7520_mii_poll_busy())
+               printk(KERN_WARNING NS7520_DRIVER_NAME
+                      ": MII still busy in read\n");
+       /* continue to read */
+
+       *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
+
+       return (unsigned short) (*get_eth_reg_addr(NS7520_ETH_MRDD));
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_write
+ * @Return: nothing
+ * @Descr: writes the data to the PHY register. In case of a timeout,
+ *        no special handling is performed but a message printed
+ *        The fixed device address is being used.
+ ***********************************************************************/
+
+static void ns7520_mii_write(unsigned short uiRegister,
+                            unsigned short uiData)
+{
+       DEBUG_FN(DEBUG_MII_LOW);
+
+       /* write MII register to be written */
+       *get_eth_reg_addr(NS7520_ETH_MADR) =
+           CONFIG_PHY_ADDR << 8 | uiRegister;
+
+       *get_eth_reg_addr(NS7520_ETH_MWTD) = uiData;
+
+       if (!ns7520_mii_poll_busy()) {
+               printf(KERN_WARNING NS7520_DRIVER_NAME
+                      ": MII still busy in write\n");
+       }
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_get_clock_divisor
+ * @Return: the clock divisor that should be used in NS7520_ETH_MCFG_CLKS
+ * @Descr: if no clock divisor can be calculated for the
+ *        current SYSCLK and the maximum MDIO Clock, a warning is printed
+ *        and the greatest divisor is taken
+ ***********************************************************************/
+
+static unsigned int ns7520_mii_get_clock_divisor(unsigned int unMaxMDIOClk)
+{
+       struct {
+               unsigned int unSysClkDivisor;
+               unsigned int unClks;    /* field for NS7520_ETH_MCFG_CLKS */
+       } PHYClockDivisors[] = {
+               {
+               4, NS7520_ETH_MCFG_CLKS_4}, {
+               6, NS7520_ETH_MCFG_CLKS_6}, {
+               8, NS7520_ETH_MCFG_CLKS_8}, {
+               10, NS7520_ETH_MCFG_CLKS_10}, {
+               14, NS7520_ETH_MCFG_CLKS_14}, {
+               20, NS7520_ETH_MCFG_CLKS_20}, {
+               28, NS7520_ETH_MCFG_CLKS_28}
+       };
+
+       int nIndexSysClkDiv;
+       int nArraySize =
+           sizeof(PHYClockDivisors) / sizeof(PHYClockDivisors[0]);
+       unsigned int unClks = NS7520_ETH_MCFG_CLKS_28;  /* defaults to
+                                                          greatest div */
+
+       DEBUG_FN(DEBUG_INIT);
+
+       for (nIndexSysClkDiv = 0; nIndexSysClkDiv < nArraySize;
+            nIndexSysClkDiv++) {
+               /* find first sysclock divisor that isn't higher than 2.5 MHz
+                  clock */
+               if (NETARM_XTAL_FREQ /
+                   PHYClockDivisors[nIndexSysClkDiv].unSysClkDivisor <=
+                   unMaxMDIOClk) {
+                       unClks = PHYClockDivisors[nIndexSysClkDiv].unClks;
+                       break;
+               }
+       }
+
+       DEBUG_ARGS2(DEBUG_INIT,
+                   "Taking MDIO Clock bit mask 0x%0x for max clock %i\n",
+                   unClks, unMaxMDIOClk);
+
+       /* return greatest divisor */
+       return unClks;
+}
+
+/***********************************************************************
+ * @Function: ns7520_mii_poll_busy
+ * @Return: 0 if timed out otherwise the remaing timeout
+ * @Descr: waits until the MII has completed a command or it times out
+ *        code may be interrupted by hard interrupts.
+ *        It is not checked what happens on multiple actions when
+ *        the first is still being busy and we timeout.
+ ***********************************************************************/
+
+static unsigned int ns7520_mii_poll_busy(void)
+{
+       unsigned int unTimeout = 1000;
+
+       DEBUG_FN(DEBUG_MII_LOW);
+
+       while (((*get_eth_reg_addr(NS7520_ETH_MIND) & NS7520_ETH_MIND_BUSY)
+               == NS7520_ETH_MIND_BUSY) && unTimeout)
+               unTimeout--;
+
+       return unTimeout;
+}
+
+/* ----------------------------------------------------------------------------
+ * Net+ARM ethernet MII functionality.
+ */
+#if defined(CONFIG_MII)
+
+/**
+ * Maximum MII address we support
+ */
+#define MII_ADDRESS_MAX                        (31)
+
+/**
+ * Maximum MII register address we support
+ */
+#define MII_REGISTER_MAX               (31)
+
+/**
+ * Ethernet MII interface return values for public functions.
+ */
+enum mii_status {
+       MII_STATUS_SUCCESS = 0,
+       MII_STATUS_FAILURE = 1,
+};
+
+/**
+ * Read a 16-bit value from an MII register.
+ */
+extern int ns7520_miiphy_read(char *devname, unsigned char const addr,
+               unsigned char const reg, unsigned short *const value)
+{
+       int ret = MII_STATUS_FAILURE;
+
+       /* Parameter checks */
+       if (addr > MII_ADDRESS_MAX) {
+               ERROR(("invalid addr, 0x%02X", addr));
+               goto miiphy_read_failed_0;
+       }
+
+       if (reg > MII_REGISTER_MAX) {
+               ERROR(("invalid reg, 0x%02X", reg));
+               goto miiphy_read_failed_0;
+       }
+
+       if (value == NULL) {
+               ERROR(("NULL value"));
+               goto miiphy_read_failed_0;
+       }
+
+       DEBUG_FN(DEBUG_MII_LOW);
+
+       /* write MII register to be read */
+       *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
+
+       *get_eth_reg_addr(NS7520_ETH_MCMD) = NS7520_ETH_MCMD_READ;
+
+       if (!ns7520_mii_poll_busy())
+               printk(KERN_WARNING NS7520_DRIVER_NAME
+                      ": MII still busy in read\n");
+       /* continue to read */
+
+       *get_eth_reg_addr(NS7520_ETH_MCMD) = 0;
+
+       *value = (*get_eth_reg_addr(NS7520_ETH_MRDD));
+       ret = MII_STATUS_SUCCESS;
+       /* Fall through */
+
+      miiphy_read_failed_0:
+       return (ret);
+}
+
+/**
+ * Write a 16-bit value to an MII register.
+ */
+extern int ns7520_miiphy_write(char *devname, unsigned char const addr,
+               unsigned char const reg, unsigned short const value)
+{
+       int ret = MII_STATUS_FAILURE;
+
+       /* Parameter checks */
+       if (addr > MII_ADDRESS_MAX) {
+               ERROR(("invalid addr, 0x%02X", addr));
+               goto miiphy_write_failed_0;
+       }
+
+       if (reg > MII_REGISTER_MAX) {
+               ERROR(("invalid reg, 0x%02X", reg));
+               goto miiphy_write_failed_0;
+       }
+
+       /* write MII register to be written */
+       *get_eth_reg_addr(NS7520_ETH_MADR) = (addr << 8) | reg;
+
+       *get_eth_reg_addr(NS7520_ETH_MWTD) = value;
+
+       if (!ns7520_mii_poll_busy()) {
+               printf(KERN_WARNING NS7520_DRIVER_NAME
+                      ": MII still busy in write\n");
+       }
+
+       ret = MII_STATUS_SUCCESS;
+       /* Fall through */
+
+      miiphy_write_failed_0:
+       return (ret);
+}
+#endif                         /* defined(CONFIG_MII) */
+#endif                         /* CONFIG_DRIVER_NS7520_ETHERNET */
+
+int ns7520_miiphy_initialize(bd_t *bis)
+{
+#if defined(CONFIG_DRIVER_NS7520_ETHERNET)
+#if defined(CONFIG_MII)
+       miiphy_register("ns7520phy", ns7520_miiphy_read, ns7520_miiphy_write);
+#endif
+#endif
+       return 0;
+}
index 281940b2225887acc53540f6f288fdd83efe74bb..976f86aaff5d41405affd4cd13a8c77dc625aa81 100644 (file)
@@ -363,7 +363,7 @@ ns8382x_initialize(bd_t * bis)
                /* get MAC address */
                for (i = 0; i < 3; i++) {
                        u32 data;
-                       char *mac = &dev->enetaddr[i * 2];
+                       char *mac = (char *)&dev->enetaddr[i * 2];
 
                        OUTL(dev, i * 2, RxFilterAddr);
                        data = INL(dev, RxFilterData);
@@ -745,7 +745,7 @@ static int
 ns8382x_send(struct eth_device *dev, volatile void *packet, int length)
 {
        u32 i, status = 0;
-       u32 tx_stat = 0;
+       vu_long tx_stat = 0;
 
        /* Stop the transmitter */
        OUTL(dev, TxOff, ChipCmd);
@@ -771,7 +771,7 @@ ns8382x_send(struct eth_device *dev, volatile void *packet, int length)
        /* restart the transmitter */
        OUTL(dev, TxOn, ChipCmd);
 
-       for (i = 0; ((vu_long)tx_stat = le32_to_cpu(txd.cmdsts)) & DescOwn; i++) {
+       for (i = 0; (tx_stat = le32_to_cpu(txd.cmdsts)) & DescOwn; i++) {
                if (i >= TOUT_LOOP) {
                        printf ("%s: tx error buffer not ready: txd.cmdsts %#X\n",
                             dev->name, tx_stat);
index 383dfcbb64d3c58b78d22cd3bfdb0f33504a0deb..7dab78685dfb44102295a2cf138d49f48118b9ac 100644 (file)
 
 static void wait_for_bb (void);
 static u16 wait_for_pin (void);
-void flush_fifo(void);
+static void flush_fifo(void);
 
 void i2c_init (int speed, int slaveadd)
 {
        u16 scl;
 
+       outw(0x2, I2C_SYSC); /* for ES2 after soft reset */
+       udelay(1000);
+       outw(0x0, I2C_SYSC); /* will probably self clear but */
+
        if (inw (I2C_CON) & I2C_CON_EN) {
                outw (0, I2C_CON);
                udelay (50000);
@@ -52,11 +56,14 @@ void i2c_init (int speed, int slaveadd)
        /* own address */
        outw (slaveadd, I2C_OA);
        outw (I2C_CON_EN, I2C_CON);
-       outw (0, I2C_CNT);
+
        /* have to enable intrrupts or OMAP i2c module doesn't work */
        outw (I2C_IE_XRDY_IE | I2C_IE_RRDY_IE | I2C_IE_ARDY_IE |
              I2C_IE_NACK_IE | I2C_IE_AL_IE, I2C_IE);
        udelay (1000);
+       flush_fifo();
+       outw (0xFFFF, I2C_STAT);
+       outw (0, I2C_CNT);
 }
 
 static int i2c_read_byte (u8 devaddr, u8 regoffset, u8 * value)
@@ -160,11 +167,15 @@ static int i2c_write_byte (u8 devaddr, u8 regoffset, u8 value)
        }
 
        if (!i2c_error) {
+               int eout = 200;
+
                outw (I2C_CON_EN, I2C_CON);
                while ((stat = inw (I2C_STAT)) || (inw (I2C_CON) & I2C_CON_MST)) {
                        udelay (1000);
                        /* have to read to clear intrrupt */
                        outw (0xFFFF, I2C_STAT);
+                       if(--eout == 0) /* better leave with error than hang */
+                               break;
                }
        }
        flush_fifo();
@@ -173,7 +184,7 @@ static int i2c_write_byte (u8 devaddr, u8 regoffset, u8 value)
        return i2c_error;
 }
 
-void flush_fifo(void)
+static void flush_fifo(void)
 {      u16 stat;
 
        /* note: if you try and read data when its not there or ready
index 07c7914fae674f1aafcf5244bd264f780707d49d..81d3e989341e97b44260fd102bbc55e5268a0b31 100644 (file)
@@ -193,7 +193,7 @@ static char * kbd_initialize(void)
                              | KBD_MODE_DISABLE_MOUSE
                              | KBD_MODE_KCC);
 
-       /* ibm powerpc portables need this to use scan-code set 1 -- Cort */
+       /* AMCC powerpc portables need this to use scan-code set 1 -- Cort */
        kbd_write_command_w(KBD_CCMD_READ_MODE);
        if (!(kbd_wait_for_input() & KBD_MODE_KCC)) {
                /*
index c618f5b086e9d5aaf9cf5376398b2115cf6552f1..5360030661814c7cfb2f75273b172991fbb808f5 100644 (file)
@@ -142,7 +142,7 @@ struct pci_controller *pci_bus_to_hose (int bus)
                if (bus >= hose->first_busno && bus <= hose->last_busno)
                        return hose;
 
-       debug ("pci_bus_to_hose() failed\n");
+       printf("pci_bus_to_hose() failed\n");
        return NULL;
 }
 
index 3f26886e8b31c00ba6907fd147a7f1f9e5d57852..3302457a3909dc1590d4a8961ddeb6a8c9200be0 100644 (file)
@@ -319,7 +319,18 @@ int pciauto_config_device(struct pci_controller *hose, pci_dev_t dev)
                       PCI_DEV(dev));
                break;
 #endif
-
+#ifdef CONFIG_MPC834X
+       case PCI_CLASS_BRIDGE_OTHER:
+               /*
+                * The host/PCI bridge 1 seems broken in 8349 - it presents
+                * itself as 'PCI_CLASS_BRIDGE_OTHER' and appears as an _agent_
+                * device claiming resources io/mem/irq.. we only allow for
+                * the PIMMR window to be allocated (BAR0 - 1MB size)
+                */
+               DEBUGF("PCI Autoconfig: Broken bridge found, only minimal config\n");
+               pciauto_setup_device(hose, dev, 0, hose->pci_mem, hose->pci_io);
+               break;
+#endif
        default:
                pciauto_setup_device(hose, dev, 6, hose->pci_mem, hose->pci_io);
                break;
index 5987ac46a64b23ad03d4be1576ca05341c6019a4..e8f19f57010dfcb49d1258b38794f720661fb57c 100644 (file)
@@ -12,7 +12,7 @@
 #include <common.h>
 
 #ifdef CONFIG_PCI
-#ifndef __I386__
+#if (!defined(__I386__) && !defined(CONFIG_IXDP425))
 
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -118,5 +118,5 @@ void pci_setup_indirect(struct pci_controller* hose, u32 cfg_addr, u32 cfg_data)
        hose->cfg_data = (unsigned char *) cfg_data;
 }
 
-#endif
-#endif
+#endif /* !__I386__ && !CONFIG_IXDP425 */
+#endif /* CONFIG_PCI */
index 17e8044aaeef0cf6014406ccc9a2da9a8a6eb3d0..da9ac7f99affc56887827389b0e6ccac10b91978 100644 (file)
@@ -195,7 +195,7 @@ int pcnet_initialize(bd_t *bis)
        /*
         * Setup the PCI device.
         */
-       pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_0, &dev->iobase);
+       pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_0, (unsigned int *)&dev->iobase);
        dev->iobase &= ~0xf;
 
        PCNET_DEBUG1("%s: devbusfn=0x%x iobase=0x%x: ",
index 94092a3e757872d36fb764302d3032033aae52cc..20f9beb0172ad6809d471201a7077f0165bec864 100644 (file)
@@ -129,7 +129,7 @@ static char SMI_SCR[] = {
 };
 static char SMI_EXT_CRT[] = {
        0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00,
-       0x36, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f, 0x00
+       0x36, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f, 0x00,
 };
 static char SMI_ATTR [] = {
        0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05,
@@ -139,21 +139,24 @@ static char SMI_ATTR [] = {
 };
 static char SMI_GCR[18] = {
        0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x40,
-       0x06, 0x05, 0x07, 0x0f, 0x08, 0xff
+       0x06, 0x05, 0x07, 0x0f, 0x08, 0xff,
 };
 static char SMI_SEQR[] = {
-       0x00, 0x00, 0x01, 0x01, 0x02, 0x0f, 0x03, 0x03, 0x04, 0x0e, 0x00, 0x03
+       0x00, 0x00, 0x01, 0x01, 0x02, 0x0f, 0x03, 0x03, 0x04, 0x0e, 0x00, 0x03,
 };
 static char SMI_PCR [] = {
-       0x20, 0x04, 0x21, 0x30, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00
+       0x20, 0x04, 0x21, 0x30, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00,
 };
 static char SMI_MCR[] = {
        0x60, 0x01, 0x61, 0x00,
+#ifdef CONFIG_HMI1001
+       0x62, 0x74, /* Memory type is not configured by pins on HMI1001 */
+#endif
 };
 
 static char SMI_HCR[] = {
        0x80, 0xff, 0x81, 0x07, 0x82, 0x00, 0x83, 0xff, 0x84, 0xff, 0x88, 0x00,
-       0x89, 0x02, 0x8a, 0x80, 0x8b, 0x01, 0x8c, 0xff, 0x8d, 0x00
+       0x89, 0x02, 0x8a, 0x80, 0x8b, 0x01, 0x8c, 0xff, 0x8d, 0x00,
 };
 
 
@@ -522,7 +525,8 @@ static unsigned int FindPQ (unsigned int freq, unsigned int *pp, unsigned int *p
 /*****************************************************************************/
 static void smiLoadCcr (struct ctfb_res_modes *var, unsigned short device_id)
 {
-       unsigned int p, q;
+       unsigned int p = 0;
+       unsigned int q = 0;
        long long freq;
        register GraphicDevice *pGD  = (GraphicDevice *)&smi;
 
index 0c8b0de58778942b663883fd7366bc948d70fa6e..f860dae8b009f6deec85afb2516c8885ed6b10c1 100644 (file)
@@ -21,8 +21,9 @@
 
 #if defined(CONFIG_TSEC_ENET)
 #include "tsec.h"
+#include "miiphy.h"
 
-#define TX_BUF_CNT 2
+#define TX_BUF_CNT             2
 
 static uint rxIdx;     /* index of the current RX buffer */
 static uint txIdx;     /* index of the current TX buffer */
@@ -120,6 +121,10 @@ struct phy_info * get_phy_info(struct eth_device *dev);
 void phy_run_commands(struct tsec_private *priv, struct phy_cmd *cmd);
 static void adjust_link(struct eth_device *dev);
 static void relocate_cmds(void);
+static int tsec_miiphy_write(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value);
+static int tsec_miiphy_read(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value);
 
 /* Initialize device structure. Returns success if PHY
  * initialization succeeded (i.e. if it recognizes the PHY)
@@ -169,6 +174,11 @@ int tsec_initialize(bd_t *bis, int index, char *devname)
        priv->regs->maccfg1 |= MACCFG1_SOFT_RESET;
        priv->regs->maccfg1 &= ~(MACCFG1_SOFT_RESET);
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) \
+       && !defined(BITBANGMII)
+       miiphy_register(dev->name, tsec_miiphy_read, tsec_miiphy_write);
+#endif
+
        /* Try to initialize PHY here, and return */
        return init_phy(dev);
 }
@@ -200,11 +210,11 @@ int tsec_init(struct eth_device* dev, bd_t * bd)
        for(i=0;i<MAC_ADDR_LEN;i++) {
                tmpbuf[MAC_ADDR_LEN - 1 - i] = dev->enetaddr[i];
        }
-       (uint)(regs->macstnaddr1) = *((uint *)(tmpbuf));
+       regs->macstnaddr1 = *((uint *)(tmpbuf));
 
        tempval = *((uint *)(tmpbuf +4));
 
-       (uint)(regs->macstnaddr2) = tempval;
+       regs->macstnaddr2 = tempval;
 
        /* reset the indices to zero */
        rxIdx = 0;
@@ -338,16 +348,35 @@ uint mii_cr_init(uint mii_reg, struct tsec_private *priv)
  * auto-negotiation */
 uint mii_parse_sr(uint mii_reg, struct tsec_private *priv)
 {
-       uint timeout = TSEC_TIMEOUT;
-
-       if(mii_reg & MIIM_STATUS_LINK)
-               priv->link = 1;
-       else
-               priv->link = 0;
+       /*
+        * Wait if PHY is capable of autonegotiation and autonegotiation is not complete
+        */
+       mii_reg = read_phy_reg(priv, MIIM_STATUS);
+       if ((mii_reg & PHY_BMSR_AUTN_ABLE) && !(mii_reg & PHY_BMSR_AUTN_COMP)) {
+               int i = 0;
+
+               puts ("Waiting for PHY auto negotiation to complete");
+               while (!((mii_reg & PHY_BMSR_AUTN_COMP) && (mii_reg & MIIM_STATUS_LINK))) {
+                       /*
+                        * Timeout reached ?
+                        */
+                       if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
+                               puts (" TIMEOUT !\n");
+                               priv->link = 0;
+                               break;
+                       }
 
-       if(priv->link) {
-               while((!(mii_reg & MIIM_STATUS_AN_DONE)) && timeout--)
+                       if ((i++ % 1000) == 0) {
+                               putc ('.');
+                       }
+                       udelay (1000);  /* 1 ms */
                        mii_reg = read_phy_reg(priv, MIIM_STATUS);
+               }
+               puts (" done\n");
+               priv->link = 1;
+               udelay (500000);        /* another 500 ms (results in faster booting) */
+       } else {
+               priv->link = 1;
        }
 
        return 0;
@@ -360,6 +389,34 @@ uint mii_parse_88E1011_psr(uint mii_reg, struct tsec_private *priv)
 {
        uint speed;
 
+       mii_reg = read_phy_reg(priv, MIIM_88E1011_PHY_STATUS);
+
+       if (!((mii_reg & MIIM_88E1011_PHYSTAT_SPDDONE) &&
+             (mii_reg & MIIM_88E1011_PHYSTAT_LINK))) {
+               int i = 0;
+
+               puts ("Waiting for PHY realtime link");
+               while (!((mii_reg & MIIM_88E1011_PHYSTAT_SPDDONE) &&
+                        (mii_reg & MIIM_88E1011_PHYSTAT_LINK))) {
+                       /*
+                        * Timeout reached ?
+                        */
+                       if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
+                               puts (" TIMEOUT !\n");
+                               priv->link = 0;
+                               break;
+                       }
+
+                       if ((i++ % 1000) == 0) {
+                               putc ('.');
+                       }
+                       udelay (1000);  /* 1 ms */
+                       mii_reg = read_phy_reg(priv, MIIM_88E1011_PHY_STATUS);
+               }
+               puts (" done\n");
+               udelay (500000);        /* another 500 ms (results in faster booting) */
+       }
+
        if(mii_reg & MIIM_88E1011_PHYSTAT_DUPLEX)
                priv->duplexity = 1;
        else
@@ -926,8 +983,7 @@ struct phy_info * get_phy_info(struct eth_device *dev)
                printf("%s: PHY id %x is not supported!\n", dev->name, phy_ID);
                return NULL;
        } else {
-               printf("%s: PHY is %s (%x)\n", dev->name, theInfo->name,
-                               phy_ID);
+               debug("%s: PHY is %s (%x)\n", dev->name, theInfo->name, phy_ID);
        }
 
        return theInfo;
@@ -1012,7 +1068,8 @@ static void relocate_cmds(void)
 }
 
 
-#ifndef CONFIG_BITBANGMII
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) \
+       && !defined(BITBANGMII)
 
 struct tsec_private * get_priv_for_phy(unsigned char phyaddr)
 {
@@ -1032,7 +1089,8 @@ struct tsec_private * get_priv_for_phy(unsigned char phyaddr)
  * Returns:
  *  0 on success
  */
-int miiphy_read(unsigned char addr, unsigned char reg, unsigned short *value)
+static int tsec_miiphy_read(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value)
 {
        unsigned short ret;
        struct tsec_private *priv = get_priv_for_phy(addr);
@@ -1054,7 +1112,8 @@ int miiphy_read(unsigned char addr, unsigned char reg, unsigned short *value)
  * Returns:
  *  0 on success
  */
-int miiphy_write(unsigned char addr, unsigned char reg, unsigned short value)
+static int tsec_miiphy_write(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value)
 {
        struct tsec_private *priv = get_priv_for_phy(addr);
 
@@ -1068,6 +1127,7 @@ int miiphy_write(unsigned char addr, unsigned char reg, unsigned short value)
        return 0;
 }
 
-#endif /* CONFIG_BITBANGMII */
+#endif /* defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+               && !defined(BITBANGMII) */
 
 #endif /* CONFIG_TSEC_ENET */
index 15961d73d55390fb6ae6ccfcb37b5b78d0b575f8..c26fcc0e732fe656a9d000bc4339d928490fe085 100644 (file)
@@ -40,6 +40,8 @@
 #define TSEC_TIMEOUT 1000
 #define TOUT_LOOP      1000000
 
+#define PHY_AUTONEGOTIATE_TIMEOUT      5000 /* in ms */
+
 /* MAC register bits */
 #define MACCFG1_SOFT_RESET     0x80000000
 #define MACCFG1_RESET_RX_MC    0x00080000
@@ -77,6 +79,7 @@
 #define MIIM_CONTROL            0x00
 #define MIIM_CONTROL_RESET     0x00009140
 #define MIIM_CONTROL_INIT       0x00001140
+#define MIIM_CONTROL_RESTART    0x00001340
 #define MIIM_ANEN               0x00001000
 
 #define MIIM_CR                 0x00
@@ -86,6 +89,8 @@
 #define MIIM_STATUS            0x1
 #define MIIM_STATUS_AN_DONE    0x00000020
 #define MIIM_STATUS_LINK       0x0004
+#define PHY_BMSR_AUTN_ABLE     0x0008
+#define PHY_BMSR_AUTN_COMP     0x0020
 
 #define MIIM_PHYIR1            0x2
 #define MIIM_PHYIR2            0x3
index 60b937ef8de5092c7a6cc98d25af96d8d4bc8988..a52e68d4e719c22440f342713dfe6d192291358a 100644 (file)
@@ -78,9 +78,12 @@ static inline short inw(long addr)
 
 static inline void *memcpy(void *dst, const void *src, unsigned int len)
 {
-       void * ret = dst;
-       while (len-- > 0) *((char *)dst)++ = *((char *)src)++;
-       return ret;
+       char *ret = dst;
+       while (len-- > 0) {
+               *ret++ = *((char *)src);
+               src++;
+       }
+       return (void *)ret;
 }
 
 /* The EEPROM commands include the alway-set leading bit. */
index 32fd4abe346f5524d17548ef449a1879eeef0685..277a0a7a673c367d29be5c1c8d5e9408b58ad03d 100644 (file)
@@ -96,6 +96,7 @@ SECTIONS
 
        /* CMD TABLE - uboot command sections
         */
+       . = .;
        __uboot_cmd_start = .;
        .u_boot_cmd :
        {
index 6b78f69985c029f1f3b25d68fd450f4bbd220e7c..ae01e0b05d24695217f5fa981b4084842dadca9e 100644 (file)
@@ -292,7 +292,7 @@ static int thread_start (int id)
                current_tid = id;
                PDEBUG ("thread_start: to be stack=0%08x",
                        (unsigned)lthreads[id].stack);
-               setctxsp (&lthreads[id].stack[STK_SIZE]);
+               setctxsp ((vu_char *)&lthreads[id].stack[STK_SIZE]);
                thread_launcher ();
        }
 
index f02bf3c744263121f4f8feaa66446fa97e731e3f..48e7f63aa4d720a272614d0aa29b537bb8ba460d 100644 (file)
@@ -44,7 +44,7 @@ struct cramfs_super super;
 
 /* CPU address space offset calculation macro, struct part_info offset is
  * device address space offset, so we need to shift it by a device start address. */
-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+extern flash_info_t flash_info[];
 #define PART_OFFSET(x) (x->offset + flash_info[x->dev->id->num].start[0])
 
 static int cramfs_read_super (struct part_info *info)
index c21d2d6172214e6a4ff2909851413ff89b52d398..9cf2fb7ba494499a1afe38a63f6c6fb378895cf1 100644 (file)
@@ -389,7 +389,7 @@ int ext2fs_read_file
        int blockcnt;
        int log2blocksize = LOG2_EXT2_BLOCK_SIZE (node->data);
        int blocksize = 1 << (log2blocksize + DISK_SECTOR_BITS);
-       unsigned int filesize = node->inode.size;
+       unsigned int filesize = __le32_to_cpu(node->inode.size);
 
        /* Adjust len so it we can't read past the end of the file.  */
        if (len > filesize) {
index 1a40a700c47abbc6335eda263690c0c9bc9ecf82..a823b5aba4089a1160480fc8f4e6b1961836b932 100644 (file)
@@ -83,7 +83,7 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)
                /* no signature found */
                return -1;
        }
-       if(!strncmp(&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) {
+       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;
index cf01f888a47a12b393874d59c7c419ede0ebdd41..74577d9c62b39c2b0662c62a59f1feee1a2d8dbe 100644 (file)
@@ -48,8 +48,8 @@
 void rubin_do_decompress(unsigned char *bits, unsigned char *in,
                         unsigned char *page_out, __u32 destlen)
 {
-       register char *curr = page_out;
-       char *end = page_out + destlen;
+       register char *curr = (char *)page_out;
+       char *end = (char *)(page_out + destlen);
        register unsigned long temp;
        register unsigned long result;
        register unsigned long p;
@@ -85,8 +85,10 @@ void rubin_do_decompress(unsigned char *bits, unsigned char *in,
                                rec_q <<= 1;
                                rec_q |= (temp >> (bit++ ^ 7)) & 1;
                                if (bit > 31) {
+                                       u32 *p = (u32 *)in;
                                        bit = 0;
-                                       temp = *(++((u32 *) in));
+                                       temp = *(++p);
+                                       in = (unsigned char *)p;
                                }
                        }
                        i0 =  (bits[i] * p) >> 8;
index 6658512b20d9a188e9e16bce8dee7dff48cf9779..f1156481d4c6ea02183942b14a1841b43d7f6092 100644 (file)
@@ -263,7 +263,7 @@ static inline void *get_fl_mem_nor(u32 off)
        u32 addr = off;
        struct mtdids *id = current_part->dev->id;
 
-       extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+       extern flash_info_t flash_info[];
        flash_info_t *flash = &flash_info[id->num];
 
        addr += flash->start[0];
@@ -496,7 +496,7 @@ static int compare_dirents(struct b_node *new, struct b_node *old)
 
        /* length is also the same, so use ascending sort by name
         */
-       cmp = strncmp(jNew->name, jOld->name, jNew->nsize);
+       cmp = strncmp((char *)jNew->name, (char *)jOld->name, jNew->nsize);
        if (cmp != 0)
                return cmp > 0;
 
@@ -572,8 +572,8 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
        struct jffs2_raw_inode *jNode;
        u32 totalSize = 0;
        u32 latestVersion = 0;
-       char *lDest;
-       char *src;
+       uchar *lDest;
+       uchar *src;
        long ret;
        int i;
        u32 counter = 0;
@@ -624,14 +624,14 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
 #endif
 
                        if(dest) {
-                               src = ((char *) jNode) + sizeof(struct jffs2_raw_inode);
+                               src = ((uchar *) jNode) + sizeof(struct jffs2_raw_inode);
                                /* ignore data behind latest known EOF */
                                if (jNode->offset > totalSize) {
                                        put_fl_mem(jNode);
                                        continue;
                                }
 
-                               lDest = (char *) (dest + jNode->offset);
+                               lDest = (uchar *) (dest + jNode->offset);
 #if 0
                                putLabeledWord("read_inode: src = ", src);
                                putLabeledWord("read_inode: dest = ", lDest);
@@ -709,7 +709,7 @@ jffs2_1pass_find_inode(struct b_lists * pL, const char *name, u32 pino)
                jDir = (struct jffs2_raw_dirent *) get_node_mem(b->offset);
                if ((pino == jDir->pino) && (len == jDir->nsize) &&
                    (jDir->ino) &&      /* 0 for unlink */
-                   (!strncmp(jDir->name, name, len))) {        /* a match */
+                   (!strncmp((char *)jDir->name, name, len))) {        /* a match */
                        if (jDir->version < version) {
                                put_fl_mem(jDir);
                                continue;
@@ -776,7 +776,7 @@ static inline void dump_stat(struct stat *st, const char *name)
        if (st->st_mtime == (time_t)(-1)) /* some ctimes really hate -1 */
                st->st_mtime = 1;
 
-       ctime_r(&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */
+       ctime_r((time_t *)&st->st_mtime, s/*,64*/); /* newlib ctime doesn't have buflen */
 
        if ((p = strchr(s,'\n')) != NULL) *p = '\0';
        if ((p = strchr(s,'\r')) != NULL) *p = '\0';
@@ -796,7 +796,7 @@ static inline u32 dump_inode(struct b_lists * pL, struct jffs2_raw_dirent *d, st
 
        if(!d || !i) return -1;
 
-       strncpy(fname, d->name, d->nsize);
+       strncpy(fname, (char *)d->name, d->nsize);
        fname[d->nsize] = '\0';
 
        memset(&st,0,sizeof(st));
@@ -971,7 +971,7 @@ jffs2_1pass_resolve_inode(struct b_lists * pL, u32 ino)
                        putnstr(src, jNode->dsize);
                        putstr("\r\n");
 #endif
-                       strncpy(tmp, src, jNode->dsize);
+                       strncpy(tmp, (char *)src, jNode->dsize);
                        tmp[jNode->dsize] = '\0';
                        put_fl_mem(jNode);
                        break;
diff --git a/include/405gp_enet.h b/include/405gp_enet.h
deleted file mode 100644 (file)
index b9bdaaf..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*----------------------------------------------------------------------------+
-|
-|       This source code has been made available to you by IBM on an AS-IS
-|       basis.  Anyone receiving this source is licensed under IBM
-|       copyrights to use it in any way he or she deems fit, including
-|       copying it, modifying it, compiling it, and redistributing it either
-|       with or without modifications.  No license under IBM patents or
-|       patent applications is to be implied by the copyright license.
-|
-|       Any user of this software should understand that IBM cannot provide
-|       technical support for this software and will not be responsible for
-|       any consequences resulting from the use of this software.
-|
-|       Any person who transfers this source code or any derivative work
-|       must include the IBM copyright notice, this paragraph, and the
-|       preceding two paragraphs in the transferred software.
-|
-|       COPYRIGHT   I B M   CORPORATION 1999
-|       LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
-+----------------------------------------------------------------------------*/
-/*----------------------------------------------------------------------------+
-|
-|  File Name:   enetemac.h
-|
-|  Function:    Header file for the EMAC3 macro on the 405GP.
-|
-|  Author:      Mark Wisner
-|
-|  Change Activity-
-|
-|  Date        Description of Change                                       BY
-|  ---------   ---------------------                                       ---
-|  29-Apr-99   Created                                                     MKW
-|
-+----------------------------------------------------------------------------*/
-#ifndef _enetemac_h_
-#define _enetemac_h_
-#include <net.h>
-#include <405_mal.h>
-
-/*-----------------------------------------------------------------------------+
-| General enternet defines.  802 frames are not supported.
-+-----------------------------------------------------------------------------*/
-#define ENET_ADDR_LENGTH                6
-#define ENET_ARPTYPE                    0x806
-#define ARP_REQUEST                     1
-#define ARP_REPLY                       2
-#define ENET_IPTYPE                     0x800
-#define ARP_CACHE_SIZE                  5
-
-
-struct enet_frame {
-   unsigned char        dest_addr[ENET_ADDR_LENGTH];
-   unsigned char        source_addr[ENET_ADDR_LENGTH];
-   unsigned short       type;
-   unsigned char        enet_data[1];
-};
-
-struct arp_entry {
-   unsigned long        inet_address;
-   unsigned char        mac_address[ENET_ADDR_LENGTH];
-   unsigned long        valid;
-   unsigned long        sec;
-   unsigned long        nsec;
-};
-
-
-                       /*Register addresses */
-#if defined(CONFIG_440)
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-#define ZMII_BASE                      (CFG_PERIPHERAL_BASE + 0x0D00)
-#else
-#define ZMII_BASE                      (CFG_PERIPHERAL_BASE + 0x0780)
-#endif
-#define ZMII_FER                       (ZMII_BASE)
-#define ZMII_SSR                       (ZMII_BASE + 4)
-#define ZMII_SMIISR                    (ZMII_BASE + 8)
-
-#define ZMII_RMII                      0x22000000
-#define ZMII_MDI0                      0x80000000
-#endif /* CONFIG_440 */
-
-#if defined(CONFIG_440)
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-#define EMAC_BASE                          (CFG_PERIPHERAL_BASE + 0x0E00)
-#else
-#define EMAC_BASE                          (CFG_PERIPHERAL_BASE + 0x0800)
-#endif
-#else
-#define EMAC_BASE                      0xEF600800
-#endif
-
-#define EMAC_M0                        (EMAC_BASE)
-#define EMAC_M1                        (EMAC_BASE + 4)
-#define EMAC_TXM0                              (EMAC_BASE + 8)
-#define EMAC_TXM1                              (EMAC_BASE + 12)
-#define EMAC_RXM                               (EMAC_BASE + 16)
-#define EMAC_ISR                               (EMAC_BASE + 20)
-#define EMAC_IER                               (EMAC_BASE + 24)
-#define EMAC_IAH                               (EMAC_BASE + 28)
-#define EMAC_IAL                               (EMAC_BASE + 32)
-#define EMAC_VLAN_TPID_REG             (EMAC_BASE + 36)
-#define EMAC_VLAN_TCI_REG              (EMAC_BASE + 40)
-#define EMAC_PAUSE_TIME_REG            (EMAC_BASE + 44)
-#define EMAC_IND_HASH_1                        (EMAC_BASE + 48)
-#define EMAC_IND_HASH_2                        (EMAC_BASE + 52)
-#define EMAC_IND_HASH_3                        (EMAC_BASE + 56)
-#define EMAC_IND_HASH_4                        (EMAC_BASE + 60)
-#define EMAC_GRP_HASH_1                        (EMAC_BASE + 64)
-#define EMAC_GRP_HASH_2                        (EMAC_BASE + 68)
-#define EMAC_GRP_HASH_3                        (EMAC_BASE + 72)
-#define EMAC_GRP_HASH_4                        (EMAC_BASE + 76)
-#define EMAC_LST_SRC_LOW               (EMAC_BASE + 80)
-#define EMAC_LST_SRC_HI                        (EMAC_BASE + 84)
-#define EMAC_I_FRAME_GAP_REG           (EMAC_BASE + 88)
-#define EMAC_STACR                     (EMAC_BASE + 92)
-#define EMAC_TRTR                              (EMAC_BASE + 96)
-#define EMAC_RX_HI_LO_WMARK            (EMAC_BASE + 100)
-
-/* bit definitions */
-/* MODE REG 0 */
-#define EMAC_M0_RXI                    0x80000000
-#define EMAC_M0_TXI                    0x40000000
-#define EMAC_M0_SRST                   0x20000000
-#define EMAC_M0_TXE                    0x10000000
-#define EMAC_M0_RXE                    0x08000000
-#define EMAC_M0_WKE                    0x04000000
-
-/* MODE Reg 1 */
-#define EMAC_M1_FDE                    0x80000000
-#define EMAC_M1_ILE                    0x40000000
-#define EMAC_M1_VLE                    0x20000000
-#define EMAC_M1_EIFC                   0x10000000
-#define EMAC_M1_APP                    0x08000000
-#define EMAC_M1_AEMI                   0x02000000
-#define EMAC_M1_IST                    0x01000000
-#define EMAC_M1_MF_1000MBPS            0x00800000      /* 0's for 10MBPS */
-#define EMAC_M1_MF_100MBPS             0x00400000
-#define EMAC_M1_RFS_4K                 0x00300000      /* ~4k for 512 byte */
-#define EMAC_M1_RFS_2K                 0x00200000
-#define EMAC_M1_RFS_1K                 0x00100000
-#define EMAC_M1_TX_FIFO_2K             0x00080000      /* 0's for 512 byte */
-#define EMAC_M1_TX_FIFO_1K             0x00040000
-#define EMAC_M1_TR0_DEPEND             0x00010000      /* 0'x for single packet */
-#define EMAC_M1_TR0_MULTI              0x00008000
-#define EMAC_M1_TR1_DEPEND             0x00004000
-#define EMAC_M1_TR1_MULTI              0x00002000
-#define EMAC_M1_JUMBO_ENABLE           0x00001000
-
-/* Transmit Mode Register 0 */
-#define EMAC_TXM0_GNP0                 0x80000000
-#define EMAC_TXM0_GNP1                 0x40000000
-#define EMAC_TXM0_GNPD                 0x20000000
-#define EMAC_TXM0_FC                   0x10000000
-
-/* Receive Mode Register */
-#define EMAC_RMR_SP                    0x80000000
-#define EMAC_RMR_SFCS                  0x40000000
-#define EMAC_RMR_ARRP                  0x20000000
-#define EMAC_RMR_ARP                   0x10000000
-#define EMAC_RMR_AROP                  0x08000000
-#define EMAC_RMR_ARPI                  0x04000000
-#define EMAC_RMR_PPP                   0x02000000
-#define EMAC_RMR_PME                   0x01000000
-#define EMAC_RMR_PMME                  0x00800000
-#define EMAC_RMR_IAE                   0x00400000
-#define EMAC_RMR_MIAE                  0x00200000
-#define EMAC_RMR_BAE                   0x00100000
-#define EMAC_RMR_MAE                   0x00080000
-
-/* Interrupt Status & enable Regs */
-#define EMAC_ISR_OVR                   0x02000000
-#define EMAC_ISR_PP                    0x01000000
-#define EMAC_ISR_BP                    0x00800000
-#define EMAC_ISR_RP                    0x00400000
-#define EMAC_ISR_SE                    0x00200000
-#define EMAC_ISR_SYE                   0x00100000
-#define EMAC_ISR_BFCS                  0x00080000
-#define EMAC_ISR_PTLE                  0x00040000
-#define EMAC_ISR_ORE                   0x00020000
-#define EMAC_ISR_IRE                   0x00010000
-#define EMAC_ISR_DBDM                  0x00000200
-#define EMAC_ISR_DB0                   0x00000100
-#define EMAC_ISR_SE0                   0x00000080
-#define EMAC_ISR_TE0                   0x00000040
-#define EMAC_ISR_DB1                   0x00000020
-#define EMAC_ISR_SE1                   0x00000010
-#define EMAC_ISR_TE1                   0x00000008
-#define EMAC_ISR_MOS                   0x00000002
-#define EMAC_ISR_MOF                   0x00000001
-
-
-/* STA CONTROL REG */
-#define EMAC_STACR_OC                  0x00008000
-#define EMAC_STACR_PHYE                        0x00004000
-#define EMAC_STACR_WRITE               0x00002000
-#define EMAC_STACR_READ                        0x00001000
-#define EMAC_STACR_CLK_83MHZ           0x00000800  /* 0's for 50Mhz */
-#define EMAC_STACR_CLK_66MHZ           0x00000400
-#define EMAC_STACR_CLK_100MHZ          0x00000C00
-
-/* Transmit Request Threshold Register */
-#define EMAC_TRTR_256                  0x18000000   /* 0's for 64 Bytes */
-#define EMAC_TRTR_192                  0x10000000
-#define EMAC_TRTR_128                  0x01000000
-
-/* the follwing defines are for the MadMAL status and control registers. */
-/* For bits 0..5 look at the mal.h file                                  */
-#define EMAC_TX_CTRL_GFCS      0x0200
-#define EMAC_TX_CTRL_GP                0x0100
-#define EMAC_TX_CTRL_ISA       0x0080
-#define EMAC_TX_CTRL_RSA       0x0040
-#define EMAC_TX_CTRL_IVT       0x0020
-#define EMAC_TX_CTRL_RVT       0x0010
-
-#define EMAC_TX_CTRL_DEFAULT (EMAC_TX_CTRL_GFCS |EMAC_TX_CTRL_GP)
-
-#define EMAC_TX_ST_BFCS                0x0200
-#define EMAC_TX_ST_BPP         0x0100
-#define EMAC_TX_ST_LCS         0x0080
-#define EMAC_TX_ST_ED          0x0040
-#define EMAC_TX_ST_EC          0x0020
-#define EMAC_TX_ST_LC          0x0010
-#define EMAC_TX_ST_MC          0x0008
-#define EMAC_TX_ST_SC          0x0004
-#define EMAC_TX_ST_UR          0x0002
-#define EMAC_TX_ST_SQE         0x0001
-
-#define EMAC_TX_ST_DEFAULT    0x03F3
-
-
-/* madmal receive status / Control bits */
-
-#define EMAC_RX_ST_OE          0x0200
-#define EMAC_RX_ST_PP          0x0100
-#define EMAC_RX_ST_BP          0x0080
-#define EMAC_RX_ST_RP          0x0040
-#define EMAC_RX_ST_SE          0x0020
-#define EMAC_RX_ST_AE          0x0010
-#define EMAC_RX_ST_BFCS                0x0008
-#define EMAC_RX_ST_PTL         0x0004
-#define EMAC_RX_ST_ORE         0x0002
-#define EMAC_RX_ST_IRE         0x0001
-/* all the errors we care about */
-#define EMAC_RX_ERRORS         0x03FF
-
-#define NUM_RX_BUFF PKTBUFSRX
-#define NUM_TX_BUFF 1
-
-#define MAX_ERR_LOG 10
-typedef struct emac_stats_st{  /* Statistic Block */
-       int data_len_err;
-       int rx_frames;
-       int rx;
-       int rx_prot_err;
-       int int_err;
-       int pkts_tx;
-       int pkts_rx;
-       int pkts_handled;
-       short tx_err_log[MAX_ERR_LOG];
-       short rx_err_log[MAX_ERR_LOG];
-} EMAC_STATS_ST, *EMAC_STATS_PST;
-
-/* Structure containing variables used by the shared code (440gx_enet.c) */
-typedef struct emac_440gx_hw_st {
-       uint32_t                hw_addr;                /* EMAC offset */
-       uint32_t                tah_addr;               /* TAH offset */
-       uint32_t                phy_id;
-       uint32_t                phy_addr;
-       uint32_t                original_fc;
-       uint32_t                txcw;
-       uint32_t                autoneg_failed;
-       uint32_t                emac_ier;
-       volatile mal_desc_t *tx;
-       volatile mal_desc_t *rx;
-       bd_t            *bis;   /* for eth_init upon mal error */
-       mal_desc_t              *alloc_tx_buf;
-       mal_desc_t              *alloc_rx_buf;
-       char            *txbuf_ptr;
-       uint16_t                devnum;
-       int                     get_link_status;
-       int                     tbi_compatibility_en;
-       int                     tbi_compatibility_on;
-       int                     fc_send_xon;
-       int                     report_tx_early;
-       int                     first_init;
-       int                     tx_err_index;
-       int                     rx_err_index;
-       int                     rx_slot;                        /* MAL Receive Slot */
-       int                     rx_i_index;             /* Receive Interrupt Queue Index */
-       int                     rx_u_index;             /* Receive User Queue Index */
-       int                     tx_slot;                        /* MAL Transmit Slot */
-       int                     tx_i_index;             /* Transmit Interrupt Queue Index */
-       int                     tx_u_index;             /* Transmit User Queue Index */
-       int                     rx_ready[NUM_RX_BUFF];  /* Receive Ready Queue */
-       int                     tx_run[NUM_TX_BUFF];    /* Transmit Running Queue */
-       int                     is_receiving;   /* sync with eth interrupt */
-       int                     print_speed;    /* print speed message upon start */
-       EMAC_STATS_ST   stats;
-} EMAC_405_HW_ST, *EMAC_405_HW_PST;
-
-/*-----------------------------------------------------------------------------+
-| Function prototypes for device table.
-+-----------------------------------------------------------------------------*/
-#endif /* _enetLib_h_ */
diff --git a/include/arm946es.h b/include/arm946es.h
new file mode 100644 (file)
index 0000000..c23f3e7
--- /dev/null
@@ -0,0 +1,8 @@
+/************************************************
+ * NAME                 arm946es.h              *
+ * $Version$                                    *
+ ************************************************/
+/* Currently empty */
+#ifndef __ARM946ES_H__
+#define __ARM946ES_H__
+#endif /*__ARM946ES_H__*/
diff --git a/include/armcoremodule.h b/include/armcoremodule.h
new file mode 100644 (file)
index 0000000..7dac6f8
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * (C) Copyright 2005
+ * ARM Ltd.
+ * Peter Pearse, <Peter.Pearse@arm.com>
+ * Configuration for ARM Core Modules.
+ * No standalonw port yet available
+ * - this file is included by both integratorap.h & integratorcp.h
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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 __ARMCOREMODULE_H
+#define __ARMCOREMODULE_H
+
+#define CM_BASE                0x10000000
+
+/* CM registers common to all CMs */
+/* Note that observed values after reboot into the ARM Boot Monitor
+   have been used as defaults, rather than the POR values */
+#define OS_CTRL                0x0000000C
+#define CMMASK_REMAP           0x00000005      /* set remap & led           */
+#define CMMASK_RESET           0x00000008
+#define OS_LOCK                0x00000014
+#define CMVAL_LOCK1            0x0000A000      /* locking value             */
+#define CMVAL_LOCK2            0x0000005F      /* locking value             */
+#define CMVAL_UNLOCK           0x00000000      /* any value != CM_LOCKVAL   */
+#define OS_SDRAM               0x00000020
+#define OS_INIT                0x00000024
+#define CMMASK_MAP_SIMPLE      0xFFFDFFFF      /* simple mapping */
+#define CMMASK_TCRAM_DISABLE   0xFFFEFFFF      /* TCRAM disabled */
+#define CMMASK_LOWVEC          0x00000000      /* vectors @ 0x00000000 */
+#define CMMASK_LE              0xFFFFFFF7      /* little endian */
+#define CMMASK_CMxx6_COMMON    0x00000013      /* Common value for CMxx6 */
+                                               /* - observed reset value of */
+                                               /*   CM926EJ-S */
+                                               /*   CM1136-EJ-S */
+
+#if defined (CONFIG_CM10200E) || defined (CONFIG_CM10220E)
+#define CMMASK_INIT_102        0x00000300              /* see CM102xx ref manual */
+                                               /* - PLL test clock bypassed */
+                                               /* - bus clock ratio 2 */
+                                               /* - little endian */
+                                               /* - vectors at zero */
+#endif /* CM1022xx */
+
+/* Determine CM characteristics */
+
+#undef CONFIG_CM_MULTIPLE_SSRAM
+#undef CONFIG_CM_SPD_DETECT
+#undef CONFIG_CM_REMAP
+#undef CONFIG_CM_INIT
+#undef CONFIG_CM_TCRAM
+
+#if defined (CONFIG_CM946E_S) || defined (CONFIG_CM966E_S)
+#define        CONFIG_CM_MULTIPLE_SSRAM        /* CM has multiple SSRAM mapping */
+#endif
+
+/* Excalibur core module has reduced functionality */
+#ifndef        CONFIG_CM922T_XA10
+#define CONFIG_CM_SPD_DETECT                   /* CM supports SPD query      */
+#define OS_SPD                 0x00000100      /* Address of SPD data        */
+#define CONFIG_CM_REMAP                                /* CM supports remapping      */
+#define CONFIG_CM_INIT                         /* CM has initialization reg  */
+#endif /* NOT EXCALIBUR */
+
+#if defined(CONFIG_CM926EJ_S)   || defined (CONFIG_CM946E_S)   || \
+    defined(CONFIG_CM966E_S)    || defined (CONFIG_CM1026EJ_S) || \
+    defined(CONFIG_CM1136JF_S)
+#define CONFIG_CM_TCRAM                                /* CM has TCRAM  */
+#endif
+
+#ifdef CONFIG_CM_SPD_DETECT
+#define OS_SPD         0x00000100      /* The SDRAM SPD data is copied here */
+#endif
+
+#endif /* __ARMCOREMODULE_H */
index bd1b0883261b9fee6816beff104332e101142f48..2a95af1810b72a9c66de8c58d5e0192ccd505fba 100644 (file)
@@ -57,8 +57,7 @@
 #define II_MPU_DIV       0x2    /* mpu = core/2 */
 #define II_DSP_DIV       0x343  /* dsp & iva divider */
 #define II_GFX_DIV       0x2
-#define II_BUS_DIV       0x04600C26
-#define II_BUS_DIV_ES1   0x04601026
+#define II_BUS_DIV       0x04601026
 #define II_DPLL_300      0x01832100
 
 /****************************************************************************;
@@ -87,8 +86,7 @@
 #define III_MPU_DIV       0x2    /* mpu = core/2 */
 #define III_DSP_DIV       0x23C3 /* dsp & iva divider sych enabled*/
 #define III_GFX_DIV       0x2
-#define III_BUS_DIV       0x08300c44
-#define III_BUS_DIV_ES1   0x08301044
+#define III_BUS_DIV       0x08301044
 #define III_DPLL_266      0x01885500
 
 /* set defaults for boot up */
@@ -98,7 +96,6 @@
 # define DSP_DIV          II_DSP_DIV
 # define GFX_DIV          II_GFX_DIV
 # define BUS_DIV          II_BUS_DIV
-# define BUS_DIV_ES1      II_BUS_DIV_ES1
 # define DPLL_VAL         II_DPLL_300
 #elif PRCM_CONFIG_III
 # define DPLL_OUT         III_DPLL_OUT_X2
 # define DSP_DIV          III_DSP_DIV
 # define GFX_DIV          III_GFX_DIV
 # define BUS_DIV          III_BUS_DIV
-# define BUS_DIV_ES1      III_BUS_DIV_ES1
 # define DPLL_VAL         III_DPLL_266
 #endif
 
index 3e37f4dab0df8c57a3d944b71180e4138fd1ef39..7248950e52fe8f08568bbf5b2725c17746127a79 100644 (file)
@@ -33,6 +33,7 @@
 #define I2C_BUF                 (I2C_BASE + 0x14)
 #define I2C_CNT                 (I2C_BASE + 0x18)
 #define I2C_DATA                (I2C_BASE + 0x1c)
+#define I2C_SYSC                (I2C_BASE + 0x20)
 #define I2C_CON                 (I2C_BASE + 0x24)
 #define I2C_OA                  (I2C_BASE + 0x28)
 #define I2C_SA                  (I2C_BASE + 0x2c)
index 2ead7d83b9b7bda34b0cebf245fd6e4dac123e95..c81f1c4370c2d08ee8981e87c9303cec1e8fd527 100644 (file)
@@ -13,7 +13,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -25,8 +25,8 @@
 #ifndef _OMAP24XX_MEM_H_
 #define _OMAP24XX_MEM_H_
 
-#define SDRC_CS0_OSET    0x0
-#define SDRC_CS1_OSET    0x30  /* mirror CS1 regs appear offset 0x30 from CS0 */
+#define SDRC_CS0_OSET   0x0
+#define SDRC_CS1_OSET   0x30  /* mirror CS1 regs appear offset 0x30 from CS0 */
 
 #ifndef __ASSEMBLY__
 /* struct's for holding data tables for current boards, they are getting used
@@ -40,8 +40,7 @@ struct sdrc_data_s {
        u32    sdrc_rfr_ctrl;
        u32    sdrc_mr_0_ddr;
        u32    sdrc_mr_0_sdr;
-       u32    sdrc_dlla_ctrl;
-       u32    sdrc_dllb_ctrl;
+       u32    sdrc_dllab_ctrl;
 } /*__attribute__ ((packed))*/;
 typedef struct sdrc_data_s sdrc_data_t;
 
@@ -49,129 +48,109 @@ typedef enum {
        STACKED         = 0,
        IP_DDR          = 1,
        COMBO_DDR       = 2,
-       IP_SDR          = 3,
+       IP_SDR          = 3,
 } mem_t;
 
 #endif
 
 /* Slower full frequency range default timings for x32 operation*/
-#define H4_2420_SDRC_SHARING               0x00000100
+#define H4_2420_SDRC_SHARING           0x00000100
 #define H4_2420_SDRC_MDCFG_0_SDR       0x00D04010 /* discrete sdr module */
 #define H4_2420_SDRC_MR_0_SDR          0x00000031
 #define H4_2420_SDRC_MDCFG_0_DDR       0x01702011 /* descrite ddr module */
 #define H4_2420_COMBO_MDCFG_0_DDR      0x00801011 /* combo module */
 #define H4_2420_SDRC_MR_0_DDR          0x00000032
 
-#ifndef CONFIG_OPTIMIZE_DDR
-# define H4_2420_SDRC_ACTIM_CTRLA_0    0x9bead909
-# define H4_2420_SDRC_ACTIM_CTRLB_0    0x00000014
-# define H4_2420_SDRC_RFR_CTRL_ES1     0x00002401
-# define H4_2420_SDRC_RFR_CTRL         0x0002da01
-#endif
-#define H4_2420_SDRC_DLLA_CTRL         0x00007307 /* load value at 100Mhz */
-#define H4_2420_SDRC_DLLB_CTRL         0x00007307
-
 #define H4_2422_SDRC_SHARING           0x00004b00
 #define H4_2422_SDRC_MDCFG_0_DDR       0x00801011 /* stacked ddr on 2422 */
-#ifndef CONFIG_OPTIMIZE_DDR
-# define H4_2422_SDRC_ACTIM_CTRLA_0    0x9BEAD909
-# define H4_2422_SDRC_ACTIM_CTRLB_0    0x00000020
-# define H4_2422_SDRC_RFR_CTRL_ES1     0x00002401
-# define H4_2422_SDRC_RFR_CTRL         0x0002da01
-#endif
 #define H4_2422_SDRC_MR_0_DDR          0x00000032
-#define H4_2422_SDRC_DLLA_CTRL         0x00007307
-#define H4_2422_SDRC_DLLB_CTRL         0x00007307
 
-/* optimized timings */
+/* ES1 work around timings */
+#define H4_242x_SDRC_ACTIM_CTRLA_0_ES1 0x9bead909  /* 165Mhz for use with 100/133 */
+#define H4_242x_SDRC_ACTIM_CTRLB_0_ES1 0x00000020
+#define H4_242x_SDRC_RFR_CTRL_ES1          0x00002401  /* use over refresh for ES1 */
+
+/* optimized timings good for current shipping parts */
 #define H4_242X_SDRC_ACTIM_CTRLA_0_100MHz  0x5A59B485
 #define H4_242X_SDRC_ACTIM_CTRLB_0_100MHz  0x0000000e
-#define H4_242X_SDRC_ACTIM_CTRLA_0_133MHz  0x8BA6E6C8  /* temp warn 0 settigs */
-#define H4_242X_SDRC_ACTIM_CTRLB_0_133MHz  0x00000010   /* temp warn 0 settings */
-#define H4_242X_SDRC_RFR_CTRL_100MHz   0x0002da01      /* this is not optimal yet */
-#define H4_242X_SDRC_RFR_CTRL_133MHz   0x0003de01
-
-#ifdef CONFIG_OPTIMIZE_DDR
-# ifdef PRCM_CONFIG_II
-#  define H4_2420_SDRC_ACTIM_CTRLA_0   H4_242X_SDRC_ACTIM_CTRLA_0_100MHz
-#  define H4_2420_SDRC_ACTIM_CTRLB_0   H4_242X_SDRC_ACTIM_CTRLB_0_100MHz
-#  define H4_2420_SDRC_RFR_CTRL_ES1    H4_242X_SDRC_RFR_CTRL_100MHz
-#  define H4_2420_SDRC_RFR_CTRL                H4_242X_SDRC_RFR_CTRL_100MHz
-# elif PRCM_CONFIG_III
-#  define H4_2420_SDRC_ACTIM_CTRLA_0   H4_242X_SDRC_ACTIM_CTRLA_0_133MHz
-#  define H4_2420_SDRC_ACTIM_CTRLB_0   H4_242X_SDRC_ACTIM_CTRLB_0_133MHz
-#  define H4_2420_SDRC_RFR_CTRL_ES1    H4_242X_SDRC_RFR_CTRL_133MHz
-#  define H4_2420_SDRC_RFR_CTRL                H4_242X_SDRC_RFR_CTRL_133MHz
-# endif
-# define H4_2422_SDRC_ACTIM_CTRLA_0    H4_2420_SDRC_ACTIM_CTRLA_0
-# define H4_2422_SDRC_ACTIM_CTRLB_0    H4_2420_SDRC_ACTIM_CTRLB_0
-# define H4_2422_SDRC_RFR_CTRL_ES1     H4_2420_SDRC_RFR_CTRL_ES1
-# define H4_2422_SDRC_RFR_CTRL         H4_2420_SDRC_RFR_CTRL
+#define H4_242X_SDRC_ACTIM_CTRLA_0_133MHz  0x8BA6E6C8 /* temp warn 0 settings */
+#define H4_242X_SDRC_ACTIM_CTRLB_0_133MHz  0x00000010 /* temp warn 0 settings */
+#define H4_242X_SDRC_RFR_CTRL_100MHz      0x0002da01
+#define H4_242X_SDRC_RFR_CTRL_133MHz      0x0003de01
+#define H4_242x_SDRC_DLLAB_CTRL_100MHz    0x0000980E /* 72deg, allow DPLLout*1 to work (combo)*/
+#define H4_242x_SDRC_DLLAB_CTRL_133MHz    0x0000690E /* 72deg, for ES2 */
+
+#ifdef PRCM_CONFIG_II
+# define H4_2420_SDRC_ACTIM_CTRLA_0    H4_242X_SDRC_ACTIM_CTRLA_0_100MHz
+# define H4_2420_SDRC_ACTIM_CTRLB_0    H4_242X_SDRC_ACTIM_CTRLB_0_100MHz
+# define H4_2420_SDRC_RFR_CTRL         H4_242X_SDRC_RFR_CTRL_100MHz
+# define H4_2420_SDRC_DLLAB_CTRL    H4_242x_SDRC_DLLAB_CTRL_100MHz
+# define H4_2422_SDRC_ACTIM_CTRLA_0    H4_242X_SDRC_ACTIM_CTRLA_0_100MHz
+# define H4_2422_SDRC_ACTIM_CTRLB_0    H4_242X_SDRC_ACTIM_CTRLB_0_100MHz
+# define H4_2422_SDRC_RFR_CTRL         H4_242X_SDRC_RFR_CTRL_100MHz
+# define H4_2422_SDRC_DLLAB_CTRL    H4_242x_SDRC_DLLAB_CTRL_100MHz
+#elif PRCM_CONFIG_III
+# define H4_2420_SDRC_ACTIM_CTRLA_0    H4_242X_SDRC_ACTIM_CTRLA_0_133MHz
+# define H4_2420_SDRC_ACTIM_CTRLB_0    H4_242X_SDRC_ACTIM_CTRLB_0_133MHz
+# define H4_2420_SDRC_RFR_CTRL         H4_242X_SDRC_RFR_CTRL_133MHz
+# define H4_2420_SDRC_DLLAB_CTRL    H4_242x_SDRC_DLLAB_CTRL_133MHz
+# define H4_2422_SDRC_ACTIM_CTRLA_0    H4_242X_SDRC_ACTIM_CTRLA_0_100MHz
+# define H4_2422_SDRC_ACTIM_CTRLB_0    H4_242X_SDRC_ACTIM_CTRLB_0_100MHz
+# define H4_2422_SDRC_RFR_CTRL         H4_242X_SDRC_RFR_CTRL_100MHz
+# define H4_2422_SDRC_DLLAB_CTRL    H4_242x_SDRC_DLLAB_CTRL_100MHz
 #endif
 
 
 /* GPMC settings */
-#ifdef PRCM_CONFIG_II        /* L3 at 100MHz */
-#ifdef CFG_NAND_BOOT
-#define H4_24XX_GPMC_CONFIG1_0   0x0
-#define H4_24XX_GPMC_CONFIG2_0   0x00141400
-#define H4_24XX_GPMC_CONFIG3_0   0x00141400
-#define H4_24XX_GPMC_CONFIG4_0   0x0F010F01
-#define H4_24XX_GPMC_CONFIG5_0   0x010C1414
-#define H4_24XX_GPMC_CONFIG6_0   0x00000A80
-#else
-#define H4_24XX_GPMC_CONFIG1_0   0x3
-#define H4_24XX_GPMC_CONFIG2_0   0x000f0f01
-#define H4_24XX_GPMC_CONFIG3_0   0x00050502
-#define H4_24XX_GPMC_CONFIG4_0   0x0C060C06
-#define H4_24XX_GPMC_CONFIG5_0   0x01131F1F
-#endif
-#define H4_24XX_GPMC_CONFIG7_0   (0x00000C40|(H4_CS0_BASE >> 24))
-
-#define H4_24XX_GPMC_CONFIG1_1   0x00011000
-#define H4_24XX_GPMC_CONFIG2_1   0x001F1F00
-#define H4_24XX_GPMC_CONFIG3_1   0x00080802
-#define H4_24XX_GPMC_CONFIG4_1   0x1C091C09
-#define H4_24XX_GPMC_CONFIG5_1   0x031A1F1F
-#define H4_24XX_GPMC_CONFIG6_1   0x000003C2
-#define H4_24XX_GPMC_CONFIG7_1   (0x00000F40|(H4_CS1_BASE >> 24))
-#endif
-
-#ifdef PRCM_CONFIG_III  /* L3 at 133MHz */
-#ifdef CFG_NAND_BOOT
-#define H4_24XX_GPMC_CONFIG1_0   0x0
-#define H4_24XX_GPMC_CONFIG2_0   0x00141400
-#define H4_24XX_GPMC_CONFIG3_0   0x00141400
-#define H4_24XX_GPMC_CONFIG4_0   0x0F010F01
-#define H4_24XX_GPMC_CONFIG5_0   0x010C1414
-#define H4_24XX_GPMC_CONFIG6_0   0x00000A80
-#else
-#define H4_24XX_GPMC_CONFIG1_0   0x3
-#define H4_24XX_GPMC_CONFIG2_0   0x00151501
-#define H4_24XX_GPMC_CONFIG3_0   0x00060602
-#define H4_24XX_GPMC_CONFIG4_0   0x10081008
-#define H4_24XX_GPMC_CONFIG5_0   0x01131F1F
-#define H4_24XX_GPMC_CONFIG6_0   0x000004c4
-#endif
-#define H4_24XX_GPMC_CONFIG7_0   (0x00000C40|(H4_CS0_BASE >> 24))
-
-#define H4_24XX_GPMC_CONFIG1_1   0x00011000
-#define H4_24XX_GPMC_CONFIG2_1   0x001f1f01
-#define H4_24XX_GPMC_CONFIG3_1   0x00080803
-#define H4_24XX_GPMC_CONFIG4_1   0x1C091C09
-#define H4_24XX_GPMC_CONFIG5_1   0x041f1F1F
-#define H4_24XX_GPMC_CONFIG6_1   0x000004C4
-#define H4_24XX_GPMC_CONFIG7_1   (0x00000F40|(H4_CS1_BASE >> 24))
-#endif
-
-#ifdef CONFIG_APTIX /* SDRC-SDR for Aptix x16 */
-#define VAL_H4_SDRC_SHARING_16   0x00002400  /* No-Tristate, 16bit on D31-D16, CS1=dont care */
-#define VAL_H4_SDRC_SHARING      0x00000100
-#define VAL_H4_SDRC_MCFG_0_16    0x00901000  /* SDR-SDRAM,External,x16 bit */
-#define VAL_H4_SDRC_MCFG_0       0x01702011
-#define VAL_H4_SDRC_MR_0         0x00000029  /* Burst=2, Serial Mode, CAS 3*/
-#define VAL_H4_SDRC_RFR_CTRL_0   0x00001703  /* refresh time */
-#define VAL_H4_SDRC_DCDL2_CTRL   0x5A59B485
-#endif
-
-#endif
+#ifdef PRCM_CONFIG_II       /* L3 at 100MHz */
+# ifdef CFG_NAND_BOOT
+#  define H4_24XX_GPMC_CONFIG1_0   0x0
+#  define H4_24XX_GPMC_CONFIG2_0   0x00141400
+#  define H4_24XX_GPMC_CONFIG3_0   0x00141400
+#  define H4_24XX_GPMC_CONFIG4_0   0x0F010F01
+#  define H4_24XX_GPMC_CONFIG5_0   0x010C1414
+#  define H4_24XX_GPMC_CONFIG6_0   0x00000A80
+# else /* else NOR */
+#  define H4_24XX_GPMC_CONFIG1_0   0x3
+#  define H4_24XX_GPMC_CONFIG2_0   0x000f0f01
+#  define H4_24XX_GPMC_CONFIG3_0   0x00050502
+#  define H4_24XX_GPMC_CONFIG4_0   0x0C060C06
+#  define H4_24XX_GPMC_CONFIG5_0   0x01131F1F
+# endif /* endif CFG_NAND_BOOT */
+# define H4_24XX_GPMC_CONFIG7_0          (0x00000C40|(H4_CS0_BASE >> 24))
+# define H4_24XX_GPMC_CONFIG1_1          0x00011000
+# define H4_24XX_GPMC_CONFIG2_1          0x001F1F00
+# define H4_24XX_GPMC_CONFIG3_1          0x00080802
+# define H4_24XX_GPMC_CONFIG4_1          0x1C091C09
+# define H4_24XX_GPMC_CONFIG5_1          0x031A1F1F
+# define H4_24XX_GPMC_CONFIG6_1          0x000003C2
+# define H4_24XX_GPMC_CONFIG7_1          (0x00000F40|(H4_CS1_BASE >> 24))
+#endif /* endif PRCM_CONFIG_II */
+
+#ifdef PRCM_CONFIG_III /* L3 at 133MHz */
+# ifdef CFG_NAND_BOOT
+#  define H4_24XX_GPMC_CONFIG1_0   0x0
+#  define H4_24XX_GPMC_CONFIG2_0   0x00141400
+#  define H4_24XX_GPMC_CONFIG3_0   0x00141400
+#  define H4_24XX_GPMC_CONFIG4_0   0x0F010F01
+#  define H4_24XX_GPMC_CONFIG5_0   0x010C1414
+#  define H4_24XX_GPMC_CONFIG6_0   0x00000A80
+# else /* NOR boot */
+#  define H4_24XX_GPMC_CONFIG1_0   0x3
+#  define H4_24XX_GPMC_CONFIG2_0   0x00151501
+#  define H4_24XX_GPMC_CONFIG3_0   0x00060602
+#  define H4_24XX_GPMC_CONFIG4_0   0x10081008
+#  define H4_24XX_GPMC_CONFIG5_0   0x01131F1F
+#  define H4_24XX_GPMC_CONFIG6_0   0x000004c4
+# endif /* endif CFG_NAND_BOOT */
+# define H4_24XX_GPMC_CONFIG7_0          (0x00000C40|(H4_CS0_BASE >> 24))
+# define H4_24XX_GPMC_CONFIG1_1          0x00011000
+# define H4_24XX_GPMC_CONFIG2_1          0x001f1f01
+# define H4_24XX_GPMC_CONFIG3_1          0x00080803
+# define H4_24XX_GPMC_CONFIG4_1          0x1C091C09
+# define H4_24XX_GPMC_CONFIG5_1          0x041f1F1F
+# define H4_24XX_GPMC_CONFIG6_1          0x000004C4
+# define H4_24XX_GPMC_CONFIG7_1          (0x00000F40|(H4_CS1_BASE >> 24))
+#endif /* endif CFG_PRCM_III */
+
+#endif /* endif _OMAP24XX_MEM_H_ */
index a2a97981b6cd4325d50a4b050ccdd173e02cce70..d833035a4b34cb157921faf476cf2a5414ec3e54 100644 (file)
  * 2420 specific Section
  */
 
+/* L3 Firewall */
+#define A_REQINFOPERM0        0x68005048
+#define A_READPERM0           0x68005050
+#define A_WRITEPERM0          0x68005058
+/* #define GP_DEVICE   (BIT8|BIT9)  FIXME -- commented out to make compile -- FIXME */
+
+/* L3 Firewall */
+#define A_REQINFOPERM0        0x68005048
+#define A_READPERM0           0x68005050
+#define A_WRITEPERM0          0x68005058
+
 /* CONTROL */
 #define OMAP2420_CTRL_BASE    (0x48000000)
 #define CONTROL_STATUS        (OMAP2420_CTRL_BASE + 0x2F8)
 
+/* device type */
+#define TST_DEVICE     0x0
+#define EMU_DEVICE     0x1
+#define HS_DEVICE      0x2
+#define GP_DEVICE      0x3
+
 /* TAP information */
 #define OMAP2420_TAP_BASE     (0x48014000)
 #define TAP_IDCODE_REG        (OMAP2420_TAP_BASE+0x204)
+#define PRODUCTION_ID         (OMAP2420_TAP_BASE+0x208)
 
 /* GPMC */
 #define OMAP2420_GPMC_BASE    (0x6800A000)
@@ -70,6 +88,7 @@
 #define OMAP2420_SDRC_BASE 0x68009000
 #define SDRC_SYSCONFIG     (OMAP2420_SDRC_BASE+0x10)
 #define SDRC_STATUS        (OMAP2420_SDRC_BASE+0x14)
+#define SDRC_CS_CFG        (OMAP2420_SDRC_BASE+0x40)
 #define SDRC_SHARING       (OMAP2420_SDRC_BASE+0x44)
 #define SDRC_DLLA_CTRL     (OMAP2420_SDRC_BASE+0x60)
 #define SDRC_DLLB_CTRL     (OMAP2420_SDRC_BASE+0x68)
diff --git a/include/asm-arm/arch-arm1136/rev.h b/include/asm-arm/arch-arm1136/rev.h
deleted file mode 100644 (file)
index 6fceb09..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * (C) Copyright 2004
- * Texas Instruments, <www.ti.com>
- * Richard Woodruff <r-woodruff2@ti.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 _OMAP24XX_REV_H_
-#define _OMAP24XX_REV_H_
-
-typedef        struct  h4_system_data {
-    /* base board info */
-    u32           base_b_rev;         /* rev from base board i2c */
-    /* cpu board info */
-    u32           cpu_b_rev;          /* rev from cpu board i2c */
-    u32    cpu_b_mux;          /* mux type on daughter board */
-    u32    cpu_b_ddr_type;     /* mem type */
-    u32    cpu_b_ddr_speed;    /* ddr speed rating */
-    u32    cpu_b_switches;     /* boot ctrl switch settings */
-    /* cpu info */
-    u32           cpu_type;           /* type of cpu; 2420, 2422, 2430,...*/
-    u32    cpu_rev;            /* rev of given cpu; ES1, ES2,...*/
-} h4_sys_data;
-
-#define CDB_DDR_COMBO                   /* combo part on cpu daughter card */
-#define CDB_DDR_IPDB                    /* 2x16 parts on daughter card */
-
-#define DDR_100         100             /* type found on most mem d-boards */
-#define DDR_111         111             /* some combo parts */
-#define DDR_133         133             /* most combo, some mem d-boards */
-#define DDR_165         165             /* future parts */
-
-#define CPU_2420        0x2420
-#define CPU_2422        0x2422
-
-#define CPU_2422_ES1    1
-#define CPU_2422_ES2    2
-#define CPU_2420_ES1    1
-#define CPU_2420_ES2    2
-
-#endif
index ef301ba61a77054fd66f1bd63741300cd01f0d45..53c231a5e46d048e5a5fe33912cd2737686d220d 100644 (file)
@@ -39,7 +39,8 @@ typedef struct  h4_system_data {
        u32 cpu_rev;            /* rev of given cpu; ES1, ES2,...*/
 } h4_sys_data;
 
-#define SDR_DISCRETE      4
+#define XDR_POP           5      /* package on package part */
+#define SDR_DISCRETE      4      /* 128M memory SDR module*/
 #define DDR_STACKED       3      /* stacked part on 2422 */
 #define DDR_COMBO         2      /* combo part on cpu daughter card (menalaeus) */
 #define DDR_DISCRETE      1      /* 2x16 parts on daughter card */
@@ -50,16 +51,19 @@ typedef struct  h4_system_data {
 #define DDR_165           165    /* future parts */
 
 #define CPU_2420          0x2420
-#define CPU_2422          0x2422
+#define CPU_2422          0x2422 /* 2420 + 64M stacked */
+#define CPU_2423          0x2423 /* 2420 + 96M stacked */
 
 #define CPU_2422_ES1      1
 #define CPU_2422_ES2      2
 #define CPU_2420_ES1      1
 #define CPU_2420_ES2      2
+#define CPU_2420_2422_ES1 1
 
 #define CPU_2420_CHIPID   0x0B5D9000
 #define CPU_24XX_ID_MASK  0x0FFFF000
 #define CPU_242X_REV_MASK 0xF0000000
+#define CPU_242X_PID_MASK 0x000F0000
 
 #define BOARD_H4_MENELAUS 1
 #define BOARD_H4_SDP      2
index 2cd8455dec57e1a2c81f07f2f962522c57ca8013..9d8e5b2622d8d1dd29717e17b14da152c85751b6 100644 (file)
@@ -44,10 +44,11 @@ u32 wait_on_value(u32 read_bit_mask, u32 match_value, u32 read_addr, u32 bound);
 u32 get_board_type(void);
 void display_board_info(u32);
 void update_mux(u32,u32);
+u32 get_sdr_cs_size(u32 offset);
 
 u32 running_in_sdram(void);
 u32 running_in_sram(void);
 u32 running_in_flash(void);
 u32 running_from_internal_boot(void);
-
+u32 get_device_type(void);
 #endif
index 5064697858e7e29df86451063b062138e9c80407..3056ca7f673ad919f170e6083eb5026122853e25 100644 (file)
 /* include IMPA7 specific hardware file if there was one */
 #elif defined(CONFIG_EP7312)
 /* include EP7312 specific hardware file if there was one */
+#elif defined(CONFIG_ARMADILLO)
+/* include armadillo specific hardware file if there was one */
+#elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)
+/* include IntegratorCP/CM720T specific hardware file if there was one */
 #else
 #error No hardware file defined for this configuration
 #endif
index 90d9da817461ce815360cff16c2d97435f40061e..13656a3ad2b24b5cd573edf1ff5e9ad8840c3e66 100644 (file)
@@ -1,6 +1,9 @@
 /*
  * include/asm-armnommu/arch-netarm/netarm_gen_module.h
  *
+ * Copyright (C) 2005
+ * Art Shipkowski, Videon Central, Inc., <art@videon-central.com>
+ *
  * Copyright (C) 2000, 2001 NETsilicon, Inc.
  * Copyright (C) 2000, 2001 Red Hat, Inc.
  *
@@ -27,6 +30,8 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * author(s) : Joe deBlaquiere
+ *
+ * Modified to support NS7520 by Art Shipkowski.
  */
 
 #ifndef __NETARM_GEN_MODULE_REGISTERS_H
@@ -49,7 +54,9 @@
 #define NETARM_GEN_TIMER2_STATUS       (0x1c)
 
 #define NETARM_GEN_PORTA               (0x20)
+#ifndef CONFIG_NETARM_NS7520
 #define NETARM_GEN_PORTB               (0x24)
+#endif
 #define NETARM_GEN_PORTC               (0x28)
 
 #define NETARM_GEN_INTR_ENABLE         (0x30)
 
 /* PORT C Register ( 0xFFB0_0028 ) */
 
+#ifndef CONFIG_NETARM_NS7520
 #define NETARM_GEN_PORT_MODE(x)                (((x)<<24) + (0xFF00))
 #define NETARM_GEN_PORT_DIR(x)         (((x)<<16) + (0xFF00))
+#else
+#define NETARM_GEN_PORT_MODE(x)                ((x)<<24)
+#define NETARM_GEN_PORT_DIR(x)         ((x)<<16)
+#define NETARM_GEN_PORT_CSF(x)         ((x)<<8)
+#endif
 
 /* Timer Registers ( 0xFFB0_0010 0xFFB0_0018 ) */
 
 #define NETARM_GEN_TCTL_INIT_COUNT(x)  ((x) & 0x1FF)
 
 #define NETARM_GEN_TSTAT_INTPEN                (0x40000000)
+#if ~defined(CONFIG_NETARM_NS7520)
 #define NETARM_GEN_TSTAT_CTC_MASK      (0x000001FF)
+#else
+#define NETARM_GEN_TSTAT_CTC_MASK      (0x0FFFFFFF)
+#endif
 
 /* prescale to msecs conversion */
 
+#if !defined(CONFIG_NETARM_PLL_BYPASS)
 #define NETARM_GEN_TIMER_MSEC_P(x)     ( ( ( 20480 ) * ( 0x1FF - ( (x) &           \
                                            NETARM_GEN_TSTAT_CTC_MASK ) +   \
                                            1 ) ) / (NETARM_XTAL_FREQ/1000) )
                                          NETARM_GEN_TSTAT_CTC_MASK ) | \
                                          NETARM_GEN_TCTL_USE_PRESCALE )
 
-#if 0
-/* ifdef CONFIG_NETARM_PLL_BYPASS else */
-#error test
+#else
 #define NETARM_GEN_TIMER_MSEC_P(x)     ( ( ( 4096 ) * ( 0x1FF - ( (x) &    \
                                            NETARM_GEN_TSTAT_CTC_MASK ) +   \
                                            1 ) ) / (NETARM_XTAL_FREQ/1000) )
index 7c63d176a99bd7eb263484de6bd440cf1e8e2379..f0529fd09b72de9ab106230484af6ac4038ee417 100644 (file)
@@ -1,6 +1,9 @@
 /*
  * include/asm-armnommu/arch-netarm/netarm_mem_module.h
  *
+ * Copyright (C) 2005
+ * Art Shipkowski, Videon Central, Inc., <art@videon-central.com>
+ *
  * Copyright (C) 2000, 2001 NETsilicon, Inc.
  * Copyright (C) 2000, 2001 Red Hat, Inc.
  *
@@ -27,6 +30,8 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * author(s) : Joe deBlaquiere
+ *
+ * Modified to support NS7520 by Art Shipkowski.
  */
 
 #ifndef __NETARM_MEM_MODULE_REGISTERS_H
 #define NETARM_MEM_OPT_WRITE_ASYNC     (0x00000000)
 #define NETARM_MEM_OPT_WRITE_SYNC      (0x00000001)
 
+#ifdef CONFIG_NETARM_NS7520
+/* The NS7520 has a second options register for each chip select */
+#define        NETARM_MEM_CS0_OPTIONS_B  (0x18)
+#define        NETARM_MEM_CS1_OPTIONS_B  (0x28)
+#define        NETARM_MEM_CS2_OPTIONS_B  (0x38)
+#define        NETARM_MEM_CS3_OPTIONS_B  (0x48)
+#define        NETARM_MEM_CS4_OPTIONS_B  (0x58)
+
+/* Option B Registers (0xFFC0_00x8) */
+#define NETARM_MEM_OPTB_SYNC_1_STAGE   (0x00000001)
+#define NETARM_MEM_OPTB_SYNC_2_STAGE   (0x00000002)
+#define NETARM_MEM_OPTB_BCYC_PLUS0     (0x00000000)
+#define NETARM_MEM_OPTB_BCYC_PLUS4     (0x00000004)
+#define NETARM_MEM_OPTB_BCYC_PLUS8     (0x00000008)
+#define NETARM_MEM_OPTB_BCYC_PLUS12    (0x0000000C)
+
+#define NETARM_MEM_OPTB_WAIT_PLUS0     (0x00000000)
+#define NETARM_MEM_OPTB_WAIT_PLUS16    (0x00000010)
+#define NETARM_MEM_OPTB_WAIT_PLUS32    (0x00000020)
+#define NETARM_MEM_OPTB_WAIT_PLUS48    (0x00000030)
+#endif
+
 #endif
index 029c7f4c74e6d853c06916c6dd2e8fb3537363fe..fa8812879a5cae14d60cc0198c858622c2da1cd2 100644 (file)
@@ -1,6 +1,9 @@
 /*
  * linux/include/asm-arm/arch-netarm/netarm_registers.h
  *
+ * Copyright (C) 2005
+ * Art Shipkowski, Videon Central, Inc., <art@videon-central.com>
+ *
  * Copyright (C) 2000, 2001 NETsilicon, Inc.
  * Copyright (C) 2000, 2001 WireSpeed Communications Corporation
  *
@@ -27,6 +30,8 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * author(s) : Joe deBlaquiere
+ *
+ * Modified to support NS7520 by Art Shipkowski.
  */
 
 #ifndef __NET_ARM_REGISTERS_H
@@ -38,6 +43,8 @@
 /* the input crystal/clock frequency ( in Hz ) */
 #define        NETARM_XTAL_FREQ_25MHz          (18432000)
 #define        NETARM_XTAL_FREQ_33MHz          (23698000)
+#define        NETARM_XTAL_FREQ_48MHz          (48000000)
+#define        NETARM_XTAL_FREQ_55MHz          (55000000)
 #define NETARM_XTAL_FREQ_EMLIN1                (20000000)
 
 /* the frequency of SYS_CLK */
 #define        NETARM_PLL_COUNT_VAL            4
 #define        NETARM_XTAL_FREQ                NETARM_XTAL_FREQ_25MHz
 
-#else  /* CONFIG_NETARM_NET50 */
+#elif defined(CONFIG_NETARM_NET50)
 
 /* NET+50 boards:  40 MHz (with NETARM_XTAL_FREQ_25MHz) */
 #define NETARM_PLL_COUNT_VAL           8
 #define        NETARM_XTAL_FREQ                NETARM_XTAL_FREQ_25MHz
 
+#else  /* CONFIG_NETARM_NS7520 */
+
+#define        NETARM_PLL_COUNT_VAL            0
+
+#if defined(CONFIG_BOARD_UNC20)
+#define        NETARM_XTAL_FREQ                NETARM_XTAL_FREQ_48MHz
+#else
+#define        NETARM_XTAL_FREQ                NETARM_XTAL_FREQ_55MHz
+#endif
+
 #endif
 
 /* #include "arm_registers.h" */
index f7e6d555df825a85949723679622b3dfe5d8a833..97d470484c3f62d79b6ff4345751d454f60e4ef8 100644 (file)
 #ifndef AT91RM9200_H
 #define AT91RM9200_H
 
-typedef volatile unsigned int AT91_REG;/* Hardware register definition */
+typedef volatile unsigned int AT91_REG;                /* Hardware register definition */
 
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Timer Counter Channel Interface */
-/* ***************************************************************************** */
-typedef struct _AT91S_TC {
+/******************************************************************************/
+/*        SOFTWARE API DEFINITION  FOR Timer Counter Channel Interface        */
+/******************************************************************************/
+typedef struct _AT91S_TC
+{
        AT91_REG         TC_CCR;        /* Channel Control Register */
        AT91_REG         TC_CMR;        /* Channel Mode Register */
        AT91_REG         Reserved0[2];  /*  */
@@ -44,25 +45,26 @@ typedef struct _AT91S_TC {
        AT91_REG         TC_IMR;        /* Interrupt Mask Register */
 } AT91S_TC, *AT91PS_TC;
 
-#define AT91C_TC_TIMER_DIV1_CLOCK      ((unsigned int) 0x0 <<  0) /* (TC) MCK/2 */
-#define AT91C_TC_TIMER_DIV2_CLOCK      ((unsigned int) 0x1 <<  0) /* (TC) MCK/8 */
-#define AT91C_TC_TIMER_DIV3_CLOCK      ((unsigned int) 0x2 <<  0) /* (TC) MCK/32 */
-#define AT91C_TC_TIMER_DIV4_CLOCK      ((unsigned int) 0x3 <<  0) /* (TC) MCK/128 */
-#define AT91C_TC_SLOW_CLOCK            ((unsigned int) 0x4 <<  0) /* (TC) SLOW CLK */
-#define AT91C_TC_XC0_CLOCK             ((unsigned int) 0x5 <<  0) /* (TC) XC0 */
-#define AT91C_TC_XC1_CLOCK             ((unsigned int) 0x6 <<  0) /* (TC) XC1 */
-#define AT91C_TC_XC2_CLOCK             ((unsigned int) 0x7 <<  0) /* (TC) XC2 */
-#define        AT91C_TCB_TC0XC0S_NONE                 ((unsigned int) 0x1) /* (TCB) None signal connected to XC0 */
-#define        AT91C_TCB_TC1XC1S_NONE                 ((unsigned int) 0x1 <<  2) /* (TCB) None signal connected to XC1 */
-#define        AT91C_TCB_TC2XC2S_NONE                 ((unsigned int) 0x1 <<  4) /* (TCB) None signal connected to XC2 */
-#define AT91C_TC_CLKDIS       ((unsigned int) 0x1 <<  1) /* (TC) Counter Clock Disable Command */
-#define AT91C_TC_SWTRG        ((unsigned int) 0x1 <<  2) /* (TC) Software Trigger Command */
-#define AT91C_TC_CLKEN        ((unsigned int) 0x1 <<  0) /* (TC) Counter Clock Enable Command */
-
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Usart */
-/* ***************************************************************************** */
-typedef struct _AT91S_USART {
+#define AT91C_TC_TIMER_DIV1_CLOCK      ((unsigned int) 0x0 <<  0) /* (TC) MCK/2 */
+#define AT91C_TC_TIMER_DIV2_CLOCK      ((unsigned int) 0x1 <<  0) /* (TC) MCK/8 */
+#define AT91C_TC_TIMER_DIV3_CLOCK      ((unsigned int) 0x2 <<  0) /* (TC) MCK/32 */
+#define AT91C_TC_TIMER_DIV4_CLOCK      ((unsigned int) 0x3 <<  0) /* (TC) MCK/128 */
+#define AT91C_TC_SLOW_CLOCK            ((unsigned int) 0x4 <<  0) /* (TC) SLOW CLK */
+#define AT91C_TC_XC0_CLOCK             ((unsigned int) 0x5 <<  0) /* (TC) XC0 */
+#define AT91C_TC_XC1_CLOCK             ((unsigned int) 0x6 <<  0) /* (TC) XC1 */
+#define AT91C_TC_XC2_CLOCK             ((unsigned int) 0x7 <<  0) /* (TC) XC2 */
+#define AT91C_TCB_TC0XC0S_NONE         ((unsigned int) 0x1)       /* (TCB) None signal connected to XC0 */
+#define AT91C_TCB_TC1XC1S_NONE         ((unsigned int) 0x1 <<  2) /* (TCB) None signal connected to XC1 */
+#define AT91C_TCB_TC2XC2S_NONE         ((unsigned int) 0x1 <<  4) /* (TCB) None signal connected to XC2 */
+#define AT91C_TC_CLKDIS                        ((unsigned int) 0x1 <<  1) /* (TC) Counter Clock Disable Command */
+#define AT91C_TC_SWTRG                 ((unsigned int) 0x1 <<  2) /* (TC) Software Trigger Command */
+#define AT91C_TC_CLKEN                 ((unsigned int) 0x1 <<  0) /* (TC) Counter Clock Enable Command */
+
+/******************************************************************************/
+/*                  SOFTWARE API DEFINITION  FOR Usart                        */
+/******************************************************************************/
+typedef struct _AT91S_USART
+{
        AT91_REG         US_CR;         /* Control Register */
        AT91_REG         US_MR;         /* Mode Register */
        AT91_REG         US_IER;        /* Interrupt Enable Register */
@@ -79,7 +81,7 @@ typedef struct _AT91S_USART {
        AT91_REG         US_NER;        /* Nb Errors Register */
        AT91_REG         US_XXR;        /* XON_XOFF Register */
        AT91_REG         US_IF;         /* IRDA_FILTER Register */
-       AT91_REG         Reserved1[44];         /*  */
+       AT91_REG         Reserved1[44]; /*  */
        AT91_REG         US_RPR;        /* Receive Pointer Register */
        AT91_REG         US_RCR;        /* Receive Counter Register */
        AT91_REG         US_TPR;        /* Transmit Pointer Register */
@@ -92,10 +94,11 @@ typedef struct _AT91S_USART {
        AT91_REG         US_PTSR;       /* PDC Transfer Status Register */
 } AT91S_USART, *AT91PS_USART;
 
-/************************************************************************/
-/*          SOFTWARE API DEFINITION  FOR Clock Generator Controler      */
-/************************************************************************/
-typedef struct _AT91S_CKGR {
+/******************************************************************************/
+/*          SOFTWARE API DEFINITION  FOR Clock Generator Controler            */
+/******************************************************************************/
+typedef struct _AT91S_CKGR
+{
        AT91_REG         CKGR_MOR;      /* Main Oscillator Register */
        AT91_REG         CKGR_MCFR;     /* Main Clock  Frequency Register */
        AT91_REG         CKGR_PLLAR;    /* PLL A Register */
@@ -103,42 +106,46 @@ typedef struct _AT91S_CKGR {
 } AT91S_CKGR, *AT91PS_CKGR;
 
 /* -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- */
-#define AT91C_CKGR_MOSCEN     ((unsigned int) 0x1 <<  0) /* (CKGR) Main Oscillator Enable */
-#define AT91C_CKGR_OSCTEST    ((unsigned int) 0x1 <<  1) /* (CKGR) Oscillator Test */
-#define AT91C_CKGR_OSCOUNT    ((unsigned int) 0xFF <<  8) /* (CKGR) Main Oscillator Start-up Time */
+#define AT91C_CKGR_MOSCEN      ((unsigned int) 0x1  <<  0)     /* (CKGR) Main Oscillator Enable */
+#define AT91C_CKGR_OSCTEST     ((unsigned int) 0x1  <<  1)     /* (CKGR) Oscillator Test */
+#define AT91C_CKGR_OSCOUNT     ((unsigned int) 0xFF <<  8)     /* (CKGR) Main Oscillator Start-up Time */
+
 /* -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- */
-#define AT91C_CKGR_MAINF      ((unsigned int) 0xFFFF <<  0) /* (CKGR) Main Clock Frequency */
-#define AT91C_CKGR_MAINRDY    ((unsigned int) 0x1 << 16) /* (CKGR) Main Clock Ready */
+#define AT91C_CKGR_MAINF       ((unsigned int) 0xFFFF <<  0)   /* (CKGR) Main Clock Frequency */
+#define AT91C_CKGR_MAINRDY     ((unsigned int) 0x1 << 16)      /* (CKGR) Main Clock Ready */
+
 /* -------- CKGR_PLLAR : (CKGR Offset: 0x8) PLL A Register -------- */
-#define AT91C_CKGR_DIVA       ((unsigned int) 0xFF <<  0) /* (CKGR) Divider Selected */
-#define        AT91C_CKGR_DIVA_0                    ((unsigned int) 0x0) /* (CKGR) Divider output is 0 */
-#define        AT91C_CKGR_DIVA_BYPASS               ((unsigned int) 0x1) /* (CKGR) Divider is bypassed */
-#define AT91C_CKGR_PLLACOUNT  ((unsigned int) 0x3F <<  8) /* (CKGR) PLL A Counter */
-#define AT91C_CKGR_OUTA       ((unsigned int) 0x3 << 14) /* (CKGR) PLL A Output Frequency Range */
-#define        AT91C_CKGR_OUTA_0                    ((unsigned int) 0x0 << 14) /* (CKGR) Please refer to the PLLA datasheet */
-#define        AT91C_CKGR_OUTA_1                    ((unsigned int) 0x1 << 14) /* (CKGR) Please refer to the PLLA datasheet */
-#define        AT91C_CKGR_OUTA_2                    ((unsigned int) 0x2 << 14) /* (CKGR) Please refer to the PLLA datasheet */
-#define        AT91C_CKGR_OUTA_3                    ((unsigned int) 0x3 << 14) /* (CKGR) Please refer to the PLLA datasheet */
-#define AT91C_CKGR_MULA       ((unsigned int) 0x7FF << 16) /* (CKGR) PLL A Multiplier */
-#define AT91C_CKGR_SRCA       ((unsigned int) 0x1 << 29) /* (CKGR) PLL A Source */
+#define AT91C_CKGR_DIVA                ((unsigned int) 0xFF  <<  0)    /* (CKGR) Divider Selected */
+#define AT91C_CKGR_DIVA_0      ((unsigned int) 0x0)            /* (CKGR) Divider output is 0 */
+#define AT91C_CKGR_DIVA_BYPASS ((unsigned int) 0x1)            /* (CKGR) Divider is bypassed */
+#define AT91C_CKGR_PLLACOUNT   ((unsigned int) 0x3F  <<  8)    /* (CKGR) PLL A Counter */
+#define AT91C_CKGR_OUTA                ((unsigned int) 0x3   << 14)    /* (CKGR) PLL A Output Frequency Range */
+#define AT91C_CKGR_OUTA_0      ((unsigned int) 0x0   << 14)    /* (CKGR) Please refer to the PLLA datasheet */
+#define AT91C_CKGR_OUTA_1      ((unsigned int) 0x1   << 14)    /* (CKGR) Please refer to the PLLA datasheet */
+#define AT91C_CKGR_OUTA_2      ((unsigned int) 0x2   << 14)    /* (CKGR) Please refer to the PLLA datasheet */
+#define AT91C_CKGR_OUTA_3      ((unsigned int) 0x3   << 14)    /* (CKGR) Please refer to the PLLA datasheet */
+#define AT91C_CKGR_MULA                ((unsigned int) 0x7FF << 16)    /* (CKGR) PLL A Multiplier */
+#define AT91C_CKGR_SRCA                ((unsigned int) 0x1   << 29)    /* (CKGR) PLL A Source */
+
 /* -------- CKGR_PLLBR : (CKGR Offset: 0xc) PLL B Register -------- */
-#define AT91C_CKGR_DIVB       ((unsigned int) 0xFF <<  0) /* (CKGR) Divider Selected */
-#define        AT91C_CKGR_DIVB_0                    ((unsigned int) 0x0) /* (CKGR) Divider output is 0 */
-#define        AT91C_CKGR_DIVB_BYPASS               ((unsigned int) 0x1) /* (CKGR) Divider is bypassed */
-#define AT91C_CKGR_PLLBCOUNT  ((unsigned int) 0x3F <<  8) /* (CKGR) PLL B Counter */
-#define AT91C_CKGR_OUTB       ((unsigned int) 0x3 << 14) /* (CKGR) PLL B Output Frequency Range */
-#define        AT91C_CKGR_OUTB_0                    ((unsigned int) 0x0 << 14) /* (CKGR) Please refer to the PLLB datasheet */
-#define        AT91C_CKGR_OUTB_1                    ((unsigned int) 0x1 << 14) /* (CKGR) Please refer to the PLLB datasheet */
-#define        AT91C_CKGR_OUTB_2                    ((unsigned int) 0x2 << 14) /* (CKGR) Please refer to the PLLB datasheet */
-#define        AT91C_CKGR_OUTB_3                    ((unsigned int) 0x3 << 14) /* (CKGR) Please refer to the PLLB datasheet */
-#define AT91C_CKGR_MULB       ((unsigned int) 0x7FF << 16) /* (CKGR) PLL B Multiplier */
-#define AT91C_CKGR_USB_96M    ((unsigned int) 0x1 << 28) /* (CKGR) Divider for USB Ports */
-#define AT91C_CKGR_USB_PLL    ((unsigned int) 0x1 << 29) /* (CKGR) PLL Use */
-
-/* ************************************************************************* */
-/*              SOFTWARE API DEFINITION  FOR Parallel Input Output Controler */
-/* ************************************************************************* */
-typedef struct _AT91S_PIO {
+#define AT91C_CKGR_DIVB                ((unsigned int) 0xFF  <<  0)    /* (CKGR) Divider Selected */
+#define AT91C_CKGR_DIVB_0      ((unsigned int) 0x0)            /* (CKGR) Divider output is 0 */
+#define AT91C_CKGR_DIVB_BYPASS ((unsigned int) 0x1)            /* (CKGR) Divider is bypassed */
+#define AT91C_CKGR_PLLBCOUNT   ((unsigned int) 0x3F  <<  8)    /* (CKGR) PLL B Counter */
+#define AT91C_CKGR_OUTB                ((unsigned int) 0x3   << 14)    /* (CKGR) PLL B Output Frequency Range */
+#define AT91C_CKGR_OUTB_0      ((unsigned int) 0x0   << 14)    /* (CKGR) Please refer to the PLLB datasheet */
+#define AT91C_CKGR_OUTB_1      ((unsigned int) 0x1   << 14)    /* (CKGR) Please refer to the PLLB datasheet */
+#define AT91C_CKGR_OUTB_2      ((unsigned int) 0x2   << 14)    /* (CKGR) Please refer to the PLLB datasheet */
+#define AT91C_CKGR_OUTB_3      ((unsigned int) 0x3   << 14)    /* (CKGR) Please refer to the PLLB datasheet */
+#define AT91C_CKGR_MULB                ((unsigned int) 0x7FF << 16)    /* (CKGR) PLL B Multiplier */
+#define AT91C_CKGR_USB_96M     ((unsigned int) 0x1   << 28)    /* (CKGR) Divider for USB Ports */
+#define AT91C_CKGR_USB_PLL     ((unsigned int) 0x1   << 29)    /* (CKGR) PLL Use */
+
+/******************************************************************************/
+/*        SOFTWARE API DEFINITION  FOR Parallel Input Output Controler        */
+/******************************************************************************/
+typedef struct _AT91S_PIO
+{
        AT91_REG         PIO_PER;       /* PIO Enable Register */
        AT91_REG         PIO_PDR;       /* PIO Disable Register */
        AT91_REG         PIO_PSR;       /* PIO Status Register */
@@ -177,10 +184,11 @@ typedef struct _AT91S_PIO {
 } AT91S_PIO, *AT91PS_PIO;
 
 
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Debug Unit */
-/* ***************************************************************************** */
-typedef struct _AT91S_DBGU {
+/******************************************************************************/
+/*              SOFTWARE API DEFINITION  FOR Debug Unit                       */
+/******************************************************************************/
+typedef struct _AT91S_DBGU
+{
        AT91_REG         DBGU_CR;       /* Control Register */
        AT91_REG         DBGU_MR;       /* Mode Register */
        AT91_REG         DBGU_IER;      /* Interrupt Enable Register */
@@ -208,60 +216,62 @@ typedef struct _AT91S_DBGU {
 } AT91S_DBGU, *AT91PS_DBGU;
 
 /* -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register --------  */
-#define AT91C_US_RXRDY        ((unsigned int) 0x1 <<  0) /* (DBGU) RXRDY Interrupt */
-#define AT91C_US_TXRDY        ((unsigned int) 0x1 <<  1) /* (DBGU) TXRDY Interrupt */
-#define AT91C_US_ENDRX        ((unsigned int) 0x1 <<  3) /* (DBGU) End of Receive Transfer Interrupt */
-#define AT91C_US_ENDTX        ((unsigned int) 0x1 <<  4) /* (DBGU) End of Transmit Interrupt */
-#define AT91C_US_OVRE         ((unsigned int) 0x1 <<  5) /* (DBGU) Overrun Interrupt */
-#define AT91C_US_FRAME        ((unsigned int) 0x1 <<  6) /* (DBGU) Framing Error Interrupt */
-#define AT91C_US_PARE         ((unsigned int) 0x1 <<  7) /* (DBGU) Parity Error Interrupt */
-#define AT91C_US_TXEMPTY      ((unsigned int) 0x1 <<  9) /* (DBGU) TXEMPTY Interrupt */
-#define AT91C_US_TXBUFE       ((unsigned int) 0x1 << 11) /* (DBGU) TXBUFE Interrupt */
-#define AT91C_US_RXBUFF       ((unsigned int) 0x1 << 12) /* (DBGU) RXBUFF Interrupt */
-#define AT91C_US_COMM_TX      ((unsigned int) 0x1 << 30) /* (DBGU) COMM_TX Interrupt */
-#define AT91C_US_COMM_RX      ((unsigned int) 0x1 << 31) /* (DBGU) COMM_RX Interrupt */
+#define AT91C_US_RXRDY         ((unsigned int) 0x1 <<  0) /* (DBGU) RXRDY Interrupt */
+#define AT91C_US_TXRDY         ((unsigned int) 0x1 <<  1) /* (DBGU) TXRDY Interrupt */
+#define AT91C_US_ENDRX         ((unsigned int) 0x1 <<  3) /* (DBGU) End of Receive Transfer Interrupt */
+#define AT91C_US_ENDTX         ((unsigned int) 0x1 <<  4) /* (DBGU) End of Transmit Interrupt */
+#define AT91C_US_OVRE          ((unsigned int) 0x1 <<  5) /* (DBGU) Overrun Interrupt */
+#define AT91C_US_FRAME         ((unsigned int) 0x1 <<  6) /* (DBGU) Framing Error Interrupt */
+#define AT91C_US_PARE          ((unsigned int) 0x1 <<  7) /* (DBGU) Parity Error Interrupt */
+#define AT91C_US_TXEMPTY       ((unsigned int) 0x1 <<  9) /* (DBGU) TXEMPTY Interrupt */
+#define AT91C_US_TXBUFE                ((unsigned int) 0x1 << 11) /* (DBGU) TXBUFE Interrupt */
+#define AT91C_US_RXBUFF                ((unsigned int) 0x1 << 12) /* (DBGU) RXBUFF Interrupt */
+#define AT91C_US_COMM_TX       ((unsigned int) 0x1 << 30) /* (DBGU) COMM_TX Interrupt */
+#define AT91C_US_COMM_RX       ((unsigned int) 0x1 << 31) /* (DBGU) COMM_RX Interrupt */
 
 /* -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register --------  */
-#define AT91C_US_RSTRX        ((unsigned int) 0x1 <<  2) /* (DBGU) Reset Receiver */
-#define AT91C_US_RSTTX        ((unsigned int) 0x1 <<  3) /* (DBGU) Reset Transmitter */
-#define AT91C_US_RXEN         ((unsigned int) 0x1 <<  4) /* (DBGU) Receiver Enable */
-#define AT91C_US_RXDIS        ((unsigned int) 0x1 <<  5) /* (DBGU) Receiver Disable */
-#define AT91C_US_TXEN         ((unsigned int) 0x1 <<  6) /* (DBGU) Transmitter Enable */
-#define AT91C_US_TXDIS        ((unsigned int) 0x1 <<  7) /* (DBGU) Transmitter Disable */
-
-#define AT91C_US_CLKS_CLOCK             ((unsigned int) 0x0 <<  4) /* (USART) Clock */
-#define AT91C_US_CHRL_8_BITS            ((unsigned int) 0x3 <<  6) /* (USART) Character Length: 8 bits */
-#define AT91C_US_PAR_NONE               ((unsigned int) 0x4 <<  9) /* (DBGU) No Parity */
-#define AT91C_US_NBSTOP_1_BIT           ((unsigned int) 0x0 << 12) /* (USART) 1 stop bit */
-
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Static Memory Controller 2 Interface */
-/* ***************************************************************************** */
-typedef struct _AT91S_SMC2 {
+#define AT91C_US_RSTRX         ((unsigned int) 0x1 <<  2) /* (DBGU) Reset Receiver */
+#define AT91C_US_RSTTX         ((unsigned int) 0x1 <<  3) /* (DBGU) Reset Transmitter */
+#define AT91C_US_RXEN          ((unsigned int) 0x1 <<  4) /* (DBGU) Receiver Enable */
+#define AT91C_US_RXDIS         ((unsigned int) 0x1 <<  5) /* (DBGU) Receiver Disable */
+#define AT91C_US_TXEN          ((unsigned int) 0x1 <<  6) /* (DBGU) Transmitter Enable */
+#define AT91C_US_TXDIS         ((unsigned int) 0x1 <<  7) /* (DBGU) Transmitter Disable */
+
+#define AT91C_US_CLKS_CLOCK    ((unsigned int) 0x0 <<  4) /* (USART) Clock */
+#define AT91C_US_CHRL_8_BITS   ((unsigned int) 0x3 <<  6) /* (USART) Character Length: 8 bits */
+#define AT91C_US_PAR_NONE      ((unsigned int) 0x4 <<  9) /* (DBGU) No Parity */
+#define AT91C_US_NBSTOP_1_BIT  ((unsigned int) 0x0 << 12) /* (USART) 1 stop bit */
+
+/******************************************************************************/
+/*      SOFTWARE API DEFINITION  FOR Static Memory Controller 2 Interface     */
+/******************************************************************************/
+typedef struct _AT91S_SMC2
+{
        AT91_REG         SMC2_CSR[8];   /* SMC2 Chip Select Register */
 } AT91S_SMC2, *AT91PS_SMC2;
 
 /* -------- SMC2_CSR : (SMC2 Offset: 0x0) SMC2 Chip Select Register --------  */
-#define AT91C_SMC2_NWS        ((unsigned int) 0x7F <<  0) /* (SMC2) Number of Wait States */
-#define AT91C_SMC2_WSEN       ((unsigned int) 0x1 <<  7) /* (SMC2) Wait State Enable */
-#define AT91C_SMC2_TDF        ((unsigned int) 0xF <<  8) /* (SMC2) Data Float Time */
-#define AT91C_SMC2_BAT        ((unsigned int) 0x1 << 12) /* (SMC2) Byte Access Type */
-#define AT91C_SMC2_DBW        ((unsigned int) 0x1 << 13) /* (SMC2) Data Bus Width */
-#define        AT91C_SMC2_DBW_16                   ((unsigned int) 0x1 << 13) /* (SMC2) 16-bit. */
-#define        AT91C_SMC2_DBW_8                    ((unsigned int) 0x2 << 13) /* (SMC2) 8-bit. */
-#define AT91C_SMC2_DRP        ((unsigned int) 0x1 << 15) /* (SMC2) Data Read Protocol */
-#define AT91C_SMC2_ACSS       ((unsigned int) 0x3 << 16) /* (SMC2) Address to Chip Select Setup */
-#define        AT91C_SMC2_ACSS_STANDARD             ((unsigned int) 0x0 << 16) /* (SMC2) Standard, asserted at the beginning of the access and deasserted at the end. */
-#define        AT91C_SMC2_ACSS_1_CYCLE              ((unsigned int) 0x1 << 16) /* (SMC2) One cycle less at the beginning and the end of the access. */
-#define        AT91C_SMC2_ACSS_2_CYCLES             ((unsigned int) 0x2 << 16) /* (SMC2) Two cycles less at the beginning and the end of the access. */
-#define        AT91C_SMC2_ACSS_3_CYCLES             ((unsigned int) 0x3 << 16) /* (SMC2) Three cycles less at the beginning and the end of the access. */
-#define AT91C_SMC2_RWSETUP    ((unsigned int) 0x7 << 24) /* (SMC2) Read and Write Signal Setup Time */
-#define AT91C_SMC2_RWHOLD     ((unsigned int) 0x7 << 29) /* (SMC2) Read and Write Signal Hold Time */
-
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Power Management Controler                */
-/* ******************************************************************************/
-typedef struct _AT91S_PMC {
+#define AT91C_SMC2_NWS                 ((unsigned int) 0x7F << 0) /* (SMC2) Number of Wait States */
+#define AT91C_SMC2_WSEN                        ((unsigned int) 0x1 <<  7) /* (SMC2) Wait State Enable */
+#define AT91C_SMC2_TDF                 ((unsigned int) 0xF <<  8) /* (SMC2) Data Float Time */
+#define AT91C_SMC2_BAT                 ((unsigned int) 0x1 << 12) /* (SMC2) Byte Access Type */
+#define AT91C_SMC2_DBW                 ((unsigned int) 0x1 << 13) /* (SMC2) Data Bus Width */
+#define AT91C_SMC2_DBW_16              ((unsigned int) 0x1 << 13) /* (SMC2) 16-bit. */
+#define AT91C_SMC2_DBW_8               ((unsigned int) 0x2 << 13) /* (SMC2) 8-bit. */
+#define AT91C_SMC2_DRP                 ((unsigned int) 0x1 << 15) /* (SMC2) Data Read Protocol */
+#define AT91C_SMC2_ACSS                        ((unsigned int) 0x3 << 16) /* (SMC2) Address to Chip Select Setup */
+#define AT91C_SMC2_ACSS_STANDARD       ((unsigned int) 0x0 << 16) /* (SMC2) Standard, asserted at the beginning of the access and deasserted at the end. */
+#define AT91C_SMC2_ACSS_1_CYCLE                ((unsigned int) 0x1 << 16) /* (SMC2) One cycle less at the beginning and the end of the access. */
+#define AT91C_SMC2_ACSS_2_CYCLES       ((unsigned int) 0x2 << 16) /* (SMC2) Two cycles less at the beginning and the end of the access. */
+#define AT91C_SMC2_ACSS_3_CYCLES       ((unsigned int) 0x3 << 16) /* (SMC2) Three cycles less at the beginning and the end of the access. */
+#define AT91C_SMC2_RWSETUP             ((unsigned int) 0x7 << 24) /* (SMC2) Read and Write Signal Setup Time */
+#define AT91C_SMC2_RWHOLD              ((unsigned int) 0x7 << 29) /* (SMC2) Read and Write Signal Hold Time */
+
+/******************************************************************************/
+/*           SOFTWARE API DEFINITION  FOR Power Management Controler          */
+/******************************************************************************/
+typedef struct _AT91S_PMC
+{
        AT91_REG         PMC_SCER;      /* System Clock Enable Register */
        AT91_REG         PMC_SCDR;      /* System Clock Disable Register */
        AT91_REG         PMC_SCSR;      /* System Clock Status Register */
@@ -279,63 +289,63 @@ typedef struct _AT91S_PMC {
        AT91_REG         PMC_IMR;       /* Interrupt Mask Register */
 } AT91S_PMC, *AT91PS_PMC;
 
-
 /*------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register --------*/
-#define AT91C_PMC_PCK         ((unsigned int) 0x1 <<  0) /* (PMC) Processor Clock */
-#define AT91C_PMC_UDP         ((unsigned int) 0x1 <<  1) /* (PMC) USB Device Port Clock */
-#define AT91C_PMC_MCKUDP      ((unsigned int) 0x1 <<  2) /* (PMC) USB Device Port Master Clock Automatic Disable on Suspend */
-#define AT91C_PMC_UHP         ((unsigned int) 0x1 <<  4) /* (PMC) USB Host Port Clock */
-#define AT91C_PMC_PCK0        ((unsigned int) 0x1 <<  8) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK1        ((unsigned int) 0x1 <<  9) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK2        ((unsigned int) 0x1 << 10) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK3        ((unsigned int) 0x1 << 11) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK4        ((unsigned int) 0x1 << 12) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK5        ((unsigned int) 0x1 << 13) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK6        ((unsigned int) 0x1 << 14) /* (PMC) Programmable Clock Output */
-#define AT91C_PMC_PCK7        ((unsigned int) 0x1 << 15) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK          ((unsigned int) 0x1 <<  0) /* (PMC) Processor Clock */
+#define AT91C_PMC_UDP          ((unsigned int) 0x1 <<  1) /* (PMC) USB Device Port Clock */
+#define AT91C_PMC_MCKUDP       ((unsigned int) 0x1 <<  2) /* (PMC) USB Device Port Master Clock Automatic Disable on Suspend */
+#define AT91C_PMC_UHP          ((unsigned int) 0x1 <<  4) /* (PMC) USB Host Port Clock */
+#define AT91C_PMC_PCK0         ((unsigned int) 0x1 <<  8) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK1         ((unsigned int) 0x1 <<  9) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK2         ((unsigned int) 0x1 << 10) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK3         ((unsigned int) 0x1 << 11) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK4         ((unsigned int) 0x1 << 12) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK5         ((unsigned int) 0x1 << 13) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK6         ((unsigned int) 0x1 << 14) /* (PMC) Programmable Clock Output */
+#define AT91C_PMC_PCK7         ((unsigned int) 0x1 << 15) /* (PMC) Programmable Clock Output */
 /*-------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register ------*/
 /*-------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------*/
 /*-------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register --------*/
-#define AT91C_PMC_CSS         ((unsigned int) 0x3 <<  0) /* (PMC) Programmable Clock Selection */
-#define        AT91C_PMC_CSS_SLOW_CLK             ((unsigned int) 0x0) /* (PMC) Slow Clock is selected */
-#define        AT91C_PMC_CSS_MAIN_CLK             ((unsigned int) 0x1) /* (PMC) Main Clock is selected */
-#define        AT91C_PMC_CSS_PLLA_CLK             ((unsigned int) 0x2) /* (PMC) Clock from PLL A is selected */
-#define        AT91C_PMC_CSS_PLLB_CLK             ((unsigned int) 0x3) /* (PMC) Clock from PLL B is selected */
-#define AT91C_PMC_PRES        ((unsigned int) 0x7 <<  2) /* (PMC) Programmable Clock Prescaler */
-#define        AT91C_PMC_PRES_CLK                  ((unsigned int) 0x0 <<  2) /* (PMC) Selected clock */
-#define        AT91C_PMC_PRES_CLK_2                ((unsigned int) 0x1 <<  2) /* (PMC) Selected clock divided by 2 */
-#define        AT91C_PMC_PRES_CLK_4                ((unsigned int) 0x2 <<  2) /* (PMC) Selected clock divided by 4 */
-#define        AT91C_PMC_PRES_CLK_8                ((unsigned int) 0x3 <<  2) /* (PMC) Selected clock divided by 8 */
-#define        AT91C_PMC_PRES_CLK_16               ((unsigned int) 0x4 <<  2) /* (PMC) Selected clock divided by 16 */
-#define        AT91C_PMC_PRES_CLK_32               ((unsigned int) 0x5 <<  2) /* (PMC) Selected clock divided by 32 */
-#define        AT91C_PMC_PRES_CLK_64               ((unsigned int) 0x6 <<  2) /* (PMC) Selected clock divided by 64 */
-#define AT91C_PMC_MDIV        ((unsigned int) 0x3 <<  8) /* (PMC) Master Clock Division */
-#define        AT91C_PMC_MDIV_1                    ((unsigned int) 0x0 <<  8) /* (PMC) The master clock and the processor clock are the same */
-#define        AT91C_PMC_MDIV_2                    ((unsigned int) 0x1 <<  8) /* (PMC) The processor clock is twice as fast as the master clock */
-#define        AT91C_PMC_MDIV_3                    ((unsigned int) 0x2 <<  8) /* (PMC) The processor clock is three times faster than the master clock */
-#define        AT91C_PMC_MDIV_4                    ((unsigned int) 0x3 <<  8) /* (PMC) The processor clock is four times faster than the master clock */
+#define AT91C_PMC_CSS          ((unsigned int) 0x3 <<  0) /* (PMC) Programmable Clock Selection */
+#define AT91C_PMC_CSS_SLOW_CLK ((unsigned int) 0x0)       /* (PMC) Slow Clock is selected */
+#define AT91C_PMC_CSS_MAIN_CLK ((unsigned int) 0x1)       /* (PMC) Main Clock is selected */
+#define AT91C_PMC_CSS_PLLA_CLK ((unsigned int) 0x2)       /* (PMC) Clock from PLL A is selected */
+#define AT91C_PMC_CSS_PLLB_CLK ((unsigned int) 0x3)       /* (PMC) Clock from PLL B is selected */
+#define AT91C_PMC_PRES         ((unsigned int) 0x7 <<  2) /* (PMC) Programmable Clock Prescaler */
+#define AT91C_PMC_PRES_CLK     ((unsigned int) 0x0 <<  2) /* (PMC) Selected clock */
+#define AT91C_PMC_PRES_CLK_2   ((unsigned int) 0x1 <<  2) /* (PMC) Selected clock divided by 2 */
+#define AT91C_PMC_PRES_CLK_4   ((unsigned int) 0x2 <<  2) /* (PMC) Selected clock divided by 4 */
+#define AT91C_PMC_PRES_CLK_8   ((unsigned int) 0x3 <<  2) /* (PMC) Selected clock divided by 8 */
+#define AT91C_PMC_PRES_CLK_16  ((unsigned int) 0x4 <<  2) /* (PMC) Selected clock divided by 16 */
+#define AT91C_PMC_PRES_CLK_32  ((unsigned int) 0x5 <<  2) /* (PMC) Selected clock divided by 32 */
+#define AT91C_PMC_PRES_CLK_64  ((unsigned int) 0x6 <<  2) /* (PMC) Selected clock divided by 64 */
+#define AT91C_PMC_MDIV         ((unsigned int) 0x3 <<  8) /* (PMC) Master Clock Division */
+#define AT91C_PMC_MDIV_1       ((unsigned int) 0x0 <<  8) /* (PMC) The master clock and the processor clock are the same */
+#define AT91C_PMC_MDIV_2       ((unsigned int) 0x1 <<  8) /* (PMC) The processor clock is twice as fast as the master clock */
+#define AT91C_PMC_MDIV_3       ((unsigned int) 0x2 <<  8) /* (PMC) The processor clock is three times faster than the master clock */
+#define AT91C_PMC_MDIV_4       ((unsigned int) 0x3 <<  8) /* (PMC) The processor clock is four times faster than the master clock */
 /*------ PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register --------*/
 /*------ PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------*/
-#define AT91C_PMC_MOSCS       ((unsigned int) 0x1 <<  0) /* (PMC) MOSC Status/Enable/Disable/Mask */
-#define AT91C_PMC_LOCKA       ((unsigned int) 0x1 <<  1) /* (PMC) PLL A Status/Enable/Disable/Mask */
-#define AT91C_PMC_LOCKB       ((unsigned int) 0x1 <<  2) /* (PMC) PLL B Status/Enable/Disable/Mask */
-#define AT91C_PMC_MCKRDY      ((unsigned int) 0x1 <<  3) /* (PMC) MCK_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK0RDY     ((unsigned int) 0x1 <<  8) /* (PMC) PCK0_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK1RDY     ((unsigned int) 0x1 <<  9) /* (PMC) PCK1_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK2RDY     ((unsigned int) 0x1 << 10) /* (PMC) PCK2_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK3RDY     ((unsigned int) 0x1 << 11) /* (PMC) PCK3_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK4RDY     ((unsigned int) 0x1 << 12) /* (PMC) PCK4_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK5RDY     ((unsigned int) 0x1 << 13) /* (PMC) PCK5_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK6RDY     ((unsigned int) 0x1 << 14) /* (PMC) PCK6_RDY Status/Enable/Disable/Mask */
-#define AT91C_PMC_PCK7RDY     ((unsigned int) 0x1 << 15) /* (PMC) PCK7_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_MOSCS                ((unsigned int) 0x1 <<  0) /* (PMC) MOSC Status/Enable/Disable/Mask */
+#define AT91C_PMC_LOCKA                ((unsigned int) 0x1 <<  1) /* (PMC) PLL A Status/Enable/Disable/Mask */
+#define AT91C_PMC_LOCKB                ((unsigned int) 0x1 <<  2) /* (PMC) PLL B Status/Enable/Disable/Mask */
+#define AT91C_PMC_MCKRDY       ((unsigned int) 0x1 <<  3) /* (PMC) MCK_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK0RDY      ((unsigned int) 0x1 <<  8) /* (PMC) PCK0_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK1RDY      ((unsigned int) 0x1 <<  9) /* (PMC) PCK1_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK2RDY      ((unsigned int) 0x1 << 10) /* (PMC) PCK2_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK3RDY      ((unsigned int) 0x1 << 11) /* (PMC) PCK3_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK4RDY      ((unsigned int) 0x1 << 12) /* (PMC) PCK4_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK5RDY      ((unsigned int) 0x1 << 13) /* (PMC) PCK5_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK6RDY      ((unsigned int) 0x1 << 14) /* (PMC) PCK6_RDY Status/Enable/Disable/Mask */
+#define AT91C_PMC_PCK7RDY      ((unsigned int) 0x1 << 15) /* (PMC) PCK7_RDY Status/Enable/Disable/Mask */
 /*---- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register --------*/
 /*-------- PMC_SR : (PMC Offset: 0x68) PMC Status Register --------*/
 /*-------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register --------*/
 
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Ethernet MAC */
-/* ***************************************************************************** */
-typedef struct _AT91S_EMAC {
+/******************************************************************************/
+/*              SOFTWARE API DEFINITION  FOR Ethernet MAC                     */
+/******************************************************************************/
+typedef struct _AT91S_EMAC
+{
        AT91_REG         EMAC_CTL;      /* Network Control Register */
        AT91_REG         EMAC_CFG;      /* Network Configuration Register */
        AT91_REG         EMAC_SR;       /* Network Status Register */
@@ -382,82 +392,90 @@ typedef struct _AT91S_EMAC {
 } AT91S_EMAC, *AT91PS_EMAC;
 
 /* -------- EMAC_CTL : (EMAC Offset: 0x0)  --------  */
-#define AT91C_EMAC_LB         ((unsigned int) 0x1 <<  0) /* (EMAC) Loopback. Optional. When set, loopback signal is at high level. */
-#define AT91C_EMAC_LBL        ((unsigned int) 0x1 <<  1) /* (EMAC) Loopback local. */
-#define AT91C_EMAC_RE         ((unsigned int) 0x1 <<  2) /* (EMAC) Receive enable. */
-#define AT91C_EMAC_TE         ((unsigned int) 0x1 <<  3) /* (EMAC) Transmit enable. */
-#define AT91C_EMAC_MPE        ((unsigned int) 0x1 <<  4) /* (EMAC) Management port enable. */
-#define AT91C_EMAC_CSR        ((unsigned int) 0x1 <<  5) /* (EMAC) Clear statistics registers. */
-#define AT91C_EMAC_ISR        ((unsigned int) 0x1 <<  6) /* (EMAC) Increment statistics registers. */
-#define AT91C_EMAC_WES        ((unsigned int) 0x1 <<  7) /* (EMAC) Write enable for statistics registers. */
-#define AT91C_EMAC_BP         ((unsigned int) 0x1 <<  8) /* (EMAC) Back pressure. */
+#define AT91C_EMAC_LB          ((unsigned int) 0x1 <<  0) /* (EMAC) Loopback. Optional. When set, loopback signal is at high level. */
+#define AT91C_EMAC_LBL         ((unsigned int) 0x1 <<  1) /* (EMAC) Loopback local. */
+#define AT91C_EMAC_RE          ((unsigned int) 0x1 <<  2) /* (EMAC) Receive enable. */
+#define AT91C_EMAC_TE          ((unsigned int) 0x1 <<  3) /* (EMAC) Transmit enable. */
+#define AT91C_EMAC_MPE         ((unsigned int) 0x1 <<  4) /* (EMAC) Management port enable. */
+#define AT91C_EMAC_CSR         ((unsigned int) 0x1 <<  5) /* (EMAC) Clear statistics registers. */
+#define AT91C_EMAC_ISR         ((unsigned int) 0x1 <<  6) /* (EMAC) Increment statistics registers. */
+#define AT91C_EMAC_WES         ((unsigned int) 0x1 <<  7) /* (EMAC) Write enable for statistics registers. */
+#define AT91C_EMAC_BP          ((unsigned int) 0x1 <<  8) /* (EMAC) Back pressure. */
+
 /* -------- EMAC_CFG : (EMAC Offset: 0x4) Network Configuration Register --------  */
-#define AT91C_EMAC_SPD        ((unsigned int) 0x1 <<  0) /* (EMAC) Speed. */
-#define AT91C_EMAC_FD         ((unsigned int) 0x1 <<  1) /* (EMAC) Full duplex. */
-#define AT91C_EMAC_BR         ((unsigned int) 0x1 <<  2) /* (EMAC) Bit rate. */
-#define AT91C_EMAC_CAF        ((unsigned int) 0x1 <<  4) /* (EMAC) Copy all frames. */
-#define AT91C_EMAC_NBC        ((unsigned int) 0x1 <<  5) /* (EMAC) No broadcast. */
-#define AT91C_EMAC_MTI        ((unsigned int) 0x1 <<  6) /* (EMAC) Multicast hash enable */
-#define AT91C_EMAC_UNI        ((unsigned int) 0x1 <<  7) /* (EMAC) Unicast hash enable. */
-#define AT91C_EMAC_BIG        ((unsigned int) 0x1 <<  8) /* (EMAC) Receive 1522 bytes. */
-#define AT91C_EMAC_EAE        ((unsigned int) 0x1 <<  9) /* (EMAC) External address match enable. */
-#define AT91C_EMAC_CLK        ((unsigned int) 0x3 << 10) /* (EMAC) */
-#define        AT91C_EMAC_CLK_HCLK_8               ((unsigned int) 0x0 << 10) /* (EMAC) HCLK divided by 8 */
-#define        AT91C_EMAC_CLK_HCLK_16              ((unsigned int) 0x1 << 10) /* (EMAC) HCLK divided by 16 */
-#define        AT91C_EMAC_CLK_HCLK_32              ((unsigned int) 0x2 << 10) /* (EMAC) HCLK divided by 32 */
-#define        AT91C_EMAC_CLK_HCLK_64              ((unsigned int) 0x3 << 10) /* (EMAC) HCLK divided by 64 */
-#define AT91C_EMAC_RTY        ((unsigned int) 0x1 << 12) /* (EMAC) */
-#define AT91C_EMAC_RMII       ((unsigned int) 0x1 << 13) /* (EMAC) */
+#define AT91C_EMAC_SPD         ((unsigned int) 0x1 <<  0) /* (EMAC) Speed. */
+#define AT91C_EMAC_FD          ((unsigned int) 0x1 <<  1) /* (EMAC) Full duplex. */
+#define AT91C_EMAC_BR          ((unsigned int) 0x1 <<  2) /* (EMAC) Bit rate. */
+#define AT91C_EMAC_CAF         ((unsigned int) 0x1 <<  4) /* (EMAC) Copy all frames. */
+#define AT91C_EMAC_NBC         ((unsigned int) 0x1 <<  5) /* (EMAC) No broadcast. */
+#define AT91C_EMAC_MTI         ((unsigned int) 0x1 <<  6) /* (EMAC) Multicast hash enable */
+#define AT91C_EMAC_UNI         ((unsigned int) 0x1 <<  7) /* (EMAC) Unicast hash enable. */
+#define AT91C_EMAC_BIG         ((unsigned int) 0x1 <<  8) /* (EMAC) Receive 1522 bytes. */
+#define AT91C_EMAC_EAE         ((unsigned int) 0x1 <<  9) /* (EMAC) External address match enable. */
+#define AT91C_EMAC_CLK         ((unsigned int) 0x3 << 10) /* (EMAC) */
+#define AT91C_EMAC_CLK_HCLK_8  ((unsigned int) 0x0 << 10) /* (EMAC) HCLK divided by 8 */
+#define AT91C_EMAC_CLK_HCLK_16 ((unsigned int) 0x1 << 10) /* (EMAC) HCLK divided by 16 */
+#define AT91C_EMAC_CLK_HCLK_32 ((unsigned int) 0x2 << 10) /* (EMAC) HCLK divided by 32 */
+#define AT91C_EMAC_CLK_HCLK_64 ((unsigned int) 0x3 << 10) /* (EMAC) HCLK divided by 64 */
+#define AT91C_EMAC_RTY         ((unsigned int) 0x1 << 12) /* (EMAC) */
+#define AT91C_EMAC_RMII                ((unsigned int) 0x1 << 13) /* (EMAC) */
+
 /* -------- EMAC_SR : (EMAC Offset: 0x8) Network Status Register --------  */
-#define AT91C_EMAC_MDIO       ((unsigned int) 0x1 <<  1) /* (EMAC) */
-#define AT91C_EMAC_IDLE       ((unsigned int) 0x1 <<  2) /* (EMAC) */
+#define AT91C_EMAC_MDIO                ((unsigned int) 0x1 <<  1) /* (EMAC) */
+#define AT91C_EMAC_IDLE                ((unsigned int) 0x1 <<  2) /* (EMAC) */
+
 /* -------- EMAC_TCR : (EMAC Offset: 0x10) Transmit Control Register -------- */
-#define AT91C_EMAC_LEN        ((unsigned int) 0x7FF <<  0) /* (EMAC) */
-#define AT91C_EMAC_NCRC       ((unsigned int) 0x1 << 15) /* (EMAC) */
+#define AT91C_EMAC_LEN         ((unsigned int) 0x7FF <<  0) /* (EMAC) */
+#define AT91C_EMAC_NCRC                ((unsigned int) 0x1 << 15) /* (EMAC) */
+
 /* -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Control Register -------- */
-#define AT91C_EMAC_OVR        ((unsigned int) 0x1 <<  0) /* (EMAC) */
-#define AT91C_EMAC_COL        ((unsigned int) 0x1 <<  1) /* (EMAC) */
-#define AT91C_EMAC_RLE        ((unsigned int) 0x1 <<  2) /* (EMAC) */
-#define AT91C_EMAC_TXIDLE     ((unsigned int) 0x1 <<  3) /* (EMAC) */
-#define AT91C_EMAC_BNQ        ((unsigned int) 0x1 <<  4) /* (EMAC) */
-#define AT91C_EMAC_COMP       ((unsigned int) 0x1 <<  5) /* (EMAC) */
-#define AT91C_EMAC_UND        ((unsigned int) 0x1 <<  6) /* (EMAC) */
+#define AT91C_EMAC_OVR         ((unsigned int) 0x1 <<  0) /* (EMAC) */
+#define AT91C_EMAC_COL         ((unsigned int) 0x1 <<  1) /* (EMAC) */
+#define AT91C_EMAC_RLE         ((unsigned int) 0x1 <<  2) /* (EMAC) */
+#define AT91C_EMAC_TXIDLE      ((unsigned int) 0x1 <<  3) /* (EMAC) */
+#define AT91C_EMAC_BNQ         ((unsigned int) 0x1 <<  4) /* (EMAC) */
+#define AT91C_EMAC_COMP                ((unsigned int) 0x1 <<  5) /* (EMAC) */
+#define AT91C_EMAC_UND         ((unsigned int) 0x1 <<  6) /* (EMAC) */
+
 /* -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- */
-#define AT91C_EMAC_BNA        ((unsigned int) 0x1 <<  0) /* (EMAC) */
-#define AT91C_EMAC_REC        ((unsigned int) 0x1 <<  1) /* (EMAC) */
-#define AT91C_EMAC_RSR_OVR    ((unsigned int) 0x1 <<  2) /* (EMAC) */
+#define AT91C_EMAC_BNA         ((unsigned int) 0x1 <<  0) /* (EMAC) */
+#define AT91C_EMAC_REC         ((unsigned int) 0x1 <<  1) /* (EMAC) */
+#define AT91C_EMAC_RSR_OVR     ((unsigned int) 0x1 <<  2) /* (EMAC) */
+
 /* -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- */
-#define AT91C_EMAC_DONE       ((unsigned int) 0x1 <<  0) /* (EMAC) */
-#define AT91C_EMAC_RCOM       ((unsigned int) 0x1 <<  1) /* (EMAC) */
-#define AT91C_EMAC_RBNA       ((unsigned int) 0x1 <<  2) /* (EMAC) */
-#define AT91C_EMAC_TOVR       ((unsigned int) 0x1 <<  3) /* (EMAC) */
-#define AT91C_EMAC_TUND       ((unsigned int) 0x1 <<  4) /* (EMAC) */
-#define AT91C_EMAC_RTRY       ((unsigned int) 0x1 <<  5) /* (EMAC) */
-#define AT91C_EMAC_TBRE       ((unsigned int) 0x1 <<  6) /* (EMAC) */
-#define AT91C_EMAC_TCOM       ((unsigned int) 0x1 <<  7) /* (EMAC) */
-#define AT91C_EMAC_TIDLE      ((unsigned int) 0x1 <<  8) /* (EMAC) */
-#define AT91C_EMAC_LINK       ((unsigned int) 0x1 <<  9) /* (EMAC) */
-#define AT91C_EMAC_ROVR       ((unsigned int) 0x1 << 10) /* (EMAC) */
-#define AT91C_EMAC_HRESP      ((unsigned int) 0x1 << 11) /* (EMAC) */
+#define AT91C_EMAC_DONE                ((unsigned int) 0x1 <<  0) /* (EMAC) */
+#define AT91C_EMAC_RCOM                ((unsigned int) 0x1 <<  1) /* (EMAC) */
+#define AT91C_EMAC_RBNA                ((unsigned int) 0x1 <<  2) /* (EMAC) */
+#define AT91C_EMAC_TOVR                ((unsigned int) 0x1 <<  3) /* (EMAC) */
+#define AT91C_EMAC_TUND                ((unsigned int) 0x1 <<  4) /* (EMAC) */
+#define AT91C_EMAC_RTRY                ((unsigned int) 0x1 <<  5) /* (EMAC) */
+#define AT91C_EMAC_TBRE                ((unsigned int) 0x1 <<  6) /* (EMAC) */
+#define AT91C_EMAC_TCOM                ((unsigned int) 0x1 <<  7) /* (EMAC) */
+#define AT91C_EMAC_TIDLE       ((unsigned int) 0x1 <<  8) /* (EMAC) */
+#define AT91C_EMAC_LINK                ((unsigned int) 0x1 <<  9) /* (EMAC) */
+#define AT91C_EMAC_ROVR                ((unsigned int) 0x1 << 10) /* (EMAC) */
+#define AT91C_EMAC_HRESP       ((unsigned int) 0x1 << 11) /* (EMAC) */
+
 /* -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- */
 /* -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- */
 /* -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- */
 /* -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- */
-#define AT91C_EMAC_DATA       ((unsigned int) 0xFFFF <<  0) /* (EMAC) */
-#define AT91C_EMAC_CODE       ((unsigned int) 0x3 << 16) /* (EMAC) */
-#define         AT91C_EMAC_CODE_802_3 ((unsigned int) 0x2 << 16) /* (EMAC) Write Operation */
-#define AT91C_EMAC_REGA       ((unsigned int) 0x1F << 18) /* (EMAC) */
-#define AT91C_EMAC_PHYA       ((unsigned int) 0x1F << 23) /* (EMAC) */
-#define AT91C_EMAC_RW         ((unsigned int) 0x3 << 28) /* (EMAC) */
-#define         AT91C_EMAC_RW_R       ((unsigned int) 0x2 << 28) /* (EMAC) Read Operation */
-#define         AT91C_EMAC_RW_W       ((unsigned int) 0x1 << 28) /* (EMAC) Write Operation */
-#define AT91C_EMAC_HIGH       ((unsigned int) 0x1 << 30) /* (EMAC) */
-#define AT91C_EMAC_LOW        ((unsigned int) 0x1 << 31) /* (EMAC) */
-
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Serial Parallel Interface         */
-/* ***************************************************************************** */
-typedef struct _AT91S_SPI {
+#define AT91C_EMAC_DATA                ((unsigned int) 0xFFFF <<  0) /* (EMAC) */
+#define AT91C_EMAC_CODE                ((unsigned int) 0x3  << 16) /* (EMAC) */
+#define AT91C_EMAC_CODE_802_3  ((unsigned int) 0x2  << 16) /* (EMAC) Write Operation */
+#define AT91C_EMAC_REGA                ((unsigned int) 0x1F << 18) /* (EMAC) */
+#define AT91C_EMAC_PHYA                ((unsigned int) 0x1F << 23) /* (EMAC) */
+#define AT91C_EMAC_RW          ((unsigned int) 0x3  << 28) /* (EMAC) */
+#define AT91C_EMAC_RW_R                ((unsigned int) 0x2  << 28) /* (EMAC) Read Operation */
+#define AT91C_EMAC_RW_W                ((unsigned int) 0x1  << 28) /* (EMAC) Write Operation */
+#define AT91C_EMAC_HIGH                ((unsigned int) 0x1  << 30) /* (EMAC) */
+#define AT91C_EMAC_LOW         ((unsigned int) 0x1  << 31) /* (EMAC) */
+
+/******************************************************************************/
+/*           SOFTWARE API DEFINITION  FOR Serial Parallel Interface           */
+/******************************************************************************/
+typedef struct _AT91S_SPI
+{
        AT91_REG         SPI_CR;        /* Control Register */
        AT91_REG         SPI_MR;        /* Mode Register */
        AT91_REG         SPI_RDR;       /* Receive Data Register */
@@ -482,60 +500,66 @@ typedef struct _AT91S_SPI {
 } AT91S_SPI, *AT91PS_SPI;
 
 /* -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- */
-#define AT91C_SPI_SPIEN       ((unsigned int) 0x1 <<  0) /* (SPI) SPI Enable */
-#define AT91C_SPI_SPIDIS      ((unsigned int) 0x1 <<  1) /* (SPI) SPI Disable */
-#define AT91C_SPI_SWRST       ((unsigned int) 0x1 <<  7) /* (SPI) SPI Software reset */
+#define AT91C_SPI_SPIEN                ((unsigned int) 0x1 <<  0) /* (SPI) SPI Enable */
+#define AT91C_SPI_SPIDIS       ((unsigned int) 0x1 <<  1) /* (SPI) SPI Disable */
+#define AT91C_SPI_SWRST                ((unsigned int) 0x1 <<  7) /* (SPI) SPI Software reset */
+
 /* -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- */
-#define AT91C_SPI_MSTR        ((unsigned int) 0x1 <<  0) /* (SPI) Master/Slave Mode */
-#define AT91C_SPI_PS          ((unsigned int) 0x1 <<  1) /* (SPI) Peripheral Select */
-#define        AT91C_SPI_PS_FIXED                ((unsigned int) 0x0 <<  1) /* (SPI) Fixed Peripheral Select */
-#define        AT91C_SPI_PS_VARIABLE             ((unsigned int) 0x1 <<  1) /* (SPI) Variable Peripheral Select */
-#define AT91C_SPI_PCSDEC      ((unsigned int) 0x1 <<  2) /* (SPI) Chip Select Decode */
-#define AT91C_SPI_DIV32       ((unsigned int) 0x1 <<  3) /* (SPI) Clock Selection */
-#define AT91C_SPI_MODFDIS     ((unsigned int) 0x1 <<  4) /* (SPI) Mode Fault Detection */
-#define AT91C_SPI_LLB         ((unsigned int) 0x1 <<  7) /* (SPI) Clock Selection */
-#define AT91C_SPI_PCS         ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select */
-#define AT91C_SPI_DLYBCS      ((unsigned int) 0xFF << 24) /* (SPI) Delay Between Chip Selects */
+#define AT91C_SPI_MSTR         ((unsigned int) 0x1 <<  0) /* (SPI) Master/Slave Mode */
+#define AT91C_SPI_PS           ((unsigned int) 0x1 <<  1) /* (SPI) Peripheral Select */
+#define AT91C_SPI_PS_FIXED     ((unsigned int) 0x0 <<  1) /* (SPI) Fixed Peripheral Select */
+#define AT91C_SPI_PS_VARIABLE  ((unsigned int) 0x1 <<  1) /* (SPI) Variable Peripheral Select */
+#define AT91C_SPI_PCSDEC       ((unsigned int) 0x1 <<  2) /* (SPI) Chip Select Decode */
+#define AT91C_SPI_DIV32                ((unsigned int) 0x1 <<  3) /* (SPI) Clock Selection */
+#define AT91C_SPI_MODFDIS      ((unsigned int) 0x1 <<  4) /* (SPI) Mode Fault Detection */
+#define AT91C_SPI_LLB          ((unsigned int) 0x1 <<  7) /* (SPI) Clock Selection */
+#define AT91C_SPI_PCS          ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select */
+#define AT91C_SPI_DLYBCS       ((unsigned int) 0xFF << 24) /* (SPI) Delay Between Chip Selects */
+
 /* -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- */
-#define AT91C_SPI_RD          ((unsigned int) 0xFFFF <<  0) /* (SPI) Receive Data */
-#define AT91C_SPI_RPCS        ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select Status */
+#define AT91C_SPI_RD           ((unsigned int) 0xFFFF <<  0) /* (SPI) Receive Data */
+#define AT91C_SPI_RPCS         ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select Status */
+
 /* -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- */
-#define AT91C_SPI_TD          ((unsigned int) 0xFFFF <<  0) /* (SPI) Transmit Data */
-#define AT91C_SPI_TPCS        ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select Status */
+#define AT91C_SPI_TD           ((unsigned int) 0xFFFF <<  0) /* (SPI) Transmit Data */
+#define AT91C_SPI_TPCS         ((unsigned int) 0xF << 16) /* (SPI) Peripheral Chip Select Status */
+
 /* -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- */
-#define AT91C_SPI_RDRF        ((unsigned int) 0x1 <<  0) /* (SPI) Receive Data Register Full */
-#define AT91C_SPI_TDRE        ((unsigned int) 0x1 <<  1) /* (SPI) Transmit Data Register Empty */
-#define AT91C_SPI_MODF        ((unsigned int) 0x1 <<  2) /* (SPI) Mode Fault Error */
-#define AT91C_SPI_OVRES       ((unsigned int) 0x1 <<  3) /* (SPI) Overrun Error Status */
-#define AT91C_SPI_SPENDRX     ((unsigned int) 0x1 <<  4) /* (SPI) End of Receiver Transfer */
-#define AT91C_SPI_SPENDTX     ((unsigned int) 0x1 <<  5) /* (SPI) End of Receiver Transfer */
-#define AT91C_SPI_RXBUFF      ((unsigned int) 0x1 <<  6) /* (SPI) RXBUFF Interrupt */
-#define AT91C_SPI_TXBUFE      ((unsigned int) 0x1 <<  7) /* (SPI) TXBUFE Interrupt */
-#define AT91C_SPI_SPIENS      ((unsigned int) 0x1 << 16) /* (SPI) Enable Status */
+#define AT91C_SPI_RDRF         ((unsigned int) 0x1 <<  0) /* (SPI) Receive Data Register Full */
+#define AT91C_SPI_TDRE         ((unsigned int) 0x1 <<  1) /* (SPI) Transmit Data Register Empty */
+#define AT91C_SPI_MODF         ((unsigned int) 0x1 <<  2) /* (SPI) Mode Fault Error */
+#define AT91C_SPI_OVRES                ((unsigned int) 0x1 <<  3) /* (SPI) Overrun Error Status */
+#define AT91C_SPI_SPENDRX      ((unsigned int) 0x1 <<  4) /* (SPI) End of Receiver Transfer */
+#define AT91C_SPI_SPENDTX      ((unsigned int) 0x1 <<  5) /* (SPI) End of Receiver Transfer */
+#define AT91C_SPI_RXBUFF       ((unsigned int) 0x1 <<  6) /* (SPI) RXBUFF Interrupt */
+#define AT91C_SPI_TXBUFE       ((unsigned int) 0x1 <<  7) /* (SPI) TXBUFE Interrupt */
+#define AT91C_SPI_SPIENS       ((unsigned int) 0x1 << 16) /* (SPI) Enable Status */
+
 /* -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- */
 /* -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- */
 /* -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- */
 /* -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- */
-#define AT91C_SPI_CPOL        ((unsigned int) 0x1 <<  0) /* (SPI) Clock Polarity */
-#define AT91C_SPI_NCPHA       ((unsigned int) 0x1 <<  1) /* (SPI) Clock Phase */
-#define AT91C_SPI_BITS        ((unsigned int) 0xF <<  4) /* (SPI) Bits Per Transfer */
-#define        AT91C_SPI_BITS_8                    ((unsigned int) 0x0 <<  4) /* (SPI) 8 Bits Per transfer */
-#define        AT91C_SPI_BITS_9                    ((unsigned int) 0x1 <<  4) /* (SPI) 9 Bits Per transfer */
-#define        AT91C_SPI_BITS_10                   ((unsigned int) 0x2 <<  4) /* (SPI) 10 Bits Per transfer */
-#define        AT91C_SPI_BITS_11                   ((unsigned int) 0x3 <<  4) /* (SPI) 11 Bits Per transfer */
-#define        AT91C_SPI_BITS_12                   ((unsigned int) 0x4 <<  4) /* (SPI) 12 Bits Per transfer */
-#define        AT91C_SPI_BITS_13                   ((unsigned int) 0x5 <<  4) /* (SPI) 13 Bits Per transfer */
-#define        AT91C_SPI_BITS_14                   ((unsigned int) 0x6 <<  4) /* (SPI) 14 Bits Per transfer */
-#define        AT91C_SPI_BITS_15                   ((unsigned int) 0x7 <<  4) /* (SPI) 15 Bits Per transfer */
-#define        AT91C_SPI_BITS_16                   ((unsigned int) 0x8 <<  4) /* (SPI) 16 Bits Per transfer */
-#define AT91C_SPI_SCBR        ((unsigned int) 0xFF <<  8) /* (SPI) Serial Clock Baud Rate */
-#define AT91C_SPI_DLYBS       ((unsigned int) 0xFF << 16) /* (SPI) Serial Clock Baud Rate */
-#define AT91C_SPI_DLYBCT      ((unsigned int) 0xFF << 24) /* (SPI) Delay Between Consecutive Transfers */
-
-/* ***************************************************************************** */
-/*              SOFTWARE API DEFINITION  FOR Peripheral Data Controller                */
-/* ***************************************************************************** */
-typedef struct _AT91S_PDC {
+#define AT91C_SPI_CPOL         ((unsigned int) 0x1  <<  0) /* (SPI) Clock Polarity */
+#define AT91C_SPI_NCPHA                ((unsigned int) 0x1  <<  1) /* (SPI) Clock Phase */
+#define AT91C_SPI_BITS         ((unsigned int) 0xF  <<  4) /* (SPI) Bits Per Transfer */
+#define AT91C_SPI_BITS_8       ((unsigned int) 0x0  <<  4) /* (SPI) 8 Bits Per transfer */
+#define AT91C_SPI_BITS_9       ((unsigned int) 0x1  <<  4) /* (SPI) 9 Bits Per transfer */
+#define AT91C_SPI_BITS_10      ((unsigned int) 0x2  <<  4) /* (SPI) 10 Bits Per transfer */
+#define AT91C_SPI_BITS_11      ((unsigned int) 0x3  <<  4) /* (SPI) 11 Bits Per transfer */
+#define AT91C_SPI_BITS_12      ((unsigned int) 0x4  <<  4) /* (SPI) 12 Bits Per transfer */
+#define AT91C_SPI_BITS_13      ((unsigned int) 0x5  <<  4) /* (SPI) 13 Bits Per transfer */
+#define AT91C_SPI_BITS_14      ((unsigned int) 0x6  <<  4) /* (SPI) 14 Bits Per transfer */
+#define AT91C_SPI_BITS_15      ((unsigned int) 0x7  <<  4) /* (SPI) 15 Bits Per transfer */
+#define AT91C_SPI_BITS_16      ((unsigned int) 0x8  <<  4) /* (SPI) 16 Bits Per transfer */
+#define AT91C_SPI_SCBR         ((unsigned int) 0xFF <<  8) /* (SPI) Serial Clock Baud Rate */
+#define AT91C_SPI_DLYBS                ((unsigned int) 0xFF << 16) /* (SPI) Serial Clock Baud Rate */
+#define AT91C_SPI_DLYBCT       ((unsigned int) 0xFF << 24) /* (SPI) Delay Between Consecutive Transfers */
+
+/******************************************************************************/
+/*           SOFTWARE API DEFINITION  FOR Peripheral Data Controller          */
+/******************************************************************************/
+typedef struct _AT91S_PDC
+{
        AT91_REG         PDC_RPR;       /* Receive Pointer Register */
        AT91_REG         PDC_RCR;       /* Receive Counter Register */
        AT91_REG         PDC_TPR;       /* Transmit Pointer Register */
@@ -549,187 +573,190 @@ typedef struct _AT91S_PDC {
 } AT91S_PDC, *AT91PS_PDC;
 
 /* -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- */
-#define AT91C_PDC_RXTEN       ((unsigned int) 0x1 <<  0) /* (PDC) Receiver Transfer Enable */
-#define AT91C_PDC_RXTDIS      ((unsigned int) 0x1 <<  1) /* (PDC) Receiver Transfer Disable */
-#define AT91C_PDC_TXTEN       ((unsigned int) 0x1 <<  8) /* (PDC) Transmitter Transfer Enable */
-#define AT91C_PDC_TXTDIS      ((unsigned int) 0x1 <<  9) /* (PDC) Transmitter Transfer Disable */
+#define AT91C_PDC_RXTEN                ((unsigned int) 0x1 <<  0) /* (PDC) Receiver Transfer Enable */
+#define AT91C_PDC_RXTDIS       ((unsigned int) 0x1 <<  1) /* (PDC) Receiver Transfer Disable */
+#define AT91C_PDC_TXTEN                ((unsigned int) 0x1 <<  8) /* (PDC) Transmitter Transfer Enable */
+#define AT91C_PDC_TXTDIS       ((unsigned int) 0x1 <<  9) /* (PDC) Transmitter Transfer Disable */
 /* -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register --------  */
 
 /* ========== Register definition ==================================== */
-#define AT91C_SPI_CSR   ((AT91_REG *)  0xFFFE0030) /* (SPI) Chip Select Register */
-#define AT91C_PMC_PCER  ((AT91_REG *)  0xFFFFFC10) /* (PMC) Peripheral Clock Enable Register */
-#define AT91C_PIOA_PER  ((AT91_REG *)  0xFFFFF400) /* (PIOA) PIO Enable Register */
-#define AT91C_PIOA_PDR  ((AT91_REG *)  0xFFFFF404) /* (PIOA) PIO Disable Register */
-#define AT91C_PIOA_PSR  ((AT91_REG *)  0xFFFFF408) /* (PIOA) PIO Status Register */
-#define AT91C_PIOA_OER  ((AT91_REG *)  0xFFFFF410) /* (PIOA) PIO Output Enable Register */
-#define AT91C_PIOA_ODR  ((AT91_REG *)  0xFFFFF414) /* (PIOA) PIO Output Disable Register */
-#define AT91C_PIOA_OSR  ((AT91_REG *)  0xFFFFF418) /* (PIOA) PIO Output Status Register */
-#define AT91C_PIOA_IFER  ((AT91_REG *)         0xFFFFF420) /* (PIOA) PIO Glitch Input Filter Enable Register */
-#define AT91C_PIOA_IFDR  ((AT91_REG *)         0xFFFFF424) /* (PIOA) PIO Glitch Input Filter Disable Register */
-#define AT91C_PIOA_IFSR  ((AT91_REG *)         0xFFFFF428) /* (PIOA) PIO Glitch Input Filter Status Register */
-#define AT91C_PIOA_SODR  ((AT91_REG *)         0xFFFFF430) /* (PIOA) PIO Set Output Data Register */
-#define AT91C_PIOA_CODR  ((AT91_REG *)         0xFFFFF434) /* (PIOA) PIO Clear Output Data Register */
-#define AT91C_PIOA_ODSR  ((AT91_REG *)         0xFFFFF438) /* (PIOA) PIO Output Data Status Register */
-#define AT91C_PIOA_PDSR  ((AT91_REG *)         0xFFFFF43C) /* (PIOA) PIO Pin Data Status Register */
-#define AT91C_PIOA_IER  ((AT91_REG *)  0xFFFFF440) /* (PIOA) PIO Interrupt Enable Register */
-#define AT91C_PIOA_IDR  ((AT91_REG *)  0xFFFFF444) /* (PIOA) PIO Interrupt Disable Register */
-#define AT91C_PIOA_IMR  ((AT91_REG *)  0xFFFFF448) /* (PIOA) PIO Interrupt Mask Register */
-#define AT91C_PIOA_ISR  ((AT91_REG *)  0xFFFFF44C) /* (PIOA) PIO Interrupt Status Register */
-#define AT91C_PIOA_MDER  ((AT91_REG *)         0xFFFFF450) /* (PIOA) PIO Multi-drive Enable Register */
-#define AT91C_PIOA_MDDR  ((AT91_REG *)         0xFFFFF454) /* (PIOA) PIO Multi-drive Disable Register */
-#define AT91C_PIOA_MDSR  ((AT91_REG *)         0xFFFFF458) /* (PIOA) PIO Multi-drive Status Register */
-#define AT91C_PIOA_PUDR  ((AT91_REG *)         0xFFFFF460) /* (PIOA) PIO Pull-up Disable Register */
-#define AT91C_PIOA_PUER  ((AT91_REG *)         0xFFFFF464) /* (PIOA) PIO Pull-up Enable Register */
-#define AT91C_PIOA_PUSR  ((AT91_REG *)         0xFFFFF468) /* (PIOA) PIO Pull-up Status Register */
-#define AT91C_PIOA_ASR  ((AT91_REG *)  0xFFFFF470) /* (PIOA) PIO Peripheral A Select Register */
-#define AT91C_PIOA_BSR  ((AT91_REG *)  0xFFFFF474) /* (PIOA) PIO Peripheral B Select Register */
-#define AT91C_PIOA_ABSR  ((AT91_REG *)         0xFFFFF478) /* (PIOA) PIO Peripheral AB Select Register */
-#define AT91C_PIOA_OWER  ((AT91_REG *)         0xFFFFF4A0) /* (PIOA) PIO Output Write Enable Register */
-#define AT91C_PIOA_OWDR  ((AT91_REG *)         0xFFFFF4A4) /* (PIOA) PIO Output Write Disable Register */
-#define AT91C_PIOA_OWSR  ((AT91_REG *)         0xFFFFF4A8) /* (PIOA) PIO Output Write Status Register */
-#define AT91C_PIOB_PDR  ((AT91_REG *)  0xFFFFF604) /* (PIOB) PIO Disable Register */
-
-#define AT91C_PIO_PA30       ((unsigned int) 1 << 30) /* Pin Controlled by PA30 */
-#define AT91C_PIO_PC0        ((unsigned int) 1 <<  0) /* Pin Controlled by PC0 */
-#define AT91C_PC0_BFCK     ((unsigned int) AT91C_PIO_PC0) /*  Burst Flash Clock */
-#define AT91C_PA30_DRXD     ((unsigned int) AT91C_PIO_PA30) /*  DBGU Debug Receive Data */
-#define AT91C_PIO_PA31       ((unsigned int) 1 << 31) /* Pin Controlled by PA31 */
+#define AT91C_SPI_CSR          ((AT91_REG *)   0xFFFE0030) /* (SPI) Chip Select Register */
+#define AT91C_PMC_PCER         ((AT91_REG *)   0xFFFFFC10) /* (PMC) Peripheral Clock Enable Register */
+#define AT91C_PMC_PCDR         ((AT91_REG *)   0xFFFFFC14) /* (PMC) Peripheral Clock Enable Register */
+#define AT91C_PMC_SCER         ((AT91_REG *)   0xFFFFFC00) /* (PMC) Peripheral Clock Enable Register */
+#define AT91C_PMC_SCDR         ((AT91_REG *)   0xFFFFFC04) /* (PMC) Peripheral Clock Enable Register */
+#define AT91C_PIOA_PER         ((AT91_REG *)   0xFFFFF400) /* (PIOA) PIO Enable Register */
+#define AT91C_PIOA_PDR         ((AT91_REG *)   0xFFFFF404) /* (PIOA) PIO Disable Register */
+#define AT91C_PIOA_PSR         ((AT91_REG *)   0xFFFFF408) /* (PIOA) PIO Status Register */
+#define AT91C_PIOA_OER         ((AT91_REG *)   0xFFFFF410) /* (PIOA) PIO Output Enable Register */
+#define AT91C_PIOA_ODR         ((AT91_REG *)   0xFFFFF414) /* (PIOA) PIO Output Disable Register */
+#define AT91C_PIOA_OSR         ((AT91_REG *)   0xFFFFF418) /* (PIOA) PIO Output Status Register */
+#define AT91C_PIOA_IFER                ((AT91_REG *)   0xFFFFF420) /* (PIOA) PIO Glitch Input Filter Enable Register */
+#define AT91C_PIOA_IFDR                ((AT91_REG *)   0xFFFFF424) /* (PIOA) PIO Glitch Input Filter Disable Register */
+#define AT91C_PIOA_IFSR                ((AT91_REG *)   0xFFFFF428) /* (PIOA) PIO Glitch Input Filter Status Register */
+#define AT91C_PIOA_SODR                ((AT91_REG *)   0xFFFFF430) /* (PIOA) PIO Set Output Data Register */
+#define AT91C_PIOA_CODR                ((AT91_REG *)   0xFFFFF434) /* (PIOA) PIO Clear Output Data Register */
+#define AT91C_PIOA_ODSR                ((AT91_REG *)   0xFFFFF438) /* (PIOA) PIO Output Data Status Register */
+#define AT91C_PIOA_PDSR                ((AT91_REG *)   0xFFFFF43C) /* (PIOA) PIO Pin Data Status Register */
+#define AT91C_PIOA_IER         ((AT91_REG *)   0xFFFFF440) /* (PIOA) PIO Interrupt Enable Register */
+#define AT91C_PIOA_IDR         ((AT91_REG *)   0xFFFFF444) /* (PIOA) PIO Interrupt Disable Register */
+#define AT91C_PIOA_IMR         ((AT91_REG *)   0xFFFFF448) /* (PIOA) PIO Interrupt Mask Register */
+#define AT91C_PIOA_ISR         ((AT91_REG *)   0xFFFFF44C) /* (PIOA) PIO Interrupt Status Register */
+#define AT91C_PIOA_MDER                ((AT91_REG *)   0xFFFFF450) /* (PIOA) PIO Multi-drive Enable Register */
+#define AT91C_PIOA_MDDR                ((AT91_REG *)   0xFFFFF454) /* (PIOA) PIO Multi-drive Disable Register */
+#define AT91C_PIOA_MDSR                ((AT91_REG *)   0xFFFFF458) /* (PIOA) PIO Multi-drive Status Register */
+#define AT91C_PIOA_PUDR                ((AT91_REG *)   0xFFFFF460) /* (PIOA) PIO Pull-up Disable Register */
+#define AT91C_PIOA_PUER                ((AT91_REG *)   0xFFFFF464) /* (PIOA) PIO Pull-up Enable Register */
+#define AT91C_PIOA_PUSR                ((AT91_REG *)   0xFFFFF468) /* (PIOA) PIO Pull-up Status Register */
+#define AT91C_PIOA_ASR         ((AT91_REG *)   0xFFFFF470) /* (PIOA) PIO Peripheral A Select Register */
+#define AT91C_PIOA_BSR         ((AT91_REG *)   0xFFFFF474) /* (PIOA) PIO Peripheral B Select Register */
+#define AT91C_PIOA_ABSR                ((AT91_REG *)   0xFFFFF478) /* (PIOA) PIO Peripheral AB Select Register */
+#define AT91C_PIOA_OWER                ((AT91_REG *)   0xFFFFF4A0) /* (PIOA) PIO Output Write Enable Register */
+#define AT91C_PIOA_OWDR                ((AT91_REG *)   0xFFFFF4A4) /* (PIOA) PIO Output Write Disable Register */
+#define AT91C_PIOA_OWSR                ((AT91_REG *)   0xFFFFF4A8) /* (PIOA) PIO Output Write Status Register */
+#define AT91C_PIOB_PDR         ((AT91_REG *)   0xFFFFF604) /* (PIOB) PIO Disable Register */
+
+#define AT91C_PIO_PA30         ((unsigned int) 1 << 30)        /* Pin Controlled by PA30 */
+#define AT91C_PIO_PC0          ((unsigned int) 1 <<  0)        /* Pin Controlled by PC0 */
+#define AT91C_PC0_BFCK         ((unsigned int) AT91C_PIO_PC0)  /* Burst Flash Clock */
+#define AT91C_PA30_DRXD                ((unsigned int) AT91C_PIO_PA30) /* DBGU Debug Receive Data */
+#define AT91C_PIO_PA31         ((unsigned int) 1 << 31)        /* Pin Controlled by PA31 */
 #define AT91C_PA25_TWD         ((unsigned int) 1 << 25)
 #define AT91C_PA26_TWCK                ((unsigned int) 1 << 26)
-#define AT91C_PA31_DTXD     ((unsigned int) AT91C_PIO_PA31) /*  DBGU Debug Transmit Data */
-#define AT91C_PIO_PA17       ((unsigned int) 1 << 17) /* Pin Controlled by PA17 */
-#define AT91C_PA17_TXD0     AT91C_PIO_PA17 /*  USART0 Transmit Data */
-#define AT91C_PIO_PA18       ((unsigned int) 1 << 18) /* Pin Controlled by PA18 */
-#define AT91C_PA18_RXD0     AT91C_PIO_PA18 /*  USART0 Receive Data */
-#define AT91C_PIO_PB20       ((unsigned int) 1 << 20) /* Pin Controlled by PB20 */
-#define AT91C_PB20_RXD1     AT91C_PIO_PB20 /*  USART1 Receive Data */
-#define AT91C_PIO_PB21       ((unsigned int) 1 << 21) /* Pin Controlled by PB21 */
-#define AT91C_PB21_TXD1     AT91C_PIO_PB21 /*  USART1 Transmit Data */
-
-#define AT91C_ID_SYS    ((unsigned int) 1) /* System Peripheral */
-#define AT91C_ID_PIOA  ((unsigned int) 2)      /* PIO port A */
-#define AT91C_ID_PIOB  ((unsigned int) 3)      /* PIO port B */
-#define AT91C_ID_PIOC  ((unsigned int) 4)      /* PIO port C */
-#define AT91C_ID_USART0        ((unsigned int) 6)      /* USART 0 */
-#define AT91C_ID_USART1        ((unsigned int) 7)      /* USART 1 */
-#define AT91C_ID_TWI    ((unsigned int) 12) /* Two Wire Interface */
-#define AT91C_ID_SPI    ((unsigned int) 13) /* Serial Peripheral Interface */
-#define AT91C_ID_TC0    ((unsigned int) 17) /* Timer Counter 0 */
-#define AT91C_ID_EMAC   ((unsigned int) 24) /* Ethernet MAC */
-
-#define AT91C_PIO_PC1        ((unsigned int) 1 <<  1) /* Pin Controlled by PC1 */
-#define AT91C_PC1_BFRDY_SMOE ((unsigned int) AT91C_PIO_PC1) /*  Burst Flash Ready */
-#define AT91C_PIO_PC3        ((unsigned int) 1 <<  3) /* Pin Controlled by PC3 */
-#define AT91C_PC3_BFBAA_SMWE ((unsigned int) AT91C_PIO_PC3) /*  Burst Flash Address Advance / SmartMedia Write Enable */
-#define AT91C_PIO_PC2        ((unsigned int) 1 <<  2) /* Pin Controlled by PC2 */
-#define AT91C_PC2_BFAVD    ((unsigned int) AT91C_PIO_PC2) /*  Burst Flash Address Valid */
-#define AT91C_PIO_PB1        ((unsigned int) 1 <<  1) /* Pin Controlled by PB1 */
-
-#define AT91C_PIO_PA23       ((unsigned int) 1 << 23) /* Pin Controlled by PA23 */
-#define AT91C_PA23_TXD2     ((unsigned int) AT91C_PIO_PA23) /* USART 2 Transmit Data */
-
-#define AT91C_PIO_PA0        ((unsigned int) 1 <<  0) /* Pin Controlled by PA0 */
-#define AT91C_PA0_MISO     ((unsigned int) AT91C_PIO_PA0) /* SPI Master In Slave */
-#define AT91C_PIO_PA1        ((unsigned int) 1 <<  1) /* Pin Controlled by PA1 */
-#define AT91C_PA1_MOSI     ((unsigned int) AT91C_PIO_PA1) /* SPI Master Out Slave */
-#define AT91C_PIO_PA2        ((unsigned int) 1 <<  2) /* Pin Controlled by PA2 */
-#define AT91C_PA2_SPCK     ((unsigned int) AT91C_PIO_PA2) /* SPI Serial Clock */
-#define AT91C_PIO_PA3        ((unsigned int) 1 <<  3) /* Pin Controlled by PA3 */
-#define AT91C_PA3_NPCS0    ((unsigned int) AT91C_PIO_PA3) /* SPI Peripheral Chip Select 0 */
-#define AT91C_PIO_PA4        ((unsigned int) 1 <<  4) /* Pin Controlled by PA4 */
-#define AT91C_PA4_NPCS1    ((unsigned int) AT91C_PIO_PA4) /* SPI Peripheral Chip Select 1 */
-#define AT91C_PIO_PA5        ((unsigned int) 1 <<  5) /* Pin Controlled by PA5 */
-#define AT91C_PA5_NPCS2    ((unsigned int) AT91C_PIO_PA5) /* SPI Peripheral Chip Select 2 */
-#define AT91C_PIO_PA6        ((unsigned int) 1 <<  6) /* Pin Controlled by PA6 */
-#define AT91C_PA6_NPCS3    ((unsigned int) AT91C_PIO_PA6) /* SPI Peripheral Chip Select 3 */
-
-
-#define AT91C_PIO_PA16       ((unsigned int) 1 << 16) /* Pin Controlled by PA16 */
-#define AT91C_PA16_EMDIO    ((unsigned int) AT91C_PIO_PA16) /*  Ethernet MAC Management Data Input/Output */
-#define AT91C_PIO_PA15       ((unsigned int) 1 << 15) /* Pin Controlled by PA15 */
-#define AT91C_PA15_EMDC     ((unsigned int) AT91C_PIO_PA15) /*  Ethernet MAC Management Data Clock */
-#define AT91C_PIO_PA14       ((unsigned int) 1 << 14) /* Pin Controlled by PA14 */
-#define AT91C_PA14_ERXER    ((unsigned int) AT91C_PIO_PA14) /*  Ethernet MAC Receive Error */
-#define AT91C_PIO_PA13       ((unsigned int) 1 << 13) /* Pin Controlled by PA13 */
-#define AT91C_PA13_ERX1     ((unsigned int) AT91C_PIO_PA13) /*  Ethernet MAC Receive Data 1 */
-#define AT91C_PIO_PA12       ((unsigned int) 1 << 12) /* Pin Controlled by PA12 */
-#define AT91C_PA12_ERX0     ((unsigned int) AT91C_PIO_PA12) /*  Ethernet MAC Receive Data 0 */
-#define AT91C_PIO_PA11       ((unsigned int) 1 << 11) /* Pin Controlled by PA11 */
-#define AT91C_PA11_ECRS_ECRSDV ((unsigned int) AT91C_PIO_PA11) /*  Ethernet MAC Carrier Sense/Carrier Sense and Data Valid */
-#define AT91C_PIO_PA10       ((unsigned int) 1 << 10) /* Pin Controlled by PA10 */
-#define AT91C_PA10_ETX1     ((unsigned int) AT91C_PIO_PA10) /*  Ethernet MAC Transmit Data 1 */
-#define AT91C_PIO_PA9        ((unsigned int) 1 <<  9) /* Pin Controlled by PA9 */
-#define AT91C_PA9_ETX0     ((unsigned int) AT91C_PIO_PA9) /*  Ethernet MAC Transmit Data 0 */
-#define AT91C_PIO_PA8        ((unsigned int) 1 <<  8) /* Pin Controlled by PA8 */
-#define AT91C_PA8_ETXEN    ((unsigned int) AT91C_PIO_PA8) /*  Ethernet MAC Transmit Enable */
-#define AT91C_PIO_PA7        ((unsigned int) 1 <<  7) /* Pin Controlled by PA7 */
-#define AT91C_PA7_ETXCK_EREFCK ((unsigned int) AT91C_PIO_PA7) /*  Ethernet MAC Transmit Clock/Reference Clock */
-
-#define AT91C_PIO_PB3        ((unsigned int) 1 <<  3) /* Pin Controlled by PB7 */
-#define AT91C_PIO_PB4        ((unsigned int) 1 <<  4) /* Pin Controlled by PB7 */
-#define AT91C_PIO_PB5        ((unsigned int) 1 <<  5) /* Pin Controlled by PB7 */
-#define AT91C_PIO_PB6        ((unsigned int) 1 <<  6) /* Pin Controlled by PB7 */
-#define AT91C_PIO_PB7        ((unsigned int) 1 <<  7) /* Pin Controlled by PB7 */
-#define AT91C_PIO_PB25       ((unsigned int) 1 << 25) /* Pin Controlled by PB25 */
-#define AT91C_PB25_DSR1     ((unsigned int) AT91C_PIO_PB25) /*  USART 1 Data Set ready */
-#define AT91C_PB25_EF100    ((unsigned int) AT91C_PIO_PB25) /*  Ethernet MAC Force 100 Mbits */
-#define AT91C_PIO_PB19       ((unsigned int) 1 << 19) /* Pin Controlled by PB19 */
-#define AT91C_PB19_DTR1     ((unsigned int) AT91C_PIO_PB19) /*  USART 1 Data Terminal ready */
-#define AT91C_PB19_ERXCK    ((unsigned int) AT91C_PIO_PB19) /*  Ethernet MAC Receive Clock */
-#define AT91C_PIO_PB18       ((unsigned int) 1 << 18) /* Pin Controlled by PB18 */
-#define AT91C_PB18_RI1      ((unsigned int) AT91C_PIO_PB18) /*  USART 1 Ring Indicator */
-#define AT91C_PB18_ECOL     ((unsigned int) AT91C_PIO_PB18) /*  Ethernet MAC Collision Detected */
-#define AT91C_PIO_PB17       ((unsigned int) 1 << 17) /* Pin Controlled by PB17 */
-#define AT91C_PB17_RF2      ((unsigned int) AT91C_PIO_PB17) /*  SSC Receive Frame Sync 2 */
-#define AT91C_PB17_ERXDV    ((unsigned int) AT91C_PIO_PB17) /*  Ethernet MAC Receive Data Valid */
-#define AT91C_PIO_PB16       ((unsigned int) 1 << 16) /* Pin Controlled by PB16 */
-#define AT91C_PB16_RK2      ((unsigned int) AT91C_PIO_PB16) /*  SSC Receive Clock 2 */
-#define AT91C_PB16_ERX3     ((unsigned int) AT91C_PIO_PB16) /*  Ethernet MAC Receive Data 3 */
-#define AT91C_PIO_PB15       ((unsigned int) 1 << 15) /* Pin Controlled by PB15 */
-#define AT91C_PB15_RD2      ((unsigned int) AT91C_PIO_PB15) /*  SSC Receive Data 2 */
-#define AT91C_PB15_ERX2     ((unsigned int) AT91C_PIO_PB15) /*  Ethernet MAC Receive Data 2 */
-#define AT91C_PIO_PB14       ((unsigned int) 1 << 14) /* Pin Controlled by PB14 */
-#define AT91C_PB14_TD2      ((unsigned int) AT91C_PIO_PB14) /*  SSC Transmit Data 2 */
-#define AT91C_PB14_ETXER    ((unsigned int) AT91C_PIO_PB14) /*  Ethernet MAC Transmikt Coding Error */
-#define AT91C_PIO_PB13       ((unsigned int) 1 << 13) /* Pin Controlled by PB13 */
-#define AT91C_PB13_TK2      ((unsigned int) AT91C_PIO_PB13) /*  SSC Transmit Clock 2 */
-#define AT91C_PB13_ETX3     ((unsigned int) AT91C_PIO_PB13) /*  Ethernet MAC Transmit Data 3 */
-#define AT91C_PIO_PB12       ((unsigned int) 1 << 12) /* Pin Controlled by PB12 */
-#define AT91C_PB12_TF2      ((unsigned int) AT91C_PIO_PB12) /*  SSC Transmit Frame Sync 2 */
-#define AT91C_PB12_ETX2     ((unsigned int) AT91C_PIO_PB12) /*  Ethernet MAC Transmit Data 2 */
-
-#define AT91C_PIOB_BSR  ((AT91_REG *)  0xFFFFF674) /* (PIOB) Select B Register */
-#define AT91C_PIOB_PDR  ((AT91_REG *)  0xFFFFF604) /* (PIOB) PIO Disable Register */
-
-#define        AT91C_EBI_CS3A_SMC_SmartMedia       ((unsigned int) 0x1 <<  3) /* (EBI) Chip Select 3 is assigned to the Static Memory Controller and the SmartMedia Logic is activated. */
-#define        AT91C_SMC2_ACSS_STANDARD ((unsigned int) 0x0 << 16) /* (SMC2) Standard, asserted at the beginning of the access and deasserted at the end. */
-#define AT91C_SMC2_DBW_8      ((unsigned int) 0x2 << 13) /* (SMC2) 8-bit. */
-#define AT91C_SMC2_WSEN       ((unsigned int) 0x1 <<  7) /* (SMC2) Wait State Enable */
-#define AT91C_PIOC_ASR  ((AT91_REG *)  0xFFFFF870) /* (PIOC) Select A Register */
-#define AT91C_PIOC_SODR ((AT91_REG *)  0xFFFFF830) /* (PIOC) Set Output Data Register */
-#define AT91C_PIOC_CODR ((AT91_REG *)  0xFFFFF834) /* (PIOC) Clear Output Data Register */
-#define AT91C_PIOC_PDSR ((AT91_REG *)  0xFFFFF83C) /* (PIOC) Pin Data Status Register */
-
-#define AT91C_BASE_SPI       ((AT91PS_SPI)     0xFFFE0000) /* (SPI) Base Address */
-#define AT91C_BASE_EMAC      ((AT91PS_EMAC)    0xFFFBC000) /* (EMAC) Base Address */
-#define AT91C_BASE_PMC       ((AT91PS_PMC)     0xFFFFFC00) /* (PMC) Base Address */
-#define AT91C_BASE_TC0       ((AT91PS_TC)      0xFFFA0000) /* (TC0) Base Address */
-#define AT91C_BASE_DBGU      ((AT91PS_DBGU)    0xFFFFF200) /* (DBGU) Base Address */
-#define AT91C_BASE_CKGR      ((AT91PS_CKGR) 0xFFFFFC20) /* (CKGR) Base Address */
-#define AT91C_BASE_PIOC      ((AT91PS_PIO)     0xFFFFF800) /* (PIOC) Base Address */
-#define AT91C_BASE_PIOB      ((AT91PS_PIO)     0xFFFFF600) /* (PIOB) Base Address */
-#define AT91C_BASE_PIOA      ((AT91PS_PIO)     0xFFFFF400) /* (PIOA) Base Address */
-#define AT91C_EBI_CSA   ((AT91_REG *)  0xFFFFFF60) /* (EBI) Chip Select Assignment Register */
-#define AT91C_BASE_SMC2      ((AT91PS_SMC2)    0xFFFFFF70) /* (SMC2) Base Address */
-#define AT91C_BASE_US0       ((AT91PS_USART)   0xFFFC0000) /* (US0) Base Address */
-#define AT91C_BASE_US1       ((AT91PS_USART)   0xFFFC4000) /* (US1) Base Address */
-#define AT91C_TCB0_BMR  ((AT91_REG *)  0xFFFA00C4) /* (TCB0) TC Block Mode Register */
-#define AT91C_TCB0_BCR  ((AT91_REG *)  0xFFFA00C0) /* (TCB0) TC Block Control Register */
-#define AT91C_PIOC_PDR  ((AT91_REG *)  0xFFFFF804) /* (PIOC) PIO Disable Register */
-#define AT91C_PIOC_PER  ((AT91_REG *)  0xFFFFF800) /* (PIOC) PIO Enable Register */
-#define AT91C_PIOC_ODR  ((AT91_REG *)  0xFFFFF814) /* (PIOC) Output Disable Registerr */
-#define AT91C_PIOB_PER  ((AT91_REG *)  0xFFFFF600) /* (PIOB) PIO Enable Register */
-#define AT91C_PIOB_ODR  ((AT91_REG *)  0xFFFFF614) /* (PIOB) Output Disable Registerr */
-#define AT91C_PIOB_PDSR ((AT91_REG *)  0xFFFFF63C) /* (PIOB) Pin Data Status Register */
+#define AT91C_PA31_DTXD                ((unsigned int) AT91C_PIO_PA31) /* DBGU Debug Transmit Data */
+#define AT91C_PIO_PA17         ((unsigned int) 1 << 17)        /* Pin Controlled by PA17 */
+#define AT91C_PA17_TXD0                AT91C_PIO_PA17                  /* USART0 Transmit Data */
+#define AT91C_PIO_PA18         ((unsigned int) 1 << 18)        /* Pin Controlled by PA18 */
+#define AT91C_PA18_RXD0                AT91C_PIO_PA18                  /* USART0 Receive Data */
+#define AT91C_PIO_PB20         ((unsigned int) 1 << 20)        /* Pin Controlled by PB20 */
+#define AT91C_PB20_RXD1                AT91C_PIO_PB20                  /* USART1 Receive Data */
+#define AT91C_PIO_PB21         ((unsigned int) 1 << 21)        /* Pin Controlled by PB21 */
+#define AT91C_PB21_TXD1                AT91C_PIO_PB21                  /* USART1 Transmit Data */
+
+#define AT91C_ID_SYS           ((unsigned int)  1) /* System Peripheral */
+#define AT91C_ID_PIOA          ((unsigned int)  2) /* PIO port A */
+#define AT91C_ID_PIOB          ((unsigned int)  3) /* PIO port B */
+#define AT91C_ID_PIOC          ((unsigned int)  4) /* PIO port C */
+#define AT91C_ID_USART0                ((unsigned int)  6) /* USART 0 */
+#define AT91C_ID_USART1                ((unsigned int)  7) /* USART 1 */
+#define AT91C_ID_TWI           ((unsigned int) 12) /* Two Wire Interface */
+#define AT91C_ID_SPI           ((unsigned int) 13) /* Serial Peripheral Interface */
+#define AT91C_ID_TC0           ((unsigned int) 17) /* Timer Counter 0 */
+#define AT91C_ID_UHP           ((unsigned int) 23) /* OHCI USB Host Port */
+#define AT91C_ID_EMAC          ((unsigned int) 24) /* Ethernet MAC */
+
+#define AT91C_PIO_PC1          ((unsigned int) 1 <<  1)        /* Pin Controlled by PC1 */
+#define AT91C_PC1_BFRDY_SMOE   ((unsigned int) AT91C_PIO_PC1)  /*  Burst Flash Ready */
+#define AT91C_PIO_PC3          ((unsigned int) 1 <<  3)        /* Pin Controlled by PC3 */
+#define AT91C_PC3_BFBAA_SMWE   ((unsigned int) AT91C_PIO_PC3)  /*  Burst Flash Address Advance / SmartMedia Write Enable */
+#define AT91C_PIO_PC2          ((unsigned int) 1 <<  2)        /* Pin Controlled by PC2 */
+#define AT91C_PC2_BFAVD                ((unsigned int) AT91C_PIO_PC2)  /*  Burst Flash Address Valid */
+#define AT91C_PIO_PB1          ((unsigned int) 1 <<  1)        /* Pin Controlled by PB1 */
+
+#define AT91C_PIO_PA23         ((unsigned int) 1 << 23)        /* Pin Controlled by PA23 */
+#define AT91C_PA23_TXD2                ((unsigned int) AT91C_PIO_PA23) /* USART 2 Transmit Data */
+
+#define AT91C_PIO_PA0          ((unsigned int) 1 <<  0)        /* Pin Controlled by PA0 */
+#define AT91C_PA0_MISO         ((unsigned int) AT91C_PIO_PA0)  /* SPI Master In Slave */
+#define AT91C_PIO_PA1          ((unsigned int) 1 <<  1)        /* Pin Controlled by PA1 */
+#define AT91C_PA1_MOSI         ((unsigned int) AT91C_PIO_PA1)  /* SPI Master Out Slave */
+#define AT91C_PIO_PA2          ((unsigned int) 1 <<  2)        /* Pin Controlled by PA2 */
+#define AT91C_PA2_SPCK         ((unsigned int) AT91C_PIO_PA2)  /* SPI Serial Clock */
+#define AT91C_PIO_PA3          ((unsigned int) 1 <<  3)        /* Pin Controlled by PA3 */
+#define AT91C_PA3_NPCS0                ((unsigned int) AT91C_PIO_PA3)  /* SPI Peripheral Chip Select 0 */
+#define AT91C_PIO_PA4          ((unsigned int) 1 <<  4)        /* Pin Controlled by PA4 */
+#define AT91C_PA4_NPCS1                ((unsigned int) AT91C_PIO_PA4)  /* SPI Peripheral Chip Select 1 */
+#define AT91C_PIO_PA5          ((unsigned int) 1 <<  5)        /* Pin Controlled by PA5 */
+#define AT91C_PA5_NPCS2                ((unsigned int) AT91C_PIO_PA5)  /* SPI Peripheral Chip Select 2 */
+#define AT91C_PIO_PA6          ((unsigned int) 1 <<  6)        /* Pin Controlled by PA6 */
+#define AT91C_PA6_NPCS3                ((unsigned int) AT91C_PIO_PA6)  /* SPI Peripheral Chip Select 3 */
+
+#define AT91C_PIO_PA16         ((unsigned int) 1 << 16)        /* Pin Controlled by PA16 */
+#define AT91C_PA16_EMDIO       ((unsigned int) AT91C_PIO_PA16) /* Ethernet MAC Management Data Input/Output */
+#define AT91C_PIO_PA15         ((unsigned int) 1 << 15)        /* Pin Controlled by PA15 */
+#define AT91C_PA15_EMDC                ((unsigned int) AT91C_PIO_PA15) /* Ethernet MAC Management Data Clock */
+#define AT91C_PIO_PA14         ((unsigned int) 1 << 14)        /* Pin Controlled by PA14 */
+#define AT91C_PA14_ERXER       ((unsigned int) AT91C_PIO_PA14) /* Ethernet MAC Receive Error */
+#define AT91C_PIO_PA13         ((unsigned int) 1 << 13)        /* Pin Controlled by PA13 */
+#define AT91C_PA13_ERX1                ((unsigned int) AT91C_PIO_PA13) /* Ethernet MAC Receive Data 1 */
+#define AT91C_PIO_PA12         ((unsigned int) 1 << 12)        /* Pin Controlled by PA12 */
+#define AT91C_PA12_ERX0                ((unsigned int) AT91C_PIO_PA12) /* Ethernet MAC Receive Data 0 */
+#define AT91C_PIO_PA11         ((unsigned int) 1 << 11)        /* Pin Controlled by PA11 */
+#define AT91C_PA11_ECRS_ECRSDV ((unsigned int) AT91C_PIO_PA11) /* Ethernet MAC Carrier Sense/Carrier Sense and Data Valid */
+#define AT91C_PIO_PA10         ((unsigned int) 1 << 10)        /* Pin Controlled by PA10 */
+#define AT91C_PA10_ETX1                ((unsigned int) AT91C_PIO_PA10) /* Ethernet MAC Transmit Data 1 */
+#define AT91C_PIO_PA9          ((unsigned int) 1 <<  9)        /* Pin Controlled by PA9 */
+#define AT91C_PA9_ETX0         ((unsigned int) AT91C_PIO_PA9)  /* Ethernet MAC Transmit Data 0 */
+#define AT91C_PIO_PA8          ((unsigned int) 1 <<  8)        /* Pin Controlled by PA8 */
+#define AT91C_PA8_ETXEN                ((unsigned int) AT91C_PIO_PA8)  /* Ethernet MAC Transmit Enable */
+#define AT91C_PIO_PA7          ((unsigned int) 1 <<  7)        /* Pin Controlled by PA7 */
+#define AT91C_PA7_ETXCK_EREFCK ((unsigned int) AT91C_PIO_PA7)  /* Ethernet MAC Transmit Clock/Reference Clock */
+
+#define AT91C_PIO_PB3          ((unsigned int) 1 <<  3)        /* Pin Controlled by PB3 */
+#define AT91C_PIO_PB4          ((unsigned int) 1 <<  4)        /* Pin Controlled by PB4 */
+#define AT91C_PIO_PB5          ((unsigned int) 1 <<  5)        /* Pin Controlled by PB5 */
+#define AT91C_PIO_PB6          ((unsigned int) 1 <<  6)        /* Pin Controlled by PB6 */
+#define AT91C_PIO_PB7          ((unsigned int) 1 <<  7)        /* Pin Controlled by PB7 */
+#define AT91C_PIO_PB25         ((unsigned int) 1 << 25)        /* Pin Controlled by PB25 */
+#define AT91C_PB25_DSR1                ((unsigned int) AT91C_PIO_PB25) /* USART 1 Data Set ready */
+#define AT91C_PB25_EF100       ((unsigned int) AT91C_PIO_PB25) /* Ethernet MAC Force 100 Mbits */
+#define AT91C_PIO_PB19         ((unsigned int) 1 << 19)        /* Pin Controlled by PB19 */
+#define AT91C_PB19_DTR1                ((unsigned int) AT91C_PIO_PB19) /* USART 1 Data Terminal ready */
+#define AT91C_PB19_ERXCK       ((unsigned int) AT91C_PIO_PB19) /* Ethernet MAC Receive Clock */
+#define AT91C_PIO_PB18         ((unsigned int) 1 << 18)        /* Pin Controlled by PB18 */
+#define AT91C_PB18_RI1         ((unsigned int) AT91C_PIO_PB18) /* USART 1 Ring Indicator */
+#define AT91C_PB18_ECOL                ((unsigned int) AT91C_PIO_PB18) /* Ethernet MAC Collision Detected */
+#define AT91C_PIO_PB17         ((unsigned int) 1 << 17)        /* Pin Controlled by PB17 */
+#define AT91C_PB17_RF2         ((unsigned int) AT91C_PIO_PB17) /* SSC Receive Frame Sync 2 */
+#define AT91C_PB17_ERXDV       ((unsigned int) AT91C_PIO_PB17) /* Ethernet MAC Receive Data Valid */
+#define AT91C_PIO_PB16         ((unsigned int) 1 << 16)        /* Pin Controlled by PB16 */
+#define AT91C_PB16_RK2         ((unsigned int) AT91C_PIO_PB16) /* SSC Receive Clock 2 */
+#define AT91C_PB16_ERX3                ((unsigned int) AT91C_PIO_PB16) /* Ethernet MAC Receive Data 3 */
+#define AT91C_PIO_PB15         ((unsigned int) 1 << 15)        /* Pin Controlled by PB15 */
+#define AT91C_PB15_RD2         ((unsigned int) AT91C_PIO_PB15) /* SSC Receive Data 2 */
+#define AT91C_PB15_ERX2                ((unsigned int) AT91C_PIO_PB15) /* Ethernet MAC Receive Data 2 */
+#define AT91C_PIO_PB14         ((unsigned int) 1 << 14)        /* Pin Controlled by PB14 */
+#define AT91C_PB14_TD2         ((unsigned int) AT91C_PIO_PB14) /* SSC Transmit Data 2 */
+#define AT91C_PB14_ETXER       ((unsigned int) AT91C_PIO_PB14) /* Ethernet MAC Transmikt Coding Error */
+#define AT91C_PIO_PB13         ((unsigned int) 1 << 13)        /* Pin Controlled by PB13 */
+#define AT91C_PB13_TK2         ((unsigned int) AT91C_PIO_PB13) /* SSC Transmit Clock 2 */
+#define AT91C_PB13_ETX3                ((unsigned int) AT91C_PIO_PB13) /* Ethernet MAC Transmit Data 3 */
+#define AT91C_PIO_PB12         ((unsigned int) 1 << 12)        /* Pin Controlled by PB12 */
+#define AT91C_PB12_TF2         ((unsigned int) AT91C_PIO_PB12) /* SSC Transmit Frame Sync 2 */
+#define AT91C_PB12_ETX2                ((unsigned int) AT91C_PIO_PB12) /* Ethernet MAC Transmit Data 2 */
+
+#define AT91C_PIOB_BSR         ((AT91_REG *)   0xFFFFF674)     /* (PIOB) Select B Register */
+#define AT91C_PIOB_PDR         ((AT91_REG *)   0xFFFFF604)     /* (PIOB) PIO Disable Register */
+
+#define AT91C_EBI_CS3A_SMC_SmartMedia  ((unsigned int) 0x1 <<  3) /* (EBI) Chip Select 3 is assigned to the Static Memory Controller and the SmartMedia Logic is activated. */
+#define AT91C_SMC2_ACSS_STANDARD       ((unsigned int) 0x0 << 16) /* (SMC2) Standard, asserted at the beginning of the access and deasserted at the end. */
+#define AT91C_SMC2_DBW_8       ((unsigned int) 0x2 << 13) /* (SMC2) 8-bit. */
+#define AT91C_SMC2_WSEN                ((unsigned int) 0x1 <<  7) /* (SMC2) Wait State Enable */
+#define AT91C_PIOC_ASR         ((AT91_REG *)   0xFFFFF870) /* (PIOC) Select A Register */
+#define AT91C_PIOC_SODR                ((AT91_REG *)   0xFFFFF830) /* (PIOC) Set Output Data Register */
+#define AT91C_PIOC_CODR                ((AT91_REG *)   0xFFFFF834) /* (PIOC) Clear Output Data Register */
+#define AT91C_PIOC_PDSR                ((AT91_REG *)   0xFFFFF83C) /* (PIOC) Pin Data Status Register */
+
+#define AT91C_BASE_SPI         ((AT91PS_SPI)   0xFFFE0000) /* (SPI) Base Address */
+#define AT91C_BASE_EMAC                ((AT91PS_EMAC)  0xFFFBC000) /* (EMAC) Base Address */
+#define AT91C_BASE_PMC         ((AT91PS_PMC)   0xFFFFFC00) /* (PMC) Base Address */
+#define AT91C_BASE_TC0         ((AT91PS_TC)    0xFFFA0000) /* (TC0) Base Address */
+#define AT91C_BASE_DBGU                ((AT91PS_DBGU)  0xFFFFF200) /* (DBGU) Base Address */
+#define AT91C_BASE_CKGR                ((AT91PS_CKGR)  0xFFFFFC20) /* (CKGR) Base Address */
+#define AT91C_BASE_PIOC                ((AT91PS_PIO)   0xFFFFF800) /* (PIOC) Base Address */
+#define AT91C_BASE_PIOB                ((AT91PS_PIO)   0xFFFFF600) /* (PIOB) Base Address */
+#define AT91C_BASE_PIOA                ((AT91PS_PIO)   0xFFFFF400) /* (PIOA) Base Address */
+#define AT91C_EBI_CSA          ((AT91_REG *)   0xFFFFFF60) /* (EBI) Chip Select Assignment Register */
+#define AT91C_BASE_SMC2                ((AT91PS_SMC2)  0xFFFFFF70) /* (SMC2) Base Address */
+#define AT91C_BASE_US0         ((AT91PS_USART) 0xFFFC0000) /* (US0) Base Address */
+#define AT91C_BASE_US1         ((AT91PS_USART) 0xFFFC4000) /* (US1) Base Address */
+#define AT91C_TCB0_BMR         ((AT91_REG *)   0xFFFA00C4) /* (TCB0) TC Block Mode Register */
+#define AT91C_TCB0_BCR         ((AT91_REG *)   0xFFFA00C0) /* (TCB0) TC Block Control Register */
+#define AT91C_PIOC_PDR         ((AT91_REG *)   0xFFFFF804) /* (PIOC) PIO Disable Register */
+#define AT91C_PIOC_PER         ((AT91_REG *)   0xFFFFF800) /* (PIOC) PIO Enable Register */
+#define AT91C_PIOC_ODR         ((AT91_REG *)   0xFFFFF814) /* (PIOC) Output Disable Registerr */
+#define AT91C_PIOB_PER         ((AT91_REG *)   0xFFFFF600) /* (PIOB) PIO Enable Register */
+#define AT91C_PIOB_ODR         ((AT91_REG *)   0xFFFFF614) /* (PIOB) Output Disable Registerr */
+#define AT91C_PIOB_PDSR                ((AT91_REG *)   0xFFFFF63C) /* (PIOB) Pin Data Status Register */
 
 #endif
index 19d799d539d2bd5fbfcb06acf75900ad9f60d1be..8bb0c47523653d8d2e8745b880a20c001ad49c43 100644 (file)
@@ -47,6 +47,8 @@
 #define AT91_TCB1_BASE         0xFFFA4000 /*16K */
 #define AT91_TCB0_BASE         0xFFFA0000 /*16K */
 
+#define AT91_USB_HOST_BASE     0x00300000
+
 /*
  * Where in virtual memory the IO devices (timers, system controllers
  * and so on)
index e482115920d04dc3c36712d46146095747181e56..fd037485235bffd732e678c7c063b5eab68f71fe 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This was automagically generated from mach-types!
+ * This was automagically generated from arch/arm/tools/mach-types!
  * Do NOT edit
  */
 
@@ -230,7 +230,7 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_PNP1110              215
 #define MACH_TYPE_CSB226               216
 #define MACH_TYPE_ARNOLD               217
-#define MACH_TYPE_PSIBOARD             218
+#define MACH_TYPE_VOICEBLUE            218
 #define MACH_TYPE_JZ8028               219
 #define MACH_TYPE_H5400                220
 #define MACH_TYPE_FORTE                221
@@ -254,8 +254,8 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_PDB                  239
 #define MACH_TYPE_BLUE_2G              240
 #define MACH_TYPE_BLUEARCH             241
-#define MACH_TYPE_IXDB2400             242
-#define MACH_TYPE_IXDB2800             243
+#define MACH_TYPE_IXDP2400             242
+#define MACH_TYPE_IXDP2800             243
 #define MACH_TYPE_EXPLORER             244
 #define MACH_TYPE_IXDP425              245
 #define MACH_TYPE_CHIMP                246
@@ -598,8 +598,8 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_XAENIAX              585
 #define MACH_TYPE_SOMN4250             586
 #define MACH_TYPE_PLEB2                587
-#define MACH_TYPE_CWL                  588
-#define MACH_TYPE_GD                   589
+#define MACH_TYPE_CORNWALLIS           588
+#define MACH_TYPE_GURNEY_DRV           589
 #define MACH_TYPE_CHAFFEE              590
 #define MACH_TYPE_RMS101               591
 #define MACH_TYPE_RX3715               592
@@ -624,6 +624,118 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_RMS100               611
 #define MACH_TYPE_KB9200               612
 #define MACH_TYPE_SX1                  613
+#define MACH_TYPE_HMS39C7092           614
+#define MACH_TYPE_ARMADILLO            615
+#define MACH_TYPE_IPCU                 616
+#define MACH_TYPE_LOOX720              617
+#define MACH_TYPE_IXDP465              618
+#define MACH_TYPE_IXDP2351             619
+#define MACH_TYPE_ADSVIX               620
+#define MACH_TYPE_DM270                621
+#define MACH_TYPE_SOCLTPLUS            622
+#define MACH_TYPE_ECIA                 623
+#define MACH_TYPE_CM4008               624
+#define MACH_TYPE_P2001                625
+#define MACH_TYPE_TWISTER              626
+#define MACH_TYPE_MUDSHARK             627
+#define MACH_TYPE_HB2                  628
+#define MACH_TYPE_IQ80332              629
+#define MACH_TYPE_SENDT                630
+#define MACH_TYPE_MX2JAZZ              631
+#define MACH_TYPE_MULTIIO              632
+#define MACH_TYPE_HRDISPLAY            633
+#define MACH_TYPE_SCMA11BB             634
+#define MACH_TYPE_TRIZEPS3             635
+#define MACH_TYPE_ZEFEERDZA            636
+#define MACH_TYPE_ZEFEERDZB            637
+#define MACH_TYPE_ZEFEERDZG            638
+#define MACH_TYPE_ZEFEERDZN            639
+#define MACH_TYPE_ZEFEERDZQ            640
+#define MACH_TYPE_GTWX5715             641
+#define MACH_TYPE_ASTRO_JACK           643
+#define MACH_TYPE_TIP03                644
+#define MACH_TYPE_A9200EC              645
+#define MACH_TYPE_PNX0105              646
+#define MACH_TYPE_ADCPOECPU            647
+#define MACH_TYPE_CSB637               648
+#define MACH_TYPE_ML69Q6203            649
+#define MACH_TYPE_MB9200               650
+#define MACH_TYPE_KULUN                651
+#define MACH_TYPE_SNAPPER              652
+#define MACH_TYPE_OPTIMA               653
+#define MACH_TYPE_DLHSBC               654
+#define MACH_TYPE_X30                  655
+#define MACH_TYPE_N30                  656
+#define MACH_TYPE_MANGA_KS8695         657
+#define MACH_TYPE_AJAX                 658
+#define MACH_TYPE_NEC_MP900            659
+#define MACH_TYPE_VVTK1000             661
+#define MACH_TYPE_KAFA                 662
+#define MACH_TYPE_VVTK3000             663
+#define MACH_TYPE_PIMX1                664
+#define MACH_TYPE_OLLIE                665
+#define MACH_TYPE_SKYMAX               666
+#define MACH_TYPE_JAZZ                 667
+#define MACH_TYPE_TEL_T3               668
+#define MACH_TYPE_AISINO_FCR255        669
+#define MACH_TYPE_BTWEB                670
+#define MACH_TYPE_DBG_LH79520          671
+#define MACH_TYPE_CM41XX               672
+#define MACH_TYPE_TS72XX               673
+#define MACH_TYPE_NGGPXA               674
+#define MACH_TYPE_CSB535               675
+#define MACH_TYPE_CSB536               676
+#define MACH_TYPE_PXA_TRAKPOD          677
+#define MACH_TYPE_PRAXIS               678
+#define MACH_TYPE_LH75411              679
+#define MACH_TYPE_OTOM                 680
+#define MACH_TYPE_NEXCODER_2440        681
+#define MACH_TYPE_LOOX410              682
+#define MACH_TYPE_WESTLAKE             683
+#define MACH_TYPE_NSB                  684
+#define MACH_TYPE_ESL_SARVA_STN        685
+#define MACH_TYPE_ESL_SARVA_TFT        686
+#define MACH_TYPE_ESL_SARVA_IAD        687
+#define MACH_TYPE_ESL_SARVA_ACC        688
+#define MACH_TYPE_TYPHOON              689
+#define MACH_TYPE_CNAV                 690
+#define MACH_TYPE_A730                 691
+#define MACH_TYPE_NETSTAR              692
+#define MACH_TYPE_PHASEFALE_SUPERCON   693
+#define MACH_TYPE_SHIVA1100            694
+#define MACH_TYPE_ETEXSC               695
+#define MACH_TYPE_IXDPG465             696
+#define MACH_TYPE_A9M2410              697
+#define MACH_TYPE_A9M2440              698
+#define MACH_TYPE_A9M9750              699
+#define MACH_TYPE_A9M9360              700
+#define MACH_TYPE_UNC90                701
+#define MACH_TYPE_ECO920               702
+#define MACH_TYPE_SATVIEW              703
+#define MACH_TYPE_ROADRUNNER           704
+#define MACH_TYPE_AT91RM9200EK         705
+#define MACH_TYPE_GP32                 706
+#define MACH_TYPE_GEM                  707
+#define MACH_TYPE_I858                 708
+#define MACH_TYPE_HX2750               709
+#define MACH_TYPE_ZEUSEVB              710
+#define MACH_TYPE_P700                 711
+#define MACH_TYPE_CPE                  712
+#define MACH_TYPE_SPITZ                713
+#define MACH_TYPE_NIMBRA340            714
+#define MACH_TYPE_LPC22XX              715
+#define MACH_TYPE_COMET3               716
+#define MACH_TYPE_COMET4               717
+#define MACH_TYPE_CSB625               718
+#define MACH_TYPE_FORTUNET2            719
+#define MACH_TYPE_S5H2200              720
+#define MACH_TYPE_OPTORM920            721
+#define MACH_TYPE_ADSBITSYXB           722
+#define MACH_TYPE_ADSSPHERE            723
+#define MACH_TYPE_ADSPORTAL            724
+#define MACH_TYPE_LN2410SBC            725
+#define MACH_TYPE_CB3RUFC              726
+#define MACH_TYPE_MP2USB               727
 
 #ifdef CONFIG_ARCH_EBSA110
 # ifdef machine_arch_type
@@ -3217,16 +3329,16 @@ extern unsigned int __machine_arch_type;
 # define machine_is_arnold()   (0)
 #endif
 
-#ifdef CONFIG_SA1100_PSIBOARD
+#ifdef CONFIG_MACH_VOICEBLUE
 # ifdef machine_arch_type
 #  undef machine_arch_type
 #  define machine_arch_type    __machine_arch_type
 # else
-#  define machine_arch_type    MACH_TYPE_PSIBOARD
+#  define machine_arch_type    MACH_TYPE_VOICEBLUE
 # endif
-# define machine_is_psiboard() (machine_arch_type == MACH_TYPE_PSIBOARD)
+# define machine_is_voiceblue()        (machine_arch_type == MACH_TYPE_VOICEBLUE)
 #else
-# define machine_is_psiboard() (0)
+# define machine_is_voiceblue()        (0)
 #endif
 
 #ifdef CONFIG_ARCH_JZ8028
@@ -3505,26 +3617,26 @@ extern unsigned int __machine_arch_type;
 # define machine_is_bluearch() (0)
 #endif
 
-#ifdef CONFIG_ARCH_IXDB2400
+#ifdef CONFIG_ARCH_IXDP2400
 # ifdef machine_arch_type
 #  undef machine_arch_type
 #  define machine_arch_type    __machine_arch_type
 # else
-#  define machine_arch_type    MACH_TYPE_IXDB2400
+#  define machine_arch_type    MACH_TYPE_IXDP2400
 # endif
-# define machine_is_ixdp2400() (machine_arch_type == MACH_TYPE_IXDB2400)
+# define machine_is_ixdp2400() (machine_arch_type == MACH_TYPE_IXDP2400)
 #else
 # define machine_is_ixdp2400() (0)
 #endif
 
-#ifdef CONFIG_ARCH_IXDB2800
+#ifdef CONFIG_ARCH_IXDP2800
 # ifdef machine_arch_type
 #  undef machine_arch_type
 #  define machine_arch_type    __machine_arch_type
 # else
-#  define machine_arch_type    MACH_TYPE_IXDB2800
+#  define machine_arch_type    MACH_TYPE_IXDP2800
 # endif
-# define machine_is_ixdp2800() (machine_arch_type == MACH_TYPE_IXDB2800)
+# define machine_is_ixdp2800() (machine_arch_type == MACH_TYPE_IXDP2800)
 #else
 # define machine_is_ixdp2800() (0)
 #endif
@@ -5072,9 +5184,9 @@ extern unsigned int __machine_arch_type;
 # else
 #  define machine_arch_type    MACH_TYPE_GUMSTIK
 # endif
-# define machine_is_gumstik()  (machine_arch_type == MACH_TYPE_GUMSTIK)
+# define machine_is_gumstix()  (machine_arch_type == MACH_TYPE_GUMSTIK)
 #else
-# define machine_is_gumstik()  (0)
+# define machine_is_gumstix()  (0)
 #endif
 
 #ifdef CONFIG_ARCH_RCUBE
@@ -7633,28 +7745,28 @@ extern unsigned int __machine_arch_type;
 # define machine_is_pleb2()    (0)
 #endif
 
-#ifdef CONFIG_MACH_CWL
+#ifdef CONFIG_MACH_CORNWALLIS
 # ifdef machine_arch_type
 #  undef machine_arch_type
 #  define machine_arch_type    __machine_arch_type
 # else
-#  define machine_arch_type    MACH_TYPE_CWL
+#  define machine_arch_type    MACH_TYPE_CORNWALLIS
 # endif
-# define machine_is_cwl()      (machine_arch_type == MACH_TYPE_CWL)
+# define machine_is_cornwallis()       (machine_arch_type == MACH_TYPE_CORNWALLIS)
 #else
-# define machine_is_cwl()      (0)
+# define machine_is_cornwallis()       (0)
 #endif
 
-#ifdef CONFIG_MACH_GD
+#ifdef CONFIG_MACH_GURNEY_DRV
 # ifdef machine_arch_type
 #  undef machine_arch_type
 #  define machine_arch_type    __machine_arch_type
 # else
-#  define machine_arch_type    MACH_TYPE_GD
+#  define machine_arch_type    MACH_TYPE_GURNEY_DRV
 # endif
-# define machine_is_gd()       (machine_arch_type == MACH_TYPE_GD)
+# define machine_is_gurney_drv()       (machine_arch_type == MACH_TYPE_GURNEY_DRV)
 #else
-# define machine_is_gd()       (0)
+# define machine_is_gurney_drv()       (0)
 #endif
 
 #ifdef CONFIG_MACH_CHAFFEE
@@ -7945,6 +8057,1350 @@ extern unsigned int __machine_arch_type;
 # define machine_is_sx1()      (0)
 #endif
 
+#ifdef CONFIG_MACH_HMS39C7092
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_HMS39C7092
+# endif
+# define machine_is_hms39c7092()       (machine_arch_type == MACH_TYPE_HMS39C7092)
+#else
+# define machine_is_hms39c7092()       (0)
+#endif
+
+#ifdef CONFIG_MACH_ARMADILLO
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ARMADILLO
+# endif
+# define machine_is_armadillo()        (machine_arch_type == MACH_TYPE_ARMADILLO)
+#else
+# define machine_is_armadillo()        (0)
+#endif
+
+#ifdef CONFIG_MACH_IPCU
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_IPCU
+# endif
+# define machine_is_ipcu()     (machine_arch_type == MACH_TYPE_IPCU)
+#else
+# define machine_is_ipcu()     (0)
+#endif
+
+#ifdef CONFIG_MACH_LOOX720
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_LOOX720
+# endif
+# define machine_is_loox720()  (machine_arch_type == MACH_TYPE_LOOX720)
+#else
+# define machine_is_loox720()  (0)
+#endif
+
+#ifdef CONFIG_MACH_IXDP465
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_IXDP465
+# endif
+# define machine_is_ixdp465()  (machine_arch_type == MACH_TYPE_IXDP465)
+#else
+# define machine_is_ixdp465()  (0)
+#endif
+
+#ifdef CONFIG_MACH_IXDP2351
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_IXDP2351
+# endif
+# define machine_is_ixdp2351() (machine_arch_type == MACH_TYPE_IXDP2351)
+#else
+# define machine_is_ixdp2351() (0)
+#endif
+
+#ifdef CONFIG_MACH_ADSVIX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADSVIX
+# endif
+# define machine_is_adsvix()   (machine_arch_type == MACH_TYPE_ADSVIX)
+#else
+# define machine_is_adsvix()   (0)
+#endif
+
+#ifdef CONFIG_MACH_DM270
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_DM270
+# endif
+# define machine_is_dm270()    (machine_arch_type == MACH_TYPE_DM270)
+#else
+# define machine_is_dm270()    (0)
+#endif
+
+#ifdef CONFIG_MACH_SOCLTPLUS
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SOCLTPLUS
+# endif
+# define machine_is_socltplus()        (machine_arch_type == MACH_TYPE_SOCLTPLUS)
+#else
+# define machine_is_socltplus()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ECIA
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ECIA
+# endif
+# define machine_is_ecia()     (machine_arch_type == MACH_TYPE_ECIA)
+#else
+# define machine_is_ecia()     (0)
+#endif
+
+#ifdef CONFIG_MACH_CM4008
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CM4008
+# endif
+# define machine_is_cm4008()   (machine_arch_type == MACH_TYPE_CM4008)
+#else
+# define machine_is_cm4008()   (0)
+#endif
+
+#ifdef CONFIG_MACH_P2001
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_P2001
+# endif
+# define machine_is_p2001()    (machine_arch_type == MACH_TYPE_P2001)
+#else
+# define machine_is_p2001()    (0)
+#endif
+
+#ifdef CONFIG_MACH_TWISTER
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TWISTER
+# endif
+# define machine_is_twister()  (machine_arch_type == MACH_TYPE_TWISTER)
+#else
+# define machine_is_twister()  (0)
+#endif
+
+#ifdef CONFIG_MACH_MUDSHARK
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MUDSHARK
+# endif
+# define machine_is_mudshark() (machine_arch_type == MACH_TYPE_MUDSHARK)
+#else
+# define machine_is_mudshark() (0)
+#endif
+
+#ifdef CONFIG_MACH_HB2
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_HB2
+# endif
+# define machine_is_hb2()      (machine_arch_type == MACH_TYPE_HB2)
+#else
+# define machine_is_hb2()      (0)
+#endif
+
+#ifdef CONFIG_MACH_IQ80332
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_IQ80332
+# endif
+# define machine_is_iq80332()  (machine_arch_type == MACH_TYPE_IQ80332)
+#else
+# define machine_is_iq80332()  (0)
+#endif
+
+#ifdef CONFIG_MACH_SENDT
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SENDT
+# endif
+# define machine_is_sendt()    (machine_arch_type == MACH_TYPE_SENDT)
+#else
+# define machine_is_sendt()    (0)
+#endif
+
+#ifdef CONFIG_MACH_MX2JAZZ
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MX2JAZZ
+# endif
+# define machine_is_mx2jazz()  (machine_arch_type == MACH_TYPE_MX2JAZZ)
+#else
+# define machine_is_mx2jazz()  (0)
+#endif
+
+#ifdef CONFIG_MACH_MULTIIO
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MULTIIO
+# endif
+# define machine_is_multiio()  (machine_arch_type == MACH_TYPE_MULTIIO)
+#else
+# define machine_is_multiio()  (0)
+#endif
+
+#ifdef CONFIG_MACH_HRDISPLAY
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_HRDISPLAY
+# endif
+# define machine_is_hrdisplay()        (machine_arch_type == MACH_TYPE_HRDISPLAY)
+#else
+# define machine_is_hrdisplay()        (0)
+#endif
+
+#ifdef CONFIG_MACH_SCMA11BB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SCMA11BB
+# endif
+# define machine_is_scma11bb() (machine_arch_type == MACH_TYPE_SCMA11BB)
+#else
+# define machine_is_scma11bb() (0)
+#endif
+
+#ifdef CONFIG_MACH_TRIZEPS3
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TRIZEPS3
+# endif
+# define machine_is_trizeps3() (machine_arch_type == MACH_TYPE_TRIZEPS3)
+#else
+# define machine_is_trizeps3() (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEFEERDZA
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEFEERDZA
+# endif
+# define machine_is_zefeerdza()        (machine_arch_type == MACH_TYPE_ZEFEERDZA)
+#else
+# define machine_is_zefeerdza()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEFEERDZB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEFEERDZB
+# endif
+# define machine_is_zefeerdzb()        (machine_arch_type == MACH_TYPE_ZEFEERDZB)
+#else
+# define machine_is_zefeerdzb()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEFEERDZG
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEFEERDZG
+# endif
+# define machine_is_zefeerdzg()        (machine_arch_type == MACH_TYPE_ZEFEERDZG)
+#else
+# define machine_is_zefeerdzg()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEFEERDZN
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEFEERDZN
+# endif
+# define machine_is_zefeerdzn()        (machine_arch_type == MACH_TYPE_ZEFEERDZN)
+#else
+# define machine_is_zefeerdzn()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEFEERDZQ
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEFEERDZQ
+# endif
+# define machine_is_zefeerdzq()        (machine_arch_type == MACH_TYPE_ZEFEERDZQ)
+#else
+# define machine_is_zefeerdzq()        (0)
+#endif
+
+#ifdef CONFIG_MACH_GTWX5715
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_GTWX5715
+# endif
+# define machine_is_gtwx5715() (machine_arch_type == MACH_TYPE_GTWX5715)
+#else
+# define machine_is_gtwx5715() (0)
+#endif
+
+#ifdef CONFIG_MACH_ASTRO_JACK
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ASTRO_JACK
+# endif
+# define machine_is_astro_jack()       (machine_arch_type == MACH_TYPE_ASTRO_JACK)
+#else
+# define machine_is_astro_jack()       (0)
+#endif
+
+#ifdef CONFIG_MACH_TIP03
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TIP03
+# endif
+# define machine_is_tip03()    (machine_arch_type == MACH_TYPE_TIP03)
+#else
+# define machine_is_tip03()    (0)
+#endif
+
+#ifdef CONFIG_MACH_A9200EC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A9200EC
+# endif
+# define machine_is_a9200ec()  (machine_arch_type == MACH_TYPE_A9200EC)
+#else
+# define machine_is_a9200ec()  (0)
+#endif
+
+#ifdef CONFIG_MACH_PNX0105
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_PNX0105
+# endif
+# define machine_is_pnx0105()  (machine_arch_type == MACH_TYPE_PNX0105)
+#else
+# define machine_is_pnx0105()  (0)
+#endif
+
+#ifdef CONFIG_MACH_ADCPOECPU
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADCPOECPU
+# endif
+# define machine_is_adcpoecpu()        (machine_arch_type == MACH_TYPE_ADCPOECPU)
+#else
+# define machine_is_adcpoecpu()        (0)
+#endif
+
+#ifdef CONFIG_MACH_CSB637
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CSB637
+# endif
+# define machine_is_csb637()   (machine_arch_type == MACH_TYPE_CSB637)
+#else
+# define machine_is_csb637()   (0)
+#endif
+
+#ifdef CONFIG_MACH_ML69Q6203
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ML69Q6203
+# endif
+# define machine_is_ml69q6203()        (machine_arch_type == MACH_TYPE_ML69Q6203)
+#else
+# define machine_is_ml69q6203()        (0)
+#endif
+
+#ifdef CONFIG_MACH_MB9200
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MB9200
+# endif
+# define machine_is_mb9200()   (machine_arch_type == MACH_TYPE_MB9200)
+#else
+# define machine_is_mb9200()   (0)
+#endif
+
+#ifdef CONFIG_MACH_KULUN
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_KULUN
+# endif
+# define machine_is_kulun()    (machine_arch_type == MACH_TYPE_KULUN)
+#else
+# define machine_is_kulun()    (0)
+#endif
+
+#ifdef CONFIG_MACH_SNAPPER
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SNAPPER
+# endif
+# define machine_is_snapper()  (machine_arch_type == MACH_TYPE_SNAPPER)
+#else
+# define machine_is_snapper()  (0)
+#endif
+
+#ifdef CONFIG_MACH_OPTIMA
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_OPTIMA
+# endif
+# define machine_is_optima()   (machine_arch_type == MACH_TYPE_OPTIMA)
+#else
+# define machine_is_optima()   (0)
+#endif
+
+#ifdef CONFIG_MACH_DLHSBC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_DLHSBC
+# endif
+# define machine_is_dlhsbc()   (machine_arch_type == MACH_TYPE_DLHSBC)
+#else
+# define machine_is_dlhsbc()   (0)
+#endif
+
+#ifdef CONFIG_MACH_X30
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_X30
+# endif
+# define machine_is_x30()      (machine_arch_type == MACH_TYPE_X30)
+#else
+# define machine_is_x30()      (0)
+#endif
+
+#ifdef CONFIG_MACH_N30
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_N30
+# endif
+# define machine_is_n30()      (machine_arch_type == MACH_TYPE_N30)
+#else
+# define machine_is_n30()      (0)
+#endif
+
+#ifdef CONFIG_MACH_MANGA_KS8695
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MANGA_KS8695
+# endif
+# define machine_is_manga_ks8695()     (machine_arch_type == MACH_TYPE_MANGA_KS8695)
+#else
+# define machine_is_manga_ks8695()     (0)
+#endif
+
+#ifdef CONFIG_MACH_AJAX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_AJAX
+# endif
+# define machine_is_ajax()     (machine_arch_type == MACH_TYPE_AJAX)
+#else
+# define machine_is_ajax()     (0)
+#endif
+
+#ifdef CONFIG_MACH_NEC_MP900
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NEC_MP900
+# endif
+# define machine_is_nec_mp900()        (machine_arch_type == MACH_TYPE_NEC_MP900)
+#else
+# define machine_is_nec_mp900()        (0)
+#endif
+
+#ifdef CONFIG_MACH_VVTK1000
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_VVTK1000
+# endif
+# define machine_is_vvtk1000() (machine_arch_type == MACH_TYPE_VVTK1000)
+#else
+# define machine_is_vvtk1000() (0)
+#endif
+
+#ifdef CONFIG_MACH_KAFA
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_KAFA
+# endif
+# define machine_is_kafa()     (machine_arch_type == MACH_TYPE_KAFA)
+#else
+# define machine_is_kafa()     (0)
+#endif
+
+#ifdef CONFIG_MACH_VVTK3000
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_VVTK3000
+# endif
+# define machine_is_vvtk3000() (machine_arch_type == MACH_TYPE_VVTK3000)
+#else
+# define machine_is_vvtk3000() (0)
+#endif
+
+#ifdef CONFIG_MACH_PIMX1
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_PIMX1
+# endif
+# define machine_is_pimx1()    (machine_arch_type == MACH_TYPE_PIMX1)
+#else
+# define machine_is_pimx1()    (0)
+#endif
+
+#ifdef CONFIG_MACH_OLLIE
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_OLLIE
+# endif
+# define machine_is_ollie()    (machine_arch_type == MACH_TYPE_OLLIE)
+#else
+# define machine_is_ollie()    (0)
+#endif
+
+#ifdef CONFIG_MACH_SKYMAX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SKYMAX
+# endif
+# define machine_is_skymax()   (machine_arch_type == MACH_TYPE_SKYMAX)
+#else
+# define machine_is_skymax()   (0)
+#endif
+
+#ifdef CONFIG_MACH_JAZZ
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_JAZZ
+# endif
+# define machine_is_jazz()     (machine_arch_type == MACH_TYPE_JAZZ)
+#else
+# define machine_is_jazz()     (0)
+#endif
+
+#ifdef CONFIG_MACH_TEL_T3
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TEL_T3
+# endif
+# define machine_is_tel_t3()   (machine_arch_type == MACH_TYPE_TEL_T3)
+#else
+# define machine_is_tel_t3()   (0)
+#endif
+
+#ifdef CONFIG_MACH_AISINO_FCR255
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_AISINO_FCR255
+# endif
+# define machine_is_aisino_fcr255()    (machine_arch_type == MACH_TYPE_AISINO_FCR255)
+#else
+# define machine_is_aisino_fcr255()    (0)
+#endif
+
+#ifdef CONFIG_MACH_BTWEB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_BTWEB
+# endif
+# define machine_is_btweb()    (machine_arch_type == MACH_TYPE_BTWEB)
+#else
+# define machine_is_btweb()    (0)
+#endif
+
+#ifdef CONFIG_MACH_DBG_LH79520
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_DBG_LH79520
+# endif
+# define machine_is_dbg_lh79520()      (machine_arch_type == MACH_TYPE_DBG_LH79520)
+#else
+# define machine_is_dbg_lh79520()      (0)
+#endif
+
+#ifdef CONFIG_MACH_CM41XX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CM41XX
+# endif
+# define machine_is_cm41xx()   (machine_arch_type == MACH_TYPE_CM41XX)
+#else
+# define machine_is_cm41xx()   (0)
+#endif
+
+#ifdef CONFIG_MACH_TS72XX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TS72XX
+# endif
+# define machine_is_ts72xx()   (machine_arch_type == MACH_TYPE_TS72XX)
+#else
+# define machine_is_ts72xx()   (0)
+#endif
+
+#ifdef CONFIG_MACH_NGGPXA
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NGGPXA
+# endif
+# define machine_is_nggpxa()   (machine_arch_type == MACH_TYPE_NGGPXA)
+#else
+# define machine_is_nggpxa()   (0)
+#endif
+
+#ifdef CONFIG_MACH_CSB535
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CSB535
+# endif
+# define machine_is_csb535()   (machine_arch_type == MACH_TYPE_CSB535)
+#else
+# define machine_is_csb535()   (0)
+#endif
+
+#ifdef CONFIG_MACH_CSB536
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CSB536
+# endif
+# define machine_is_csb536()   (machine_arch_type == MACH_TYPE_CSB536)
+#else
+# define machine_is_csb536()   (0)
+#endif
+
+#ifdef CONFIG_MACH_PXA_TRAKPOD
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_PXA_TRAKPOD
+# endif
+# define machine_is_pxa_trakpod()      (machine_arch_type == MACH_TYPE_PXA_TRAKPOD)
+#else
+# define machine_is_pxa_trakpod()      (0)
+#endif
+
+#ifdef CONFIG_MACH_PRAXIS
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_PRAXIS
+# endif
+# define machine_is_praxis()   (machine_arch_type == MACH_TYPE_PRAXIS)
+#else
+# define machine_is_praxis()   (0)
+#endif
+
+#ifdef CONFIG_MACH_LH75411
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_LH75411
+# endif
+# define machine_is_lh75411()  (machine_arch_type == MACH_TYPE_LH75411)
+#else
+# define machine_is_lh75411()  (0)
+#endif
+
+#ifdef CONFIG_MACH_OTOM
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_OTOM
+# endif
+# define machine_is_otom()     (machine_arch_type == MACH_TYPE_OTOM)
+#else
+# define machine_is_otom()     (0)
+#endif
+
+#ifdef CONFIG_MACH_NEXCODER_2440
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NEXCODER_2440
+# endif
+# define machine_is_nexcoder_2440()    (machine_arch_type == MACH_TYPE_NEXCODER_2440)
+#else
+# define machine_is_nexcoder_2440()    (0)
+#endif
+
+#ifdef CONFIG_MACH_LOOX410
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_LOOX410
+# endif
+# define machine_is_loox410()  (machine_arch_type == MACH_TYPE_LOOX410)
+#else
+# define machine_is_loox410()  (0)
+#endif
+
+#ifdef CONFIG_MACH_WESTLAKE
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_WESTLAKE
+# endif
+# define machine_is_westlake() (machine_arch_type == MACH_TYPE_WESTLAKE)
+#else
+# define machine_is_westlake() (0)
+#endif
+
+#ifdef CONFIG_MACH_NSB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NSB
+# endif
+# define machine_is_nsb()      (machine_arch_type == MACH_TYPE_NSB)
+#else
+# define machine_is_nsb()      (0)
+#endif
+
+#ifdef CONFIG_MACH_ESL_SARVA_STN
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ESL_SARVA_STN
+# endif
+# define machine_is_esl_sarva_stn()    (machine_arch_type == MACH_TYPE_ESL_SARVA_STN)
+#else
+# define machine_is_esl_sarva_stn()    (0)
+#endif
+
+#ifdef CONFIG_MACH_ESL_SARVA_TFT
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ESL_SARVA_TFT
+# endif
+# define machine_is_esl_sarva_tft()    (machine_arch_type == MACH_TYPE_ESL_SARVA_TFT)
+#else
+# define machine_is_esl_sarva_tft()    (0)
+#endif
+
+#ifdef CONFIG_MACH_ESL_SARVA_IAD
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ESL_SARVA_IAD
+# endif
+# define machine_is_esl_sarva_iad()    (machine_arch_type == MACH_TYPE_ESL_SARVA_IAD)
+#else
+# define machine_is_esl_sarva_iad()    (0)
+#endif
+
+#ifdef CONFIG_MACH_ESL_SARVA_ACC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ESL_SARVA_ACC
+# endif
+# define machine_is_esl_sarva_acc()    (machine_arch_type == MACH_TYPE_ESL_SARVA_ACC)
+#else
+# define machine_is_esl_sarva_acc()    (0)
+#endif
+
+#ifdef CONFIG_MACH_TYPHOON
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_TYPHOON
+# endif
+# define machine_is_typhoon()  (machine_arch_type == MACH_TYPE_TYPHOON)
+#else
+# define machine_is_typhoon()  (0)
+#endif
+
+#ifdef CONFIG_MACH_CNAV
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CNAV
+# endif
+# define machine_is_cnav()     (machine_arch_type == MACH_TYPE_CNAV)
+#else
+# define machine_is_cnav()     (0)
+#endif
+
+#ifdef CONFIG_MACH_A730
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A730
+# endif
+# define machine_is_a730()     (machine_arch_type == MACH_TYPE_A730)
+#else
+# define machine_is_a730()     (0)
+#endif
+
+#ifdef CONFIG_MACH_NETSTAR
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NETSTAR
+# endif
+# define machine_is_netstar()  (machine_arch_type == MACH_TYPE_NETSTAR)
+#else
+# define machine_is_netstar()  (0)
+#endif
+
+#ifdef CONFIG_MACH_PHASEFALE_SUPERCON
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_PHASEFALE_SUPERCON
+# endif
+# define machine_is_supercon() (machine_arch_type == MACH_TYPE_PHASEFALE_SUPERCON)
+#else
+# define machine_is_supercon() (0)
+#endif
+
+#ifdef CONFIG_MACH_SHIVA1100
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SHIVA1100
+# endif
+# define machine_is_shiva1100()        (machine_arch_type == MACH_TYPE_SHIVA1100)
+#else
+# define machine_is_shiva1100()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ETEXSC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ETEXSC
+# endif
+# define machine_is_etexsc()   (machine_arch_type == MACH_TYPE_ETEXSC)
+#else
+# define machine_is_etexsc()   (0)
+#endif
+
+#ifdef CONFIG_MACH_IXDPG465
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_IXDPG465
+# endif
+# define machine_is_ixdpg465() (machine_arch_type == MACH_TYPE_IXDPG465)
+#else
+# define machine_is_ixdpg465() (0)
+#endif
+
+#ifdef CONFIG_MACH_A9M2410
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A9M2410
+# endif
+# define machine_is_a9m2410()  (machine_arch_type == MACH_TYPE_A9M2410)
+#else
+# define machine_is_a9m2410()  (0)
+#endif
+
+#ifdef CONFIG_MACH_A9M2440
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A9M2440
+# endif
+# define machine_is_a9m2440()  (machine_arch_type == MACH_TYPE_A9M2440)
+#else
+# define machine_is_a9m2440()  (0)
+#endif
+
+#ifdef CONFIG_MACH_A9M9750
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A9M9750
+# endif
+# define machine_is_a9m9750()  (machine_arch_type == MACH_TYPE_A9M9750)
+#else
+# define machine_is_a9m9750()  (0)
+#endif
+
+#ifdef CONFIG_MACH_A9M9360
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_A9M9360
+# endif
+# define machine_is_a9m9360()  (machine_arch_type == MACH_TYPE_A9M9360)
+#else
+# define machine_is_a9m9360()  (0)
+#endif
+
+#ifdef CONFIG_MACH_UNC90
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_UNC90
+# endif
+# define machine_is_unc90()    (machine_arch_type == MACH_TYPE_UNC90)
+#else
+# define machine_is_unc90()    (0)
+#endif
+
+#ifdef CONFIG_MACH_ECO920
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ECO920
+# endif
+# define machine_is_eco920()   (machine_arch_type == MACH_TYPE_ECO920)
+#else
+# define machine_is_eco920()   (0)
+#endif
+
+#ifdef CONFIG_MACH_SATVIEW
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SATVIEW
+# endif
+# define machine_is_satview()  (machine_arch_type == MACH_TYPE_SATVIEW)
+#else
+# define machine_is_satview()  (0)
+#endif
+
+#ifdef CONFIG_MACH_ROADRUNNER
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ROADRUNNER
+# endif
+# define machine_is_roadrunner()       (machine_arch_type == MACH_TYPE_ROADRUNNER)
+#else
+# define machine_is_roadrunner()       (0)
+#endif
+
+#ifdef CONFIG_MACH_AT91RM9200EK
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_AT91RM9200EK
+# endif
+# define machine_is_at91rm9200ek()     (machine_arch_type == MACH_TYPE_AT91RM9200EK)
+#else
+# define machine_is_at91rm9200ek()     (0)
+#endif
+
+#ifdef CONFIG_MACH_GP32
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_GP32
+# endif
+# define machine_is_gp32()     (machine_arch_type == MACH_TYPE_GP32)
+#else
+# define machine_is_gp32()     (0)
+#endif
+
+#ifdef CONFIG_MACH_GEM
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_GEM
+# endif
+# define machine_is_gem()      (machine_arch_type == MACH_TYPE_GEM)
+#else
+# define machine_is_gem()      (0)
+#endif
+
+#ifdef CONFIG_MACH_I858
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_I858
+# endif
+# define machine_is_i858()     (machine_arch_type == MACH_TYPE_I858)
+#else
+# define machine_is_i858()     (0)
+#endif
+
+#ifdef CONFIG_MACH_HX2750
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_HX2750
+# endif
+# define machine_is_hx2750()   (machine_arch_type == MACH_TYPE_HX2750)
+#else
+# define machine_is_hx2750()   (0)
+#endif
+
+#ifdef CONFIG_MACH_ZEUSEVB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ZEUSEVB
+# endif
+# define machine_is_zeusevb()  (machine_arch_type == MACH_TYPE_ZEUSEVB)
+#else
+# define machine_is_zeusevb()  (0)
+#endif
+
+#ifdef CONFIG_MACH_P700
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_P700
+# endif
+# define machine_is_p700()     (machine_arch_type == MACH_TYPE_P700)
+#else
+# define machine_is_p700()     (0)
+#endif
+
+#ifdef CONFIG_MACH_CPE
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CPE
+# endif
+# define machine_is_cpe()      (machine_arch_type == MACH_TYPE_CPE)
+#else
+# define machine_is_cpe()      (0)
+#endif
+
+#ifdef CONFIG_MACH_SPITZ
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_SPITZ
+# endif
+# define machine_is_spitz()    (machine_arch_type == MACH_TYPE_SPITZ)
+#else
+# define machine_is_spitz()    (0)
+#endif
+
+#ifdef CONFIG_MACH_NIMBRA340
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_NIMBRA340
+# endif
+# define machine_is_nimbra340()        (machine_arch_type == MACH_TYPE_NIMBRA340)
+#else
+# define machine_is_nimbra340()        (0)
+#endif
+
+#ifdef CONFIG_MACH_LPC22XX
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_LPC22XX
+# endif
+# define machine_is_lpc22xx()  (machine_arch_type == MACH_TYPE_LPC22XX)
+#else
+# define machine_is_lpc22xx()  (0)
+#endif
+
+#ifdef CONFIG_MACH_COMET3
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_COMET3
+# endif
+# define machine_is_omap_comet3()      (machine_arch_type == MACH_TYPE_COMET3)
+#else
+# define machine_is_omap_comet3()      (0)
+#endif
+
+#ifdef CONFIG_MACH_COMET4
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_COMET4
+# endif
+# define machine_is_omap_comet4()      (machine_arch_type == MACH_TYPE_COMET4)
+#else
+# define machine_is_omap_comet4()      (0)
+#endif
+
+#ifdef CONFIG_MACH_CSB625
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CSB625
+# endif
+# define machine_is_csb625()   (machine_arch_type == MACH_TYPE_CSB625)
+#else
+# define machine_is_csb625()   (0)
+#endif
+
+#ifdef CONFIG_MACH_FORTUNET2
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_FORTUNET2
+# endif
+# define machine_is_fortunet2()        (machine_arch_type == MACH_TYPE_FORTUNET2)
+#else
+# define machine_is_fortunet2()        (0)
+#endif
+
+#ifdef CONFIG_MACH_S5H2200
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_S5H2200
+# endif
+# define machine_is_s5h2200()  (machine_arch_type == MACH_TYPE_S5H2200)
+#else
+# define machine_is_s5h2200()  (0)
+#endif
+
+#ifdef CONFIG_MACH_OPTORM920
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_OPTORM920
+# endif
+# define machine_is_optorm920()        (machine_arch_type == MACH_TYPE_OPTORM920)
+#else
+# define machine_is_optorm920()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ADSBITSYXB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADSBITSYXB
+# endif
+# define machine_is_adsbitsyxb()       (machine_arch_type == MACH_TYPE_ADSBITSYXB)
+#else
+# define machine_is_adsbitsyxb()       (0)
+#endif
+
+#ifdef CONFIG_MACH_ADSSPHERE
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADSSPHERE
+# endif
+# define machine_is_adssphere()        (machine_arch_type == MACH_TYPE_ADSSPHERE)
+#else
+# define machine_is_adssphere()        (0)
+#endif
+
+#ifdef CONFIG_MACH_ADSPORTAL
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_ADSPORTAL
+# endif
+# define machine_is_adsportal()        (machine_arch_type == MACH_TYPE_ADSPORTAL)
+#else
+# define machine_is_adsportal()        (0)
+#endif
+
+#ifdef CONFIG_MACH_LN2410SBC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_LN2410SBC
+# endif
+# define machine_is_ln2410sbc()        (machine_arch_type == MACH_TYPE_LN2410SBC)
+#else
+# define machine_is_ln2410sbc()        (0)
+#endif
+
+#ifdef CONFIG_MACH_CB3RUFC
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_CB3RUFC
+# endif
+# define machine_is_cb3rufc()  (machine_arch_type == MACH_TYPE_CB3RUFC)
+#else
+# define machine_is_cb3rufc()  (0)
+#endif
+
+#ifdef CONFIG_MACH_MP2USB
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type    __machine_arch_type
+# else
+#  define machine_arch_type    MACH_TYPE_MP2USB
+# endif
+# define machine_is_mp2usb()   (machine_arch_type == MACH_TYPE_MP2USB)
+#else
+# define machine_is_mp2usb()   (0)
+#endif
+
 /*
  * These have not yet been registered
  */
index c3b0e4a6ba3cb699416f4c016285da4affeaa9ee..146934cf0cbd887e0e7ce7727bd973dfc26a6d9f 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef _U_BOOT_H_
index 346673228ec61e0bab5de4062f920f2f2681ea13..1e19f8f3d29a8eaf9605ea70ae50c8bffdc8cca9 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef _U_BOOT_H_
index 3a21fd287efcb14abdd2472e60c08dd867ecdc87..7a6a8c1ff1b05de6a76e7a0de22be9741be2b6e1 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef __U_BOOT_H__
@@ -28,7 +35,6 @@
  */
 
 #ifndef __ASSEMBLY__
-#include <linux/types.h>
 
 typedef struct bd_info {
        unsigned long   bi_memstart;    /* start of DRAM memory */
index 4531e724f945d2984191dd1f6b3054c0b11e78a6..e2035bd79c5d283cb336cdd05f00a158610e79db 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef _U_BOOT_H_
index 0de0b4da8a119aa4891d642e46797d021582672d..d1273a4535663f781d5b7780f81fe287c452c9d6 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef _U_BOOT_H_
index 94007dc2ceb4c1be272b680b6192f35ab54f7584..aae4be13c463f89da84b535a244be6cd4889b393 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef _U_BOOT_H_
index b820e4ca819dbfb952d70c8c5797092f8d5842f9..3f299624ab2dc7e12ecccc19b33028ea6edc26eb 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef __ASM_NIOS2_U_BOOT_H_
index 7b6048249c91274fedacc89051ba6ad4b282acf6..3f5bcf63a1f980eb0c5e95e458119f55f5855274 100644 (file)
@@ -39,7 +39,7 @@ extern __inline__ void st_le32(volatile unsigned *addr, const unsigned val)
 #  define __arch_swab16(x) ld_le16(&x)
 #  define __arch_swab32(x) ld_le32(&x)
 #else
-static __inline__ __const__ __u16 ___arch__swab16(__u16 value)
+static __inline__ __attribute__((const)) __u16 ___arch__swab16(__u16 value)
 {
        __u16 result;
 
@@ -49,7 +49,7 @@ static __inline__ __const__ __u16 ___arch__swab16(__u16 value)
        return result;
 }
 
-static __inline__ __const__ __u32 ___arch__swab32(__u32 value)
+static __inline__ __attribute__((const)) __u32 ___arch__swab32(__u32 value)
 {
        __u32 result;
 
index 885663fef2140a076e21d77ae007626d6debf358..a74a3a115bf3ecdebe994cd12ad76765052c3500 100644 (file)
  * downloading RAM microcode.
  */
 #define CPM_DATAONLY_BASE      ((uint)128)
+#define CPM_DP_NOSPACE         ((uint)0x7FFFFFFF)
+#if defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555)
+#define CPM_FCC_SPECIAL_BASE   ((uint)0x00009000)
+#define CPM_DATAONLY_SIZE      ((uint)(8 * 1024) - CPM_DATAONLY_BASE)
+#else  /* MPC8540, MPC8560 */
+#define CPM_FCC_SPECIAL_BASE   ((uint)0x0000B000)
 #define CPM_DATAONLY_SIZE      ((uint)(16 * 1024) - CPM_DATAONLY_BASE)
-#define CPM_DP_NOSPACE         ((uint)0x7fffffff)
-#define CPM_FCC_SPECIAL_BASE   ((uint)0x0000b000)
+#endif
 
 /* The number of pages of host memory we allocate for CPM.  This is
  * done early in kernel initialization to get physically contiguous
index 9681a74b5586fbff7ccf0d6a2699f745c80836de..b73af96464aa1e1ccba43de06bc50014360fe72a 100644 (file)
@@ -62,6 +62,7 @@ typedef       struct  global_data {
        u32 lbiu_clk;
        u32 lclk_clk;
        u32 ddr_clk;
+       u32 pci_clk;
 #endif
 #if defined(CONFIG_MPC5xxx)
        unsigned long   ipb_clk;
index 2a4ac0ff36c94e4c3247f106f5f300893334e4ff..fa9d164e9aaf00f2738259f5601c90d9a11d3d63 100644 (file)
@@ -87,7 +87,7 @@ typedef struct i2c
 #error CFG_I2C_OFFSET is not defined in /include/configs/${BOARD}.h
 #endif
 
-#ifdef CONFIG_MPC8349ADS
+#if defined(CONFIG_MPC8349ADS) || defined(CONFIG_TQM834X)
 /*
  * MPC8349 have two i2c bus
  */
index 5d284d46792d701d30b24b383f5ee853fecde416..6c2c712a268edf14f72eb94c31e7d5c2284574d4 100644 (file)
@@ -28,43 +28,6 @@ typedef struct law8349 {
 #define LAWBAR_BAR         0xFFFFF000
 #define LAWBAR_RES          ~(LAWBAR_BAR)
        u32 ar; /* LBIU local access window attribute register */
-/*
- * This Macro were moved into mmu.h
- */
-#if 0
-/* 0 The local bus local access window n is disabled. 1 The local bus
- * local access window n is enabled and other LBLAWAR0 and LBLAWBAR0 fields
- * combine to identify an address range for this window.
- */
-#define LAWAR_EN           0x80000000
-/* Identifies the size of the window from the starting address. Window
- * size is 2^(SIZE+1) bytes. 000000\96001010Reserved. Window is
- * undefined.
- */
-#define LAWAR_SIZE         0x0000003F
-#define        LAWAR_SIZE_4K   0x0000000B
-#define        LAWAR_SIZE_8K   0x0000000C
-#define        LAWAR_SIZE_16K  0x0000000D
-#define        LAWAR_SIZE_32K  0x0000000E
-#define        LAWAR_SIZE_64K  0x0000000F
-#define        LAWAR_SIZE_128K 0x00000010
-#define        LAWAR_SIZE_256K 0x00000011
-#define        LAWAR_SIZE_512K 0x00000012
-#define        LAWAR_SIZE_1M   0x00000013
-#define        LAWAR_SIZE_2M   0x00000014
-#define        LAWAR_SIZE_4M   0x00000015
-#define        LAWAR_SIZE_8M   0x00000016
-#define        LAWAR_SIZE_16M  0x00000017
-#define        LAWAR_SIZE_32M  0x00000018
-#define        LAWAR_SIZE_64M  0x00000019
-#define        LAWAR_SIZE_128M 0x0000001A
-#define        LAWAR_SIZE_256M 0x0000001B
-#define        LAWAR_SIZE_512M 0x0000001C
-#define        LAWAR_SIZE_1G   0x0000001D
-#define        LAWAR_SIZE_2G   0x0000001E
-#define LAWAR_RES          ~(LAWAR_EN|LAWAR_SIZE)
-#endif
-
 } law8349_t;
 
 /*
@@ -613,9 +576,9 @@ typedef struct gpio8349 {
 typedef struct ddr_cs_bnds{
        u32 csbnds;
 #define CSBNDS_SA 0x00FF0000
-#define CSBNDS_SA_SHIFT   16
+#define CSBNDS_SA_SHIFT    8
 #define CSBNDS_EA 0x000000FF
-#define CSBNDS_EA_SHIFT    0
+#define CSBNDS_EA_SHIFT   24
        u8  res0[4];
 } ddr_cs_bnds_t;
 
@@ -652,6 +615,8 @@ typedef struct ddr8349{
 #define TIMING_CFG1_ACTTOACT_SHIFT    4
 #define TIMING_CFG1_WRTORD   0x00000007
 #define TIMING_CFG1_WRTORD_SHIFT      0
+#define TIMING_CFG1_CASLAT_20 0x00030000  /* CAS latency = 2.0 */
+#define TIMING_CFG1_CASLAT_25 0x00040000  /* CAS latency = 2.5 */
 
        u32 timing_cfg_2;       /**< SDRAM Timing Configuration 2 */
 #define TIMING_CFG2_CPO           0x0F000000
@@ -659,6 +624,7 @@ typedef struct ddr8349{
 #define TIMING_CFG2_ACSM          0x00080000
 #define TIMING_CFG2_WR_DATA_DELAY 0x00001C00
 #define TIMING_CFG2_WR_DATA_DELAY_SHIFT   10
+#define TIMING_CFG2_CPO_DEF       0x00000000  /* default (= CASLAT + 1) */
 
        u32 sdram_cfg;          /**< SDRAM Control Configuration */
 #define SDRAM_CFG_MEM_EN     0x80000000
@@ -672,6 +638,7 @@ typedef struct ddr8349{
 #define SDRAM_CFG_8_BE       0x00040000
 #define SDRAM_CFG_NCAP       0x00020000
 #define SDRAM_CFG_2T_EN      0x00008000
+#define SDRAM_CFG_SDRAM_TYPE_DDR 0x02000000
 
        u8 res2[4];
        u32 sdram_mode;         /**< SDRAM Mode Configuration */
@@ -679,6 +646,25 @@ typedef struct ddr8349{
 #define SDRAM_MODE_ESD_SHIFT   16
 #define SDRAM_MODE_SD  0x0000FFFF
 #define SDRAM_MODE_SD_SHIFT     0
+#define DDR_MODE_EXT_MODEREG    0x4000  /* select extended mode reg */
+#define DDR_MODE_EXT_OPMODE     0x3FF8  /* operating mode, mask */
+#define DDR_MODE_EXT_OP_NORMAL  0x0000  /* normal operation */
+#define DDR_MODE_QFC            0x0004  /* QFC / compatibility, mask */
+#define DDR_MODE_QFC_COMP       0x0000  /* compatible to older SDRAMs */
+#define DDR_MODE_WEAK           0x0002  /* weak drivers */
+#define DDR_MODE_DLL_DIS        0x0001  /* disable DLL */
+#define DDR_MODE_CASLAT         0x0070  /* CAS latency, mask */
+#define DDR_MODE_CASLAT_15      0x0010  /* CAS latency 1.5 */
+#define DDR_MODE_CASLAT_20      0x0020  /* CAS latency 2 */
+#define DDR_MODE_CASLAT_25      0x0060  /* CAS latency 2.5 */
+#define DDR_MODE_CASLAT_30      0x0030  /* CAS latency 3 */
+#define DDR_MODE_BTYPE_SEQ      0x0000  /* sequential burst */
+#define DDR_MODE_BTYPE_ILVD     0x0008  /* interleaved burst */
+#define DDR_MODE_BLEN_2         0x0001  /* burst length 2 */
+#define DDR_MODE_BLEN_4         0x0002  /* burst length 4 */
+#define DDR_REFINT_166MHZ_7US   1302        /* exact value for 7.8125 Âµs */
+#define DDR_BSTOPRE     256     /* use 256 cycles as a starting point */
+#define DDR_MODE_MODEREG        0x0000  /* select mode register */
 
        u8 res3[8];
        u32 sdram_interval;     /**< SDRAM Interval Configuration */
@@ -688,6 +674,9 @@ typedef struct ddr8349{
 #define SDRAM_INTERVAL_BSTOPRE_SHIFT    0
        u8   res9[8];
        u32  sdram_clk_cntl;
+#define DDR_SDRAM_CLK_CNTL_SS_EN               0x80000000
+#define DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05       0x02000000
+
        u8 res4[0xCCC];
        u32 data_err_inject_hi; /**< Memory Data Path Error Injection Mask High */
        u32 data_err_inject_lo; /**< Memory Data Path Error Injection Mask Low */
diff --git a/include/asm-ppc/iopin_8xx.h b/include/asm-ppc/iopin_8xx.h
new file mode 100644 (file)
index 0000000..1946eb2
--- /dev/null
@@ -0,0 +1,395 @@
+/*
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * MPC8xx I/O port pin manipulation functions
+ * Roughly based on iopin_8260.h
+ */
+
+#ifndef _ASM_IOPIN_8XX_H_
+#define _ASM_IOPIN_8XX_H_
+
+#include <linux/types.h>
+#include <asm/8xx_immap.h>
+
+#ifdef __KERNEL__
+
+typedef struct {
+       u_char port:2;  /* port number (A=0, B=1, C=2, D=3) */
+       u_char pin:5;   /* port pin (0-31) */
+       u_char flag:1;  /* for whatever */
+} iopin_t;
+
+#define IOPIN_PORTA    0
+#define IOPIN_PORTB    1
+#define IOPIN_PORTC    2
+#define IOPIN_PORTD    3
+
+extern __inline__ void
+iopin_set_high(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padat;
+               *datp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *datp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdat;
+               *datp |= (1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdat;
+               *datp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddat;
+               *datp |= (1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_low(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padat;
+               *datp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *datp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdat;
+               *datp &= ~(1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdat;
+               *datp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddat;
+               *datp &= ~(1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_high(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padat;
+               return (*datp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *datp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdat;
+               return (*datp >> (31 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdat;
+               return (*datp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddat;
+               return (*datp >> (15 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_low(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padat;
+               return ((*datp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *datp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdat;
+               return ((*datp >> (31 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdat;
+               return ((*datp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *datp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddat;
+               return ((*datp >> (15 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+extern __inline__ void
+iopin_set_out(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padir;
+               *dirp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *dirp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdir;
+               *dirp |= (1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdir;
+               *dirp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddir;
+               *dirp |= (1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_in(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padir;
+               *dirp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *dirp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdir;
+               *dirp &= ~(1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdir;
+               *dirp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddir;
+               *dirp &= ~(1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_out(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padir;
+               return (*dirp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *dirp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdir;
+               return (*dirp >> (31 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdir;
+               return (*dirp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddir;
+               return (*dirp >> (15 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_in(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_padir;
+               return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *dirp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbdir;
+               return ((*dirp >> (31 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcdir;
+               return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *dirp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pddir;
+               return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+extern __inline__ void
+iopin_set_odr(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_ioport.iop_paodr;
+               *odrp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbodr;
+               *odrp |= (1 << (31 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_act(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_ioport.iop_paodr;
+               *odrp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbodr;
+               *odrp &= ~(1 << (31 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_odr(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_ioport.iop_paodr;
+               return (*odrp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbodr;
+               return (*odrp >> (31 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_act(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_ioport.iop_paodr;
+               return ((*odrp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile ushort *odrp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbodr;
+               return ((*odrp >> (31 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+extern __inline__ void
+iopin_set_ded(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_papar;
+               *parp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *parp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbpar;
+               *parp |= (1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcpar;
+               *parp |= (1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pdpar;
+               *parp |= (1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_gen(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_papar;
+               *parp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *parp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbpar;
+               *parp &= ~(1 << (31 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcpar;
+               *parp &= ~(1 << (15 - iopin->pin));
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pdpar;
+               *parp &= ~(1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_ded(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_papar;
+               return (*parp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *parp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbpar;
+               return (*parp >> (31 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcpar;
+               return (*parp >> (15 - iopin->pin)) & 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pdpar;
+               return (*parp >> (15 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_gen(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTA) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_papar;
+               return ((*parp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTB) {
+               volatile uint *parp = &((immap_t *)CFG_IMMR)->im_cpm.cp_pbpar;
+               return ((*parp >> (31 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcpar;
+               return ((*parp >> (15 - iopin->pin)) & 1) ^ 1;
+       } else if (iopin->port == IOPIN_PORTD) {
+               volatile ushort *parp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pdpar;
+               return ((*parp >> (15 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+extern __inline__ void
+iopin_set_opt2(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *sorp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcso;
+               *sorp |= (1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_opt1(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *sorp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcso;
+               *sorp &= ~(1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_opt2(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *sorp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcso;
+               return (*sorp >> (15 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_opt1(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *sorp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcso;
+               return ((*sorp >> (15 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+extern __inline__ void
+iopin_set_falledge(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *intp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcint;
+               *intp |= (1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ void
+iopin_set_anyedge(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *intp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcint;
+               *intp &= ~(1 << (15 - iopin->pin));
+       }
+}
+
+extern __inline__ uint
+iopin_is_falledge(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *intp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcint;
+               return (*intp >> (15 - iopin->pin)) & 1;
+       }
+       return 0;
+}
+
+extern __inline__ uint
+iopin_is_anyedge(iopin_t *iopin)
+{
+       if (iopin->port == IOPIN_PORTC) {
+               volatile ushort *intp = &((immap_t *)CFG_IMMR)->im_ioport.iop_pcint;
+               return ((*intp >> (15 - iopin->pin)) & 1) ^ 1;
+       }
+       return 0;
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* _ASM_IOPIN_8XX_H_ */
index 6b131b6b08a7b8c42fb88a0d92f323fd31f1623e..811378383dfe5dd9ef604308b46174fcd52e9c81 100644 (file)
 #define SPRN_TBHU      0x3CC   /* Time Base High User-mode */
 #define SPRN_TBLO      0x3DD   /* Time Base Low */
 #define SPRN_TBLU      0x3CD   /* Time Base Low User-mode */
-#define SPRN_TBRL      0x10D   /* Time Base Read Lower Register */
-#define SPRN_TBRU      0x10C   /* Time Base Read Upper Register */
-#define SPRN_TBWL      0x11D   /* Time Base Write Lower Register */
-#define SPRN_TBWU      0x11C   /* Time Base Write Upper Register */
+#define SPRN_TBRL      0x10C   /* Time Base Read Lower Register */
+#define SPRN_TBRU      0x10D   /* Time Base Read Upper Register */
+#define SPRN_TBWL      0x11C   /* Time Base Write Lower Register */
+#define SPRN_TBWU      0x11D   /* Time Base Write Upper Register */
 #ifndef CONFIG_BOOKE
 #define SPRN_TCR       0x3DA   /* Timer Control Register */
 #else
 #define PVR_REV(pvr)  (((pvr) >>   0) & 0xFFFF)        /* Revison field */
 
 /*
- * IBM has further subdivided the standard PowerPC 16-bit version and
+ * AMCC has further subdivided the standard PowerPC 16-bit version and
  * revision subfields of the PVR for the PowerPC 403s into the following:
  */
 
 #define PVR_440GP_RB   0x40120440
 #define PVR_440GP_RC   0x40120481
 #define PVR_440EP_RA   0x42221850
-#define PVR_440EP_RB   0x422218D3
+#define PVR_440EP_RB   0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */
+#define PVR_440GR_RA   0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */
 #define PVR_440GX_RA   0x51B21850
 #define PVR_440GX_RB   0x51B21851
 #define PVR_440GX_RC   0x51B21892
+#define PVR_440GX_RF   0x51B21894
 #define PVR_405EP_RB   0x51210950
+#define PVR_440SP_RA   0x53221850
+#define PVR_440SP_RB   0x53221891
 #define PVR_601                0x00010000
 #define PVR_602                0x00050000
 #define PVR_603                0x00030000
 #define _MACH_gemini   0x00000200      /* Synergy Microsystems gemini board */
 #define _MACH_classic  0x00000400      /* RPCG RPX-Classic 8xx board */
 #define _MACH_oak      0x00000800      /* IBM "Oak" 403 eval. board */
-#define _MACH_walnut   0x00001000      /* IBM "Walnut" 405GP eval. board */
+#define _MACH_walnut   0x00001000      /* AMCC "Walnut" 405GP eval. board */
 #define _MACH_8260     0x00002000      /* Generic 8260 */
 #define _MACH_sandpoint 0x00004000     /* Motorola SPS Processor eval board */
 #define _MACH_tqm860   0x00008000      /* TQM860/L */
index 161a29506b1b572c7354b40087132aaf1c4a0c0c..f7aa55f33437635160a36fac765fe352e3174f92 100644 (file)
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef __U_BOOT_H__
@@ -28,7 +35,6 @@
  */
 
 #ifndef __ASSEMBLY__
-#include <linux/types.h>
 
 typedef struct bd_info {
        unsigned long   bi_memstart;    /* start of DRAM memory */
@@ -79,7 +85,7 @@ typedef struct bd_info {
     defined(CONFIG_405EP) || \
     defined(CONFIG_440)
        unsigned char   bi_s_version[4];        /* Version of this structure */
-       unsigned char   bi_r_version[32];       /* Version of the ROM (IBM) */
+       unsigned char   bi_r_version[32];       /* Version of the ROM (AMCC) */
        unsigned int    bi_procfreq;    /* CPU (Internal) Freq, in Hz */
        unsigned int    bi_plb_busfreq; /* PLB Bus speed, in Hz */
        unsigned int    bi_pci_busfreq; /* PCI Bus speed, in Hz */
@@ -109,14 +115,18 @@ typedef struct bd_info {
 #if defined(CONFIG_NX823)
        unsigned char   bi_sernum[8];
 #endif
-#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
-       int             bi_phynum[2];           /* Determines phy mapping */
-       int             bi_phymode[2];          /* Determines phy mode */
-#endif
+#if defined(CONFIG_4xx)
 #if defined(CONFIG_440GX)
        int             bi_phynum[4];           /* Determines phy mapping */
        int             bi_phymode[4];          /* Determines phy mode */
+#elif defined(CONFIG_405EP) || defined(CONFIG_440)
+       int             bi_phynum[2];           /* Determines phy mapping */
+       int             bi_phymode[2];          /* Determines phy mode */
+#else
+       int             bi_phynum[1];           /* Determines phy mapping */
+       int             bi_phymode[1];          /* Determines phy mode */
 #endif
+#endif /* defined(CONFIG_4xx) */
 } bd_t;
 
 #endif /* __ASSEMBLY__ */
index bb0050b55a23a7dc5271b2e053de3249b79f96cc..f799206e42bc735262b36929adfa807541d3e5af 100644 (file)
@@ -52,6 +52,6 @@ void at91rm9200_EmacEnableMDIO(AT91PS_EMAC p_mac);
 void at91rm9200_EmacDisableMDIO(AT91PS_EMAC p_mac);
 UCHAR at91rm9200_EmacReadPhy(AT91PS_EMAC p_mac, unsigned char RegisterAddress, unsigned short *pInput);
 UCHAR at91rm9200_EmacWritePhy(AT91PS_EMAC p_mac, unsigned char RegisterAddress, unsigned short *pOutput);
-void at91rm92000_GetPhyInterface(AT91PS_PhyOps p_phyops);
+void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops);
 
 #endif /* AT91RM9200_ETHERNET */
diff --git a/include/bcm5221.h b/include/bcm5221.h
new file mode 100644 (file)
index 0000000..6fb94aa
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Broadcom BCM5221 Ethernet PHY
+ *
+ * (C) Copyright 2005 REA Elektronik GmbH <www.rea.de>
+ * Anders Larsen <alarsen@rea.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
+ */
+
+#define        BCM5221_BMCR            0       /* Basic Mode Control Register */
+#define BCM5221_BMSR           1       /* Basic Mode Status Register */
+#define BCM5221_PHYID1         2       /* PHY Identifier Register 1 */
+#define BCM5221_PHYID2         3       /* PHY Identifier Register 2 */
+#define BCM5221_ANAR           4       /* Auto-negotiation Advertisement Register  */
+#define BCM5221_ANLPAR         5       /* Auto-negotiation Link Partner Ability Register */
+#define BCM5221_ANER           6       /* Auto-negotiation Expansion Register  */
+#define BCM5221_ACSR           24      /* Auxiliary Control/Status Register */
+#define BCM5221_INTR           26      /* Interrupt Register */
+
+/* --Bit definitions: BCM5221_BMCR */
+#define BCM5221_RESET          (1 << 15)       /* 1= Software Reset; 0=Normal Operation */
+#define BCM5221_LOOPBACK       (1 << 14)       /* 1=loopback Enabled; 0=Normal Operation */
+#define BCM5221_SPEED_SELECT   (1 << 13)       /* 1=100Mbps; 0=10Mbps */
+#define BCM5221_AUTONEG                (1 << 12)
+#define BCM5221_POWER_DOWN     (1 << 11)
+#define BCM5221_ISOLATE                (1 << 10)
+#define BCM5221_RESTART_AUTONEG        (1 << 9)
+#define BCM5221_DUPLEX_MODE    (1 << 8)
+#define BCM5221_COLLISION_TEST (1 << 7)
+
+/*--Bit definitions: BCM5221_BMSR */
+#define BCM5221_100BASE_T4     (1 << 15)
+#define BCM5221_100BASE_TX_FD  (1 << 14)
+#define BCM5221_100BASE_TX_HD  (1 << 13)
+#define BCM5221_10BASE_T_FD    (1 << 12)
+#define BCM5221_10BASE_T_HD    (1 << 11)
+#define BCM5221_MF_PREAMB_SUPPR        (1 << 6)
+#define BCM5221_AUTONEG_COMP   (1 << 5)
+#define BCM5221_REMOTE_FAULT   (1 << 4)
+#define BCM5221_AUTONEG_ABILITY        (1 << 3)
+#define BCM5221_LINK_STATUS    (1 << 2)
+#define BCM5221_JABBER_DETECT  (1 << 1)
+#define BCM5221_EXTEND_CAPAB   (1 << 0)
+
+/*--definitions: BCM5221_PHYID1 */
+#define BCM5221_PHYID1_OUI     0x1018
+#define BCM5221_LSB_MASK       0x3F
+
+/*--Bit definitions: BCM5221_ANAR, BCM5221_ANLPAR */
+#define BCM5221_NP             (1 << 15)
+#define BCM5221_ACK            (1 << 14)
+#define BCM5221_RF             (1 << 13)
+#define BCM5221_FCS            (1 << 10)
+#define BCM5221_T4             (1 << 9)
+#define BCM5221_TX_FDX         (1 << 8)
+#define BCM5221_TX_HDX         (1 << 7)
+#define BCM5221_10_FDX         (1 << 6)
+#define BCM5221_10_HDX         (1 << 5)
+#define BCM5221_AN_IEEE_802_3  0x0001
+
+/*--Bit definitions: BCM5221_ANER */
+#define BCM5221_PDF            (1 << 4)
+#define BCM5221_LP_NP_ABLE     (1 << 3)
+#define BCM5221_NP_ABLE                (1 << 2)
+#define BCM5221_PAGE_RX                (1 << 1)
+#define BCM5221_LP_AN_ABLE     (1 << 0)
+
+/*--Bit definitions: BCM5221_ACSR */
+#define BCM5221_100            (1 << 1)
+#define BCM5221_FDX            (1 << 0)
+
+/*--Bit definitions: BCM5221_INTR */
+#define BCM5221_FDX_LED                (1 << 15)
+#define BCM5221_INTR_ENABLE    (1 << 14)
+#define BCM5221_FDX_MASK       (1 << 11)
+#define BCM5221_SPD_MASK       (1 << 10)
+#define BCM5221_LINK_MASK      (1 << 9)
+#define BCM5221_INTR_MASK      (1 << 8)
+#define BCM5221_FDX_CHG                (1 << 3)
+#define BCM5221_SPD_CHG                (1 << 2)
+#define BCM5221_LINK_CHG       (1 << 1)
+#define BCM5221_INTR_STATUS    (1 << 0)
+
+/******************  function prototypes **********************/
+unsigned int  bcm5221_IsPhyConnected(AT91PS_EMAC p_mac);
+unsigned char bcm5221_GetLinkSpeed(AT91PS_EMAC p_mac);
+unsigned char bcm5221_AutoNegotiate(AT91PS_EMAC p_mac, int *status);
+unsigned char bcm5221_InitPhy(AT91PS_EMAC p_mac);
index 7d626853942f316167bcda7aa67b6f2ce8c586cd..9ee4849611c3cf812027d979ea6b7eba28d2bf58 100644 (file)
@@ -40,7 +40,7 @@
                                                /* crc, base, loop, mtest       */
 #define CFG_CMD_NET            0x00000080ULL   /* bootp, tftpboot, rarpboot    */
 #define CFG_CMD_ENV            0x00000100ULL   /* saveenv                      */
-#define CFG_CMD_KGDB           0x00000200ULL   /* kgdb                         */
+#define CFG_CMD_KGDB           0x0000000000000200ULL   /* kgdb                         */
 #define CFG_CMD_PCMCIA         0x00000400ULL   /* PCMCIA support               */
 #define CFG_CMD_IDE            0x00000800ULL   /* IDE harddisk support         */
 #define CFG_CMD_PCI            0x00001000ULL   /* pciinfo                      */
@@ -91,8 +91,9 @@
 #define CFG_CMD_CDP    0x0200000000000000ULL   /* Cisco Discovery Protocol     */
 #define CFG_CMD_XIMG   0x0400000000000000ULL   /* Load part of Multi Image     */
 #define CFG_CMD_UNIVERSE 0x0800000000000000ULL /* Tundra Universe Support      */
-#define CFG_CMD_EXT2    0x1000000000000000ULL  /* EXT2 Support                 */
+#define CFG_CMD_EXT2   0x1000000000000000ULL   /* EXT2 Support                 */
 #define CFG_CMD_SNTP   0x2000000000000000ULL   /* SNTP support                 */
+#define CFG_CMD_DISPLAY        0x4000000000000000ULL   /* Display support              */
 
 #define CFG_CMD_ALL    0xFFFFFFFFFFFFFFFFULL   /* ALL commands                 */
 
                        CFG_CMD_DATE    | \
                        CFG_CMD_DHCP    | \
                        CFG_CMD_DIAG    | \
+                       CFG_CMD_DISPLAY | \
                        CFG_CMD_DOC     | \
                        CFG_CMD_DTT     | \
                        CFG_CMD_ECHO    | \
index 8536a99c0cb43c5e4156ee15d534b6a9d9288652..d2570a803ea45eb96b924c956e015a3d3f7df65d 100644 (file)
@@ -208,8 +208,8 @@ extern ulong load_addr;             /* Default Load Address */
 /* common/cmd_nvedit.c */
 int    env_init     (void);
 void   env_relocate (void);
-char   *getenv      (uchar *);
-int    getenv_r     (uchar *name, uchar *buf, unsigned len);
+char   *getenv      (char *);
+int    getenv_r     (char *name, char *buf, unsigned len);
 int    saveenv      (void);
 #ifdef CONFIG_PPC              /* ARM version to be fixed! */
 void inline setenv   (char *, char *);
index 8d21b3f183a071d60c718d4b767fa323ab3ce093..821efe5d48b65dd52e8ae600985b562efa8a6225 100644 (file)
  * Cache Configuration
  */
 #define CFG_DCACHE_SIZE                2048    /* For PLX IOP480                       */
-#define CFG_CACHELINE_SIZE     16      /* For IBM 401/403 CPUs                 */
+#define CFG_CACHELINE_SIZE     16      /* For AMCC 401/403 CPUs                */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
 #endif
index c23fcc7a006520abdba46683a6b4587a9a87686b..14d56bfd97d1c8b4ca7eb4a9c93a84fec478e08e 100644 (file)
@@ -55,8 +55,8 @@
 
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"                         /* autoboot command */
 
 #undef CONFIG_BOOTARGS
diff --git a/include/configs/AP1000.h b/include/configs/AP1000.h
new file mode 100644 (file)
index 0000000..ba4b1a2
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * AMIRIX.h: AMIRIX specific config options
+ *
+ * Author : Frank Smith (smith at amirix dot com)
+ *
+ * Derived from : other configuration header files in this tree
+ *
+ * This software may be used and distributed according to the terms of
+ * the GNU General Public License (GPL) version 2, incorporated herein by
+ * reference. Drivers based on or derived from this code fall under the GPL
+ * and must retain the authorship, copyright and this license notice. This
+ * file is not a complete program and may only be used when the entire
+ * program is licensed under the GPL.
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#undef DEBUG
+
+#define CONFIG_405     1               /* This is a PPC405 CPU     */
+#define CONFIG_4xx     1               /* ...member of PPC4xx family   */
+
+#define CONFIG_AP1000  1               /* ...on an AP1000 board    */
+
+#define CONFIG_PCI     1
+
+#define CFG_HUSH_PARSER 1              /* use "hush" command parser    */
+#define CFG_PROMPT             "0> "
+#define CFG_PROMPT_HUSH_PS2    "> "
+
+#define CONFIG_COMMAND_EDIT    1
+#define CONFIG_COMMAND_HISTORY 1
+#define CONFIG_COMPLETE_ADDRESSES 1
+
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_FLASH_USE_BUFFER_WRITE
+
+#ifdef CFG_ENV_IS_IN_NVRAM
+#undef CFG_ENV_IS_IN_FLASH
+#else
+#ifdef CFG_ENV_IS_IN_FLASH
+#undef CFG_ENV_IS_IN_NVRAM
+#endif
+#endif
+
+#define CONFIG_BAUDRATE                57600
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds */
+
+#define CONFIG_BOOTCOMMAND     ""      /* autoboot command */
+
+/* Size (bytes) of interrupt driven serial port buffer.
+ * Set to 0 to use polling instead of interrupts.
+ * Setting to 0 will also disable RTS/CTS handshaking.
+ */
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+
+#define CONFIG_BOOTARGS                "console=ttyS0,57600"
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
+                               CFG_CMD_ASKENV  | \
+                               CFG_CMD_DHCP    | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_MVENV   | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_PING    \
+                              )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled        */
+
+#define CONFIG_SYS_CLK_FREQ    30000000
+
+#define CONFIG_SPD_EEPROM      1       /* use SPD EEPROM for setup    */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory     */
+#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
+/* usually: (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) */
+#define CFG_PBSIZE     (CFG_CBSIZE+4+16)       /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_ALT_MEMTEST                1
+#define CFG_MEMTEST_START      0x00400000      /* memtest works on */
+#define CFG_MEMTEST_END                0x01000000      /* 4 ... 16 MB in DRAM  */
+
+/*
+ * If CFG_EXT_SERIAL_CLOCK, then the UART divisor is 1.
+ * If CFG_405_UART_ERRATA_59, then UART divisor is 31.
+ * Otherwise, UART divisor is determined by CPU Clock and CFG_BASE_BAUD value.
+ * The Linux BASE_BAUD define should match this configuration.
+ *    baseBaud = cpuClock/(uartDivisor*16)
+ * If CFG_405_UART_ERRATA_59 and 200MHz CPU clock,
+ * set Linux BASE_BAUD to 403200.
+ */
+#undef CFG_EXT_SERIAL_CLOCK            /* external serial clock */
+#undef CFG_405_UART_ERRATA_59          /* 405GP/CR Rev. D silicon */
+
+#define CFG_NS16550_CLK                40000000
+#define CFG_DUART_CHAN         0
+#define CFG_NS16550_COM1       (0x4C000000 + 0x1000)
+#define CFG_NS16550_COM2       (0x4C800000 + 0x1000)
+#define CFG_NS16550_REG_SIZE   4
+#define CFG_NS16550            1
+#define CFG_INIT_CHAN1         1
+#define CFG_INIT_CHAN2         0
+
+/* The following table includes the supported baudrates */
+#define CFG_BAUDRATE_TABLE  \
+    {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400}
+
+#define CFG_LOAD_ADDR          0x00200000      /* default load address */
+#define CFG_EXTBDINFO          1               /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000            /* decrementer freq: 1 ms ticks */
+
+/*-----------------------------------------------------------------------
+ * 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         0x20000000
+#define CFG_MONITOR_BASE       TEXT_BASE
+#define CFG_MONITOR_LEN                (192 * 1024)    /* Reserve 196 kB for Monitor   */
+#define CFG_MALLOC_LEN         (128 * 1024)    /* 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
+ */
+#define CFG_FLASH_CFI          1
+#define CFG_PROGFLASH_BASE     CFG_FLASH_BASE
+#define CFG_CONFFLASH_BASE     0x24000000
+
+#define CFG_MAX_FLASH_BANKS    2       /* max number of memory banks       */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)  */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_PROTECTION   1       /* use hardware protection          */
+
+/* BEG ENVIRONNEMENT FLASH */
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_OFFSET         0x00040000 /* Offset of Environment Sector      */
+#define CFG_ENV_SIZE           0x1000  /* Total Size of Environment Sector */
+#define CFG_ENV_SECT_SIZE      0x20000 /* see README - env sector total size   */
+#endif
+/* END ENVIRONNEMENT FLASH */
+/*-----------------------------------------------------------------------
+ * NVRAM organization
+ */
+#define CFG_NVRAM_BASE_ADDR    0xf0000000      /* NVRAM base address   */
+#define CFG_NVRAM_SIZE         0x1ff8          /* NVRAM size   */
+
+#ifdef CFG_ENV_IS_IN_NVRAM
+#define CFG_ENV_SIZE           0x1000          /* Size of Environment vars */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value    */
+#endif
+
+/*
+ * Init Memory Controller:
+ *
+ * BR0/1 and OR0/1 (FLASH)
+ */
+
+#define FLASH_BASE0_PRELIM     CFG_FLASH_BASE  /* FLASH bank #0        */
+#define FLASH_BASE1_PRELIM     0               /* FLASH bank #1        */
+
+/* Configuration Port location */
+#define CONFIG_PORT_ADDR       0xF0000500
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+
+#define CFG_INIT_RAM_ADDR      0x400000  /* inside of SDRAM                     */
+#define CFG_INIT_RAM_END       0x2000  /* End of used area in RAM             */
+#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
+
+/*-----------------------------------------------------------------------
+ * 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 (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
+
+/* JFFS2 stuff */
+
+#define CFG_JFFS2_FIRST_BANK   0
+#define CFG_JFFS2_NUM_BANKS    1
+#define CFG_JFFS2_FIRST_SECTOR 1
+
+#define CONFIG_NET_MULTI
+#define CONFIG_E1000
+
+#define CFG_ETH_DEV_FN         0x0800
+#define CFG_ETH_IOBASE         0x31000000
+#define CFG_ETH_MEMBASE                0x32000000
+
+#endif /* __CONFIG_H */
index 2b389276fa60435e9dfeff97ced34ccefd1920a1..3df99a008b9787e693ac3a02000a6ba55c63cae8 100644 (file)
 
 #undef CONFIG_BOOTARGS
 #define CONFIG_RAMBOOTCOMMAND                                                  \
-       "setenv bootargs root=/dev/ram rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/ram rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm ffc00000 ffca0000"
 #define CONFIG_NFSBOOTCOMMAND                                                  \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm ffc00000"
 #define CONFIG_BOOTCOMMAND CONFIG_RAMBOOTCOMMAND
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_LCD_MEM             CFG_LCD_BIG_MEM
 #define CFG_LCD_REG             CFG_LCD_BIG_REG
 
-#define CFG_LCD_LOGO_MAX_SIZE   (1024*1024)
+#define CFG_VIDEO_LOGO_MAX_SIZE (1 << 20)
 
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in data cache)
index dfa62200e9bc9f1ab5a3b9b517d4251e1eb1dcb8..1cd0280e2178c159d0fc93e36eb1409be30877dd 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 8e3f34f98cebf395e75efa137f5fee8c3268b17b..9841893899adc1d5fa426a65f1d49c44de64c70b 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 9a3acfecd51d80058e4bcd1edd54f94168a728e1..c08b2c39f8854a08f8b6b5260499b77c8afdca45 100644 (file)
@@ -90,6 +90,7 @@
                                CFG_CMD_SNTP    )
 
 #define CONFIG_NET_MULTI
+#define CONFIG_MII
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
index 81c8d59e813cd47b11c65b9ca1acfc79349addcd..46bdfa2ee62c880c53558440dbb299a36343e1f9 100644 (file)
@@ -59,8 +59,8 @@
 #define CONFIG_BOOTCOMMAND                                  \
     "bootp 1000000; "                                       \
     "setenv bootargs root=ramfs console=ttyS00,9600 "       \
-    "ip=$(ipaddr):$(serverip):$(rootpath):$(gatewayip):"    \
-    "$(netmask):$(hostname):eth0:none; "                    \
+    "ip=${ipaddr}:${serverip}:${rootpath}:${gatewayip}:"    \
+    "${netmask}:${hostname}:eth0:none; "                    \
     "bootm"
 
 #define CONFIG_LOADS_ECHO       0       /* echo off for serial download */
index 21bc4410c143f9a46265ae7282f2fc6b142e317c..e0262a8f6748f42c06d27bd3df20a9f9144b4b07 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 776fce5a9867957be993f6f784ef8c42162e42a6..ffe89cb78fc990f3be96dfe3592974d5be7325f6 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 9401db17df8596288c03ea1583d0554b53acf0a4..e8994ffef79439017caab3f14f36d923dfdb2efd 100644 (file)
@@ -59,8 +59,8 @@
 #undef CONFIG_BOOTARGS
 
 #define CONFIG_BOOTCOMMAND      "setenv bootargs " \
-                               "mem=$(mem) " \
-                               "root=/dev/ram rw ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off " \
+                               "mem=${mem} " \
+                               "root=/dev/ram rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off " \
                                "wt_8xx=timeout:3600; " \
                                "bootm"
 
diff --git a/include/configs/CMS700.h b/include/configs/CMS700.h
new file mode 100644 (file)
index 0000000..6025886
--- /dev/null
@@ -0,0 +1,393 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+/*
+ * CMS700.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_405EP           1       /* This is a PPC405 CPU         */
+#define CONFIG_4xx             1       /* ...member of PPC4xx family   */
+#define CONFIG_VOM405          1       /* ...on a VOM405 board         */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1    /* call board_early_init_f()    */
+#define CONFIG_MISC_INIT_R     1       /* call misc_init_r()           */
+
+#define CONFIG_SYS_CLK_FREQ    33330000 /* external frequency to pll   */
+
+#define CONFIG_BAUDRATE                9600
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds     */
+
+#undef CONFIG_BOOTARGS
+#undef  CONFIG_BOOTCOMMAND
+
+#define CONFIG_PREBOOT                  /* enable preboot variable      */
+
+#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_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
+                                CONFIG_BOOTP_DNS | \
+                                CONFIG_BOOTP_DNS2 | \
+                                CONFIG_BOOTP_SEND_HOSTNAME )
+
+#define CONFIG_COMMANDS              ( CONFIG_CMD_DFL  | \
+                               CFG_CMD_DHCP    | \
+                               CFG_CMD_BSP     | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_NAND    | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_DATE    | \
+                               CFG_CMD_MII     | \
+                               CFG_CMD_PING    | \
+                               CFG_CMD_EEPROM  )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+#define CONFIG_SDRAM_BANK0     1       /* init onboard SDRAM bank 0    */
+
+#undef  CONFIG_PRAM                    /* no "protected RAM"           */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
+
+#undef CFG_HUSH_PARSER                 /* use "hush" command parser    */
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2    "> "
+#endif
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_DEVICE_NULLDEV     1       /* include nulldev device       */
+
+#define CFG_CONSOLE_INFO_QUIET 1       /* don't print console @ startup*/
+
+#define CFG_MEMTEST_START      0x0400000       /* memtest works on     */
+#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
+
+#undef CFG_EXT_SERIAL_CLOCK           /* no external serial clock used */
+#define CFG_IGNORE_405_UART_ERRATA_59  /* ignore ppc405gp errata #59   */
+#define CFG_BASE_BAUD      691200
+#define        CONFIG_UART1_CONSOLE            /* define for uart1 as console  */
+
+/* The following table includes the supported baudrates */
+#define CFG_BAUDRATE_TABLE     \
+       { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,     \
+        57600, 115200, 230400, 460800, 921600 }
+
+#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_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+#define CFG_RX_ETH_BUFFER      16      /* use 16 rx buffer on 405 emac */
+
+/*-----------------------------------------------------------------------
+ * RTC stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_RTC_DS1337
+#define CFG_I2C_RTC_ADDR       0x68
+
+/*-----------------------------------------------------------------------
+ * NAND-FLASH stuff
+ *-----------------------------------------------------------------------
+ */
+#define CFG_MAX_NAND_DEVICE    1       /* Max number of NAND devices           */
+#define SECTORSIZE 512
+
+#define ADDR_COLUMN 1
+#define ADDR_PAGE 2
+#define ADDR_COLUMN_PAGE 3
+
+#define NAND_ChipID_UNKNOWN    0x00
+#define NAND_MAX_FLOORS 1
+#define NAND_MAX_CHIPS 1
+
+#define CFG_NAND_CE  (0x80000000 >> 1) /* our CE is GPIO1 */
+#define CFG_NAND_CLE (0x80000000 >> 2) /* our CLE is GPIO2 */
+#define CFG_NAND_ALE (0x80000000 >> 3) /* our ALE is GPIO3 */
+#define CFG_NAND_RDY (0x80000000 >> 4) /* our RDY is GPIO4 */
+
+#define NAND_DISABLE_CE(nand) do { out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND_CE);} while(0)
+#define NAND_ENABLE_CE(nand) do { out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND_CE);} while(0)
+#define NAND_CTL_CLRALE(nandptr) do { out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND_ALE);} while(0)
+#define NAND_CTL_SETALE(nandptr) do { out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND_ALE);} while(0)
+#define NAND_CTL_CLRCLE(nandptr) do { out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND_CLE);} while(0)
+#define NAND_CTL_SETCLE(nandptr) do { out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND_CLE);} while(0)
+#define NAND_WAIT_READY(nand) while (!(in32(GPIO0_IR) & CFG_NAND_RDY))
+
+#define WRITE_NAND_COMMAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)(d); } while(0)
+#define WRITE_NAND_ADDRESS(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)(d); } while(0)
+#define WRITE_NAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)d; } while(0)
+#define READ_NAND(adr) ((volatile unsigned char)(*(volatile __u8 *)(unsigned long)adr))
+
+#define CFG_NAND_SKIP_BAD_DOT_I      1  /* ".i" read skips bad blocks   */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#define PCI_HOST_ADAPTER 0             /* configure as pci adapter     */
+#define PCI_HOST_FORCE 1               /* configure as pci host        */
+#define PCI_HOST_AUTO  2               /* detected via arbiter enable  */
+
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_HOST PCI_HOST_HOST  /* select pci host function     */
+#undef CONFIG_PCI_PNP                  /* do pci plug-and-play         */
+                                       /* resource configuration       */
+
+#undef CONFIG_PCI_SCAN_SHOW            /* print pci devices @ startup  */
+
+#define CFG_PCI_SUBSYS_VENDORID 0x12FE /* PCI Vendor ID: esd gmbh      */
+#define CFG_PCI_SUBSYS_DEVICEID 0x0405 /* PCI Device ID: CPCI-405      */
+#define CFG_PCI_CLASSCODE      0x0b20  /* PCI Class Code: Processor/PPC*/
+#define CFG_PCI_PTM1LA 0x00000000      /* point to sdram               */
+#define CFG_PCI_PTM1MS 0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1PCI 0x00000000     /* Host: use this pci address   */
+#define CFG_PCI_PTM2LA 0xffc00000      /* point to flash               */
+#define CFG_PCI_PTM2MS 0xffc00001      /* 4MB, enable                  */
+#define CFG_PCI_PTM2PCI 0x04000000     /* Host: use this pci address   */
+
+/*
+ * 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 FLASH_BASE0_PRELIM     0xFFC00000      /* FLASH bank #0        */
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   1000    /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_WORD_SIZE    unsigned short  /* flash word size (width)      */
+#define CFG_FLASH_ADDR0                0x5555  /* 1st address for flash config cycles  */
+#define CFG_FLASH_ADDR1                0x2AAA  /* 2nd address for flash config cycles  */
+/*
+ * The following defines are added for buggy IOP480 byte interface.
+ * All other boards should use the standard values (CPCI405 etc.)
+ */
+#define CFG_FLASH_READ0                0x0000  /* 0 is standard                        */
+#define CFG_FLASH_READ1                0x0001  /* 1 is standard                        */
+#define CFG_FLASH_READ2                0x0002  /* 2 is standard                        */
+
+#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)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_FLASH_BASE         0xFFFC0000
+#define CFG_MONITOR_BASE       TEXT_BASE
+#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Monitor   */
+#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
+
+#if (CFG_MONITOR_BASE < FLASH_BASE0_PRELIM)
+# define CFG_RAMBOOT           1
+#else
+# undef CFG_RAMBOOT
+#endif
+
+/*-----------------------------------------------------------------------
+ * Environment Variable setup
+ */
+#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars */
+#define CFG_ENV_OFFSET         0x100   /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x700   /* 2048 bytes may be used for env vars*/
+                                  /* total size of a CAT24WC16 is 2048 bytes */
+
+/*-----------------------------------------------------------------------
+ * I2C EEPROM (CAT24WC16) for environment
+ */
+#define CONFIG_HARD_I2C                        /* I2c with hardware support */
+#define CFG_I2C_SPEED          100000  /* 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
+
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
+#endif
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ */
+#define CFG_PLD_BASE            0xf0000000
+#define CFG_NAND_BASE          0xF4000000  /* NAND FLASH Base Address          */
+
+/* Memory Bank 0 (Flash Bank 0, NOR-FLASH) initialization                      */
+#define CFG_EBC_PB0AP          0x92015480
+#define CFG_EBC_PB0CR          0xFFC5A000  /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 1 (Flash Bank 1, NAND-FLASH) initialization                     */
+#define CFG_EBC_PB1AP          0x92015480
+#define CFG_EBC_PB1CR          0xF4018000  /* BAS=0xF40,BS=1MB,BU=R/W,BW=8bit  */
+
+/* Memory Bank 2 (8 Bit Peripheral: CAN, UART, RTC) initialization             */
+#define CFG_EBC_PB2AP          0x010053C0  /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */
+#define CFG_EBC_PB2CR          0xF0018000  /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit  */
+
+/*-----------------------------------------------------------------------
+ * FPGA stuff
+ */
+#define CFG_FPGA_XC95XL                1           /* using Xilinx XC95XL CPLD      */
+#define CFG_FPGA_MAX_SIZE      32*1024     /* 32kByte is enough for CPLD    */
+
+/* FPGA program pin configuration */
+#define CFG_FPGA_PRG           0x04000000  /* JTAG TMS pin (ppc output)     */
+#define CFG_FPGA_CLK           0x02000000  /* JTAG TCK pin (ppc output)     */
+#define CFG_FPGA_DATA          0x01000000  /* JTAG TDO->TDI data pin (ppc output) */
+#define CFG_FPGA_INIT          0x00010000  /* unused (ppc input)            */
+#define CFG_FPGA_DONE          0x00008000  /* JTAG TDI->TDO pin (ppc input) */
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in data cache)
+ */
+/* use on chip memory ( OCM ) for temperary stack until sdram is tested */
+#define CFG_TEMP_STACK_OCM       1
+
+/* On Chip Memory location */
+#define CFG_OCM_DATA_ADDR      0xF8000000
+#define CFG_OCM_DATA_SIZE      0x1000
+#define CFG_INIT_RAM_ADDR      CFG_OCM_DATA_ADDR /* inside of SDRAM            */
+#define CFG_INIT_RAM_END       CFG_OCM_DATA_SIZE /* End of used area in RAM    */
+
+#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
+
+/*-----------------------------------------------------------------------
+ * Definitions for GPIO setup (PPC405EP specific)
+ *
+ * GPIO0[0]    - External Bus Controller BLAST output
+ * GPIO0[1-9]  - Instruction trace outputs -> GPIO
+ * GPIO0[10-13] - External Bus Controller CS_1 - CS_4 outputs
+ * GPIO0[14-16] - External Bus Controller ABUS3-ABUS5 outputs -> GPIO
+ * 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
+ */
+/* GPIO Input:         OSR=00, ISR=00, TSR=00, TCR=0 */
+/* GPIO Output:                OSR=00, ISR=00, TSR=00, TCR=1 */
+/* Alt. Funtion Input: OSR=00, ISR=01, TSR=00, TCR=0 */
+/* Alt. Funtion Output: OSR=01, ISR=00, TSR=00, TCR=1 */
+#define CFG_GPIO0_OSRH         0x40000500  /*  0 ... 15 */
+#define CFG_GPIO0_OSRL         0x00000110  /* 16 ... 31 */
+#define CFG_GPIO0_ISR1H                0x00000000  /*  0 ... 15 */
+#define CFG_GPIO0_ISR1L                0x14000045  /* 16 ... 31 */
+#define CFG_GPIO0_TSRH         0x00000000  /*  0 ... 15 */
+#define CFG_GPIO0_TSRL         0x00000000  /* 16 ... 31 */
+#define CFG_GPIO0_TCR          0xF7FE0014  /*  0 ... 31 */
+
+#define CFG_EEPROM_WP          (0x80000000 >> 8)    /* GPIO8 */
+#define CFG_PLD_RESET          (0x80000000 >> 12)   /* GPIO12 */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+/*
+ * Default speed selection (cpu_plb_opb_ebc) in mhz.
+ * This value will be set if iic boot eprom is disabled.
+ */
+#if 0
+#define PLLMR0_DEFAULT  PLLMR0_266_133_66_33
+#define PLLMR1_DEFAULT  PLLMR1_266_133_66_33
+#endif
+#if 0
+#define PLLMR0_DEFAULT  PLLMR0_200_100_50_33
+#define PLLMR1_DEFAULT  PLLMR1_200_100_50_33
+#endif
+#if 1
+#define PLLMR0_DEFAULT  PLLMR0_133_66_66_33
+#define PLLMR1_DEFAULT  PLLMR1_133_66_66_33
+#endif
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/CPCI2DP.h b/include/configs/CPCI2DP.h
new file mode 100644 (file)
index 0000000..56fd9a6
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_405GP           1       /* This is a PPC405 CPU         */
+#define CONFIG_4xx             1       /* ...member of PPC4xx family   */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1    /* call board_early_init_f()    */
+
+#define CONFIG_SYS_CLK_FREQ    33330000 /* external frequency to pll   */
+
+#define CONFIG_BAUDRATE                9600
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds     */
+
+#undef CONFIG_BOOTARGS
+#undef CONFIG_BOOTCOMMAND
+
+#define CONFIG_PREBOOT                  /* enable preboot variable      */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                0       /* PHY address                  */
+
+#define CONFIG_COMMANDS              ( (CONFIG_CMD_DFL & ~CFG_CMD_NET) | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_BSP     | \
+                               CFG_CMD_EEPROM  )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+#define CONFIG_SDRAM_BANK0     1       /* init onboard SDRAM bank 0    */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
+
+#undef CFG_HUSH_PARSER                 /* use "hush" command parser    */
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2    "> "
+#endif
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CBSIZE     1024            /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE     256             /* Console I/O Buffer Size      */
+#endif
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_DEVICE_NULLDEV     1       /* include nulldev device       */
+
+#define CFG_CONSOLE_INFO_QUIET 1       /* don't print console @ startup*/
+
+#define CONFIG_AUTO_COMPLETE   1       /* add autocompletion support   */
+
+#define CFG_MEMTEST_START      0x0400000       /* memtest works on     */
+#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
+
+#undef CFG_EXT_SERIAL_CLOCK           /* no external serial clock used */
+#define CFG_IGNORE_405_UART_ERRATA_59  /* ignore ppc405gp errata #59   */
+#define CFG_BASE_BAUD      691200
+#define CONFIG_UART1_CONSOLE            /* define for uart1 as console  */
+
+/* The following table includes the supported baudrates */
+#define CFG_BAUDRATE_TABLE     \
+       { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,     \
+        57600, 115200, 230400, 460800, 921600 }
+
+#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_LOOPW            1       /* enable loopw command         */
+
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+#define CFG_RX_ETH_BUFFER      16      /* use 16 rx buffer on 405 emac */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#define PCI_HOST_ADAPTER 0              /* configure as pci adapter     */
+#define PCI_HOST_FORCE  1               /* configure as pci host        */
+#define PCI_HOST_AUTO   2               /* detected via arbiter enable  */
+
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_HOST        PCI_HOST_AUTO   /* 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_CONFIG_HOST_BRIDGE 1 /* don't skip host bridge config*/
+
+#define CONFIG_PCI_BOOTDELAY    0       /* enable pci bootdelay variable*/
+
+#define CFG_PCI_SUBSYS_VENDORID 0x12FE  /* PCI Vendor ID: esd gmbh      */
+#define CFG_PCI_SUBSYS_DEVICEID 0x040b  /* PCI Device ID: CPCI-2DP      */
+#define CFG_PCI_CLASSCODE       0x0280 /* PCI Class Code: Network/Other*/
+
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
+#define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
+#define CFG_PCI_PTM2LA 0xef000000      /* point to internal regs + PB0/1 */
+#define CFG_PCI_PTM2MS  0xff000001      /* 16MB, enable                  */
+#define CFG_PCI_PTM2PCI 0x00000000      /* Host: use this pci address   */
+
+/*-----------------------------------------------------------------------
+ * 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         0xFFFC0000
+#define CFG_MONITOR_BASE       CFG_FLASH_BASE
+#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Monitor   */
+#define CFG_MALLOC_LEN         (128 * 1024)    /* 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
+ */
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#define CFG_FLASH_WORD_SIZE    unsigned short  /* flash word size (width)      */
+#define CFG_FLASH_ADDR0                0x5555  /* 1st address for flash config cycles  */
+#define CFG_FLASH_ADDR1                0x2AAA  /* 2nd address for flash config cycles  */
+
+#define CFG_FLASH_READ0                0x0000  /* 0 is standard                        */
+#define CFG_FLASH_READ1                0x0001  /* 1 is standard                        */
+#define CFG_FLASH_READ2                0x0002  /* 2 is standard                        */
+
+#define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+
+#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars */
+#define CFG_ENV_OFFSET         0x000   /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x400   /* 1024 bytes may be used for env vars */
+
+/*-----------------------------------------------------------------------
+ * 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
+
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
+#endif
+
+/*
+ * Init Memory Controller:
+ *
+ * BR0/1 and OR0/1 (FLASH)
+ */
+#define FLASH_BASE0_PRELIM     0xFFE00000      /* FLASH bank #0        */
+#define FLASH_BASE1_PRELIM     0               /* FLASH bank #1        */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ */
+
+/* Memory Bank 0 (Flash Bank 0) initialization                                 */
+#define CFG_EBC_PB0AP          0x92015480
+#define CFG_EBC_PB0CR          0xFFC5A000  /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 2 (PB0) initialization                                  */
+#define CFG_EBC_PB2AP          0x03004580  /* TWT=6,WBN=1,TH=2,RE=1,SOR=1 */
+#define CFG_EBC_PB2CR          0xEF018000  /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit  */
+
+/* Memory Bank 3 (PB1) initialization                          */
+#define CFG_EBC_PB3AP          0x03004580  /* TWT=6,WBN=1,TH=2,RE=1,SOR=1 */
+#define CFG_EBC_PB3CR          0xEF118000  /* BAS=0xF01,BS=1MB,BU=R/W,BW=8bit */
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in data cache)
+ */
+#define CFG_INIT_DCACHE_CS     7       /* use cs # 7 for data cache memory    */
+
+#define CFG_INIT_RAM_ADDR      0x40000000  /* use data cache                  */
+#define CFG_INIT_RAM_END       0x2000  /* End of used area in RAM             */
+#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
+
+/*-----------------------------------------------------------------------
+ * GPIO definitions
+ */
+#define CFG_EEPROM_WP          (0x80000000 >> 13)   /* GPIO13 */
+#define CFG_SELF_RST           (0x80000000 >> 14)   /* GPIO14 */
+#define CFG_PB_LED             (0x80000000 >> 16)   /* GPIO16 */
+#define CFG_INTA_FAKE          (0x80000000 >> 23)   /* GPIO23 */
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+#endif /* __CONFIG_H */
index b159182eb5b6a803d16ec97049f868f690cce9ae..efc3adaece2121d0a71fbf557b75b5597ee2e81d 100644 (file)
 #define CFG_PCI_SUBSYS_DEVICEID 0x0405  /* PCI Device ID: CPCI-405      */
 #define CFG_PCI_SUBSYS_DEVICEID2 0x0406 /* PCI Device ID: CPCI-405-A    */
 #define CFG_PCI_CLASSCODE       0x0b20  /* PCI Class Code: Processor/PPC*/
-#define CFG_PCI_PTM1LA  0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS  0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
 #define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
 #define CFG_PCI_PTM2LA  0xffc00000      /* point to flash               */
 #define CFG_PCI_PTM2MS  0xffc00001      /* 4MB, enable                  */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index d1498eed3c4bc6619b5d0be030d233fda3386a8e..1347f2afcaee28369df823bf805c2fc13f663837 100644 (file)
 #define CFG_PCI_SUBSYS_DEVICEID 0x0405  /* PCI Device ID: CPCI-405      */
 #define CFG_PCI_SUBSYS_DEVICEID2 0x0406 /* PCI Device ID: CPCI-405-A    */
 #define CFG_PCI_CLASSCODE       0x0b20  /* PCI Class Code: Processor/PPC*/
-#define CFG_PCI_PTM1LA  0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS  0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
 #define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
 #define CFG_PCI_PTM2LA  0xffc00000      /* point to flash               */
 #define CFG_PCI_PTM2MS  0xffc00001      /* 4MB, enable                  */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 29bd3da9883bc3e836228d3f656f4fb1bc71a9c1..9d52815092fa5b7cd2cdbb6faa210fde80f5d74d 100644 (file)
 #define CFG_PCI_SUBSYS_DEVICEID 0x0405 /* PCI Device ID: CPCI-405      */
 #define CFG_PCI_SUBSYS_DEVICEID2 0x0406 /* PCI Device ID: CPCI-405-A   */
 #define CFG_PCI_CLASSCODE      0x0b20  /* PCI Class Code: Processor/PPC*/
-#define CFG_PCI_PTM1LA 0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS 0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
 #define CFG_PCI_PTM1PCI 0x00000000     /* Host: use this pci address   */
 #define CFG_PCI_PTM2LA 0xffc00000      /* point to flash               */
 #define CFG_PCI_PTM2MS 0xffc00001      /* 4MB, enable                  */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 6673073c001c64b3072ef9c5f9b22cfcde9e128f..946a0fd194583b396c78c841b71b4bc505b2d003 100644 (file)
 #define CFG_PCI_SUBSYS_DEVICEID 0x0405  /* PCI Device ID: CPCI-405      */
 #define CFG_PCI_SUBSYS_DEVICEID2 0x0406 /* PCI Device ID: CPCI-405-A    */
 #define CFG_PCI_CLASSCODE       0x0b20  /* PCI Class Code: Processor/PPC*/
-#define CFG_PCI_PTM1LA  0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS  0xfc000001      /* 64MB, enable hard-wired to 1 */
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
 #define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
 #define CFG_PCI_PTM2LA  0xffc00000      /* point to flash               */
 #define CFG_PCI_PTM2MS  0xffc00001      /* 4MB, enable                  */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index efb27cc61f8afc01636f32f94937f982c990e190..a5bc773e17706dbaf1b57be9db41a4b428b6464a 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                32768   /* For IBM 440 CPUs                     */
+#define CFG_DCACHE_SIZE                32768   /* For AMCC 440 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 8bfd0ee820f0674463470c6ecfa20725d9927ef8..150e5267f21ae0a0bb37b630e0bf307b3388aaca 100644 (file)
 #define CONFIG_IDENT_STRING    "Marvell 64360 + IBM750FX"
 
 /*#define CFG_HUSH_PARSER*/
-#undef CFG_HUSH_PARSER
+#define CFG_HUSH_PARSER
 
 #define CFG_PROMPT_HUSH_PS2    "> "
 
+#define CFG_AUTO_COMPLETE 1
+
 /* Define which ETH port will be used for connecting the network */
 #define CFG_ETH_PORT           ETH_0
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
+#define CONFIG_USE_CPCIDVI
+
+#ifdef  CONFIG_USE_CPCIDVI
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_CT69000
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_I8042_KBD
+#define CFG_ISA_IO 0
+#endif
+
 /*
  * Miscellaneous configurable options
  */
 #define CFG_PCI1_IO_SPACE      (CFG_PCI1_IO_BASE)
 #define CFG_PCI1_IO_SPACE_PCI  0x00000000
 
+#define CFG_ISA_IO_BASE_ADDRESS (CFG_PCI0_IO_BASE)
+
 #if defined (CONFIG_750CX)
 #define CFG_PCI_IDSEL 0x0
 #else
index ae54683b9868c5c22bde348112bffe93b620208c..93d49f3862d0ed61eebef32734b4c2de82593e61 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 09185b1dbbc7388e7b0a35b8ef997dfee576d8e2..16a9ea5dd710db9aae16ea1bf2ceeff1d0f26866 100644 (file)
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 /*-----------------------------------------------------------------------
index c50870fedca06cf3cfbce78e51a60fa8b09fbaa4..a23d7e50b7bda3f2b64523ac223a08ec8a522291 100644 (file)
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 /*-----------------------------------------------------------------------
index 5ff9b9ecfc66df2d841e6646087b079cc6eb27e7..997e1baa9a767a2c35c40e52b350cfc22c0e5128 100644 (file)
  * Cache Configuration
  */
 #define CFG_DCACHE_SIZE                2048    /* For PLX IOP480                       */
-#define CFG_CACHELINE_SIZE     16      /* For IBM 401/403 CPUs                 */
+#define CFG_CACHELINE_SIZE     16      /* For AMCC 401/403 CPUs                */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    4       /* log base 2 of the above value        */
 #endif
index e2b4b1da62974123ff453b09126c024579cbddef..bd7aff12cc189aff61116c3d2c6523397a61355f 100644 (file)
@@ -174,8 +174,8 @@ if we use PCI it has its own MAC addr */
 /* ronen - autoboot using tftp */
 #if (CONFIG_BOOTDELAY >= 0)
 #define CONFIG_BOOTCOMMAND     "tftpboot 0x400000 uImage;\
- setenv bootargs $(bootargs) $(bootargs_root) nfsroot=$(serverip):$(rootpath) \
- ip=$(ipaddr):$(serverip)$(bootargs_end);  bootm 0x400000; "
+ setenv bootargs ${bootargs} ${bootargs_root} nfsroot=${serverip}:${rootpath} \
+ ip=${ipaddr}:${serverip}${bootargs_end};  bootm 0x400000; "
 
 #define CONFIG_BOOTARGS "console=ttyS0,115200"
 
@@ -190,8 +190,8 @@ cp.b 100000 FFF00000 0x40000;protect on 1:0-7;\0" \
       "bootargs_root=root=/dev/nfs rw\0" \
       "bootargs_end=:::DB64360:eth0:none \0"\
       "ethprime=mv_enet0\0"\
-      "standalone=fsload 0x400000 uImage;setenv bootargs $(bootargs) root=/dev/mtdblock/0 rw \
-ip=$(ipaddr):$(serverip)$(bootargs_end); bootm 0x400000;\0"
+      "standalone=fsload 0x400000 uImage;setenv bootargs ${bootargs} root=/dev/mtdblock/0 rw \
+ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000;\0"
 
 /* --------------------------------------------------------------------------------------------------------------- */
 /* New bootcommands for Marvell DB64360 c 2002 Ingo Assmus */
index 5f541bb9a97e63090332c6c33f3c201cd544f80f..4b72e9b9e4022961ecb80466393e506225f37f05 100644 (file)
 /* ronen - autoboot using tftp */
 #if (CONFIG_BOOTDELAY >= 0)
 #define CONFIG_BOOTCOMMAND     "tftpboot 0x400000 uImage;\
- setenv bootargs $(bootargs) $(bootargs_root) nfsroot=$(serverip):$(rootpath) \
- ip=$(ipaddr):$(serverip)$(bootargs_end);  bootm 0x400000; "
+ setenv bootargs ${bootargs} ${bootargs_root} nfsroot=${serverip}:${rootpath} \
+ ip=${ipaddr}:${serverip}${bootargs_end};  bootm 0x400000; "
 
 #define CONFIG_BOOTARGS "console=ttyS0,115200"
 
@@ -128,8 +128,8 @@ cp.b 100000 FFF00000 0x40000;protect on 1:0-7;\0" \
       "bootargs_root=root=/dev/nfs rw\0" \
       "bootargs_end=:::DB64460:eth0:none \0"\
       "ethprime=mv_enet0\0"\
-      "standalone=fsload 0x400000 uImage;setenv bootargs $(bootargs) root=/dev/mtdblock/0 rw \
-ip=$(ipaddr):$(serverip)$(bootargs_end); bootm 0x400000;\0"
+      "standalone=fsload 0x400000 uImage;setenv bootargs ${bootargs} root=/dev/mtdblock/0 rw \
+ip=${ipaddr}:${serverip}${bootargs_end}; bootm 0x400000;\0"
 
 /* --------------------------------------------------------------------------------------------------------------- */
 /* New bootcommands for Marvell DB64460 c 2002 Ingo Assmus */
index 6bebaaa76e97511bd6d331e586ee6be3038df216..2ae794dc26ca1bd11095df0dff8e6959229f9574 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index a2512981fda32e8861ca20bab69901190e3c2d7f..5489a539360c46e544f916734aa4ea484b34f920 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index e51d058047756eecb572ba1e6a4c5ed716ac5b97..2c99b4b16283818dbdbebe72803eb65c2ff8b3cc 100644 (file)
@@ -59,8 +59,8 @@
 #define CONFIG_BOOTCOMMAND                                  \
     "bootp 1000000; "                                       \
     "setenv bootargs root=ramfs console=ttyS00,9600 "       \
-    "ip=$(ipaddr):$(serverip):$(rootpath):$(gatewayip):"    \
-    "$(netmask):$(hostname):eth0:none; "                    \
+    "ip=${ipaddr}:${serverip}:${rootpath}:${gatewayip}:"    \
+    "${netmask}:${hostname}:eth0:none; "                    \
     "bootm"
 
 #define CONFIG_LOADS_ECHO       0       /* echo off for serial download */
index 5bfdc9be1211d7780f8e744aaaac4e26836fe8ea..e73bcec4485fa81a5dcfab40b5c52d17747bc641 100644 (file)
 
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
     "ramargs=setenv bootargs root=/dev/ram rw\0"                       \
-    "rootargs=setenv rootpath /tftp/$(ipaddr)\0"                       \
+    "rootargs=setenv rootpath /tftp/${ipaddr}\0"                       \
     "nfsargs=setenv bootargs root=/dev/nfs rw "                                \
-       "nfsroot=$(serverip):$(rootpath)\0"                             \
-    "addip=setenv bootargs $(bootargs) "                               \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"              \
-       ":$(hostname):eth0:off panic=1\0"                               \
+       "nfsroot=${serverip}:${rootpath}\0"                             \
+    "addip=setenv bootargs ${bootargs} "                               \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"              \
+       ":${hostname}:eth0:off panic=1\0"                               \
     "ramboot=tftp 400000 /home/paugaml/pMulti;"                                \
        "run ramargs;bootm\0"                                           \
     "nfsboot=tftp 400000 /home/paugaml/uImage;"                                \
index 1643dee4c94ee1bd9bc90746cb7573a3bae63a9f..c203aea92458cae11ff3d339ec29f1b401f6599f 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 137b1a71b3006dfe1ef703193d06687a4d88ed75..d55eb7d192ec644aad06c9cbd809ecdfba226c45 100644 (file)
        "setenv bootargs root=/dev/ram rw ramdisk_size=4690 "                   \
        "U-Boot_version=U-Boot-1.0.x-Date "                                     \
        "panic=1 "                                                              \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 #define CONFIG_NFSBOOTCOMMAND                                                  \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(nfsip):$(rootpath) "        \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${nfsip}:${rootpath} "        \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 #define CONFIG_BOOTCOMMAND CONFIG_RAMBOOTCOMMAND
 
index 726ab371e4d174b1a454028456c8819342a59a08..1b562d606354388f87ef9ff841d815f1252c40da 100644 (file)
@@ -96,8 +96,8 @@
 #define CONFIG_BOOTCOMMAND                                                     \
 "bootp ;"                                                                      \
 "setenv bootargs console=tty0 console=ttyS0 "                                  \
-"root=/dev/nfs nfsroot=$(serverip):$(rootpath) "                               \
-"ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):eth0:off ;"      \
+"root=/dev/nfs nfsroot=${serverip}:${rootpath} "                               \
+"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off ;"      \
 "bootm"
 #else
 #define CONFIG_BOOTDELAY       0       /* autoboot disabled            */
index af96c7c70ce1bb921de122bcfe3fc7700e89ebca..db42fd06fe50cb060378500918f301867abe359d 100644 (file)
 
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off\0"                          \
-       "addmisc=setenv bootargs $(bootargs) "                          \
-               "console=ttyS0,$(baudrate) "                            \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off\0"                          \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
                "panic=1\0"                                             \
        "flash_nfs=run nfsargs addip addmisc;"                          \
-               "bootm $(kernel_addr)\0"                                \
+               "bootm ${kernel_addr}\0"                                \
        "flash_self=run ramargs addip addmisc;"                         \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
-       "net_nfs=tftp 200000 $(bootfile);"                              \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};"                              \
                "run nfsargs addip addmisc;bootm\0"                     \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/g2000/pImage\0"                             \
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 0702c2cf6392be00ecd0863ca298939b46ad023d..de8f7ae7112d6f02c19b202fcf83990324ce408d 100644 (file)
@@ -92,8 +92,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND     \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm"
 
 /*
index ef2cb3a85423da5f7768525a725fe4378ab1b5f8..8c01d97fa33fecdde140ba85fbb104bcf03ed385 100644 (file)
@@ -96,8 +96,8 @@
 #define CONFIG_BOOTCOMMAND                                                     \
 "bootp; tftp; "                                                                        \
 "setenv bootargs console=tty0 console=ttyS0 "                                  \
-"root=/dev/nfs nfsroot=$(serverip):$(rootpath) "                               \
-"ip=$(ipaddr):$(serverip):$(gatewayip):$(subnetmask):$(hostname):eth0:off ;"   \
+"root=/dev/nfs nfsroot=${serverip}:${rootpath} "                               \
+"ip=${ipaddr}:${serverip}:${gatewayip}:${subnetmask}:${hostname}:eth0:off ;"   \
 "bootm "
 #else
 #define CONFIG_BOOTDELAY       0       /* autoboot disabled            */
index 828592b05bf311b548fa1eebd8c8c56fd3129e41..131c21555d3e674fefddb0ccf6556611e56e9555 100644 (file)
@@ -2,6 +2,9 @@
  * (C) Copyright 2001-2004
  * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
  *
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
 
 #define CONFIG_PREBOOT         "autoupd"
 
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "pciconfighost=1\0"                                             \
+       ""
+
 #define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
 
 #define CONFIG_MII             1       /* MII PHY management           */
 
 #define CONFIG_PHY_CLK_FREQ    EMAC_STACR_CLK_66MHZ /* 66 MHz OPB clock*/
 
+/*
+ * Video console
+ */
+#define CONFIG_VIDEO                   /* for sm501 video support      */
+
+#ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_SM501
+#if 0
+#define CONFIG_VIDEO_SM501_32BPP
+#else
+#define CONFIG_VIDEO_SM501_16BPP
+#endif
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_CONSOLE_EXTRA_INFO
+#define CONFIG_VIDEO_SW_CURSOR
+#define CONFIG_SPLASH_SCREEN
+#define CFG_CONSOLE_IS_IN_ENV
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_VIDEO_BMP_GZIP          /* gzip compressed bmp images   */
+#define CFG_VIDEO_LOGO_MAX_SIZE        (2 << 20)       /* for decompressed img */
+
+#define ADD_BMP_CMD            CFG_CMD_BMP
+#else
+#define ADD_BMP_CMD            0
+#endif /* CONFIG_VIDEO */
+
 #define CONFIG_COMMANDS              ( CONFIG_CMD_DFL  | \
                                CFG_CMD_DHCP    | \
                                CFG_CMD_PCI     | \
                                CFG_CMD_IRQ     | \
                                CFG_CMD_IDE     | \
                                CFG_CMD_FAT     | \
+                               CFG_CMD_EXT2    | \
                                CFG_CMD_ELF     | \
                                CFG_CMD_NAND    | \
                                CFG_CMD_I2C     | \
+                               CFG_CMD_DATE    | \
                                CFG_CMD_MII     | \
                                CFG_CMD_PING    | \
+                               ADD_BMP_CMD     | \
                                CFG_CMD_EEPROM  )
 
 #define CONFIG_MAC_PARTITION
 
 #define CFG_DEVICE_NULLDEV      1       /* include nulldev device       */
 
-#define CFG_CONSOLE_INFO_QUIET  1       /* don't print console @ startup*/
+#undef  CFG_CONSOLE_INFO_QUIET          /* print console @ startup     */
 
 #define CONFIG_AUTO_COMPLETE   1       /* add autocompletion support   */
 
 
 #define CFG_RX_ETH_BUFFER      16      /* use 16 rx buffer on 405 emac */
 
+/*-----------------------------------------------------------------------
+ * RTC stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_RTC_DS1338
+#define CFG_I2C_RTC_ADDR       0x68
+
 /*-----------------------------------------------------------------------
  * NAND-FLASH stuff
  *-----------------------------------------------------------------------
 #define CFG_FLASH_BASE         0xFFF80000
 #define CFG_MONITOR_BASE       TEXT_BASE
 #define CFG_MONITOR_LEN                (512 * 1024)    /* Reserve 512 kB for Monitor   */
-#define CFG_MALLOC_LEN         (2 * 1024*1024) /* Reserve 2 MB for malloc()    */
+#define CFG_MALLOC_LEN         (4 << 20)       /* Reserve 4 MB for malloc()    */
 
 #if (CFG_MONITOR_BASE < FLASH_BASE0_PRELIM)
 # define CFG_RAMBOOT           1
 #define CFG_I2C_SLAVE          0x7F
 
 #define CFG_I2C_EEPROM_ADDR    0x50    /* EEPROM CAT24WC08             */
+#define CFG_EEPROM_WREN         1
+
 #if 1 /* test-only */
 /* CAT24WC08/16... */
 #define CFG_I2C_EEPROM_ADDR_LEN        1       /* Bytes of address             */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_LCD_SMALL_MEM       0xF1400000  /* Epson S1D13704 Mem Base Address  */
 #define CFG_LCD_SMALL_REG       0xF140FFE0  /* Epson S1D13704 Reg Base Address  */
 
-#define CFG_LCD_LOGO_MAX_SIZE   (1024*1024)
-
 /*-----------------------------------------------------------------------
  * Universal Interrupt Controller (UIC) Setup
  */
 #define CFG_GPIO0_TCR          0xF7FE0017
 
 #define CFG_LCD_ENDIAN         (0x80000000 >> 7)
-#define CFG_TOUCH_RST          (0x80000000 >> 9)
+#define CFG_EEPROM_WP          (0x80000000 >> 8)   /* GPIO8 */
+#define CFG_TOUCH_RST          (0x80000000 >> 9)   /* GPIO9 */
 #define CFG_LCD0_RST           (0x80000000 >> 30)
 #define CFG_LCD1_RST           (0x80000000 >> 31)
 
index 6645b8bab08ab18e25f8305a27f7d6d4fd20b4cd..7cce876924e4f2c66246c34396e7458a4e850504 100644 (file)
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/HMI10/uImage\0"                             \
        "kernel_addr=40040000\0"                                        \
index 0fa52991876d7efe5277941a2e769383d7bf2fda..eb627e881dd50883e826c5e78bebf3da1dfcb8f9 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index fd15b85c226a7472e30338acb332c4a1143aeaf8..35d84aedf8ad35eea743c4ad4d46d0b9beeca14a 100644 (file)
@@ -71,8 +71,8 @@
 #undef CONFIG_BOOTARGS
 /* #define CONFIG_BOOTCOMMAND                                                  \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 */
 
@@ -88,6 +88,7 @@
 
 # undef  CONFIG_SCC1_ENET              /* disable SCC1 ethernet */
 # define CONFIG_FEC_ENET    1  /* use FEC ethernet  */
+# define CONFIG_MII         1
 # define CFG_DISCOVER_PHY   1
 # define CONFIG_FEC_UTOPIA  1
 # define CONFIG_ETHADDR     08:00:06:26:A2:6D
index b0c8ac6b4ea9d84d34e4f0dc5f4ce3bbd07e1730..cd17935893f5e25002f266d3dc491605cbd50f2e 100644 (file)
@@ -73,8 +73,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
@@ -85,6 +85,7 @@
 
 #undef CONFIG_SCC1_ENET                /* disable SCC1 ethernet */
 #define        CONFIG_FEC_ENET         1       /* use FEC ethernet  */
+#define        CONFIG_MII              1
 #if 1
 #define CFG_DISCOVER_PHY       1
 #else
index 729b0486917517ef4650985010fa7c9cf92af24d..aaa44c539893aee2463cb9e98ac33c9e46d81413 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw "                     \
        "console=ttyS0,115200\0"                                        \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off panic=1\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"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/IDS8247/uImage\0"                           \
        "kernel_addr=ff800000\0"                                        \
index aa2243f3a249b1c17118b55720314a509a5e98a5..0e20e5676349be1b2a42c41ad59150c5390d5a53 100644 (file)
 #define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
 
 #define CONFIG_PREBOOT "echo;echo Type \"run flash_nfs\" to mount root filesystem over NFS;echo" \
-"\0load=tftp \"/tftpboot/u-boot.bin\"\0update=protect off 1:0;era 1:0;cp.b 100000 10000000 $(filesize)\0"
+"\0load=tftp \"/tftpboot/u-boot.bin\"\0update=protect off 1:0;era 1:0;cp.b 100000 10000000 ${filesize}\0"
 
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 6a9a05d31ad9181d46396e0d540eae282e4d88c5..afba5c625e8b362dec68eda378006c62fec0a2d2 100644 (file)
@@ -71,6 +71,7 @@
 #define CFG_XLB_PIPELINING     1
 
 #define CONFIG_NET_MULTI       1
+#define CONFIG_MII             1
 #define CONFIG_EEPRO100                1
 #define CFG_RX_ETH_BUFFER      8  /* use 8 rx buffer on eepro100  */
 #define CONFIG_NS8382X         1
@@ -79,6 +80,7 @@
 
 #else  /* MPC5100 */
 
+#define CONFIG_MII             1
 #define ADD_PCI_CMD            0  /* no CFG_CMD_PCI */
 
 #endif
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/MPC5200/uImage\0"                           \
        ""
index 2257ab24e5745c6ac2970c7306c5cd60927aa775..ccd1f19903b40ed3871c9998dfb9ce97515c6055 100644 (file)
 #define CONFIG_PHY_ADDR                1       /* PHY address                  */
 
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
-                               CFG_CMD_PCI     | \
-                               CFG_CMD_IRQ     | \
-                               CFG_CMD_FLASH   | \
-                               CFG_CMD_NET     | \
                                CFG_CMD_DHCP    | \
-                               CFG_CMD_PING    | \
-                               CFG_CMD_MII     | \
                                CFG_CMD_EEPROM  | \
+                               CFG_CMD_ELF     | \
                                CFG_CMD_FAT     | \
-                               CFG_CMD_ELF     )
+                               CFG_CMD_FLASH   | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_MII     | \
+                               CFG_CMD_NET     | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_PING    )
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405GPr CPUs  */
+#define CFG_DCACHE_SIZE                16384   /* For AMCC 405GPr CPUs */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
index 331131aba799db89a0bed2b71f2936a22c8d4fd8..7bbceb01bd49ab1341f2e4ca0c88c907fc713e76 100644 (file)
 #define CONFIG_HAS_ETH1
 #define CONFIG_HAS_ETH2
 #define CONFIG_HAS_ETH3
+#define CONFIG_PHY_RESET      1              /* reset phy upon startup  */
 #define CONFIG_CIS8201_PHY    1                     /* RGMII mode for Cicada   */
 #define CONFIG_CIS8201_SHORT_ETCH 1         /* Use short etch mode     */
 #define CONFIG_PHY_GIGE              1              /* GbE speed/duplex detect */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE              8192           /* For IBM 405 CPUs        */
+#define CFG_DCACHE_SIZE              8192           /* For AMCC 405 CPUs       */
 #define CFG_CACHELINE_SIZE    32
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT   5                     /* log base 2 of the above */
index 34577707bc5433e8158f48b5e6ef3cf2a57fb201..9b950fc5d169ca3083636ac7c8c83e42a9785a99 100644 (file)
  "run addhw; diskboot 200000 2:1; bootm 200000\0"                              \
 "nfs_boot=dhcp; run nfsargs addip addhw; bootm 200000\0"                       \
 "panic_boot=echo No Bootdevice !!! reset\0"                                    \
-"nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)\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\0"                                     \
-"addhw=setenv bootargs $(bootargs) hw=$(hw) key1=$(key1) panic=1\0"            \
+"addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}"      \
+ ":${netmask}:${hostname}:${netdev}:off\0"                                     \
+"addhw=setenv bootargs ${bootargs} hw=${hw} key1=${key1} panic=1\0"            \
 "netdev=eth0\0"                                                                        \
 "contrast=55\0"                                                                        \
 "silent=1\0"                                                                   \
 "load=tftp 200000 bootloader-4k.bitmap;tftp 100000 bootloader-4k.bin\0"                \
-"update=protect off 1:0-7;era 1:0-7;cp.b 100000 40000000 $(filesize);"         \
+"update=protect off 1:0-7;era 1:0-7;cp.b 100000 40000000 ${filesize};"         \
  "cp.b 200000 40050000 14000\0"
 
 #define CONFIG_BOOTCOMMAND  \
 #define CONFIG_RTC_PCF8563             /* use Philips PCF8563 RTC      */
 
 #define CFG_DISCOVER_PHY
+#define CONFIG_MII
 
 #if 0
 #define CONFIG_ETHADDR                  00:0B:64:00:00:00 /* our OUI from IEEE */
index 5bad82496441ca9d505f2a9b3e70efb6f3acdf3e..cd38b0f2c2f4b790d649f53337d8e1fab9bd5a7d 100644 (file)
  usb stop; bootm 200000\0"      \
 "nfs_boot=dhcp;run nfsargs addip addhw;bootm 200000\0"                         \
 "panic_boot=echo No Bootdevice !!! reset\0"                                    \
-"nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)\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\0"                                     \
-"addhw=setenv bootargs $(bootargs) hw=$(hw) key1=$(key1) panic=1\0"            \
+"addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}"      \
+ ":${netmask}:${hostname}:${netdev}:off\0"                                     \
+"addhw=setenv bootargs ${bootargs} hw=${hw} key1=${key1} panic=1\0"            \
 "netdev=eth0\0"                                                                        \
 "silent=1\0"                                                                   \
 "load=tftp 200000 bootloader-4x.bitmap;tftp 100000 bootloader-4x.bin\0"                \
-"update=protect off 1:0-5;era 1:0-5;cp.b 100000 40000000 $(filesize);"         \
+"update=protect off 1:0-5;era 1:0-5;cp.b 100000 40000000 ${filesize};"         \
  "cp.b 200000 40040000 14000\0"
 
 #define CONFIG_BOOTCOMMAND  \
 #define CONFIG_RTC_PCF8563             /* use Philips PCF8563 RTC      */
 
 #define CFG_DISCOVER_PHY
+#define CONFIG_MII
 
 #if 0
 #define CONFIG_ETHADDR                  00:0B:64:80:00:00 /* our OUI from IEEE */
index 933a42c5cef176147db828d0cb467712036d75af..e44f1cc627a7578cc64c2b3a38f93946dd243238 100644 (file)
@@ -86,6 +86,7 @@
 #define CONFIG_CMD_FULL                (CFG_CMD_ALL & ~CFG_CMD_BEDBUG  \
                                             & ~CFG_CMD_BMP     \
                                             & ~CFG_CMD_BSP     \
+                                            & ~CFG_CMD_DISPLAY \
                                             & ~CFG_CMD_DOC     \
                                             & ~CFG_CMD_DTT     \
                                             & ~CFG_CMD_EEPROM  \
index 2b4a33f4ca8d668cc28e1f8420bdb8a53f95001a..b96557148aa03af128ab4083397e34ef763744c5 100644 (file)
 #define CONFIG_HAS_ETH1
 #define CONFIG_HAS_ETH2
 #define CONFIG_HAS_ETH3
+#define CONFIG_PHY_RESET      1              /* reset phy upon startup  */
 #define CONFIG_CIS8201_PHY    1                     /* RGMII mode for Cicada   */
 #define CONFIG_CIS8201_SHORT_ETCH 1         /* Use short etch mode     */
 #define CONFIG_PHY_GIGE              1              /* GbE speed/duplex detect */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE              8192           /* For IBM 405 CPUs        */
+#define CFG_DCACHE_SIZE              8192           /* For AMCC 405 CPUs       */
 #define CFG_CACHELINE_SIZE    32
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT   5                     /* log base 2 of the above */
index cd21c2dbbef7c5c4b5038d862cca00e88c784dcf..53684ca6b57f2ef32f0ea150a64bde54f628f139 100644 (file)
@@ -58,8 +58,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 6c2f17d587be2654310fc77fbe90b673efd1e545..db2147b481a4467a2559847804c37703482dbfc8 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                0x4000  /* For IBM 405GPr CPUs                  */
+#define CFG_DCACHE_SIZE                0x4000  /* For AMCC 405GPr CPUs                 */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 6e54d71e55a5c39ae4bd294c12d45b3151d439cd..d8805ea5a7059b30b9167532cf1960e2e29c90cb 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 9188ae5bbb21474a31f4b04c48cdb859f8b4acb6..6195bca85ba92b517cc4de59d65e2a084753ee8d 100644 (file)
  * Ported to PQ2FADS-ZU and PQ2FADS-VR boards.
  * Ported to MPC8272ADS board.
  *
+ * Copyright (c) 2005 MontaVista Software, Inc.
+ * Vitaly Bordug <vbordug@ru.mvista.com>
+ * Added support for PCI bridge on MPC8272ADS
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
  * Figure out if we are booting low via flash HRCW or high via the BCSR.
  */
 #if (TEXT_BASE != 0xFFF00000)          /* Boot low (flash HRCW) */
-#   define CFG_LOWBOOT          1
+#   define CFG_LOWBOOT         1
 #endif
 
-
 /* ADS flavours */
 #define CFG_8260ADS            1       /* MPC8260ADS */
 #define CFG_8266ADS            2       /* MPC8266ADS */
 #define CFG_MDIO_PIN   0x00002000      /* PC18 */
 #define CFG_MDC_PIN    0x00001000      /* PC19 */
 #else
-#define CFG_MDIO_PIN   0x00400000      /* PC9  */
+#define CFG_MDIO_PIN   0x00400000      /* PC9  */
 #define CFG_MDC_PIN    0x00200000      /* PC10 */
 #endif /* CONFIG_ADSTYPE == CFG_8272ADS */
 
 #define CFG_I2C_SLAVE          0x7F
 
 #if defined(CONFIG_SPD_EEPROM) && !defined(CONFIG_SPD_ADDR)
-#define CONFIG_SPD_ADDR         0x50
+#define CONFIG_SPD_ADDR                0x50
 #endif
 #endif /* CONFIG_ADSTYPE >= CFG_PQ2FADS */
 
+/*PCI*/
+#ifdef CONFIG_MPC8272
+#define CONFIG_PCI
+#define CONFIG_PCI_PNP
+#define CONFIG_PCI_BOOTDELAY 0
+#define CONFIG_PCI_SCAN_SHOW
+#endif
+
 #ifndef CONFIG_SDRAM_PBI
-#define CONFIG_SDRAM_PBI        0 /* By default, use bank-based interleaving */
+#define CONFIG_SDRAM_PBI       0 /* By default, use bank-based interleaving */
 #endif
 
 #ifndef CONFIG_8260_CLKIN
 
 #define CONFIG_BAUDRATE                115200
 
-#define CFG_EXCLUDE            CFG_CMD_BEDBUG | \
+#define CFG_EXCLUDE            CFG_CMD_BEDBUG  | \
                                CFG_CMD_BMP     | \
                                CFG_CMD_BSP     | \
                                CFG_CMD_DATE    | \
+                               CFG_CMD_DISPLAY | \
                                CFG_CMD_DOC     | \
                                CFG_CMD_DTT     | \
-                               CFG_CMD_EEPROM | \
-                               CFG_CMD_ELF    | \
+                               CFG_CMD_EEPROM  | \
+                               CFG_CMD_ELF     | \
                                CFG_CMD_EXT2    | \
-                               CFG_CMD_FAT    | \
+                               CFG_CMD_FAT     | \
                                CFG_CMD_FDC     | \
                                CFG_CMD_FDOS    | \
                                CFG_CMD_HWFLOW  | \
                                CFG_CMD_KGDB    | \
                                CFG_CMD_MMC     | \
                                CFG_CMD_NAND    | \
-                               CFG_CMD_PCI     | \
-                               CFG_CMD_PCMCIA | \
+                               CFG_CMD_PCMCIA  | \
                                CFG_CMD_REISER  | \
                                CFG_CMD_SCSI    | \
                                CFG_CMD_SPI     | \
                                CFG_CMD_VFD     | \
                                CFG_CMD_XIMG
 
-#if CONFIG_ADSTYPE >= CFG_PQ2FADS
+#if CONFIG_ADSTYPE == CFG_8272ADS
+#define CONFIG_COMMANDS                (CFG_CMD_ALL & ~( \
+                                CFG_CMD_SDRAM  | \
+                                CFG_CMD_I2C    | \
+                                CFG_EXCLUDE    ) )
+#elif CONFIG_ADSTYPE >= CFG_PQ2FADS
 #define CONFIG_COMMANDS                (CFG_CMD_ALL & ~( \
                                 CFG_CMD_SDRAM  | \
                                 CFG_CMD_I2C    | \
+                                CFG_CMD_PCI    | \
                                 CFG_EXCLUDE    ) )
 #else
 #define CONFIG_COMMANDS                (CFG_CMD_ALL & ~( \
-                                CFG_EXCLUDE    ) )
+                                CMD_CFG_PCI    | \
+                                CFG_EXCLUDE    ) )
 #endif /* CONFIG_ADSTYPE >= CFG_PQ2FADS */
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #endif
 
 #define CONFIG_BZIP2   /* include support for bzip2 compressed images */
-#undef CONFIG_WATCHDOG /* disable platform specific watchdog */
+#undef CONFIG_WATCHDOG /* disable platform specific watchdog */
 
 /*
  * Miscellaneous configurable options
 
 #define CFG_IMMR               0xF0000000
 #define CFG_BCSR               0xF4500000
+#if CONFIG_ADSTYPE == CFG_8272ADS
+#define CFG_PCI_INT            0xF8200000
+#endif
 #define CFG_SDRAM_BASE         0x00000000
 #define CFG_LSDRAM_BASE                0xFD000000
 
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
-
 #ifdef CFG_LOWBOOT
 /* PQ2FADS flash HRCW = 0x0EB4B645 */
 #define CFG_HRCW_MASTER (   ( HRCW_BPS11 | HRCW_CIP )                      |\
 #  define CFG_ENV_SIZE         0x200
 #endif /* CFG_RAMBOOT */
 
-
 #define CFG_CACHELINE_SIZE     32      /* For MPC8260 CPU */
 #if (CONFIG_COMMANDS & CFG_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_BR1_PRELIM         CFG_BCSR | 0x00001801
 #define CFG_OR1_PRELIM         0xFFFF8010
 
+/*We need to configure chip select to use CPLD PCI IC on MPC8272ADS*/
+
+#if CONFIG_ADSTYPE == CFG_8272ADS
+#define CFG_BR3_PRELIM (CFG_PCI_INT | 0x1801)  /* PCI interrupt controller */
+#define CFG_OR3_PRELIM 0xFFFF8010
+#endif
+
 #define CFG_RMR                        RMR_CSRE
 #define CFG_TMCNTSC            (TMCNTSC_SEC|TMCNTSC_ALR|TMCNTSC_TCF|TMCNTSC_TCE)
 #define CFG_PISCR              (PISCR_PS|PISCR_PTF|PISCR_PTE)
 
 #define CFG_RESET_ADDRESS      0x04400000
 
+#if CONFIG_ADSTYPE == CFG_8272ADS
+
+/* PCI Memory map (if different from default map */
+#define CFG_PCI_SLV_MEM_LOCAL  CFG_SDRAM_BASE          /* Local base */
+#define CFG_PCI_SLV_MEM_BUS            0x00000000              /* PCI base */
+#define CFG_PICMR0_MASK_ATTRIB (PICMR_MASK_512MB | PICMR_ENABLE | \
+                                PICMR_PREFETCH_EN)
+
+/*
+ * These are the windows that allow the CPU to access PCI address space.
+ * All three PCI master windows, which allow the CPU to access PCI
+ * prefetch, non prefetch, and IO space (see below), must all fit within
+ * these windows.
+ */
+
+/*
+ * Master window that allows the CPU to access PCI Memory (prefetch).
+ * This window will be setup with the second set of Outbound ATU registers
+ * in the bridge.
+ */
+
+#define CFG_PCI_MSTR_MEM_LOCAL 0x80000000          /* Local base */
+#define CFG_PCI_MSTR_MEM_BUS   0x80000000          /* PCI base   */
+#define        CFG_CPU_PCI_MEM_START   PCI_MSTR_MEM_LOCAL
+#define CFG_PCI_MSTR_MEM_SIZE  0x20000000          /* 512MB */
+#define CFG_POCMR0_MASK_ATTRIB (POCMR_MASK_512MB | POCMR_ENABLE | POCMR_PREFETCH_EN)
+
+/*
+ * Master window that allows the CPU to access PCI Memory (non-prefetch).
+ * This window will be setup with the second set of Outbound ATU registers
+ * in the bridge.
+ */
+
+#define CFG_PCI_MSTR_MEMIO_LOCAL    0xA0000000          /* Local base */
+#define CFG_PCI_MSTR_MEMIO_BUS      0xA0000000          /* PCI base   */
+#define CFG_CPU_PCI_MEMIO_START     PCI_MSTR_MEMIO_LOCAL
+#define CFG_PCI_MSTR_MEMIO_SIZE     0x20000000          /* 512MB */
+#define CFG_POCMR1_MASK_ATTRIB      (POCMR_MASK_512MB | POCMR_ENABLE)
+
+/*
+ * Master window that allows the CPU to access PCI IO space.
+ * This window will be setup with the first set of Outbound ATU registers
+ * in the bridge.
+ */
+
+#define CFG_PCI_MSTR_IO_LOCAL       0xF6000000          /* Local base */
+#define CFG_PCI_MSTR_IO_BUS         0x00000000          /* PCI base   */
+#define CFG_CPU_PCI_IO_START        PCI_MSTR_IO_LOCAL
+#define CFG_PCI_MSTR_IO_SIZE        0x02000000          /* 64MB */
+#define CFG_POCMR2_MASK_ATTRIB      (POCMR_MASK_32MB | POCMR_ENABLE | POCMR_PCI_IO)
+
+
+/* PCIBR0 - for PCI IO*/
+#define CFG_PCI_MSTR0_LOCAL            CFG_PCI_MSTR_IO_LOCAL           /* Local base */
+#define CFG_PCIMSK0_MASK               ~(CFG_PCI_MSTR_IO_SIZE - 1U)    /* Size of window */
+/* PCIBR1 - prefetch and non-prefetch regions joined together */
+#define CFG_PCI_MSTR1_LOCAL            CFG_PCI_MSTR_MEM_LOCAL
+#define CFG_PCIMSK1_MASK               ~(CFG_PCI_MSTR_MEM_SIZE + CFG_PCI_MSTR_MEMIO_SIZE - 1U)
+
+#endif /* CONFIG_ADSTYPE == CONFIG_8272ADS*/
+
+#if CONFIG_ADSTYPE == CFG_8272ADS
+#define CONFIG_HAS_ETH1
+#endif
+
 #endif /* __CONFIG_H */
index 0a4b04df4bf302b93fd092e01c4b47459a75660e..4953b7053be1fff3e126cf6736a6db6f554de6ea 100644 (file)
  */
 
 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !!                                                                 !!
+   !!                                                                !!
    !!  This configuration requires JP3 to be in position 1-2 to work  !!
-   !!  To make it work for the default, the TEXT_BASE define in       !!
+   !!  To make it work for the default, the TEXT_BASE define in              !!
    !!  board/mpc8266ads/config.mk must be changed from 0xfe000000 to  !!
    !!  0xfff00000                                                    !!
    !!  The CFG_HRCW_MASTER define below must also be changed to match !!
-   !!                                                                 !!
+   !!                                                                !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  */
 
  * Definitions for Serial Presence Detect EEPROM address
  * (to get SDRAM settings)
  */
-#define SPD_EEPROM_ADDRESS      0x50
+#define SPD_EEPROM_ADDRESS     0x50
 
 
 #define CONFIG_8260_CLKIN      66000000        /* in Hz */
 #define CONFIG_BAUDRATE                115200
 
 
-#define CONFIG_COMMANDS       ( CFG_CMD_ALL & ~( \
-                               CFG_CMD_BEDBUG | \
+#define CONFIG_COMMANDS              ( CFG_CMD_ALL & ~( \
+                               CFG_CMD_BEDBUG  | \
                                CFG_CMD_BMP     | \
                                CFG_CMD_BSP     | \
                                CFG_CMD_DATE    | \
-                               CFG_CMD_DHCP   | \
+                               CFG_CMD_DHCP    | \
+                               CFG_CMD_DISPLAY | \
                                CFG_CMD_DOC     | \
                                CFG_CMD_DTT     | \
-                               CFG_CMD_EEPROM | \
-                               CFG_CMD_ELF    | \
+                               CFG_CMD_EEPROM  | \
+                               CFG_CMD_ELF     | \
                                CFG_CMD_EXT2    | \
                                CFG_CMD_FDC     | \
                                CFG_CMD_FDOS    | \
                                CFG_CMD_KGDB    | \
                                CFG_CMD_MMC     | \
                                CFG_CMD_NAND    | \
-                               CFG_CMD_PCMCIA | \
+                               CFG_CMD_PCMCIA  | \
                                CFG_CMD_REISER  | \
                                CFG_CMD_SCSI    | \
                                CFG_CMD_SPI     | \
 /* Define a command string that is automatically executed when no character
  * is read on the console interface withing "Boot Delay" after reset.
  */
-#undef CONFIG_BOOT_ROOT_INITRD         /* Use ram disk for the root file system */
-#define        CONFIG_BOOT_ROOT_NFS            /* Use a NFS mounted root file system */
+#undef CONFIG_BOOT_ROOT_INITRD         /* Use ram disk for the root file system */
+#define CONFIG_BOOT_ROOT_NFS           /* Use a NFS mounted root file system */
 
 #ifdef CONFIG_BOOT_ROOT_INITRD
 #define CONFIG_BOOTCOMMAND \
        "echo;" \
        "bootp;" \
        "setenv bootargs root=/dev/ram0 rw " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_INITRD */
 
        "version;" \
        "echo;" \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_NFS */
 
 
 
 /*-----------------------------------------------------------------------
- * HIDx - Hardware Implementation-dependent Registers                    2-11
+ * HIDx - Hardware Implementation-dependent Registers                   2-11
  *-----------------------------------------------------------------------
  * HID0 also contains cache control - initially enable both caches and
  * invalidate contents, then the final state leaves only the instruction
  *     0x80000000-0x9FFFFFFF   512MB   outbound prefetchable PCI memory window
  *     0xA0000000-0xBFFFFFFF   512MB   outbound non-prefetchable PCI memory window
  *     0xF0000000-0xF001FFFF   128KB   MPC8266 internal memory
- *     0xF4000000-0xF7FFFFFF    64MB   outbound PCI I/O window
+ *     0xF4000000-0xF7FFFFFF    64MB   outbound PCI I/O window
  *     0xF8000000-0xF8007FFF    32KB   BCSR
  *     0xF8100000-0xF8107FFF    32KB   ATM UNI
  *     0xF8200000-0xF8207FFF    32KB   PCI interrupt controller
  * in the bridge.
  */
 
-#define CFG_PCI_MSTR_MEM_LOCAL 0x80000000          /* Local base */
-#define CFG_PCI_MSTR_MEM_BUS   0x80000000          /* PCI base   */
-#define        CFG_CPU_PCI_MEM_START   PCI_MSTR_MEM_LOCAL
-#define CFG_PCI_MSTR_MEM_SIZE  0x20000000          /* 512MB */
+#define CFG_PCI_MSTR_MEM_LOCAL 0x80000000                      /* Local base */
+#define CFG_PCI_MSTR_MEM_BUS   0x80000000                      /* PCI base   */
+#define CFG_CPU_PCI_MEM_START  PCI_MSTR_MEM_LOCAL
+#define CFG_PCI_MSTR_MEM_SIZE  0x20000000                      /* 512MB */
 #define CFG_POCMR0_MASK_ATTRIB (POCMR_MASK_512MB | POCMR_ENABLE | POCMR_PREFETCH_EN)
 
 /*
  * in the bridge.
  */
 
-#define CFG_PCI_MSTR_MEMIO_LOCAL    0xA0000000          /* Local base */
-#define CFG_PCI_MSTR_MEMIO_BUS      0xA0000000          /* PCI base   */
-#define CFG_CPU_PCI_MEMIO_START     PCI_MSTR_MEMIO_LOCAL
-#define CFG_PCI_MSTR_MEMIO_SIZE     0x20000000          /* 512MB */
-#define CFG_POCMR1_MASK_ATTRIB      (POCMR_MASK_512MB | POCMR_ENABLE)
+#define CFG_PCI_MSTR_MEMIO_LOCAL    0xA0000000                 /* Local base */
+#define CFG_PCI_MSTR_MEMIO_BUS     0xA0000000                  /* PCI base   */
+#define CFG_CPU_PCI_MEMIO_START            PCI_MSTR_MEMIO_LOCAL
+#define CFG_PCI_MSTR_MEMIO_SIZE            0x20000000                  /* 512MB */
+#define CFG_POCMR1_MASK_ATTRIB     (POCMR_MASK_512MB | POCMR_ENABLE)
 
 /*
  * Master window that allows the CPU to access PCI IO space.
  * in the bridge.
  */
 
-#define CFG_PCI_MSTR_IO_LOCAL       0xF4000000          /* Local base */
-#define CFG_PCI_MSTR_IO_BUS         0xF4000000          /* PCI base   */
-#define CFG_CPU_PCI_IO_START        PCI_MSTR_IO_LOCAL
-#define CFG_PCI_MSTR_IO_SIZE        0x04000000          /* 64MB */
-#define CFG_POCMR2_MASK_ATTRIB      (POCMR_MASK_64MB | POCMR_ENABLE | POCMR_PCI_IO)
+#define CFG_PCI_MSTR_IO_LOCAL      0xF4000000                  /* Local base */
+#define CFG_PCI_MSTR_IO_BUS        0xF4000000                  /* PCI base   */
+#define CFG_CPU_PCI_IO_START       PCI_MSTR_IO_LOCAL
+#define CFG_PCI_MSTR_IO_SIZE       0x04000000                  /* 64MB */
+#define CFG_POCMR2_MASK_ATTRIB     (POCMR_MASK_64MB | POCMR_ENABLE | POCMR_PCI_IO)
 
 /*
  * JFFS2 partitions
index db878cb1931dcad59dac1efc307c6266cc100904..2d5031b77d30e7fee8faa37cf8c1ec9863e50cc3 100644 (file)
@@ -43,7 +43,9 @@
 
 #define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#undef CONFIG_TSEC_ENET                /* tsec ethernet support */
 #undef  CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
+#define  CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
 #define CONFIG_ENV_OVERWRITE
 #define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
 #define CONFIG_DDR_DLL                 /* possible DLL fix needed */
index 7f0b06a9fd71e49d75c2cada37ceb23009cd0f71..74318e55456f6e8a19f02f295cf66c6ac4c595fc 100644 (file)
@@ -42,4 +42,6 @@
 #define CFG_OR5_PRELIM         0xFFFF8110      /* 64Kbyte address space */
 #define CFG_BR5_PRELIM         (CFG_PHYDEV_ADDR | BR_PS_8 | BR_V)
 
+#define CONFIG_HAS_ETH1
+
 #endif /* __CONFIG_H */
index 32f9e91c3beec7c1e383da158dd65570faf6eed7..88eefa190749693ba2be2bd922bf8168f185c61c 100644 (file)
     "flashboot=setenv bootargs root=/dev/mtdblock5 ro rootfstype=jffs2;run addcons;bootm ffc00000\0"   \
     "safeboot=setenv bootargs root=/dev/mtdblock2 rw rootfstype=cramfs;run addcons;bootm ffc00000\0"   \
     "hdboot=setenv bootargs root=/dev/hda1;run addcons;bootm ffc00000\0"       \
-       "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-                       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off\0"   \
-       "addcons=setenv bootargs $(bootargs) console=ttyS$(console_nr),$(baudrate)N8\0" \
+       "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+                       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0"   \
+       "addcons=setenv bootargs ${bootargs} console=ttyS${console_nr},${baudrate}N8\0" \
     "mv_version=" MV_VERSION "\0"      \
        "bootretry=30\0"
 
index 49bdc45a4a226195c901fa6bd105144c1bc9f9a8..5995918266d0d7fee30a42e3e32c234e89c4b3ec 100644 (file)
@@ -50,8 +50,8 @@
 #define        CONFIG_BOOTARGS         "root=/dev/mtdblock2 rw"
 #define CONFIG_BOOTCOMMAND                                             \
     "bootp; "                                                          \
-    "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-    "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+    "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+    "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
     "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index d24d05f25e1bd12a3cef9cba121306d24118fb8c..371ea17edd231530ec1483a8fb8eda8de11c2edf 100644 (file)
@@ -71,8 +71,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 #define SCL            0x1000          /* PA 3 */
 #define SDA            0x2000          /* PA 2 */
 
-#define PAR            immr->im_ioport.iop_papar
-#define DIR            immr->im_ioport.iop_padir
-#define DAT            immr->im_ioport.iop_padat
-
-#define I2C_INIT       {PAR &= ~(SCL | SDA); DIR |=  SCL;}
-#define I2C_ACTIVE     (DIR |=  SDA)
-#define I2C_TRISTATE   (DIR &= ~SDA)
-#define I2C_READ       ((DAT & SDA) != 0)
-#define I2C_SDA(bit)   if (bit) DAT |=  SDA; \
-                       else DAT &= ~SDA
-#define I2C_SCL(bit)   if (bit) DAT |=  SCL; \
-                       else DAT &= ~SCL
-#define I2C_DELAY      udelay(5)       /* 1/4 I2C clock duration */
+#define __I2C_DIR      immr->im_ioport.iop_padir
+#define __I2C_DAT      immr->im_ioport.iop_padat
+#define __I2C_PAR      immr->im_ioport.iop_papar
+#define        I2C_INIT        { __I2C_PAR &= ~(SDA|SCL);      \
+                         __I2C_DIR |= (SDA|SCL);       }
+#define        I2C_READ        ((__I2C_DAT & SDA) ? 1 : 0)
+#define        I2C_SDA(x)      { if (x) __I2C_DAT |= SDA; else __I2C_DAT &= ~SDA; }
+#define        I2C_SCL(x)      { if (x) __I2C_DAT |= SCL; else __I2C_DAT &= ~SCL; }
+#define        I2C_DELAY       { udelay(5); }
+#define        I2C_ACTIVE      { __I2C_DIR |= SDA; }
+#define        I2C_TRISTATE    { __I2C_DIR &= ~SDA; }
 
 #define CONFIG_RTC_PCF8563
 #define CFG_I2C_RTC_ADDR               0x51
index db86cf382f258f1a070046669459cb5c9e043f94..d994420096b1f8d4573b8da099d0b4ed5736c094 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/NSCU/uImage\0"                              \
        "kernel_addr=40080000\0"                                        \
index 4a629e099705cc9f3ba440388a9136b53fc60dc8..aa9d1ba735a028d73b9adbe9ca41f62f4e212d25 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 4cc67bce2b469e141a1d757399f5ef19102b9beb..2e7c505f99ea45fe019e5904c546eff40ae0b442 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 7d6bbf51d26c7e059396fcc75601aa6b6dcef77c..a933e1b180cf5c8decef3a1a2fe74e3da18c7ff3 100644 (file)
        "netdev=eth0\0"                                                 \
        "hostname=p3g4\0"                                               \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_74xx\0"                                 \
        "bootfile=/tftpboot/p3g4/uImage\0"                              \
        "ramdisk_addr=ff010000\0"                                       \
        "load=tftp 100000 /tftpboot/p3g4/u-boot.bin\0"                  \
        "update=protect off fff00000 fff3ffff;era fff00000 fff3ffff;"   \
-               "cp.b 100000 fff00000 $(filesize);"                     \
+               "cp.b 100000 fff00000 ${filesize};"                     \
                "setenv filesize;saveenv\0"                             \
        "upd=run load;run update\0"                                     \
        ""
index 469d88f2921350d91964edbe687c431d054284a9..9d5c4f4d04e7eac95f133d0ed41760cd77ece19a 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 9ac57151cb0612952cd9b98ff1a36d968f443c35..9668fb0ce2fc919372e0e03ff948eef9ac33a805 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 7ee95df11f8d53e5913b330e8dfd7d973653cd80..54ecfa4c5e31e32c04b91d48c99a0b3930242e51 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 49ae55c6b424fdb9aa7984acd6e499957d7f98bf..e73ad5100c2ea5a7c20b60afc62bfdfe3ce7f20a 100644 (file)
@@ -72,6 +72,7 @@
 #define CONFIG_PCI_IO_SIZE     0x01000000
 
 #define CONFIG_NET_MULTI       1
+#define CONFIG_MII             1
 #define CONFIG_EEPRO100                1
 #define CFG_RX_ETH_BUFFER      8  /* use 8 rx buffer on eepro100  */
 #undef  CONFIG_NS8382X
        "netdev=eth0\0"                                                 \
        "hostname=pm520\0"                                                      \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk30/ppc_82xx\0"                                       \
        "bootfile=/tftpboot/PM520/uImage\0"                             \
        ""
  * Flash configuration (8,16 or 32 MB)
  * TEXT base always at 0xFFF00000
  * ENV_ADDR always at  0xFFF40000
- * FLASH_BASE at 0xFC000000 for 32 MB
+ * FLASH_BASE at 0xFA000000 for 64 MB
+ *               0xFC000000 for 32 MB
  *               0xFD000000 for 16 MB
  *               0xFD800000 for  8 MB
  */
-#define CFG_FLASH_BASE         0xfc000000
-#define CFG_FLASH_SIZE         0x02000000
+#define CFG_FLASH_BASE         0xFA000000
+#define CFG_FLASH_SIZE         0x04000000
 #define CFG_BOOTROM_BASE       0xFFF00000
 #define CFG_BOOTROM_SIZE       0x00080000
 #define CFG_ENV_ADDR           (0xFDF00000 + 0x40000)
  * Flash configuration (8,16 or 32 MB)
  * TEXT base always at 0xFFF00000
  * ENV_ADDR always at  0xFFF40000
- * FLASH_BASE at 0xFE000000 for 32 MB
+ * FLASH_BASE at 0xFC000000 for 64 MB
+ *               0xFE000000 for 32 MB
  *               0xFF000000 for 16 MB
  *               0xFF800000 for  8 MB
  */
-#define CFG_FLASH_BASE         0xfe000000
-#define CFG_FLASH_SIZE         0x02000000
+#define CFG_FLASH_BASE         0xFC000000
+#define CFG_FLASH_SIZE         0x04000000
 #define CFG_ENV_ADDR           (0xFFF00000 + 0x40000)
 #endif
 #define CFG_MAX_FLASH_BANKS    1       /* max num of memory banks      */
 
-#define CFG_MAX_FLASH_SECT     128     /* max num of sects on one chip */
+#define CFG_MAX_FLASH_SECT     256     /* max num of sects on one chip */
 
 #define CFG_FLASH_ERASE_TOUT   240000  /* Flash Erase Timeout (in ms)  */
 #define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (in ms)  */
 #define CFG_CS0_SIZE           CFG_BOOTROM_SIZE
 #define CFG_CS1_START          CFG_FLASH_BASE
 #define CFG_CS1_SIZE           CFG_FLASH_SIZE
-#define CFG_CS1_CFG            0x0004fb00
+#define CFG_CS1_CFG            0x0004FF00
 #else
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#define CFG_BOOTCS_CFG         0x0004fb00
+#define CFG_BOOTCS_CFG         0x0004FF00
 #define CFG_CS0_START          CFG_FLASH_BASE
 #define CFG_CS0_SIZE           CFG_FLASH_SIZE
 #define CFG_CS1_START          CFG_DOC_BASE
index 9ca1e52299d74cc17df05bac05740487b48818cc..6e5e3bbe18cf29334fced893fe9c6db6e10b5ae0 100644 (file)
@@ -48,8 +48,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 /* enable I2C and select the hardware/software driver */
index 7d98df5cac4435b884b710fdcc700399118e5935..982a1f814301a57cbbb27b2937137cb390758e81 100644 (file)
@@ -48,8 +48,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 
 /* enable I2C and select the hardware/software driver */
index 89b5f3635f185d6e4825ad147b109376bcafb68c..da011867717078cd02d61359576724ab3da3f613 100644 (file)
 #define CONFIG_NET_MULTI
 #define CONFIG_PCI_PNP                 /* do pci plug-and-play */
 
-#undef CONFIG_EEPRO100
-#undef CONFIG_TULIP
+#define CONFIG_EEPRO100
+#define        CONFIG_E1000
+#undef CONFIG_TULIP
 
 #if !defined(CONFIG_PCI_PNP)
     #define PCI_ENET0_IOADDR   0xe0000000
     #define  CONFIG_COMMANDS   (CONFIG_CMD_DFL         \
                                | CFG_CMD_EEPROM        \
                                | CFG_CMD_DATE          \
+                               | CFG_CMD_MII           \
                                | CFG_CMD_PCI           \
                                | CFG_CMD_PING          \
                                | CFG_CMD_I2C)
     #define  CONFIG_COMMANDS   (CONFIG_CMD_DFL         \
                                | CFG_CMD_EEPROM        \
                                | CFG_CMD_DATE          \
+                               | CFG_CMD_MII           \
                                | CFG_CMD_PING          \
                                | CFG_CMD_I2C)
   #endif
index 11d6fa767c962208ed52ce6c1cb69f3b58d23abb..6e0bd7f23ec7408bba2bdc33801b4f442a46ccfd 100644 (file)
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
 #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_NETCONSOLE              /* include NetConsole support   */
 
 #define CONFIG_COMMANDS              ( CONFIG_CMD_DFL  | \
                                CFG_CMD_BSP     | \
 #define CONFIG_PCI_BOOTDELAY    0       /* enable pci bootdelay variable*/
 
 #define CFG_PCI_SUBSYS_VENDORID 0x12FE  /* PCI Vendor ID: esd gmbh      */
-#define CFG_PCI_SUBSYS_DEVICEID 0x0408  /* PCI Device ID: PMC-405       */
+#define CFG_PCI_SUBSYS_DEVICEID_NONMONARCH 0x0408  /* PCI Device ID: Non-Monarch */
+#define CFG_PCI_SUBSYS_DEVICEID_MONARCH 0x0409     /* PCI Device ID: Monarch */
+#define CFG_PCI_SUBSYS_DEVICEID pmc405_pci_subsys_deviceid()
+
 #define CFG_PCI_CLASSCODE       0x0b20  /* PCI Class Code: Processor/PPC*/
-#define CFG_PCI_PTM1LA  0x00000000      /* point to sdram               */
-#define CFG_PCI_PTM1MS  0xfc000001      /* 64MB, enable hard-wired to 1 */
+
+#define CFG_PCI_PTM1LA  (bd->bi_memstart) /* point to sdram               */
+#define CFG_PCI_PTM1MS  (~(bd->bi_memsize - 1) | 1) /* memsize, enable hard-wired to 1 */
 #define CFG_PCI_PTM1PCI 0x00000000      /* Host: use this pci address   */
+#if 1
+#define CFG_PCI_PTM2LA 0xef000000      /* point to internal regs       */
+#define CFG_PCI_PTM2MS  0xff000001      /* 16MB, enable                 */
+#define CFG_PCI_PTM2PCI 0x00000000      /* Host: use this pci address   */
+#else /* old mapping */
 #define CFG_PCI_PTM2LA  0xffc00000      /* point to flash               */
 #define CFG_PCI_PTM2MS  0xffc00001      /* 4MB, enable                  */
 #define CFG_PCI_PTM2PCI 0x04000000      /* Host: use this pci address   */
-
+#endif
 /*-----------------------------------------------------------------------
  * Start addresses for the final memory configuration
  * (Set up by the startup code)
 /*-----------------------------------------------------------------------
  * FLASH organization
  */
-#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    2       /* max number of memory banks           */
-#undef CFG_FLASH_PROTECTION            /* don't use hardware protection        */
-#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)     */
 #define CFG_FLASH_BASE         0xFE000000
 #define CFG_FLASH_INCREMENT    0x01000000
 
+#define CFG_FLASH_CFI         1       /* Flash is CFI conformant */
+#define CFG_FLASH_CFI_DRIVER  1       /* Use the common driver */
+#define CFG_FLASH_PROTECTION  1       /* don't use hardware protection        */
+#define CFG_FLASH_USE_BUFFER_WRITE 1  /* use buffered writes (20x faster)     */
+#define CFG_MAX_FLASH_BANKS   2       /* max num of flash banks */
+#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE, CFG_FLASH_BASE + CFG_FLASH_INCREMENT }
+#define CFG_MAX_FLASH_SECT    128     /* max num of sects on one chip */
+
 #define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
 
 /*
 /* No command line, one static partition, whole device */
 #undef CONFIG_JFFS2_CMDLINE
 #define CONFIG_JFFS2_DEV               "nor0"
-#define CONFIG_JFFS2_PART_SIZE         0xFFFFFFFF
-#define CONFIG_JFFS2_PART_OFFSET       0x00000000
+#define CONFIG_JFFS2_PART_SIZE         0x01b00000
+#define CONFIG_JFFS2_PART_OFFSET       0x00400000
 
 /* mtdparts command line support */
 /* Note: fake mtd_id used, no linux mtd map file */
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define FLASH1_BA      0xFE000000          /* FLASH 1 Base Address             */
 #define CAN_BA         0xF0000000          /* CAN Base Address                 */
 #define RTC_BA         0xF0000500          /* RTC Base Address                 */
-#define CF_BA          0xF0100000          /* CompactFlash Base Address        */
+#define NVRAM_BA        0xF0200000          /* NVRAM Base Address               */
 
 /* Memory Bank 0 (Flash Bank 0) initialization                                 */
 #define CFG_EBC_PB0AP  0x92015480
 #define CFG_EBC_PB2AP  0x03000440   /* TWT=5,TH=2,CSN=0,OEN=0,WBN=0,WBF=0      */
 #define CFG_EBC_PB2CR  CAN_BA | 0x18000    /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit  */
 
-/* Memory Bank 3 (CompactFlash IDE, FPGA internal) initialization              */
-#define CFG_EBC_PB3AP  0x010059C0   /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */
-#define CFG_EBC_PB3CR  CF_BA | 0x1A000     /* BAS=0xF01,BS=1MB,BU=R/W,BW=16bit */
+/* Memory Bank 3 -> unused */
+
+/* Memory Bank 4 (NVRAM) initialization                                        */
+#define CFG_EBC_PB4AP  0x03000440   /* TWT=5,TH=2,CSN=0,OEN=0,WBN=0,WBF=0      */
+#define CFG_EBC_PB4CR  NVRAM_BA | 0x18000    /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit        */
 
 /*-----------------------------------------------------------------------
  * FPGA stuff
 
 #define CFG_VXWORKS_MAC_PTR    0x00000000      /* Pass Ethernet MAC to VxWorks */
 
+/*-----------------------------------------------------------------------
+ * GPIOs
+ */
+#define CFG_NONMONARCH         (0x80000000 >> 14)   /* GPIO24 */
+#define CFG_XEREADY            (0x80000000 >> 15)   /* GPIO15 */
+#define CFG_INTA_FAKE          (0x80000000 >> 19)   /* GPIO19 */
+#define CFG_SELF_RST           (0x80000000 >> 21)   /* GPIO21 */
+#define CFG_REV1_2             (0x80000000 >> 23)   /* GPIO23 */
+
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in data cache)
  */
index 5f748a0366e0357e07d173b21afd18eaf4c146d9..a717659bb695682418b75f2d030455ce23c9664a 100644 (file)
@@ -68,8 +68,8 @@
 #define CONFIG_BOOTCOMMAND \
                        "setenv verify y;" \
                                "setenv bootargs console=ttyS0,19200 mem=31M quiet " \
-                       "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-                       "ip=$(ipaddr):$(serverip)::$(netmask):pn62:eth0:off;" \
+                       "root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+                       "ip=${ipaddr}:${serverip}::${netmask}:pn62:eth0:off;" \
                        "loadp 100000; bootm"
                        /* "tftpboot 100000 uImage; bootm" */
 #else
@@ -78,7 +78,7 @@
                        "setenv verify n;" \
                                "setenv bootargs console=ttyS0,19200 mem=31M quiet " \
                        "root=/dev/ram rw " \
-                       "ip=$(ipaddr):$(serverip)::$(netmask):pn62:eth0:off;" \
+                       "ip=${ipaddr}:${serverip}::${netmask}:pn62:eth0:off;" \
                        "loadp 200000; bootm"
 #endif
 
index 2d89f3ffaf60828d8300e1146089cd3b7f517827..c406c8f4bc17d5f1593caa82267c639e41005ccd 100644 (file)
  * NAND-FLASH stuff
  *-----------------------------------------------------------------------
  */
+
+/* Use the new NAND code. (BOARDLIBS = drivers/nand/libnand.a required) */
+#define CONFIG_NEW_NAND_CODE
 #define CFG_NAND0_BASE 0xFF400000
 #define CFG_NAND1_BASE 0xFF000000
-
-#define CFG_MAX_NAND_DEVICE    2       /* Max number of NAND devices           */
+#define CFG_NAND_BASE_LIST     { CFG_NAND0_BASE, CFG_NAND1_BASE }
+#define NAND_BIG_DELAY_US      25
+#define CFG_MAX_NAND_DEVICE    2       /* Max number of NAND devices */
 #define SECTORSIZE 512
 #define NAND_NO_RB
 
 #define CFG_NAND1_ALE (0x80000000 >> 16)  /* our ALE is GPIO16 */
 #define CFG_NAND1_RDY (0x80000000 >> 31)  /* our RDY is GPIO31 */
 
+#ifdef CONFIG_NEW_NAND_CODE
+#define MACRO_NAND_DISABLE_CE(nandptr) do \
+{ \
+       switch((unsigned long)nandptr) \
+       { \
+           case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_CE); \
+               break; \
+           case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_CE); \
+               break; \
+       } \
+} while(0)
+
+#define MACRO_NAND_ENABLE_CE(nandptr) do \
+{ \
+       switch((unsigned long)nandptr) \
+       { \
+           case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_CE); \
+               break; \
+           case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_CE); \
+               break; \
+       } \
+} while(0)
+
+#define MACRO_NAND_CTL_CLRALE(nandptr) do \
+{ \
+       switch((unsigned long)nandptr) \
+       { \
+           case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_ALE); \
+               break; \
+           case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_ALE); \
+               break; \
+       } \
+} while(0)
+
+#define MACRO_NAND_CTL_SETALE(nandptr) do \
+{ \
+       switch((unsigned long)nandptr) \
+       { \
+           case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_ALE); \
+               break; \
+           case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_ALE); \
+               break; \
+       } \
+} while(0)
+
+#define MACRO_NAND_CTL_CLRCLE(nandptr) do \
+{ \
+       switch((unsigned long)nandptr) \
+       { \
+           case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_CLE); \
+               break; \
+           case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_CLE); \
+               break; \
+       } \
+} while(0)
+
+#define MACRO_NAND_CTL_SETCLE(nandptr) do { \
+       switch((unsigned long)nandptr) { \
+       case CFG_NAND0_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_CLE); \
+               break; \
+       case CFG_NAND1_BASE: \
+               out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_CLE); \
+               break; \
+       } \
+} while(0)
+#else
 #define NAND_DISABLE_CE(nand) do \
 { \
        switch((unsigned long)(((struct nand_chip *)nand)->IO_ADDR)) \
                break; \
        } \
 } while(0)
+#endif /* !CONFIG_NEW_NAND_CODE */
 
 #ifdef NAND_NO_RB
 /* constant delay (see also tR in the datasheet) */
 #define CFG_SDRAM_BASE         0x00000000
 
 /* Reserve 256 kB for Monitor  */
+/*
 #define CFG_FLASH_BASE         0xFFFC0000
 #define CFG_MONITOR_BASE       CFG_FLASH_BASE
 #define CFG_MONITOR_LEN                (256 * 1024)
+*/
 
 /* Reserve 320 kB for Monitor  */
-/*
 #define CFG_FLASH_BASE         0xFFFB0000
 #define CFG_MONITOR_BASE       CFG_FLASH_BASE
 #define CFG_MONITOR_LEN                (320 * 1024)
-*/
 
 #define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 8d29a31a055845526e8ef987b217446aa5aa7870..32faa61607bca133eab2461ec01e52961414c461 100644 (file)
@@ -56,6 +56,7 @@
 #define CONFIG_QS860T          1       /* ...on a QS860T module */
 
 #define CONFIG_FEC_ENET                1       /* FEC 10/100BaseT ethernet */
+#define CONFIG_MII
 #define FEC_INTERRUPT          SIU_LEVEL1
 #undef CONFIG_SCC1_ENET                        /* SCC1 10BaseT ethernet */
 #define CFG_DISCOVER_PHY
@@ -78,8 +79,8 @@
 #undef CONFIG_BOOTARGS
 /* TODO compare against CADM860 */
 #define CONFIG_BOOTCOMMAND     "bootp; " \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
index d7b093b3cff89da301b659842b921f1fc54814e1..82228c0126b5027a8b6ae7b3249b50827225f274 100644 (file)
@@ -63,8 +63,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #undef CONFIG_SCC1_ENET
index 4d47d3ee5e566a4a7e23f5fc849bf0d166ec2a4f..242c837a3b86ab5be554761fa7cd130a18c9be8c 100644 (file)
@@ -66,8 +66,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
@@ -97,6 +97,7 @@
 #define CONFIG_COMMANDS              ( CFG_CMD_ALL     & \
                                ~CFG_CMD_BSP    & \
                                ~CFG_CMD_DATE   & \
+                               ~CFG_CMD_DISPLAY& \
                                ~CFG_CMD_DTT    & \
                                ~CFG_CMD_EXT2   & \
                                ~CFG_CMD_FDC    & \
index 7294561b0b74d3339b15a349f5d103e3aa9a88a6..591382cd24d8d3ba1597824156306bba885cf7b8 100644 (file)
@@ -79,8 +79,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "tftpboot; "                                                            \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 04293f3e964697ba1b3a6fbe68fa588019ceecc8..6b65031099444a9d92ae06aa2510328ff38cfc19 100644 (file)
@@ -58,8 +58,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index ea01bc47506953812ceec90bf0308cd4cded2926..8cd7df1ecff4c86a2d6dfcaf8b5d12466a9c5d88 100644 (file)
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs console=tty0 console=ttyS0,9600 "      \
-               "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)\0"    \
+               "root=/dev/nfs rw nfsroot=${serverip}:${rootpath}\0"    \
        "ramargs=setenv bootargs console=tty0 root=/dev/ram rw\0"       \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off panic=1\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"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "gatewayip=172.16.115.254\0"                                    \
        "netmask=255.255.255.0\0"                                       \
        "kernel_addr=ff040000\0"                                        \
        "ramdisk_addr=ff200000\0"                                       \
-       "ku=era $(kernel_addr) ff1fffff;cp.b 100000 $(kernel_addr) "    \
-               "$(filesize);md $(kernel_addr);"                        \
+       "ku=era ${kernel_addr} ff1fffff;cp.b 100000 ${kernel_addr} "    \
+               "${filesize};md ${kernel_addr};"                        \
                "echo kernel updating finished\0"                       \
        "uu=protect off 1:0-4;era 1:0-4;cp.b 100000 ff000000 "          \
-               "$(filesize);md ff000000;"                              \
+               "${filesize};md ff000000;"                              \
                "echo u-boot updating finished\0"                       \
        "eu=protect off 1:6;era 1:6;reset\0"                            \
        "lcd=setenv stdout lcd;setenv stdin lcd\0"                      \
index 7f2c8a474648d572151f7bdfbfc885d3c13f948b..3885bcdb1ef56c3313ea6e316622bb1fed2660a1 100644 (file)
        "netdev=eth0\0"                                                 \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
-       "addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip)"    \
-               ":$(gatewayip):$(netmask):$(hostname):$(netdev):off\0"  \
-       "addtty=setenv bootargs $(bootargs) console=ttyS0,$(baudrate)\0"\
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}"    \
+               ":${gatewayip}:${netmask}:${hostname}:${netdev}:off\0"  \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\
        "load=tftp 100000 /tftpboot/u-boot.bin\0"                       \
        "update=protect off 1:0-8;era 1:0-8;"                           \
-               "cp.b 100000 40000000 $(filesize);"                     \
+               "cp.b 100000 40000000 ${filesize};"                     \
                "setenv filesize;saveenv\0"                             \
        "kernel_addr=40040000\0"                                        \
        "ramdisk_addr=40100000\0"                                       \
        "kernel_img=/tftpboot/uImage\0"                                 \
-       "kernel_load=tftp 200000 $(kernel_img)\0"                       \
+       "kernel_load=tftp 200000 ${kernel_img}\0"                       \
        "net_nfs=run kernel_load nfsargs addip addtty;bootm\0"          \
-       "flash_nfs=run nfsargs addip addtty;bootm $(kernel_addr)\0"     \
+       "flash_nfs=run nfsargs addip addtty;bootm ${kernel_addr}\0"     \
        "flash_self=run ramargs addip addtty;"                          \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"
 
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 91914e80defba9f9b227be1bacadc25cad6f43f9..e263db65a2f7b84b1faccc7a8d402182c5c8962d 100644 (file)
@@ -68,8 +68,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 /* enable I2C and select the hardware/software driver */
index c23b3860a8456a275289416109ea3990ee556f5f..49776291211d899995c832b8ad057fe52faeb484 100644 (file)
@@ -55,8 +55,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 9ce83b48bf105fd097ffb643c365d9cc1c2b26f9..c1c765f39d000e11054924bc8ec58a460af5a475 100644 (file)
 # define CFG_I2C_EEPROM_ADDR_LEN 2     /* two byte address             */
 
 #define        CONFIG_FEC_ENET         1       /* use FEC ethernet  */
+#define        CONFIG_MII              1
 
 #define CFG_DISCOVER_PHY
 
index 7c4feee3f51fe6b7dee47fe8fcddde09b273e99b..f4339ecd9c8209fb0ce3a4299bc8eedf15f6d94e 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
-       "net_self=tftp $(kernel_addr) $(bootfile);"                     \
-               "tftp $(ramdisk_addr) $(ramdisk);"                      \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "net_self=tftp ${kernel_addr} ${bootfile};"                     \
+               "tftp ${ramdisk_addr} ${ramdisk};"                      \
                "run ramargs addip;"                                    \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
-       "net_nfs=tftp $(kernel_addr) $(bootfile);"                      \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp ${kernel_addr} ${bootfile};"                      \
                "run nfsargs addip;bootm\0"                             \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/SP8240/uImage\0"                            \
index e46f5e407d1a176648e1d0ccada63edef3f007e6..f41dbd0ccb18f3f8a0f292fc30c8dc60e3cd2c8e 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/MPC5200/uImage\0"                           \
        ""
index af74f9dc07d4b7a733186de13743312569813a89..2344b96811b9eaf1f2c4f744e0ab817e3b4623d5 100644 (file)
 #if defined (CONFIG_SOFT_I2C)
 #define        SDA     0x00010
 #define        SCL     0x00020
-#define DIR immr->im_cpm.cp_pbdir
-#define DAT    immr->im_cpm.cp_pbdat
-#define PAR    immr->im_cpm.cp_pbpar
-#define        ODR     immr->im_cpm.cp_pbodr
-#define        I2C_INIT        {PAR&=~(SDA|SCL);ODR&=~(SDA|SCL);DAT|=(SDA|SCL);DIR|=(SDA|SCL);}
-#define        I2C_READ        ((DAT&SDA)?1:0)
-#define        I2C_SDA(x)      {if(x)DAT|=SDA;else DAT&=~SDA;}
-#define        I2C_SCL(x)      {if(x)DAT|=SCL;else DAT&=~SCL;}
-#define        I2C_DELAY       {udelay(5);}
-#define        I2C_ACTIVE       {DIR|=SDA;}
-#define        I2C_TRISTATE {DIR&=~SDA;}
+#define __I2C_DIR      immr->im_cpm.cp_pbdir
+#define __I2C_DAT      immr->im_cpm.cp_pbdat
+#define __I2C_PAR      immr->im_cpm.cp_pbpar
+#define        __I2C_ODR       immr->im_cpm.cp_pbodr
+#define        I2C_INIT        { __I2C_PAR &= ~(SDA|SCL);      \
+                         __I2C_ODR &= ~(SDA|SCL);      \
+                         __I2C_DAT |= (SDA|SCL);       \
+                         __I2C_DIR|=(SDA|SCL); }
+#define        I2C_READ        ((__I2C_DAT & SDA) ? 1 : 0)
+#define        I2C_SDA(x)      { if (x) __I2C_DAT |= SDA; else __I2C_DAT &= ~SDA; }
+#define        I2C_SCL(x)      { if (x) __I2C_DAT |= SCL; else __I2C_DAT &= ~SCL; }
+#define        I2C_DELAY       { udelay(5); }
+#define        I2C_ACTIVE      { __I2C_DIR |= SDA; }
+#define        I2C_TRISTATE    { __I2C_DIR &= ~SDA; }
 #endif
 
 #define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND     \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm"
 
 /*
index b60e3cd539c85942cb8517e428aedfde863bd4bc..5ad19394817fed4b3ce3bec0e6815c4ffe140a18 100644 (file)
@@ -83,7 +83,7 @@
 #define CONFIG_PCI_IO_SIZE     0x01000000
 
 #define CONFIG_NET_MULTI       1
-#define CONFIG_EEPRO100                1
+#define CONFIG_EEPRO100
 #define CFG_RX_ETH_BUFFER      8  /* use 8 rx buffer on eepro100  */
 #define CONFIG_NS8382X         1
 #endif /* CONFIG_STK52XX */
                                CFG_CMD_ECHO    | \
                                CFG_CMD_EEPROM  | \
                                CFG_CMD_I2C     | \
+                               CFG_CMD_JFFS2   | \
                                CFG_CMD_MII     | \
                                CFG_CMD_NFS     | \
                                CFG_CMD_PING    | \
                                CFG_CMD_POST_DIAG | \
                                CFG_CMD_REGINFO | \
-                               CFG_CMD_SNTP    )
+                               CFG_CMD_SNTP    | \
+                               CFG_CMD_BSP)
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
        "rootpath=/opt/eldk/ppc_6xx\0"                                  \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off panic=1\0"                  \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_self=run ramargs addip;"                                 \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
-       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
+               "bootm ${kernel_addr}\0"                                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "bootfile=/tftpboot/tqm5200/uImage\0"                           \
-       "load=tftp 200000 $(u-boot)\0"                                  \
+       "load=tftp 200000 ${u-boot}\0"                                  \
        "u-boot=/tftpboot/tqm5200/u-boot.bin"   CONFIG_U_BOOT_SUFFIX    \
        "update=protect off FC000000 FC05FFFF;"                         \
                "erase FC000000 FC05FFFF;"                              \
-               "cp.b 200000 FC000000 $(filesize);"                     \
+               "cp.b 200000 FC000000 ${filesize};"                     \
                "protect on FC000000 FC05FFFF\0"                        \
        ""
 
 #define CFG_FLASH_ERASE_TOUT   240000  /* Flash Erase Timeout (in ms)  */
 #define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (in ms)  */
 
+/* Dynamic MTD partition support */
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT         "nor0=TQM5200-0"
+#define MTDPARTS_DEFAULT       "mtdparts=TQM5200-0:640k(firmware),"    \
+                                               "1408k(kernel),"        \
+                                               "2m(initrd),"           \
+                                               "4m(small-fs),"         \
+                                               "16m(big-fs),"          \
+                                               "8m(misc)"
 
 /*
  * Environment settings
 #endif
 
 #define CFG_MONITOR_LEN                (384 << 10)     /* Reserve 384 kB for Monitor   */
-#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc()  */
+#define CFG_MALLOC_LEN         (256 << 10)     /* Reserve 256 kB for malloc()  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
 /*
 /*
  * RTC configuration
  */
-#define CONFIG_RTC_MPC5200     1       /* use internal MPC5200 RTC */
+#if defined (CONFIG_STK52XX) && !defined (CONFIG_STK52XX_REV100)
+# define CONFIG_RTC_M41T11 1
+# define CFG_I2C_RTC_ADDR 0x68
+#else
+# define CONFIG_RTC_MPC5200    1       /* use internal MPC5200 RTC */
+#endif
 
 /*
  * Miscellaneous configurable options
index d12aabecf9390454411b69f7cb8e2f85ddee01a4..b1c70f88c26db74c262bd2f5d988b92cf5fda509 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM823L/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
index a838a95b5ff81fcb01d9e3b13e77f7d37e05f2c3..9f958f547742d2817a5c2bf11e116a310c63ffb2 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM823M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
index e6266b58d15314f77512007f1b0975144513733e..49c3872630c9609a12ef3ea573fdb8237d614eaf 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/TQM8260/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
diff --git a/include/configs/TQM834x.h b/include/configs/TQM834x.h
new file mode 100644 (file)
index 0000000..41f44c5
--- /dev/null
@@ -0,0 +1,511 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+/*
+ * TQM8349 board configuration file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define DEBUG
+#undef DEBUG
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_E300            1       /* E300 Family */
+#define CONFIG_MPC83XX         1       /* MPC83XX family */
+#define CONFIG_MPC834X         1       /* MPC834X specific */
+#define CONFIG_TQM834X         1       /* TQM834X board specific */
+
+/* IMMR Base Addres Register, use Freescale default: 0xff400000 */
+#define CFG_IMMRBAR            0xff400000
+
+/* System clock. Primary input clock when in PCI host mode */
+#define CONFIG_83XX_CLKIN      66666000        /* 66,666 MHz */
+
+/*
+ * Local Bus LCRR
+ *    LCRR:  DLL bypass, Clock divider is 8
+ *
+ *    for CSB = 266 MHz it gives LCB clock frequency = 33 MHz
+ *
+ * External Local Bus rate is
+ *    CLKIN * HRCWL_CSB_TO_CLKIN / HRCWL_LCL_BUS_TO_SCB_CLK / LCRR_CLKDIV
+ */
+#define CFG_LCRR               (LCRR_DBYP | LCRR_CLKDIV_8)
+
+/* board pre init: do not call, nothing to do */
+#undef CONFIG_BOARD_EARLY_INIT_F
+
+/* detect the number of flash banks */
+#define CONFIG_BOARD_EARLY_INIT_R
+
+/*
+ * 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 DDR_CASLAT_25                          /* CASLAT set to 2.5 */
+#undef CONFIG_DDR_ECC                          /* only for ECC DDR module */
+#undef CONFIG_SPD_EEPROM                       /* do not use SPD EEPROM for DDR setup */
+
+#undef CFG_DRAM_TEST                           /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00000000      /* memtest region */
+#define CFG_MEMTEST_END                0x00100000
+
+/*
+ * FLASH on the Local Bus
+ */
+#define CFG_FLASH_CFI                          /* use the Common Flash Interface */
+#define CFG_FLASH_CFI_DRIVER                   /* use the CFI driver */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_BASE         0x80000000      /* start of FLASH   */
+
+/* buffered writes in the AMD chip set is not supported yet */
+#undef CFG_FLASH_USE_BUFFER_WRITE
+
+/*
+ * FLASH bank number detection
+ */
+
+/*
+ * When CFG_MAX_FLASH_BANKS_DETECT is defined, the actual number of Flash
+ * banks has to be determined at runtime and stored in a gloabl variable
+ * tqm834x_num_flash_banks. The value of CFG_MAX_FLASH_BANKS_DETECT is only
+ * used instead of CFG_MAX_FLASH_BANKS to allocate the array flash_info, and
+ * should be made sufficiently large to accomodate the number of banks that
+ * might actually be detected.  Since most (all?) Flash related functions use
+ * CFG_MAX_FLASH_BANKS as the number of actual banks on the board, it is
+ * defined as tqm834x_num_flash_banks.
+ */
+#define CFG_MAX_FLASH_BANKS_DETECT     2
+#ifndef __ASSEMBLY__
+extern int tqm834x_num_flash_banks;
+#endif
+#define CFG_MAX_FLASH_BANKS (tqm834x_num_flash_banks)
+
+#define CFG_MAX_FLASH_SECT             512     /* max sectors per device */
+
+/* 32 bit device at 0x80000000 via GPCM (0x8000_1801) */
+#define CFG_BR0_PRELIM         ((CFG_FLASH_BASE & BR_BA) | \
+                                       BR_MS_GPCM | BR_PS_32 | BR_V)
+
+/* FLASH timing (0x0000_0c54) */
+#define CFG_OR_TIMING_FLASH    (OR_GPCM_CSNT | OR_GPCM_ACS_0b10 | \
+                                       OR_GPCM_SCY_5 | OR_GPCM_TRLX)
+
+#define CFG_PRELIM_OR_AM       0xc0000000      /* OR addr mask: 1 GiB */
+
+#define CFG_OR0_PRELIM         (CFG_PRELIM_OR_AM  | CFG_OR_TIMING_FLASH)
+
+#define CFG_LBLAWAR0_PRELIM    0x8000001D      /* 1 GiB window size (2^(size + 1)) */
+
+#define CFG_LBLAWBAR0_PRELIM   CFG_FLASH_BASE  /* Window base at flash base */
+
+/* disable remaining mappings */
+#define CFG_BR1_PRELIM         0x00000000
+#define CFG_OR1_PRELIM         0x00000000
+#define CFG_LBLAWBAR1_PRELIM   0x00000000
+#define CFG_LBLAWAR1_PRELIM    0x00000000
+
+#define CFG_BR2_PRELIM         0x00000000
+#define CFG_OR2_PRELIM         0x00000000
+#define CFG_LBLAWBAR2_PRELIM   0x00000000
+#define CFG_LBLAWAR2_PRELIM    0x00000000
+
+#define CFG_BR3_PRELIM         0x00000000
+#define CFG_OR3_PRELIM         0x00000000
+#define CFG_LBLAWBAR3_PRELIM   0x00000000
+#define CFG_LBLAWAR3_PRELIM    0x00000000
+
+#define CFG_BR4_PRELIM         0x00000000
+#define CFG_OR4_PRELIM         0x00000000
+#define CFG_LBLAWBAR4_PRELIM   0x00000000
+#define CFG_LBLAWAR4_PRELIM    0x00000000
+
+#define CFG_BR5_PRELIM         0x00000000
+#define CFG_OR5_PRELIM         0x00000000
+#define CFG_LBLAWBAR5_PRELIM   0x00000000
+#define CFG_LBLAWAR5_PRELIM    0x00000000
+
+#define CFG_BR6_PRELIM         0x00000000
+#define CFG_OR6_PRELIM         0x00000000
+#define CFG_LBLAWBAR6_PRELIM   0x00000000
+#define CFG_LBLAWAR6_PRELIM    0x00000000
+
+#define CFG_BR7_PRELIM         0x00000000
+#define CFG_OR7_PRELIM         0x00000000
+#define CFG_LBLAWBAR7_PRELIM   0x00000000
+#define CFG_LBLAWAR7_PRELIM    0x00000000
+
+/*
+ * Monitor config
+ */
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#else
+#undef  CFG_RAMBOOT
+#endif
+
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0x20000000      /* Initial RAM address */
+#define CFG_INIT_RAM_END       0x1000          /* End of used area in RAM*/
+
+#define CFG_GBL_DATA_SIZE      0x100           /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+#define CFG_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (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_IMMRBAR + 0x4500)
+#define CFG_NS16550_COM2       (CFG_IMMRBAR + 0x4600)
+
+/*
+ * I2C
+ */
+#define CONFIG_HARD_I2C                                /* I2C with hardware support    */
+#undef CONFIG_SOFT_I2C                         /* I2C bit-banged               */
+#define CFG_I2C_SPEED                  400000  /* I2C speed: 400KHz            */
+#define CFG_I2C_SLAVE                  0x7F    /* slave address                */
+#define CFG_I2C_OFFSET                 0x3000
+
+/* I2C EEPROM, configuration for onboard EEPROMs 24C256 and 24C32 */
+#define CFG_I2C_EEPROM_ADDR            0x50    /* 1010000x                     */
+#define CFG_I2C_EEPROM_ADDR_LEN                2       /* 16 bit                       */
+#define CFG_EEPROM_PAGE_WRITE_BITS     5       /* 32 bytes per write           */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 12      /* 10ms +/- 20%                 */
+#define CFG_I2C_MULTI_EEPROMS          1       /* more than one eeprom         */
+
+/* I2C RTC */
+#define CONFIG_RTC_DS1337                      /* use ds1337 rtc via i2c       */
+#define CFG_I2C_RTC_ADDR               0x68    /* at address 0x68              */
+
+/* I2C SYSMON (LM75) */
+#define CONFIG_DTT_LM75                        1       /* ON Semi's LM75               */
+#define CONFIG_DTT_SENSORS             {0}     /* Sensor addresses             */
+#define CFG_DTT_MAX_TEMP               70
+#define CFG_DTT_LOW_TEMP               -30
+#define CFG_DTT_HYSTERESIS             3
+
+/*
+ * TSEC
+ */
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_MII
+
+#define CFG_TSEC1_OFFSET       0x24000
+#define CFG_TSEC1              (CFG_IMMRBAR + CFG_TSEC1_OFFSET)
+#define CFG_TSEC2_OFFSET       0x25000
+#define CFG_TSEC2              (CFG_IMMRBAR + CFG_TSEC2_OFFSET)
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI
+#endif
+
+#define CONFIG_MPC83XX_TSEC1           1
+#define CONFIG_MPC83XX_TSEC1_NAME      "TSEC0"
+#define CONFIG_MPC83XX_TSEC2           1
+#define CONFIG_MPC83XX_TSEC2_NAME      "TSEC1"
+#define TSEC1_PHY_ADDR                 2
+#define TSEC2_PHY_ADDR                 1
+#define TSEC1_PHYIDX                   0
+#define TSEC2_PHYIDX                   0
+
+/* Options are: TSEC[0-1] */
+#define CONFIG_ETHPRIME                        "TSEC0"
+
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * General PCI
+ * Addresses are mapped 1-1.
+ */
+#define CONFIG_PCI
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_PCI_PNP                  /* do pci plug-and-play */
+#define CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup */
+
+/* PCI1 host bridge */
+#define CFG_PCI1_MEM_BASE       0xc0000000
+#define CFG_PCI1_MEM_PHYS       CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE       0x20000000      /* 512M */
+#define CFG_PCI1_IO_BASE        0xe2000000
+#define CFG_PCI1_IO_PHYS        CFG_PCI1_IO_BASE
+#define CFG_PCI1_IO_SIZE        0x1000000       /* 16M */
+
+
+#undef CONFIG_EEPRO100
+#define CONFIG_EEPRO100
+#undef CONFIG_TULIP
+
+#if !defined(CONFIG_PCI_PNP)
+       #define PCI_ENET0_IOADDR        CFG_PCI1_IO_BASE
+       #define PCI_ENET0_MEMADDR       CFG_PCI1_MEM_BASE
+       #define PCI_IDSEL_NUMBER        0x1c    /* slot0 (IDSEL) = 28 */
+#endif
+
+#define CFG_PCI_SUBSYS_VENDORID                0x1957  /* Freescale */
+
+#endif /* CONFIG_PCI */
+
+/*
+ * Environment
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#ifndef CFG_RAMBOOT
+       #define CFG_ENV_IS_IN_FLASH     1
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + 0x40000)
+       #define CFG_ENV_SECT_SIZE       0x20000 /* 256K(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 */
+
+/* Common commands */
+#define CFG_CMD_TQM8349_COMMON CFG_CMD_DATE | CFG_CMD_I2C | CFG_CMD_DTT\
+                               | CFG_CMD_PING | CFG_CMD_EEPROM         \
+                               | CFG_CMD_MII | CFG_CMD_JFFS2
+
+#if defined(CFG_RAMBOOT)
+
+#if defined(CONFIG_PCI)
+#define  CONFIG_COMMANDS       ((CONFIG_CMD_DFL | CFG_CMD_PCI  \
+                               | CFG_CMD_TQM8349_COMMON)       \
+                               &                               \
+                               ~(CFG_CMD_ENV | CFG_CMD_LOADS))
+#else
+#define  CONFIG_COMMANDS       ((CONFIG_CMD_DFL                \
+                               | CFG_CMD_TQM8349_COMMON)       \
+                               &                               \
+                               ~(CFG_CMD_ENV | CFG_CMD_LOADS))
+#endif
+
+#else /* CFG_RAMBOOT */
+
+#if defined(CONFIG_PCI)
+#define  CONFIG_COMMANDS       (CONFIG_CMD_DFL | CFG_CMD_PCI   \
+                               | CFG_CMD_TQM8349_COMMON)
+#else
+#define  CONFIG_COMMANDS       (CONFIG_CMD_DFL                 \
+                               | CFG_CMD_TQM8349_COMMON)
+#endif
+
+#endif /* CFG_RAMBOOT */
+
+#include <cmd_confdefs.h>
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                           /* undef to save memory */
+#define CFG_LOAD_ADDR          0x2000000       /* default load address */
+#define CFG_PROMPT             "=> "           /* Monitor Command Prompt */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+       #define CFG_CBSIZE      1024            /* Console I/O Buffer Size */
+#else
+       #define CFG_CBSIZE      256             /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS            16              /* max number of command args */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_HZ                 1000            /* decrementer freq: 1ms ticks */
+
+#undef CONFIG_WATCHDOG                         /* watchdog disabled */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
+
+/*
+ * Cache Configuration
+ */
+#define CFG_DCACHE_SIZE                32768
+#define CFG_CACHELINE_SIZE     32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
+#endif
+
+#define CFG_HRCW_LOW (\
+       HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
+       HRCWL_DDR_TO_SCB_CLK_1X1 |\
+       HRCWL_CSB_TO_CLKIN_4X1 |\
+       HRCWL_VCO_1X2 |\
+       HRCWL_CORE_TO_CSB_2X1)
+
+#if defined(PCI_64BIT)
+#define CFG_HRCW_HIGH (\
+       HRCWH_PCI_HOST |\
+       HRCWH_64_BIT_PCI |\
+       HRCWH_PCI1_ARBITER_ENABLE |\
+       HRCWH_PCI2_ARBITER_DISABLE |\
+       HRCWH_CORE_ENABLE |\
+       HRCWH_FROM_0X00000100 |\
+       HRCWH_BOOTSEQ_DISABLE |\
+       HRCWH_SW_WATCHDOG_DISABLE |\
+       HRCWH_ROM_LOC_LOCAL_16BIT |\
+       HRCWH_TSEC1M_IN_GMII |\
+       HRCWH_TSEC2M_IN_GMII )
+#else
+#define CFG_HRCW_HIGH (\
+       HRCWH_PCI_HOST |\
+       HRCWH_32_BIT_PCI |\
+       HRCWH_PCI1_ARBITER_ENABLE |\
+       HRCWH_PCI2_ARBITER_DISABLE |\
+       HRCWH_CORE_ENABLE |\
+       HRCWH_FROM_0X00000100 |\
+       HRCWH_BOOTSEQ_DISABLE |\
+       HRCWH_SW_WATCHDOG_DISABLE |\
+       HRCWH_ROM_LOC_LOCAL_16BIT |\
+       HRCWH_TSEC1M_IN_GMII |\
+       HRCWH_TSEC2M_IN_GMII )
+#endif
+
+/* i-cache and d-cache disabled */
+#define CFG_HID0_INIT          0x000000000
+#define CFG_HID0_FINAL         CFG_HID0_INIT
+#define CFG_HID2               0x000000000
+
+/*
+ * 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 of kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+/*
+ * Environment Configuration
+ */
+
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_ETHADDR         D2:DA:5E:44:BC:29
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR                1E:F3:40:21:92:53
+#endif
+
+#define CONFIG_IPADDR          192.168.205.1
+
+#define CONFIG_HOSTNAME                tqm8349
+#define CONFIG_ROOTPATH                /opt/eldk/ppc_6xx
+#define CONFIG_BOOTFILE                /tftpboot/tqm83xx/uImage
+
+#define CONFIG_SERVERIP                192.168.1.1
+#define CONFIG_GATEWAYIP       192.168.1.1
+#define CONFIG_NETMASK         255.255.255.0
+
+#define CONFIG_LOADADDR                200000  /* default location for tftp and bootm */
+
+#define CONFIG_BOOTDELAY       6       /* -1 disables auto-boot */
+#undef  CONFIG_BOOTARGS                        /* the boot command will set bootargs */
+
+#define CONFIG_BAUDRATE                115200
+
+#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"                                                 \
+       "hostname=tqm83xx\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"                                               \
+       "rootpath=/opt/eldk/ppc_6xx\0"                                  \
+       "bootfile=/tftpboot/tqm83xx/uImage\0"                           \
+       "kernel_addr=80060000\0"                                        \
+       "ramdisk_addr=80160000\0"                                       \
+       "load=tftp 100000 /tftpboot/tqm83xx/u-boot.bin\0"               \
+       "update=protect off 80000000 8003ffff; "                        \
+               "era 80000000 8003ffff; cp.b 100000 80000000 40000\0"   \
+       "upd=run load;run update\0"                                     \
+       ""
+
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+/*
+ * JFFS2 partitions
+ */
+/* mtdparts command line support */
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT         "nor0=TQM834x-0"
+
+/* default mtd partition table */
+#define MTDPARTS_DEFAULT       "mtdparts=TQM834x-0:256k(u-boot),128k(env),"\
+                                               "1m(kernel),2m(initrd),"\
+                                               "-(user);"\
+
+#endif /* __CONFIG_H */
index 83eb40f7483b8c83d28e5c8490d363b761022d3d..16b2ce3f05895c1115a127e2d962f5fa20a0bd40 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM850L/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
index f20d246d37e530d5fba0ec249b8bfe6937bf787d..bbc69608b26156db010d256fd09e7f053ee5cb6a 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM850M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
diff --git a/include/configs/TQM8540.h b/include/configs/TQM8540.h
deleted file mode 100644 (file)
index 8438b93..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright 2005 DENX Software Engineering
- * Wolfgang Denk <wd@denx.de>
- * Copyright 2004 Freescale Semiconductor.
- * (C) Copyright 2002,2003 Motorola,Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/*
- * TQM8540 board configuration file
- *
- * Make sure you change the MAC address and other network params first,
- * search for CONFIG_ETHADDR, CONFIG_SERVERIP, etc in this file.
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/* High Level Configuration Options */
-#define CONFIG_BOOKE           1       /* BOOKE */
-#define CONFIG_E500            1       /* BOOKE e500 family */
-#define CONFIG_MPC85xx         1       /* MPC8540/MPC8560 */
-#define CONFIG_MPC8540         1       /* MPC8540 specific */
-#define CONFIG_TQM8540         1       /* TQM8540 board specific */
-
-#undef CONFIG_PCI
-#define CONFIG_TSEC_ENET               /* tsec ethernet support */
-#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-/*
- * sysclk for MPC85xx
- *
- * Two valid values are:
- *    33000000
- *    66000000
- *
- * Most PCI cards are still 33Mhz, so in the presence of PCI, 33MHz
- * is likely the desired value here, so that is now the default.
- * The board, however, can run at 66MHz.  In any event, this value
- * must match the settings of some switches.  Details can be found
- * in the README.mpc85xxads.
- */
-
-#ifndef CONFIG_SYS_CLK_FREQ
-#define CONFIG_SYS_CLK_FREQ    33000000
-#endif
-
-/*
- * These can be toggled for performance analysis, otherwise use default.
- */
-#define CONFIG_L2_CACHE                        /* toggle L2 cache */
-#define CONFIG_BTB                     /* toggle branch predition */
-#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
-
-#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
-
-#undef CFG_DRAM_TEST                   /* memory test, takes time */
-#define CFG_MEMTEST_START      0x00000000      /* memtest region */
-#define CFG_MEMTEST_END                0x10000000
-
-/*
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- */
-#define CFG_CCSRBAR_DEFAULT    0xFF700000      /* CCSRBAR Default */
-#define CFG_CCSRBAR            0xE0000000      /* relocated CCSRBAR */
-#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
-
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
-
-#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     512             /* DDR is 256MB */
-    #define CFG_DDR_CS0_BNDS   0x0000001f      /* 0-256MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000102
-    #define CFG_DDR_TIMING_1   0x47445331
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x40020062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x05160100      /* autocharge,no open page */
-#endif
-
-/*
- * Flash on the Local Bus
- */
-#define CFG_LBC_FLASH_BASE     0xfe000000      /* Localbus SDRAM */
-#define CFG_LBC_FLASH_SIZE     32              /* LBC SDRAM is 32MB */
-
-#define CFG_FLASH_BASE         CFG_LBC_FLASH_BASE      /* start of FLASH 32M */
-#define CFG_BR0_PRELIM         0xfe001801      /* port size 32bit */
-
-#define CFG_OR0_PRELIM         0xfe000040      /* 32MB Flash */
-#define CFG_MAX_FLASH_BANKS    1               /* number of banks */
-#define CFG_MAX_FLASH_SECT     256             /* 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 */
-
-#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
-#define CFG_RAMBOOT
-#else
-#undef CFG_RAMBOOT
-#endif
-
-#define CFG_FLASH_CFI_DRIVER
-#define CFG_FLASH_CFI
-#define CFG_FLASH_EMPTY_INFO
-
-#define CFG_LBC_LCRR           0x00030008    /* 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          0x20000000    /* 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_RFCR5    (3 << (31 - 16))
-#define CFG_LBC_LSDMR_RFCR16   (7 << (31 - 16))
-#define CFG_LBC_LSDMR_PRETOACT3 (3 << (31 - 19))
-#define CFG_LBC_LSDMR_PRETOACT7 (7 << (31 - 19))
-#define CFG_LBC_LSDMR_ACTTORW3 (3 << (31 - 22))
-#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_WRC2     (2 << (31 - 27))
-#define CFG_LBC_LSDMR_WRC4     (0 << (31 - 27))
-#define CFG_LBC_LSDMR_BUFCMD   (1 << (31 - 29))
-#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))
-
-#define CFG_LBC_LSDMR_COMMON   ( CFG_LBC_LSDMR_BSMA1516        \
-                               | CFG_LBC_LSDMR_RFCR5           \
-                               | CFG_LBC_LSDMR_PRETOACT3       \
-                               | CFG_LBC_LSDMR_ACTTORW3        \
-                               | CFG_LBC_LSDMR_BL8             \
-                               | CFG_LBC_LSDMR_WRC2            \
-                               | CFG_LBC_LSDMR_CL3             \
-                               | CFG_LBC_LSDMR_RFEN            \
-                               )
-
-/*
- * SDRAM Controller configuration sequence.
- */
-#define CFG_LBC_LSDMR_1                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_PCHALL)
-#define CFG_LBC_LSDMR_2                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_ARFRSH)
-#define CFG_LBC_LSDMR_3                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_ARFRSH)
-#define CFG_LBC_LSDMR_4                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_MRW)
-#define CFG_LBC_LSDMR_5                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_NORMAL)
-
-#define CONFIG_L1_INIT_RAM
-#define CFG_INIT_RAM_LOCK      1
-#define CFG_INIT_RAM_ADDR      0xe4010000      /* Initial RAM address */
-#define CFG_INIT_RAM_END       0x4000          /* End of used area in RAM */
-
-#define CFG_GBL_DATA_SIZE      128             /* num bytes initial data */
-#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
-
-#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
-#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
-
-/* Serial Port */
-#define CONFIG_CONS_INDEX     1
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
-#define CFG_NS16550
-#define CFG_NS16550_SERIAL
-#define CFG_NS16550_REG_SIZE   1
-#define CFG_NS16550_CLK                get_bus_freq(0)
-
-#define CFG_BAUDRATE_TABLE  \
-       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
-
-#define CFG_NS16550_COM1       (CFG_CCSRBAR+0x4500)
-#define CFG_NS16550_COM2       (CFG_CCSRBAR+0x4600)
-
-/* Use the HUSH parser */
-#define CFG_HUSH_PARSER
-#ifdef CFG_HUSH_PARSER
-#define CFG_PROMPT_HUSH_PS2 "> "
-#endif
-
-/* I2C */
-#define         CONFIG_HARD_I2C                /* I2C with hardware support*/
-#undef CONFIG_SOFT_I2C                 /* I2C bit-banged */
-#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
-#define CFG_I2C_SLAVE          0x7F
-#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
-
-/* RapidIO MMU */
-#define CFG_RIO_MEM_BASE       0xc0000000      /* base address */
-#define CFG_RIO_MEM_PHYS       CFG_RIO_MEM_BASE
-#define CFG_RIO_MEM_SIZE       0x20000000      /* 128M */
-
-/*
- * 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      0x20000000      /* 512M */
-#define CFG_PCI1_IO_BASE       0xe2000000
-#define CFG_PCI1_IO_PHYS       CFG_PCI1_IO_BASE
-#define CFG_PCI1_IO_SIZE       0x1000000       /* 16M */
-
-#if defined(CONFIG_PCI)
-
-#define CONFIG_NET_MULTI
-#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
-
-#undef CONFIG_EEPRO100
-#undef CONFIG_TULIP
-
-#if !defined(CONFIG_PCI_PNP)
-    #define PCI_ENET0_IOADDR   0xe0000000
-    #define PCI_ENET0_MEMADDR  0xe0000000
-    #define PCI_IDSEL_NUMBER   0x0c    /* slot0->3(IDSEL)=12->15 */
-#endif
-
-#undef CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup */
-#define CFG_PCI_SUBSYS_VENDORID 0x1057 /* Motorola */
-
-#endif /* CONFIG_PCI */
-
-
-#if defined(CONFIG_TSEC_ENET)
-
-#ifndef CONFIG_NET_MULTI
-#define CONFIG_NET_MULTI       1
-#endif
-
-#define CONFIG_MII             1       /* MII PHY management */
-#define CONFIG_MPC85XX_TSEC1   1
-#define CONFIG_MPC85XX_TSEC1_NAME      "TSEC0"
-#define CONFIG_MPC85XX_TSEC2   1
-#define CONFIG_MPC85XX_TSEC2_NAME      "TSEC1"
-#define TSEC1_PHY_ADDR         0
-#define TSEC2_PHY_ADDR         1
-#define TSEC1_PHYIDX           0
-#define TSEC2_PHYIDX           0
-
-#define CONFIG_MPC85XX_FEC     1
-#define CONFIG_MPC85XX_FEC_NAME        "FEC"
-#define FEC_PHY_ADDR           2
-#define FEC_PHYIDX             0
-
-#define CONFIG_HAS_ETH1
-#define CONFIG_HAS_ETH2
-
-/* Options are TSEC[0-1], FEC */
-#define CONFIG_ETHPRIME                "TSEC1"
-
-#endif /* CONFIG_TSEC_ENET */
-
-
-/*
- * Environment
- */
-#ifndef CFG_RAMBOOT
-  #define CFG_ENV_IS_IN_FLASH  1
-  #define CFG_ENV_ADDR         (CFG_MONITOR_BASE - 0x20000)
-  #define CFG_ENV_SECT_SIZE    0x20000 /* 128K(one sector) for env */
-  #define CFG_ENV_SIZE         0x2000
-  #define CFG_ENV_OFFSET_REDUND        (CFG_ENV_OFFSET-CFG_ENV_SECT_SIZE)
-  #define CFG_ENV_SIZE_REDUND  (CFG_ENV_SIZE)
-#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 */
-
-#define        CONFIG_TIMESTAMP                /* Print image info with timestamp */
-
-#if defined(CFG_RAMBOOT)
-# define CONFIG_CMD_PRIV       (CONFIG_CMD_DFL & ~(CFG_CMD_ENV  | CFG_CMD_LOADS))
-#else
-# define CONFIG_CMD_PRIV       (CONFIG_CMD_DFL | \
-                               CFG_CMD_DHCP    | \
-                               CFG_CMD_NFS     | \
-                               CFG_CMD_SNTP    )
-#endif
-
-#if defined(CONFIG_PCI)
-# define ADD_PCI_CMD           (CFG_CMD_PCI)
-#else
-# define ADD_PCI_CMD           0
-#endif
-
-#define CONFIG_COMMANDS        (CONFIG_CMD_PRIV        | \
-                               ADD_PCI_CMD     | \
-                               CFG_CMD_I2C     | \
-                               CFG_CMD_PING    )
-#include <cmd_confdefs.h>
-
-#undef CONFIG_WATCHDOG                 /* watchdog disabled */
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP                   /* undef to save memory */
-#define CFG_LOAD_ADDR  0x2000000       /* default load address */
-#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-    #define CFG_CBSIZE 1024            /* Console I/O Buffer Size */
-#else
-    #define CFG_CBSIZE 256             /* Console I/O Buffer Size */
-#endif
-
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS    16              /* max number of command args */
-#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
-#define CFG_HZ         1000            /* decrementer freq: 1ms ticks */
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
-
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
-#define BOOTFLAG_WARM  0x02            /* Software reboot */
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
-#endif
-
-
-#define CONFIG_LOADADDR         200000 /* default location for tftp and bootm */
-
-#define CONFIG_BOOTDELAY 5     /* -1 disables auto-boot */
-
-#define CONFIG_BAUDRATE 115200
-
-#define CONFIG_PREBOOT "echo;" \
-       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
-       "echo"
-
-#undef CONFIG_BOOTARGS         /* the boot command will set bootargs */
-
-#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
-       "netdev=eth0\0"                                                 \
-       "consdev=ttyS0\0"                                               \
-       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$serverip:$rootpath\0"                         \
-       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $bootargs "                              \
-               "ip=$ipaddr:$serverip:$gatewayip:$netmask"              \
-               ":$hostname:$netdev:off panic=1\0"                      \
-       "addcons=setenv bootargs $bootargs "                            \
-               "console=$consdev,$baudrate\0"                          \
-       "flash_nfs=run nfsargs addip addcons;"                          \
-               "bootm $kernel_addr\0"                                  \
-       "flash_self=run ramargs addip addcons;"                         \
-               "bootm $kernel_addr $ramdisk_addr\0"                    \
-       "net_nfs=tftp $loadaddr $bootfile;"                             \
-               "run nfsargs addip addcons;bootm\0"                     \
-       "rootpath=/opt/eldk/ppc_85xx\0"                                 \
-       "bootfile=/tftpboot/tqm8540/uImage\0"                           \
-       "kernel_addr=FE000000\0"                                        \
-       "ramdisk_addr=FE100000\0"                                       \
-       ""
-#define CONFIG_BOOTCOMMAND     "run flash_self"
-
-#endif /* __CONFIG_H */
index 24071ff1dc30dfc60d7435f807edeb1eab0be93e..198db1954d8cde928d4fa92f53e8b664d90bdd4f 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM855L/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
index 95a41e8afdf1ddfe937d3c5996b8cfaecca4be24..e25a7a204ff793bf8e2d333179dfa36d3b50e914 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM855M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
diff --git a/include/configs/TQM8560.h b/include/configs/TQM8560.h
deleted file mode 100644 (file)
index 1466f31..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Copyright 2005 DENX Software Engineering
- * Wolfgang Denk <wd@denx.de>
- * Copyright 2004 Freescale Semiconductor.
- * (C) Copyright 2002,2003 Motorola,Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/*
- * TQM8560 board configuration file
- *
- * Make sure you change the MAC address and other network params first,
- * search for CONFIG_ETHADDR, CONFIG_SERVERIP, etc in this file.
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/* High Level Configuration Options */
-#define CONFIG_BOOKE           1       /* BOOKE */
-#define CONFIG_E500            1       /* BOOKE e500 family */
-#define CONFIG_MPC85xx         1       /* MPC8540/MPC8560 */
-#define CONFIG_MPC8560         1       /* MPC8560 specific */
-#define CONFIG_TQM8560         1       /* TQM8560 board specific */
-
-#undef CONFIG_PCI
-#define CONFIG_TSEC_ENET               /* tsec ethernet support */
-#undef CONFIG_DDR_ECC                  /* only for ECC DDR module */
-#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
-
-/*
- * sysclk for MPC85xx
- *
- * Two valid values are:
- *    33000000
- *    66000000
- *
- * Most PCI cards are still 33Mhz, so in the presence of PCI, 33MHz
- * is likely the desired value here, so that is now the default.
- * The board, however, can run at 66MHz.  In any event, this value
- * must match the settings of some switches.  Details can be found
- * in the README.mpc85xxads.
- */
-
-#ifndef CONFIG_SYS_CLK_FREQ
-#define CONFIG_SYS_CLK_FREQ    33000000
-#endif
-
-/*
- * These can be toggled for performance analysis, otherwise use default.
- */
-#define CONFIG_L2_CACHE                        /* toggle L2 cache */
-#define CONFIG_BTB                     /* toggle branch predition */
-#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
-
-#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
-
-#undef CFG_DRAM_TEST                   /* memory test, takes time */
-#define CFG_MEMTEST_START      0x00000000      /* memtest region */
-#define CFG_MEMTEST_END                0x10000000
-
-/*
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- */
-#define CFG_CCSRBAR_DEFAULT    0xFF700000      /* CCSRBAR Default */
-#define CFG_CCSRBAR            0xE0000000      /* relocated CCSRBAR */
-#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
-
-/*
- * DDR Setup
- */
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
-
-#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     512             /* DDR is 256MB */
-    #define CFG_DDR_CS0_BNDS   0x0000001f      /* 0-256MB */
-    #define CFG_DDR_CS0_CONFIG 0x80000102
-    #define CFG_DDR_TIMING_1   0x47445331
-    #define CFG_DDR_TIMING_2   0x00000800      /* P9-45,may need tuning */
-    #define CFG_DDR_CONTROL    0xc2000000      /* unbuffered,no DYN_PWR */
-    #define CFG_DDR_MODE       0x40020062      /* DLL,normal,seq,4/2.5 */
-    #define CFG_DDR_INTERVAL   0x05160100      /* autocharge,no open page */
-#endif
-
-/*
- * Flash on the Local Bus
- */
-#define CFG_LBC_FLASH_BASE     0xfe000000      /* Localbus SDRAM */
-#define CFG_LBC_FLASH_SIZE     32              /* LBC SDRAM is 32MB */
-
-#define CFG_FLASH_BASE         CFG_LBC_FLASH_BASE      /* start of FLASH 32M */
-#define CFG_BR0_PRELIM         0xfe001801      /* port size 32bit */
-
-#define CFG_OR0_PRELIM         0xfe000040      /* 32MB Flash */
-#define CFG_MAX_FLASH_BANKS    1               /* number of banks */
-#define CFG_MAX_FLASH_SECT     256             /* 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 */
-
-#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
-#define CFG_RAMBOOT
-#else
-#undef CFG_RAMBOOT
-#endif
-
-#define CFG_FLASH_CFI_DRIVER
-#define CFG_FLASH_CFI
-#define CFG_FLASH_EMPTY_INFO
-
-#define CFG_LBC_LCRR           0x00030008    /* 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          0x20000000    /* 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_RFCR5    (3 << (31 - 16))
-#define CFG_LBC_LSDMR_RFCR16   (7 << (31 - 16))
-#define CFG_LBC_LSDMR_PRETOACT3 (3 << (31 - 19))
-#define CFG_LBC_LSDMR_PRETOACT7 (7 << (31 - 19))
-#define CFG_LBC_LSDMR_ACTTORW3 (3 << (31 - 22))
-#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_WRC2     (2 << (31 - 27))
-#define CFG_LBC_LSDMR_WRC4     (0 << (31 - 27))
-#define CFG_LBC_LSDMR_BUFCMD   (1 << (31 - 29))
-#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))
-
-#define CFG_LBC_LSDMR_COMMON   ( CFG_LBC_LSDMR_BSMA1516        \
-                               | CFG_LBC_LSDMR_RFCR5           \
-                               | CFG_LBC_LSDMR_PRETOACT3       \
-                               | CFG_LBC_LSDMR_ACTTORW3        \
-                               | CFG_LBC_LSDMR_BL8             \
-                               | CFG_LBC_LSDMR_WRC2            \
-                               | CFG_LBC_LSDMR_CL3             \
-                               | CFG_LBC_LSDMR_RFEN            \
-                               )
-
-/*
- * SDRAM Controller configuration sequence.
- */
-#define CFG_LBC_LSDMR_1                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_PCHALL)
-#define CFG_LBC_LSDMR_2                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_ARFRSH)
-#define CFG_LBC_LSDMR_3                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_ARFRSH)
-#define CFG_LBC_LSDMR_4                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_MRW)
-#define CFG_LBC_LSDMR_5                ( CFG_LBC_LSDMR_COMMON \
-                               | CFG_LBC_LSDMR_OP_NORMAL)
-
-#define CONFIG_L1_INIT_RAM
-#define CFG_INIT_RAM_LOCK      1
-#define CFG_INIT_RAM_ADDR      0xe4010000      /* Initial RAM address */
-#define CFG_INIT_RAM_END       0x4000          /* End of used area in RAM */
-
-#define CFG_GBL_DATA_SIZE      128             /* num bytes initial data */
-#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
-
-#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
-#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
-
-/* Serial Port */
-#define CONFIG_CONS_ON_SCC      /* define if console on SCC */
-#undef  CONFIG_CONS_NONE        /* define if console on something else */
-#define CONFIG_CONS_INDEX       1  /* which serial channel for console */
-
-#define CONFIG_BAUDRATE         115200
-
-#define CFG_BAUDRATE_TABLE  \
-       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
-
-/* Use the HUSH parser */
-#define CFG_HUSH_PARSER
-#ifdef CFG_HUSH_PARSER
-#define CFG_PROMPT_HUSH_PS2 "> "
-#endif
-
-/* I2C */
-#define         CONFIG_HARD_I2C                /* I2C with hardware support*/
-#undef CONFIG_SOFT_I2C                 /* I2C bit-banged */
-#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
-#define CFG_I2C_SLAVE          0x7F
-#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
-
-/* RapidIO MMU */
-#define CFG_RIO_MEM_BASE       0xc0000000      /* base address */
-#define CFG_RIO_MEM_PHYS       CFG_RIO_MEM_BASE
-#define CFG_RIO_MEM_SIZE       0x20000000      /* 128M */
-
-/*
- * 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      0x20000000      /* 512M */
-#define CFG_PCI1_IO_BASE       0xe2000000
-#define CFG_PCI1_IO_PHYS       CFG_PCI1_IO_BASE
-#define CFG_PCI1_IO_SIZE       0x1000000       /* 16M */
-
-#if defined(CONFIG_PCI)
-
-#define CONFIG_NET_MULTI
-#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
-
-#undef CONFIG_EEPRO100
-#undef CONFIG_TULIP
-
-#if !defined(CONFIG_PCI_PNP)
-    #define PCI_ENET0_IOADDR   0xe0000000
-    #define PCI_ENET0_MEMADDR  0xe0000000
-    #define PCI_IDSEL_NUMBER   0x0c    /* slot0->3(IDSEL)=12->15 */
-#endif
-
-#undef CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup */
-#define CFG_PCI_SUBSYS_VENDORID 0x1057 /* Motorola */
-
-#endif /* CONFIG_PCI */
-
-
-#if defined(CONFIG_TSEC_ENET)
-
-#ifndef CONFIG_NET_MULTI
-#define CONFIG_NET_MULTI       1
-#endif
-
-#define CONFIG_MII             1       /* MII PHY management */
-#define CONFIG_MPC85XX_TSEC2   1
-#define CONFIG_MPC85XX_TSEC2_NAME      "TSEC1"
-#define TSEC2_PHY_ADDR         1
-#define TSEC2_PHYIDX           0
-
-#endif  /* CONFIG_TSEC_ENET */
-
-#define CONFIG_ETHER_ON_FCC
-#define CONFIG_ETHER_ON_FCC3
-#define CFG_CMXFCR_MASK3      (CMXFCR_FC3 | CMXFCR_RF3CS_MSK | CMXFCR_TF3CS_MSK)
-#define CFG_CMXFCR_VALUE3     (CMXFCR_RF3CS_CLK15 | CMXFCR_TF3CS_CLK14)
-#define CFG_CPMFCR_RAMTYPE    0
-#define CFG_FCC_PSMR          (FCC_PSMR_FDE | FCC_PSMR_LPB)
-
-#define CONFIG_ETHPRIME                "TSEC1"
-
-/*
- * Environment
- */
-#ifndef CFG_RAMBOOT
-  #define CFG_ENV_IS_IN_FLASH  1
-  #define CFG_ENV_ADDR         (CFG_MONITOR_BASE - 0x20000)
-  #define CFG_ENV_SECT_SIZE    0x20000 /* 128K(one sector) for env */
-  #define CFG_ENV_SIZE         0x2000
-  #define CFG_ENV_OFFSET_REDUND        (CFG_ENV_OFFSET-CFG_ENV_SECT_SIZE)
-  #define CFG_ENV_SIZE_REDUND  (CFG_ENV_SIZE)
-#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 */
-
-#define        CONFIG_TIMESTAMP                /* Print image info with timestamp */
-
-#if defined(CFG_RAMBOOT)
-# define CONFIG_CMD_PRIV       (CONFIG_CMD_DFL & ~(CFG_CMD_ENV  | CFG_CMD_LOADS))
-#else
-# define CONFIG_CMD_PRIV       (CONFIG_CMD_DFL | \
-                               CFG_CMD_DHCP    | \
-                               CFG_CMD_NFS     | \
-                               CFG_CMD_SNTP    )
-#endif
-
-#if defined(CONFIG_PCI)
-# define ADD_PCI_CMD           (CFG_CMD_PCI)
-#else
-# define ADD_PCI_CMD           0
-#endif
-
-#define CONFIG_COMMANDS        (CONFIG_CMD_PRIV        | \
-                               ADD_PCI_CMD     | \
-                               CFG_CMD_I2C     | \
-                               CFG_CMD_PING    )
-#include <cmd_confdefs.h>
-
-#undef CONFIG_WATCHDOG                 /* watchdog disabled */
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP                   /* undef to save memory */
-#define CFG_LOAD_ADDR  0x2000000       /* default load address */
-#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-    #define CFG_CBSIZE 1024            /* Console I/O Buffer Size */
-#else
-    #define CFG_CBSIZE 256             /* Console I/O Buffer Size */
-#endif
-
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS    16              /* max number of command args */
-#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
-#define CFG_HZ         1000            /* decrementer freq: 1ms ticks */
-
-/*
- * For booting Linux, the board info and command line data
- * have to be in the first 8 MB of memory, since this is
- * the maximum mapped by the Linux kernel during initialization.
- */
-#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux*/
-
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
-#endif
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
-#define BOOTFLAG_WARM  0x02            /* Software reboot */
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
-#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
-#endif
-
-
-#define CONFIG_LOADADDR         200000 /* default location for tftp and bootm */
-
-#define CONFIG_BOOTDELAY 5     /* -1 disables auto-boot */
-
-#define CONFIG_BAUDRATE 115200
-
-#define CONFIG_PREBOOT "echo;" \
-       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
-       "echo"
-
-#undef CONFIG_BOOTARGS         /* the boot command will set bootargs */
-
-#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
-       "netdev=eth0\0"                                                 \
-       "consdev=ttyS0\0"                                               \
-       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$serverip:$rootpath\0"                         \
-       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $bootargs "                              \
-               "ip=$ipaddr:$serverip:$gatewayip:$netmask"              \
-               ":$hostname:$netdev:off panic=1\0"                      \
-       "addcons=setenv bootargs $bootargs "                            \
-               "console=$consdev,$baudrate\0"                          \
-       "flash_nfs=run nfsargs addip addcons;"                          \
-               "bootm $kernel_addr\0"                                  \
-       "flash_self=run ramargs addip addcons;"                         \
-               "bootm $kernel_addr $ramdisk_addr\0"                    \
-       "net_nfs=tftp $loadaddr $bootfile;"                             \
-               "run nfsargs addip addcons;bootm\0"                     \
-       "rootpath=/opt/eldk/ppc_85xx\0"                                 \
-       "bootfile=/tftpboot/tqm8560/uImage\0"                           \
-       "kernel_addr=FE000000\0"                                        \
-       "ramdisk_addr=FE100000\0"                                       \
-       ""
-#define CONFIG_BOOTCOMMAND     "run flash_self"
-
-#endif /* __CONFIG_H */
diff --git a/include/configs/TQM85xx.h b/include/configs/TQM85xx.h
new file mode 100644 (file)
index 0000000..18197f2
--- /dev/null
@@ -0,0 +1,452 @@
+/*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * Wolfgang Denk <wd@denx.de>
+ * Copyright 2004 Freescale Semiconductor.
+ * (C) Copyright 2002,2003 Motorola,Inc.
+ * Xianghua Xiao <X.Xiao@motorola.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * TQM85xx (8560/40/55/41) board configuration file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE                        */
+#define CONFIG_E500            1       /* BOOKE e500 family            */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41             */
+
+#define CONFIG_PCI
+#define CONFIG_TSEC_ENET               /* tsec ethernet support        */
+
+#define CONFIG_MISC_INIT_R     1       /* Call misc_init_r             */
+
+/*
+ * Only MPC8540 doesn't have CPM module
+ */
+#ifndef CONFIG_MPC8540
+#define CONFIG_CPM2            1       /* has CPM2                     */
+#endif
+
+/*
+ * sysclk for MPC85xx
+ *
+ * Two valid values are:
+ *    33000000
+ *    66000000
+ *
+ * Most PCI cards are still 33Mhz, so in the presence of PCI, 33MHz
+ * is likely the desired value here, so that is now the default.
+ * The board, however, can run at 66MHz.  In any event, this value
+ * must match the settings of some switches.  Details can be found
+ * in the README.mpc85xxads.
+ */
+
+#ifndef CONFIG_SYS_CLK_FREQ
+#define CONFIG_SYS_CLK_FREQ    33333333
+#endif
+
+/*
+ * 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 CFG_INIT_DBCR DBCR_IDM         /* Enable Debug Exceptions      */
+
+#undef CFG_DRAM_TEST                   /* memory test, takes time      */
+#define CFG_MEMTEST_START      0x00000000
+#define CFG_MEMTEST_END                0x10000000
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_CCSRBAR_DEFAULT    0xFF700000      /* CCSRBAR Default      */
+#define CFG_CCSRBAR            0xE0000000      /* relocated CCSRBAR    */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory */
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+#define CONFIG_ADD_RAM_INFO    1               /* print additional info*/
+
+#if defined(CONFIG_TQM8540) || defined(CONFIG_TQM8560)
+/* TQM8540 & 8560 need DLL-override */
+#define CONFIG_DDR_DLL                         /* DLL fix needed       */
+#define CONFIG_DDR_DEFAULT_CL  25              /* CAS latency 2,5      */
+#endif /* defined(CONFIG_TQM8540) || defined(CONFIG_TQM8560) */
+
+#if defined(CONFIG_TQM8541) || defined(CONFIG_TQM8555)
+#define CONFIG_DDR_DEFAULT_CL  30              /* CAS latency 3        */
+#endif /* defined(CONFIG_TQM8541) || defined(CONFIG_TQM8555) */
+
+/*
+ * Flash on the Local Bus
+ */
+#define CFG_FLASH0             0xFC000000
+#define CFG_FLASH1             0xF8000000
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH1, CFG_FLASH0 }
+
+#define CFG_LBC_FLASH_BASE     CFG_FLASH1      /* Localbus flash start */
+#define CFG_FLASH_BASE         CFG_LBC_FLASH_BASE /* start of FLASH    */
+
+#define CFG_BR0_PRELIM         0xfc001801      /* port size 32bit      */
+#define CFG_OR0_PRELIM         0xfc000040      /* 64MB Flash           */
+#define CFG_BR1_PRELIM         0xf8001801      /* port size 32bit      */
+#define CFG_OR1_PRELIM         0xfc000040      /* 64MB Flash           */
+
+#define CFG_FLASH_CFI                          /* flash is CFI compat. */
+#define CFG_FLASH_CFI_DRIVER                   /* Use common CFI driver*/
+#define CFG_FLASH_EMPTY_INFO           /* print 'E' for empty sector   */
+#define CFG_FLASH_QUIET_TEST   1       /* don't warn upon unknown flash*/
+
+#define CFG_MAX_FLASH_BANKS    2               /* number of banks      */
+#define CFG_MAX_FLASH_SECT     512             /* sectors per device   */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   60000   /* Flash Erase Timeout (ms)     */
+#define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (ms)     */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor     */
+
+#define CFG_LBC_LCRR           0x00030008    /* 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          0x20000000    /* LB refresh timer presc.*/
+
+#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 used area in RAM */
+
+#define CFG_GBL_DATA_SIZE      128             /* num bytes initial data*/
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256kB for Mon*/
+#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc  */
+
+/* Serial Port */
+#if defined(CONFIG_TQM8560)
+
+#define CONFIG_CONS_ON_SCC      /* define if console on SCC */
+#undef  CONFIG_CONS_NONE        /* define if console on something else */
+#define CONFIG_CONS_INDEX       1  /* which serial channel for console */
+
+#else
+
+#define CONFIG_CONS_INDEX     1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_NS16550_COM1       (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2       (CFG_CCSRBAR+0x4600)
+
+#endif /* CONFIG_TQM8560 */
+
+#define CONFIG_BAUDRATE         115200
+
+#define CFG_BAUDRATE_TABLE  \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
+
+/* Use the HUSH parser */
+#define CFG_HUSH_PARSER
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/* I2C */
+#define CONFIG_HARD_I2C                        /* I2C with hardware support    */
+#undef CONFIG_SOFT_I2C                 /* I2C bit-banged               */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {0x48}  /* Don't probe these addrs      */
+
+/* I2C RTC */
+#define CONFIG_RTC_DS1337              /* Use ds1337 rtc via i2c       */
+#define CFG_I2C_RTC_ADDR       0x68    /* at address 0x68              */
+
+/* I2C EEPROM */
+/*
+ * EEPROM configuration for onboard EEPROM M24C32 (M24C64 should work also).
+ */
+#define CFG_I2C_EEPROM_ADDR            0x50    /* 1010000x             */
+#define CFG_I2C_EEPROM_ADDR_LEN                2
+#define CFG_EEPROM_PAGE_WRITE_BITS     5       /* =32 Bytes per write  */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20
+#define CFG_I2C_MULTI_EEPROMS          1       /* more than one eeprom */
+
+/* I2C SYSMON (LM75) */
+#define CONFIG_DTT_LM75                1               /* ON Semi's LM75       */
+#define CONFIG_DTT_SENSORS     {0}             /* Sensor addresses     */
+#define CFG_DTT_MAX_TEMP       70
+#define CFG_DTT_LOW_TEMP       -30
+#define CFG_DTT_HYSTERESIS     3
+
+/* RapidIO MMU */
+#define CFG_RIO_MEM_BASE       0xc0000000      /* base address         */
+#define CFG_RIO_MEM_PHYS       CFG_RIO_MEM_BASE
+#define CFG_RIO_MEM_SIZE       0x20000000      /* 128M                 */
+
+/*
+ * 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      0x20000000      /* 512M                 */
+#define CFG_PCI1_IO_BASE       0xe2000000
+#define CFG_PCI1_IO_PHYS       CFG_PCI1_IO_BASE
+#define CFG_PCI1_IO_SIZE       0x1000000       /* 16M                  */
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play         */
+
+#define CONFIG_EEPRO100
+#undef CONFIG_TULIP
+
+#undef CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup  */
+#define CFG_PCI_SUBSYS_VENDORID 0x1057 /* Motorola                     */
+
+#endif /* CONFIG_PCI */
+
+
+#define CONFIG_NET_MULTI       1
+
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_MPC85XX_TSEC1   1
+#define CONFIG_MPC85XX_TSEC1_NAME      "TSEC0"
+#define CONFIG_MPC85XX_TSEC2   1
+#define CONFIG_MPC85XX_TSEC2_NAME      "TSEC1"
+#define TSEC1_PHY_ADDR         2
+#define TSEC2_PHY_ADDR         1
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define FEC_PHY_ADDR           3
+#define FEC_PHYIDX             0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+
+/* Options are TSEC[0-1], FEC */
+#define CONFIG_ETHPRIME                "TSEC0"
+
+#if defined(CONFIG_TQM8540)
+/*
+ * TQM8540 has 3 ethernet ports. 2 TSEC's and one FEC.
+ * The FEC port is connected on the same signals as the FCC3 port
+ * of the TQM8560 to the baseboard (STK85xx Starterkit).
+ *
+ * On the STK85xx Starterkit the X47/X50 jumper has to be set to
+ * a - d (X50.2 - 3) to enable the FEC port.
+ */
+#define CONFIG_MPC85XX_FEC     1
+#define CONFIG_MPC85XX_FEC_NAME        "FEC"
+#endif
+
+#if defined(CONFIG_TQM8541) || defined(CONFIG_TQM8555)
+/*
+ * TQM8541/55 have 4 ethernet ports. 2 TSEC's and 2 FCC's. Only one FCC port
+ * can be used at once, since only one FCC port is available on the STK85xx
+ * Starterkit.
+ *
+ * To use this port you have to configure U-Boot to use the FCC port 1...2
+ * and set the X47/X50 jumper to:
+ * FCC1: a - b (X47.2 - X50.2)
+ * FCC2: a - c (X50.2 - 1)
+ */
+#define CONFIG_ETHER_ON_FCC
+#define        CONFIG_ETHER_INDEX    1         /* FCC channel for ethernet     */
+#endif
+
+#if defined(CONFIG_TQM8560)
+/*
+ * TQM8560 has 5 ethernet ports. 2 TSEC's and 3 FCC's. Only one FCC port
+ * can be used at once, since only one FCC port is available on the STK85xx
+ * Starterkit.
+ *
+ * To use this port you have to configure U-Boot to use the FCC port 1...3
+ * and set the X47/X50 jumper to:
+ * FCC1: a - b (X47.2 - X50.2)
+ * FCC2: a - c (X50.2 - 1)
+ * FCC3: a - d (X50.2 - 3)
+ */
+#define CONFIG_ETHER_ON_FCC
+#define        CONFIG_ETHER_INDEX    3         /* FCC channel for ethernet     */
+#endif
+
+#if defined(CONFIG_ETHER_ON_FCC) && (CONFIG_ETHER_INDEX == 1)
+#define CONFIG_ETHER_ON_FCC1
+#define CFG_CMXFCR_MASK1       (CMXFCR_FC1 | CMXFCR_RF1CS_MSK | CMXFCR_TF1CS_MSK)
+#define CFG_CMXFCR_VALUE1      (CMXFCR_RF1CS_CLK11 | CMXFCR_TF1CS_CLK12)
+#define CFG_CPMFCR_RAMTYPE     0
+#define CFG_FCC_PSMR           (FCC_PSMR_FDE | FCC_PSMR_LPB)
+#endif
+
+#if defined(CONFIG_ETHER_ON_FCC) && (CONFIG_ETHER_INDEX == 2)
+#define CONFIG_ETHER_ON_FCC2
+#define CFG_CMXFCR_MASK2       (CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK)
+#define CFG_CMXFCR_VALUE2      (CMXFCR_RF2CS_CLK16 | CMXFCR_TF2CS_CLK13)
+#define CFG_CPMFCR_RAMTYPE     0
+#define CFG_FCC_PSMR           (FCC_PSMR_FDE | FCC_PSMR_LPB)
+#endif
+
+#if defined(CONFIG_ETHER_ON_FCC) && (CONFIG_ETHER_INDEX == 3)
+#define CONFIG_ETHER_ON_FCC3
+#define CFG_CMXFCR_MASK3       (CMXFCR_FC3 | CMXFCR_RF3CS_MSK | CMXFCR_TF3CS_MSK)
+#define CFG_CMXFCR_VALUE3      (CMXFCR_RF3CS_CLK15 | CMXFCR_TF3CS_CLK14)
+#define CFG_CPMFCR_RAMTYPE     0
+#define CFG_FCC_PSMR           (FCC_PSMR_FDE | FCC_PSMR_LPB)
+#endif
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE - 0x20000)
+#define CFG_ENV_SECT_SIZE      0x20000 /* 128K(one sector) for env     */
+#define CFG_ENV_SIZE           0x2000
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define        CONFIG_TIMESTAMP                /* Print image info with ts     */
+
+#if defined(CONFIG_PCI)
+# define ADD_PCI_CMD           (CFG_CMD_PCI)
+#else
+# define ADD_PCI_CMD           0
+#endif
+
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
+                                CFG_CMD_DHCP   | \
+                                CFG_CMD_NFS    | \
+                                CFG_CMD_SNTP   | \
+                                ADD_PCI_CMD    | \
+                                CFG_CMD_I2C    | \
+                                CFG_CMD_DATE   | \
+                                CFG_CMD_EEPROM | \
+                                CFG_CMD_DTT    | \
+                                CFG_CMD_MII    | \
+                                CFG_CMD_PING   )
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address         */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+    #define CFG_CBSIZE 1024            /* Console I/O Buffer Size      */
+#else
+    #define CFG_CBSIZE 256             /* Console I/O Buffer Size      */
+#endif
+
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buf Size        */
+#define CFG_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_HZ         1000            /* decrementer freq: 1ms ticks  */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ  (8 << 20)       /* Initial Memory map for Linux */
+
+/* Cache Configuration */
+#define CFG_DCACHE_SIZE                32768
+#define CFG_CACHELINE_SIZE     32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value */
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* 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
+
+
+#define CONFIG_LOADADDR         200000         /* default addr for tftp & bootm*/
+
+#define CONFIG_BOOTDELAY 5             /* -1 disables auto-boot        */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS         /* the boot command will set bootargs   */
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       CFG_BOOTFILE                                                    \
+       "netdev=eth0\0"                                                 \
+       "consdev=ttyS0\0"                                               \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=$serverip:$rootpath\0"                         \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs $bootargs "                              \
+               "ip=$ipaddr:$serverip:$gatewayip:$netmask"              \
+               ":$hostname:$netdev:off panic=1\0"                      \
+       "addcons=setenv bootargs $bootargs "                            \
+               "console=$consdev,$baudrate\0"                          \
+       "flash_nfs=run nfsargs addip addcons;"                          \
+               "bootm $kernel_addr\0"                                  \
+       "flash_self=run ramargs addip addcons;"                         \
+               "bootm $kernel_addr $ramdisk_addr\0"                    \
+       "net_nfs=tftp $loadaddr $bootfile;"                             \
+               "run nfsargs addip addcons;bootm\0"                     \
+       "rootpath=/opt/eldk/ppc_85xx\0"                                 \
+       "kernel_addr=FE000000\0"                                        \
+       "ramdisk_addr=FE100000\0"                                       \
+       "load=tftp 100000 /tftpboot/$hostname/u-boot.bin\0"             \
+       "update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;"   \
+               "cp.b 100000 fffc0000 40000;"                           \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load;run update\0"                                     \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#endif /* __CONFIG_H */
index 655427ec77d0c8ff668a0539a1e0697d388712c1..4a1a4325dc0160041ececfb914f16ff2f0ebd509 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM860L/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
index f67cbd2de344a1d697dd78136db2078bf7b6e167..4b754ba9cb9f94fb2b7890e8d72a88bf74a48511 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM860M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
index 2586518bb9e64e06b4d634fcfae9d082ecb88236..1dc9f74d5e113a6a0e2dbd3bda111c2b5c060493 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM862L/uImage\0"                           \
        "kernel_addr=40040000\0"                                        \
index 8c154995f4961c10ced742cbb1febe8f922bbb5d..3df060c619af9fed22d9ab74972e99ba9ac73c29 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM862M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
index ea51e89e3433b38d58b9f4fc8d128bdcf4a27275..8f9c2c9cbb59816a65d398498ee2d21470ccb0fc 100644 (file)
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/TQM866M/uImage\0"                           \
        "kernel_addr=40080000\0"                                        \
index 7e3c11ea69a418bb8550123dfb44dc16afee0601..817570323621a8df5930f86d0b5d805ae4fc7b3d 100644 (file)
 #define CONFIG_PCI_IO_SIZE     0x01000000
 
 #define CONFIG_NET_MULTI       1
+#define CONFIG_MII             1
 #define CONFIG_EEPRO100                1
 #define CFG_RX_ETH_BUFFER      8  /* use 8 rx buffer on eepro100  */
 #define CONFIG_NS8382X         1
 
 #else  /* MGT5100 */
 
+#define CONFIG_MII             1
 #define ADD_PCI_CMD            0  /* no CFG_CMD_PCI */
 
 #endif
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        "bootfile=/tftpboot/MPC5200/uImage\0"                           \
        ""
index d8370ed66d93fefadf26f4969bf9f6b20edb7f62..3ca137e53aca281879073e572b2fc476986ee83e 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_LCD_SMALL_MEM       0xF1400000  /* Epson S1D13704 Mem Base Address  */
 #define CFG_LCD_SMALL_REG       0xF140FFE0  /* Epson S1D13704 Reg Base Address  */
 
-#define CFG_LCD_LOGO_MAX_SIZE   (1024*1024)
+#define CFG_VIDEO_LOGO_MAX_SIZE (1 << 20)
 
 /*-----------------------------------------------------------------------
  * FPGA stuff
index 4aade443fbb93606770bbe55039e3517b860f475..f2f3ea7cc4d2f7ccc91889780a0aefb2d111cbc2 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_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
                                 CONFIG_BOOTP_DNS | \
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index d7f874974bc1dacc7371691a80a1e108639c61c4..92bade5187e13911bf15b1a190aac59053769187 100644 (file)
 #undef  CONFIG_BOOTARGS
 #define        CONFIG_EXTRA_ENV_SETTINGS       \
 "clean_nv=erase fff20000 ffffffff\0" \
-"update_boss=tftp 100000 PPC/logic157.bin; protect off fff00000 ffffffff; erase fff00000 ffffffff; cp.b 100000 fff00000 $(filesize); tftp 100000 PPC/bootmon157.bin; cp.b 100000 fff20000 $(filesize)\0" \
-"update_lx=tftp 100000 $(kernel); erase $(kernel_addr) ffefffff; cp.b 100000 $(kernel_addr) $(filesize)\0" \
-"update_fs=tftp 100000 $(fs).$(fstype); erase ff840000 ffdfffff; cp.b 100000 ff840000 $(filesize)\0" \
-"update_ub=tftp 100000 $(uboot); protect off fff00000 fff1ffff; erase fff00000 fff1ffff; cp.b 100000 fff00000 $(filesize); protect off ff820000 ff83ffff; erase ff820000 ff83ffff\0" \
-"flashargs=setenv bootargs root=$(rootdev) rw rootfstype=$(fstype)\0" \
-"nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)\0" \
-"addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off\0" \
-"addmisc=setenv bootargs $(bootargs) console=$(console),$(baudrate) ethaddr=$(ethaddr) panic=1\0" \
-"net_nfs=tftpboot 400000 $(kernel); run nfsargs addip addmisc; bootm\0" \
-"net_self=tftpboot 400000 $(kernel); run flashargs addmisc; bootm\0" \
-"flash_self=run flashargs addmisc; bootm $(kernel_addr)\0" \
-"flash_nfs=run nfsargs addip addmisc; bootm $(kernel_addr)\0" \
+"update_boss=tftp 100000 PPC/logic157.bin; protect off fff00000 ffffffff; erase fff00000 ffffffff; cp.b 100000 fff00000 ${filesize}; tftp 100000 PPC/bootmon157.bin; cp.b 100000 fff20000 ${filesize}\0" \
+"update_lx=tftp 100000 ${kernel}; erase ${kernel_addr} ffefffff; cp.b 100000 ${kernel_addr} ${filesize}\0" \
+"update_fs=tftp 100000 ${fs}.${fstype}; erase ff840000 ffdfffff; cp.b 100000 ff840000 ${filesize}\0" \
+"update_ub=tftp 100000 ${uboot}; protect off fff00000 fff1ffff; erase fff00000 fff1ffff; cp.b 100000 fff00000 ${filesize}; protect off ff820000 ff83ffff; erase ff820000 ff83ffff\0" \
+"flashargs=setenv bootargs root=${rootdev} rw rootfstype=${fstype}\0" \
+"nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath}\0" \
+"addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:${netdev}:off\0" \
+"addmisc=setenv bootargs ${bootargs} console=${console},${baudrate} ethaddr=${ethaddr} panic=1\0" \
+"net_nfs=tftpboot 400000 ${kernel}; run nfsargs addip addmisc; bootm\0" \
+"net_self=tftpboot 400000 ${kernel}; run flashargs addmisc; bootm\0" \
+"flash_self=run flashargs addmisc; bootm ${kernel_addr}\0" \
+"flash_nfs=run nfsargs addip addmisc; bootm ${kernel_addr}\0" \
 "fstype=cramfs\0" \
 "rootpath=/root_fs\0" \
 "uboot=PPC/u-boot.bin\0" \
index ae3f1f43ae03eac535b7d70e18c36bdd52763c48..8dc623ea069c6899e5ea59e8096a8274c2968480 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192            /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192            /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32              /* ...          */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5               /* log base 2 of the above val. */
index 2a78082fe24da648e382f73132f749476d36770d..2bd98b3af33e1338630287b963c295afca238f21 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192            /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192            /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32              /* ...          */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5               /* log base 2 of the above val. */
index 5c9950f6f8eec62fbab25054d3ac30e94b300f43..d92f81f78ee4f6784ef14f678174a0422ebbc6e1 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 347bb50332944f91260366261da8d5a9810294e4..9b32514867ab2d288207743ed9e447f1e1f7c40e 100644 (file)
@@ -24,7 +24,7 @@
  * config for XPedite1000 from XES Inc.
  * Ported from EBONY config by Travis B. Sawyer <tsawyer@sandburst.com>
  * (C) Copyright 2003 Sandburst Corporation
- * board/config_EBONY.h - configuration for IBM 440GP Ref (Ebony)
+ * board/config_EBONY.h - configuration for AMCC 440GP Ref (Ebony)
  ***********************************************************************/
 
 #ifndef __CONFIG_H
@@ -175,6 +175,7 @@ extern void out32(unsigned int, unsigned long);
 #define CONFIG_PHY3_ADDR       8       /* PHY address phy3 */
 #define CONFIG_NET_MULTI       1
 #define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+#define CONFIG_PHY_RESET        1       /* reset phy upon startup         */
 #define CFG_RX_ETH_BUFFER   32 /* Number of ethernet rx buffers & descriptors */
 
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
@@ -252,7 +253,7 @@ extern void out32(unsigned int, unsigned long);
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192 /* For IBM 440GX CPUs */
+#define CFG_DCACHE_SIZE                8192 /* For AMCC 440GX CPUs */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 2d3c0e5a91e5d7d36f5e10a4afb85b6f7e4d40e8..37ef1058f90dad6b6517032664b8f37880ef0ebf 100644 (file)
@@ -90,6 +90,7 @@
                                CFG_CMD_SNTP    )
 
 #define CONFIG_NET_MULTI
+#define CONFIG_MII
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
index ca6e52b2829bbf2718f59c4810f538d97d491545..aa6bc91b20fda543c5291f0bdfa8957cc4e8df1f 100644 (file)
        "rootpath=/opt/eldk/ppc_6xx\0"                                  \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath) "                      \
-               "console=ttyS0,$(baudrate)\0"                           \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off panic=1\0"                  \
+               "nfsroot=${serverip}:${rootpath} "                      \
+               "console=ttyS0,${baudrate}\0"                           \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_self=run ramargs addip;"                                 \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
-       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
+               "bootm ${kernel_addr}\0"                                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "bootfile=/tftpboot/tqm5200/uImage\0"                           \
-       "load=tftp 200000 $(u-boot)\0"                                  \
+       "load=tftp 200000 ${u-boot}\0"                                  \
        "u-boot=/tftpboot/tqm5200/u-boot.bin\0"                         \
        "update=protect off FC000000 FC05FFFF;"                         \
                "erase FC000000 FC05FFFF;"                              \
-               "cp.b 200000 FC000000 $(filesize);"                     \
+               "cp.b 200000 FC000000 ${filesize};"                     \
                "protect on FC000000 FC05FFFF\0"                        \
        ""
 
diff --git a/include/configs/armadillo.h b/include/configs/armadillo.h
new file mode 100644 (file)
index 0000000..9a1c559
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * (C) Copyright 2000
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * Configuation settings for the EP7312 board.
+ *
+ * Modified to work on Armadillo HT1070 ARM720T board
+ * (C) Copyright 2005 Rowel Atienza rowel@diwalabs.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 __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * If we are developing, we might want to start armboot from ram
+ * so we MUST NOT initialize critical regs like mem-timing ...
+ */
+/*#define      CONFIG_INIT_CRITICAL*/          /* undef for developing */
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_ARM7            1       /* This is a ARM7 CPU   */
+#define CONFIG_ARMADILLO       1       /* on an Armadillo Board      */
+#define CONFIG_ARM_THUMB       1       /* this is an ARM720TDMI */
+#undef  CONFIG_ARM7_REVD               /* disable ARM720 REV.D Workarounds */
+
+#undef CONFIG_USE_IRQ                  /* don't need them anymore */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN         (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_DRIVER_CS8900   1       /* we have a CS8900 on-board */
+#define CS8900_BASE            0x20000300 /* armadillo board */
+#define CS8900_BUS16           1
+#undef  CS8900_BUS32
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_SERIAL1         1       /* we use Serial line 1 */
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_BOOTP_MASK       (CONFIG_BOOTP_DEFAULT|CONFIG_BOOTP_BOOTFILESIZE)
+
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL) /* | CFG_CMD_JFFS2)*/
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_BOOTARGS        "root=/dev/ram0 rootfstype=ext2 console=ttyAM0,115200"
+
+#define CONFIG_BOOTCOMMAND     "bootm 40000 180000"
+
+/*
+ * Miscellaneous configurable options
+ */
+#define        CFG_LONGHELP                            /* undef to save memory         */
+#define        CFG_PROMPT              "ARMADILLO # "  /* Monitor Command Prompt       */
+#define        CFG_CBSIZE              256             /* Console I/O Buffer Size      */
+#define        CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define        CFG_MAXARGS             16              /* max number of command args   */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_MEMTEST_START      0xc0400000      /* memtest works on     */
+#define CFG_MEMTEST_END                0xc0800000      /* 4 ... 8 MB in DRAM   */
+
+#undef  CFG_CLKS_IN_HZ         /* everything, incl board info, in Hz */
+
+#define        CFG_LOAD_ADDR           0x00040000      /* default load address for armadillo: kernel img is here*/
+
+#define        CFG_HZ                  2000            /* decrementer freq: 2 kHz */
+
+                                               /* valid baudrates */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE       (128*1024)      /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ   (4*1024)        /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ   (4*1024)        /* FIQ stack */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS   1          /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1           0xc0000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE      0x02000000 /* 32 MB armadillo SDRAM */
+
+#define PHYS_FLASH_1           0x00000000 /* Flash Bank #1 */
+#define PHYS_FLASH_SIZE                0x00400000 /* 4 MB */
+
+#define CFG_FLASH_BASE         PHYS_FLASH_1
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT   (2*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT   (2*CFG_HZ) /* Timeout for Flash Write */
+
+#define        CFG_ENV_IS_IN_FLASH     1
+#define CFG_ENV_ADDR           (PHYS_FLASH_1 + 0x20000)        /* Addr of Environment Sector   */
+#define CFG_ENV_SIZE           0x20000 /* Total Size of Environment Sector     */
+
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+#endif /* __CONFIG_H */
index f0c0283956feccf8bca48611cfb9fbcae7145acb..8fad55d81cf4c36c84f7815996a2d0faeda08298 100644 (file)
@@ -98,7 +98,7 @@
 /* #define CONFIG_ENV_OVERWRITE        1 */
 
 #define CONFIG_COMMANDS                \
-                      ((CONFIG_CMD_DFL | \
+                      ((CONFIG_CMD_DFL | CFG_CMD_MII |\
                        CFG_CMD_DHCP ) & \
                      ~(CFG_CMD_BDI | \
                        CFG_CMD_IMI | \
index 881a4caee6e4c6636f80ff1c277a544db6c2391f..bf6c1709d909f1cc6b20d2c27ce56b4a12331742 100644 (file)
 #define CONFIG_BOOTCOMMAND                                             \
        "bootp;"                                                        \
        "setenv bootargs root=/dev/nfs rw "                             \
-       "nfsroot=$(serverip):$(rootpath) "                              \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"\
+       "nfsroot=${serverip}:${rootpath} "                              \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"\
        "bootm"
 
 /*-----------------------------------------------------------------------
index 64ea6bef91ff602b139a13d013e5c7ed86beb675..eacc74446cebc27bb9a6e20b6c2769838252b731 100644 (file)
@@ -73,7 +73,7 @@
  * Initial RAM & stack pointer (placed in SDRAM)
  *----------------------------------------------------------------------*/
 #define CFG_INIT_RAM_ADDR      0x70000000              /* DCache       */
-#define CFG_INIT_RAM_END       (8 << 10)
+#define CFG_INIT_RAM_END       (4 << 10)
 #define CFG_GBL_DATA_SIZE      256                     /* num bytes initial data       */
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
  * DDR SDRAM
  *----------------------------------------------------------------------------- */
 #define CONFIG_SPD_EEPROM               /* Use SPD EEPROM for setup             */
-#define SPD_EEPROM_ADDRESS      {0x50,0x51}    /* SPD i2c spd addresses        */
-#define CFG_SDRAM_ONBOARD_SIZE  (64 << 20) /* Bamboo has onboard and DIMM-slots!*/
+#undef CONFIG_DDR_ECC                  /* don't use ECC                        */
+#define CFG_SIMULATE_SPD_EEPROM        0xff    /* simulate spd eeprom on this address  */
+#define SPD_EEPROM_ADDRESS      {CFG_SIMULATE_SPD_EEPROM, 0x50, 0x51}
 
 /*-----------------------------------------------------------------------
  * I2C
        "netdev=eth0\0"                                                 \
        "hostname=bamboo\0"                                             \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/bamboo/uImage\0"                            \
 
 #define CONFIG_MII             1       /* MII PHY management           */
 #define CONFIG_PHY_ADDR                0       /* PHY address, See schematics  */
+#define CONFIG_PHY1_ADDR        1
 
 #ifndef CONFIG_BAMBOO_NAND
-#define CONFIG_NET_MULTI        1       /* required for netconsole      */
-#define CONFIG_PHY1_ADDR        1
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
 #endif /* CONFIG_BAMBOO_NAND */
 
-#define CONFIG_NO_PHY_RESET     1       /* no PHY reset on bamboo!!!    */
-
 #define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
 
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
+#define CONFIG_NET_MULTI        1       /* required for netconsole      */
+
 /* Partitions */
 #define CONFIG_MAC_PARTITION
 #define CONFIG_DOS_PARTITION
                                CFG_CMD_REGINFO | \
                                CFG_CMD_SDRAM   | \
                                CFG_CMD_USB     | \
+                               CFG_CMD_FAT     | \
+                               CFG_CMD_EXT2    | \
                                _CFG_CMD_NAND   | \
                                CFG_CMD_SNTP    )
 
+#define CONFIG_SUPPORT_VFAT
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                (32<<10) /* For IBM 440 CPUs                    */
+#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
diff --git a/include/configs/barco.h b/include/configs/barco.h
new file mode 100644 (file)
index 0000000..624fa1d
--- /dev/null
@@ -0,0 +1,364 @@
+/********************************************************************
+ *
+ * Unless otherwise specified, Copyright (C) 2004-2005 Barco Control Rooms
+ *
+ * $Source: /home/services/cvs/firmware/ppc/u-boot-1.1.2/include/configs/barco.h,v $
+ * $Revision: 1.2 $
+ * $Author: mleeman $
+ * $Date: 2005/02/21 12:48:58 $
+ *
+ * Last ChangeLog Entry
+ * $Log: barco.h,v $
+ * Revision 1.2  2005/02/21 12:48:58  mleeman
+ * update of copyright years (feedback wd)
+ *
+ * Revision 1.1  2005/02/14 09:29:25  mleeman
+ * moved barcohydra.h to barco.h
+ *
+ * Revision 1.4  2005/02/09 12:56:23  mleeman
+ * add generic header to track changes in sources
+ *
+ *
+ *******************************************************************/
+
+/*
+ * (C) Copyright 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
+ */
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC824X         1
+#define CONFIG_MPC8245         1
+#define CONFIG_BARCOBCD_STREAMING      1
+
+#undef USE_DINK32
+
+#define CONFIG_CONS_INDEX     3               /* set to '3' for on-chip DUART */
+#define CONFIG_BAUDRATE                9600
+#define CONFIG_DRAM_SPEED      100             /* MHz                          */
+
+#define CONFIG_BOOTARGS "mem=32M"
+
+/* Add support for a few extra bootp options like:
+ *     - File size
+ *     - DNS
+ */
+#define CONFIG_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
+                                CONFIG_BOOTP_BOOTFILESIZE | \
+                                CONFIG_BOOTP_DNS)
+
+#define CONFIG_COMMANDS                ( CONFIG_CMD_DFL | \
+                                 CFG_CMD_ELF    | \
+                                 CFG_CMD_I2C    | \
+                                 CFG_CMD_EEPROM | \
+                                 CFG_CMD_PCI    )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any)      */
+#include <cmd_confdefs.h>
+
+#define CONFIG_HUSH_PARSER     1 /* use "hush" command parser */
+#define CONFIG_BOOTDELAY       1
+#define CONFIG_BOOTCOMMAND     "boot_default"
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP           1               /* undef to save memory         */
+#define CFG_PROMPT             "=> "           /* Monitor Command Prompt       */
+#define CFG_CBSIZE             256             /* Console I/O Buffer Size      */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)  /* Print Buffer Size    */
+#define CFG_MAXARGS            16              /* max number of command args   */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_LOAD_ADDR          0x00100000      /* default load address         */
+#define CFG_HZ                 1000            /* decrementer freq: 1 ms ticks */
+
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_PCI                             /* include pci support          */
+#undef CONFIG_PCI_PNP
+#undef CFG_CMD_NET
+
+#define PCI_ENET0_IOADDR       0x80000000
+#define PCI_ENET0_MEMADDR      0x80000000
+#define        PCI_ENET1_IOADDR        0x81000000
+#define        PCI_ENET1_MEMADDR       0x81000000
+
+
+/*-----------------------------------------------------------------------
+ * 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_MAX_RAM_SIZE       0x02000000
+
+#define CONFIG_LOGBUFFER
+#ifdef CONFIG_LOGBUFFER
+#define CFG_STDOUT_ADDR        0x1FFC000
+#else
+#define CFG_STDOUT_ADDR        0x2B9000
+#endif
+
+#define CFG_RESET_ADDRESS      0xFFF00100
+
+#if defined (USE_DINK32)
+#define CFG_MONITOR_LEN                0x00030000
+#define CFG_MONITOR_BASE       0x00090000
+#define CFG_RAMBOOT            1
+#define CFG_INIT_RAM_ADDR      (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+#define CFG_INIT_RAM_END       0x10000
+#define CFG_GBL_DATA_SIZE      256  /* 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
+#else
+#undef CFG_RAMBOOT
+#define CFG_MONITOR_LEN                0x00030000
+#define CFG_MONITOR_BASE       TEXT_BASE
+
+#define CFG_GBL_DATA_SIZE      128
+
+#define CFG_INIT_RAM_ADDR     0x40000000
+#define CFG_INIT_RAM_END      0x1000
+#define CFG_GBL_DATA_OFFSET  (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+
+#endif
+
+#define CFG_FLASH_BASE         0xFFF00000
+#define CFG_FLASH_SIZE         (8 * 1024 * 1024)       /* Unity has onboard 1MByte flash */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_OFFSET         0x000047A4      /* Offset of Environment Sector */
+#define CFG_ENV_SIZE           0x00002000      /* Total Size of Environment Sector */
+/* #define ENV_CRC             0x8BF6F24B      XXX - FIXME: gets defined automatically */
+
+#define CFG_MALLOC_LEN         (512 << 10)     /* Reserve 512 kB for malloc()  */
+
+#define CFG_MEMTEST_START      0x00000000      /* memtest works on             */
+#define CFG_MEMTEST_END                0x04000000      /* 0 ... 32 MB in DRAM          */
+
+#define CFG_EUMB_ADDR          0xFDF00000
+
+#define CFG_FLASH_RANGE_BASE   0xFFC00000      /* flash memory address range   */
+#define CFG_FLASH_RANGE_SIZE   0x00400000
+#define FLASH_BASE0_PRELIM     0xFFF00000      /* sandpoint flash              */
+#define FLASH_BASE1_PRELIM     0xFF000000      /* PMC onboard flash            */
+
+/*
+ * select i2c support configuration
+ *
+ * Supported configurations are {none, software, hardware} drivers.
+ * If the software driver is chosen, there are some additional
+ * configuration items that the driver uses to drive the port pins.
+ */
+#define CONFIG_HARD_I2C                1               /* To enable I2C support        */
+#undef  CONFIG_SOFT_I2C                                /* I2C bit-banged               */
+#define CFG_I2C_SPEED          400000          /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+
+#ifdef CONFIG_SOFT_I2C
+#error "Soft I2C is not configured properly.  Please review!"
+#define I2C_PORT               3               /* Port A=0, B=1, C=2, D=3 */
+#define I2C_ACTIVE             (iop->pdir |=  0x00010000)
+#define I2C_TRISTATE           (iop->pdir &= ~0x00010000)
+#define I2C_READ               ((iop->pdat & 0x00010000) != 0)
+#define I2C_SDA(bit)           if(bit) iop->pdat |=  0x00010000; \
+                               else    iop->pdat &= ~0x00010000
+#define I2C_SCL(bit)           if(bit) iop->pdat |=  0x00020000; \
+                               else    iop->pdat &= ~0x00020000
+#define I2C_DELAY              udelay(5)       /* 1/4 I2C clock duration */
+#endif /* CONFIG_SOFT_I2C */
+
+#define CFG_I2C_EEPROM_ADDR    0x57            /* EEPROM IS24C02               */
+#define CFG_I2C_EEPROM_ADDR_LEN        1               /* Bytes of address             */
+#define CFG_EEPROM_PAGE_WRITE_BITS     3
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10      /* and takes up to 10 msec */
+
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+#define CFG_FLASH_BANKS                { FLASH_BASE0_PRELIM , FLASH_BASE1_PRELIM }
+#define CFG_DBUS_SIZE2         1
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+
+
+ /*
+ * NS16550 Configuration (internal DUART)
+ */
+ /*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+
+#define CONFIG_SYS_CLK_FREQ  33333333  /* external frequency to pll */
+
+#define CFG_ROMNAL             0x0F    /*rom/flash next access time            */
+#define CFG_ROMFAL             0x1E    /*rom/flash access time                 */
+
+#define CFG_REFINT     0x8F    /* no of clock cycles between CBR refresh cycles */
+
+/* the following are for SDRAM only*/
+#define CFG_BSTOPRE    0x25C   /* Burst To Precharge, sets open page interval */
+#define CFG_REFREC             8       /* Refresh to activate interval         */
+#define CFG_RDLAT              4       /* data latency from read command       */
+#define CFG_PRETOACT           3       /* Precharge to activate interval       */
+#define CFG_ACTTOPRE           5       /* Activate to Precharge interval       */
+#define CFG_ACTORW             2       /* Activate to R/W                      */
+#define CFG_SDMODE_CAS_LAT     3       /* SDMODE CAS latency                   */
+#define CFG_SDMODE_WRAP                0       /* SDMODE wrap type                     */
+
+#define CFG_REGISTERD_TYPE_BUFFER   1
+#define CFG_EXTROM 0
+#define CFG_REGDIMM 0
+
+
+/* memory bank settings*/
+/*
+ * only bits 20-29 are actually used from these vales to set the
+ * start/end address the upper two bits will be 0, and the lower 20
+ * bits will be set to 0x00000 for a start address, or 0xfffff for an
+ * end address
+ */
+#define CFG_BANK0_START                0x00000000
+#define CFG_BANK0_END          0x01FFFFFF
+#define CFG_BANK0_ENABLE       1
+#define CFG_BANK1_START                0x02000000
+#define CFG_BANK1_END          0x02ffffff
+#define CFG_BANK1_ENABLE       0
+#define CFG_BANK2_START                0x03f00000
+#define CFG_BANK2_END          0x03ffffff
+#define CFG_BANK2_ENABLE       0
+#define CFG_BANK3_START                0x04000000
+#define CFG_BANK3_END          0x04ffffff
+#define CFG_BANK3_ENABLE       0
+#define CFG_BANK4_START                0x05000000
+#define CFG_BANK4_END          0x05FFFFFF
+#define CFG_BANK4_ENABLE       0
+#define CFG_BANK5_START                0x06000000
+#define CFG_BANK5_END          0x06FFFFFF
+#define CFG_BANK5_ENABLE       0
+#define CFG_BANK6_START                0x07000000
+#define CFG_BANK6_END          0x07FFFFFF
+#define CFG_BANK6_ENABLE       0
+#define CFG_BANK7_START                0x08000000
+#define CFG_BANK7_END          0x08FFFFFF
+#define CFG_BANK7_ENABLE       0
+/*
+ * Memory bank enable bitmask, specifying which of the banks defined above
+ are actually present. MSB is for bank #7, LSB is for bank #0.
+ */
+#define CFG_BANK_ENABLE                0x01
+
+#define CFG_ODCR               0xff    /* configures line driver impedances,   */
+                                       /* see 8240 book for bit definitions    */
+#define CFG_PGMAX              0x32    /* how long the 8240 retains the        */
+                                       /* currently accessed page in memory    */
+                                       /* see 8240 book for details            */
+
+/* SDRAM 0 - 256MB */
+#define CFG_IBAT0L     (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT0U     (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* stack in DCACHE @ 1GB (no backing mem) */
+#if defined(USE_DINK32)
+#define CFG_IBAT1L     (0x40000000 | BATL_PP_00 )
+#define CFG_IBAT1U     (0x40000000 | BATU_BL_128K )
+#else
+#define CFG_IBAT1L     (CFG_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT1U     (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
+#endif
+
+/* PCI memory */
+#define CFG_IBAT2L     (0x80000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT2U     (0x80000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* Flash, config addrs, etc */
+#define CFG_IBAT3L     (0xF0000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT3U     (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT0L     CFG_IBAT0L
+#define CFG_DBAT0U     CFG_IBAT0U
+#define CFG_DBAT1L     CFG_IBAT1L
+#define CFG_DBAT1U     CFG_IBAT1U
+#define CFG_DBAT2L     CFG_IBAT2L
+#define CFG_DBAT2U     CFG_IBAT2U
+#define CFG_DBAT3L     CFG_IBAT3L
+#define CFG_DBAT3U     CFG_IBAT3U
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     20      /* 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_CHECKSUM
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     32      /* For MPC8240 CPU                      */
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#  define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
+#endif
+
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM          0x02    /* Software reboot                      */
+
+/* values according to the manual */
+
+#define CONFIG_DRAM_50MHZ      1
+#define CONFIG_SDRAM_50MHZ
+
+#define CONFIG_DISK_SPINUP_TIME 1000000
+
+
+#endif /* __CONFIG_H */
index bc5aaf893411f44efd4665e95025bb72b725d900..4a79835d6ac3c30e938f4a654daaabe441e02c67 100644 (file)
        "netdev=eth0\0"                                                 \
        "hostname=bubinga\0"                                            \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/bubinga/uImage\0"                           \
 #define CONFIG_NET_MULTI       1
 #define CFG_RX_ETH_BUFFER      16      /* Number of ethernet rx buffers & descriptors */
 
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
+
 #define CONFIG_RTC_DS174x      1       /* use DS1743 RTC in Bubinga    */
 
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405EP CPU                    */
+#define CFG_DCACHE_SIZE                16384   /* For AMCC 405EP CPU                   */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index c1499f425eebefa14ea864d21cfc0f821ff257d9..ae75539c37aabee0b57af3a4a83efdf90cffcdf9 100644 (file)
@@ -55,8 +55,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 9b91d5881c2b433edd356497ea32516fd4345f82..2c160a44891a63fd37d46373b3d4fa76c748a703 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
+               "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"     \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_6xx\0"                                  \
        "bootfile=/tftpboot/canmb/uImage\0"                             \
        ""
index 12d0cca265be8a170daedbcc871fe58d6a561ca3..46280f7e325381863b02088ea26a65406be5127e 100644 (file)
 #define __CONFIG_H
 
 /* ARM asynchronous clock */
-#define AT91C_MAIN_CLOCK       207360000       /* from 18.432 MHz crystal (18432000 / 4 * 45) */
+#define AT91C_MAIN_CLOCK       179712000       /* from 18.432 MHz crystal (18432000 / 4 * 39) */
 #define AT91C_MASTER_CLOCK     (AT91C_MAIN_CLOCK/3)    /* peripheral clock */
 
 #define AT91_SLOW_CLOCK                32768   /* slow clock */
 
 #define CONFIG_ARM920T         1       /* This is an ARM920T Core      */
 #define CONFIG_AT91RM9200      1       /* It's an Atmel AT91RM9200 SoC */
-#define CONFIG_AT91RM9200DK    1       /* on an AT91RM9200DK Board     */
 #define CONFIG_CMC_PU2         1       /* on an CMC_PU2 Board          */
 #undef  CONFIG_USE_IRQ                 /* we don't need IRQ/FIQ stuff  */
 #define USE_920T_MMU           1
@@ -54,7 +53,7 @@
 #define SMC2_CSR_VAL   0x100032ad /* 16bit, 2 TDF, 4 WS */
 
 /* clocks */
-#define PLLAR_VAL      0x202CBE04 /* 207.360 MHz for PCK */
+#define PLLAR_VAL      0x2026BE04 /* 179,712 MHz for PCK */
 #define PLLBR_VAL      0x10483E0E /* 48.054857 MHz (divider by 2 for USB) */
 #define MCKR_VAL       0x00000202 /* PCK/3 = MCK Master Clock = 69.120MHz from PLLA */
 
@@ -217,30 +216,30 @@ struct bd_info_ext {
 #define CONFIG_VERSION_VARIABLE        1       /* include version env variable */
 
 #define        CONFIG_EXTRA_ENV_SETTINGS       \
-       "net_nfs=tftp $(loadaddr) $(bootfile);run nfsargs addip addcons " \
+       "net_nfs=tftp ${loadaddr} ${bootfile};run nfsargs addip addcons " \
                "addmtd;bootm\0" \
        "nfsargs=setenv bootargs root=/dev/nfs rw " \
-               "nfsroot=$(serverip):$(rootpath)\0" \
-       "net_cramfs=tftp $(loadaddr) $(bootfile); run flashargs addip " \
+               "nfsroot=${serverip}:${rootpath}\0" \
+       "net_cramfs=tftp ${loadaddr} ${bootfile}; run flashargs addip " \
                "addcons addmtd; bootm\0" \
        "flash_cramfs=run flashargs addip addcons addmtd; bootm 10030000\0" \
        "flashargs=setenv bootargs root=/dev/mtdblock3 ro\0" \
-       "addip=setenv bootargs $(bootargs) ethaddr=$(ethaddr) " \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):" \
-               "$(hostname)::off\0" \
-       "addcons=setenv bootargs $(bootargs) console=ttyS0,$(baudrate)\0" \
-       "addmtd=setenv bootargs $(bootargs) mtdparts=cmc_pu2:128k(uboot)ro," \
+       "addip=setenv bootargs ${bootargs} ethaddr=${ethaddr} " \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:" \
+               "${hostname}::off\0" \
+       "addcons=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0" \
+       "addmtd=setenv bootargs ${bootargs} mtdparts=cmc_pu2:128k(uboot)ro," \
                "64k(environment),768k(linux),4096k(root),-\0" \
-       "load=tftp $(loadaddr) $(loadfile)\0" \
+       "load=tftp ${loadaddr} ${loadfile}\0" \
        "update=protect off 10000000 1001ffff;erase 10000000 1001ffff; " \
-               "cp.b $(loadaddr) 10000000 $(filesize);" \
+               "cp.b ${loadaddr} 10000000 ${filesize};" \
                "protect on 10000000 1001ffff\0" \
-       "updatel=era 10030000 100effff;tftp $(loadaddr) $(bootfile); " \
-               "cp.b $(loadaddr) 10030000 $(filesize)\0" \
-       "updatec=era 100f0000 104effff;tftp $(loadaddr) $(cramfsimage); " \
-               "cp.b $(loadaddr) 100f0000 $(filesize)\0" \
-       "updatej=era 104f0000 107fffff;tftp $(loadaddr) $(jffsimage); " \
-               "cp.b $(loadaddr) 104f0000 $(filesize)\0" \
+       "updatel=era 10030000 100effff;tftp ${loadaddr} ${bootfile}; " \
+               "cp.b ${loadaddr} 10030000 ${filesize}\0" \
+       "updatec=era 100f0000 104effff;tftp ${loadaddr} ${cramfsimage}; " \
+               "cp.b ${loadaddr} 100f0000 ${filesize}\0" \
+       "updatej=era 104f0000 107fffff;tftp ${loadaddr} ${jffsimage}; " \
+               "cp.b ${loadaddr} 104f0000 ${filesize}\0" \
        "cramfsimage=cramfs_cmc-pu2.img\0" \
        "jffsimage=jffs2_cmc-pu2.img\0" \
        "loadfile=u-boot_cmc-pu2.bin\0" \
diff --git a/include/configs/cpci5200.h b/include/configs/cpci5200.h
new file mode 100644 (file)
index 0000000..f9586fb
--- /dev/null
@@ -0,0 +1,417 @@
+/*
+ * (C) Copyright 2003-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+
+ */
+
+/*************************************************************************
+ * (c) 2005 esd gmbh Hannover
+ *
+ *
+ * from IceCube.h file
+ * by Reinhard Arlt reinhard.arlt@esd-electronics.com
+ *
+ *************************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC5200         1       /* This is an MPC5xxx CPU */
+#define CONFIG_MPC5xxx         1       /* This is an MPC5xxx CPU */
+#define CONFIG_ICECUBE         1       /* ... on IceCube board   */
+#define CONFIG_CPCI5200                1       /* ... on CPCI5200  board */
+#define CONFIG_MPC5200_DDR     1       /* ... use DDR RAM        */
+
+#define CFG_MPC5XXX_CLKIN      33000000        /* ... running at 33.000000MHz */
+
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH  */
+#define BOOTFLAG_WARM          0x02    /* Software reboot           */
+
+#define CFG_CACHELINE_SIZE     32      /* For MPC5xxx CPUs */
+#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                9600    /* ... at 115200 bps */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+#ifdef CONFIG_MPC5200          /* MPC5100 PCI is not supported yet. */
+/*
+ * PCI Mapping:
+ * 0x40000000 - 0x4fffffff - PCI Memory
+ * 0x50000000 - 0x50ffffff - PCI IO Space
+ */
+#if 1
+#define CONFIG_PCI             1
+#if 1
+#define CONFIG_PCI_PNP         1
+#endif
+#define CONFIG_PCI_SCAN_SHOW   1
+
+#define CONFIG_PCI_MEM_BUS     0x40000000
+#define CONFIG_PCI_MEM_PHYS    CONFIG_PCI_MEM_BUS
+#define CONFIG_PCI_MEM_SIZE    0x10000000
+
+#define CONFIG_PCI_IO_BUS      0x50000000
+#define CONFIG_PCI_IO_PHYS     CONFIG_PCI_IO_BUS
+#define CONFIG_PCI_IO_SIZE     0x01000000
+#endif
+
+#define CONFIG_MII
+#if 0                          /* test-only !!! */
+#define CONFIG_NET_MULTI       1
+#define CONFIG_EEPRO100                1
+#define CFG_RX_ETH_BUFFER      8       /* use 8 rx buffer on eepro100  */
+#define CONFIG_NS8382X         1
+#endif
+
+#define ADD_PCI_CMD            CFG_CMD_PCI
+
+#else                          /* MPC5100 */
+
+#define ADD_PCI_CMD            0       /* no CFG_CMD_PCI */
+
+#endif
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+
+/* USB */
+#if 0
+#define CONFIG_USB_OHCI
+#define ADD_USB_CMD            CFG_CMD_USB | CFG_CMD_FAT
+#define CONFIG_USB_STORAGE
+#else
+#define ADD_USB_CMD            0
+#endif
+
+/*
+ * Supported commands
+ */
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
+                                CFG_CMD_EEPROM | \
+                                CFG_CMD_FAT    | \
+                                CFG_CMD_IDE    | \
+                                CFG_CMD_I2C    | \
+                                CFG_CMD_BSP    | \
+                                CFG_CMD_ELF    | \
+                                CFG_CMD_EXT2   | \
+                                CFG_CMD_DATE   | \
+                                ADD_PCI_CMD      )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#if (TEXT_BASE == 0xFF000000)  /* Boot low with 16 MB Flash */
+#   define CFG_LOWBOOT         1
+#   define CFG_LOWBOOT16       1
+#endif
+#if (TEXT_BASE == 0xFF800000)  /* Boot low with  8 MB Flash */
+#   define CFG_LOWBOOT         1
+#   define CFG_LOWBOOT08       1
+#endif
+
+/*
+ * Autobooting
+ */
+#define CONFIG_BOOTDELAY       3       /* autoboot after 5 seconds */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Welcome to esd CPU CPCI/5200;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS \
+       "netdev=eth0\0" \
+       "flash_vxworks0=run ata_vxworks_args;setenv loadaddr ff000000;bootvx\0" \
+       "flash_vxworks1=run ata_vxworks_args;setenv loadaddr ff200000:bootvx\0" \
+       "net_vxworks=phypower 1;sleep 2;tftp ${loadaddr} ${image};run vxworks_args;bootvx\0" \
+       "vxworks_args=setenv bootargs fec(0,0)${host}:${image} h=${serverip} e=${ipaddr} g=${gatewayip} u=${user} ${pass} tn=${target} s=${script}\0" \
+       "ata_vxworks_args=setenv bootargs /ata0/vxWorks h=${serverip} e=${ipaddr} g=${gatewayip} u=${user} ${pass} tn=${target} s=${script} o=fec0 \0" \
+       "loadaddr=01000000\0" \
+       "serverip=192.168.2.99\0" \
+       "gatewayip=10.0.0.79\0" \
+       "user=mu\0" \
+       "target=cpci5200.esd\0" \
+       "script=cpci5200.bat\0" \
+       "image=/tftpboot/vxWorks_cpci5200\0" \
+       "ipaddr=10.0.13.196\0" \
+       "netmask=255.255.0.0\0" \
+       ""
+
+#define CONFIG_BOOTCOMMAND     "run flash_vxworks0"
+
+#if defined(CONFIG_MPC5200)
+
+#define CONFIG_RTC_M48T35A     1       /* ST Electronics M48 timekeeper */
+#define CFG_NVRAM_BASE_ADDR    0xfd010000
+#define CFG_NVRAM_SIZE         32*1024
+
+/*
+ * IPB Bus clocking configuration.
+ */
+#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#endif
+/*
+ * I2C configuration
+ */
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support */
+#define CFG_I2C_MODULE         1       /* Select I2C module #1 or #2 */
+
+#define CFG_I2C_SPEED          86000   /* 100 kHz */
+#define CFG_I2C_SLAVE          0x7F
+
+/*
+ * EEPROM configuration
+ */
+#define CFG_I2C_EEPROM_ADDR            0x50    /* 1010000x */
+#define CFG_I2C_EEPROM_ADDR_LEN                2
+#define CFG_EEPROM_PAGE_WRITE_BITS     5
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20
+#define CFG_I2C_MULTI_EEPROMS          1
+/*
+ * Flash configuration
+ */
+
+#define CFG_FLASH_CFI          1       /* Flash is CFI conformant           */
+#define CFG_FLASH_BASE         0xFE000000
+#define CFG_FLASH_SIZE         0x02000000
+#define CFG_FLASH_INCREMENT    0x01000000
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x00000000)
+#define CFG_MAX_FLASH_BANKS    2       /* max num of memory banks      */
+#define CFG_MAX_FLASH_SECT     128
+
+#define CFG_FLASH_PROTECTION   1       /* use hardware protection           */
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)  */
+
+#define CFG_FLASH_ERASE_TOUT   240000  /* Flash Erase Timeout (in ms)  */
+#define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (in ms)  */
+
+/*
+ * Environment settings
+ */
+#if 1                          /* test-only */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_SIZE           0x20000
+#define CFG_ENV_SECT_SIZE      0x20000
+#define CONFIG_ENV_OVERWRITE   1
+#else
+#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars */
+#define CFG_ENV_OFFSET         0x0000  /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x0400  /* 8192 bytes may be used for env vars */
+                                  /* total size of a CAT24WC32 is 8192 bytes */
+#define CONFIG_ENV_OVERWRITE   1
+#endif
+
+/*
+ * Memory map
+ */
+#define CFG_MBAR               0xF0000000
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_DEFAULT_MBAR       0x80000000
+
+/* 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 */
+
+/*
+ * Ethernet configuration
+ */
+#define CONFIG_MPC5xxx_FEC     1
+/*
+ * Define CONFIG_FEC_10MBIT to force FEC at 10Mb
+ */
+/* #define CONFIG_FEC_10MBIT 1 */
+#define CONFIG_PHY_ADDR                0x00
+#define CONFIG_UDP_CHECKSUM    1
+
+/*
+ * GPIO configuration
+ */
+#define CFG_GPS_PORT_CONFIG    0x01052444
+
+/*
+ * 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)  /* 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_VXWORKS_MAC_PTR    0x00000000      /* Pass Ethernet MAC to VxWorks */
+
+/*
+ * Various low-level settings
+ */
+#if defined(CONFIG_MPC5200)
+#define CFG_HID0_INIT          HID0_ICE | HID0_ICFI
+#define CFG_HID0_FINAL         HID0_ICE
+#else
+#define CFG_HID0_INIT          0
+#define CFG_HID0_FINAL         0
+#endif
+
+#define CFG_BOOTCS_START       CFG_FLASH_BASE
+#define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
+#define CFG_BOOTCS_CFG         0x0004DD00
+
+#define CFG_CS0_START          CFG_FLASH_BASE
+#define CFG_CS0_SIZE           CFG_FLASH_SIZE
+
+#define CFG_CS1_START          0xfd000000
+#define CFG_CS1_SIZE           0x00010000
+#define CFG_CS1_CFG            0x10101410
+
+#define CFG_CS3_START          0xfd010000
+#define CFG_CS3_SIZE           0x00010000
+#define CFG_CS3_CFG            0x10109410
+
+#define CFG_CS_BURST           0x00000000
+#define CFG_CS_DEADCYCLE       0x33333333
+
+#define CFG_RESET_ADDRESS      0xff000000
+
+/*-----------------------------------------------------------------------
+ * USB stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_USB_CLOCK       0x0001BBBB
+#define CONFIG_USB_CONFIG      0x00001000
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA stuff Supports IDE harddisk
+ *-----------------------------------------------------------------------
+ */
+
+#undef CONFIG_IDE_8xx_PCCARD   /* Use IDE with PC Card Adapter */
+
+#undef CONFIG_IDE_8xx_DIRECT   /* Direct IDE    not supported  */
+#undef CONFIG_IDE_LED          /* LED   for ide not supported  */
+
+#define        CONFIG_IDE_RESET        /* reset for ide supported      */
+#define CONFIG_IDE_PREINIT
+
+#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      MPC5XXX_ATA
+
+/* Offset for data I/O                 */
+#define CFG_ATA_DATA_OFFSET    (0x0060)
+
+/* Offset for normal register accesses */
+#define CFG_ATA_REG_OFFSET     (CFG_ATA_DATA_OFFSET)
+
+/* Offset for alternate registers      */
+#define CFG_ATA_ALT_OFFSET     (0x005C)
+
+/* Interval between registers                                               */
+#define CFG_ATA_STRIDE         4
+
+/*-----------------------------------------------------------------------
+ * CPLD stuff
+ */
+#define CFG_FPGA_XC95XL                1       /* using Xilinx XC95XL CPLD      */
+#define CFG_FPGA_MAX_SIZE      32*1024 /* 32kByte is enough for CPLD    */
+
+/* CPLD program pin configuration */
+#define CFG_FPGA_PRG           0x20000000      /* JTAG TMS pin (ppc output)           */
+#define CFG_FPGA_CLK           0x10000000      /* JTAG TCK pin (ppc output)           */
+#define CFG_FPGA_DATA          0x20000000      /* JTAG TDO->TDI data pin (ppc output) */
+#define CFG_FPGA_DONE          0x10000000      /* JTAG TDI->TDO pin (ppc input)       */
+
+#define JTAG_GPIO_ADDR_TMS     (CFG_MBAR + 0xB10)      /* JTAG TMS pin (GPS data out value reg.)      */
+#define JTAG_GPIO_ADDR_TCK     (CFG_MBAR + 0xC0C)      /* JTAG TCK pin (GPW data out value reg.)      */
+#define JTAG_GPIO_ADDR_TDI     (CFG_MBAR + 0xC0C)      /* JTAG TDO->TDI pin (GPW data out value reg.) */
+#define JTAG_GPIO_ADDR_TDO     (CFG_MBAR + 0xB14)      /* JTAG TDI->TDO pin (GPS data in value reg.)  */
+
+#define JTAG_GPIO_ADDR_CFG     (CFG_MBAR + 0xB00)
+#define JTAG_GPIO_CFG_SET      0x00000000
+#define JTAG_GPIO_CFG_RESET    0x00F00000
+
+#define JTAG_GPIO_ADDR_EN_TMS  (CFG_MBAR + 0xB04)
+#define JTAG_GPIO_TMS_EN_SET   0x20000000      /* Enable for GPIO */
+#define JTAG_GPIO_TMS_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TMS (CFG_MBAR + 0xB0C)
+#define JTAG_GPIO_TMS_DDR_SET  0x20000000      /* Set as output   */
+#define JTAG_GPIO_TMS_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TCK  (CFG_MBAR + 0xC00)
+#define JTAG_GPIO_TCK_EN_SET   0x20000000      /* Enable for GPIO */
+#define JTAG_GPIO_TCK_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TCK (CFG_MBAR + 0xC08)
+#define JTAG_GPIO_TCK_DDR_SET  0x20000000      /* Set as output   */
+#define JTAG_GPIO_TCK_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TDI  (CFG_MBAR + 0xC00)
+#define JTAG_GPIO_TDI_EN_SET   0x10000000      /* Enable as GPIO  */
+#define JTAG_GPIO_TDI_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TDI (CFG_MBAR + 0xC08)
+#define JTAG_GPIO_TDI_DDR_SET  0x10000000      /* Set as output   */
+#define JTAG_GPIO_TDI_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TDO  (CFG_MBAR + 0xB04)
+#define JTAG_GPIO_TDO_EN_SET   0x10000000      /* Enable as GPIO  */
+#define JTAG_GPIO_TDO_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TDO (CFG_MBAR + 0xB0C)
+#define JTAG_GPIO_TDO_DDR_SET  0x00000000
+#define JTAG_GPIO_TDO_DDR_RESET 0x10000000     /* Set as input    */
+
+#endif                         /* __CONFIG_H */
index ac1cead8d474b1c965613b98a5634fa854b60aa8..27d64c1e434a91eb30619f620cf54dec38ca89df 100644 (file)
@@ -58,7 +58,7 @@
 #define CONFIG_BOOTCOMMAND \
        "setenv bootargs console=ttyS0,38400 debug " \
        "root=/dev/ram rw ramdisk_size=4096 " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm fe000000 fe100000"
 #endif
 
@@ -67,8 +67,8 @@
 #define CONFIG_BOOTCOMMAND \
        "bootp; " \
        "setenv bootargs console=ttyS0,38400 debug " \
-       "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm"
 #endif
 
  * Cache configuration
  *
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's */
+#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
 
index 4e5dcfcf07aa9b839e5fc9de09fc8cf758bdae2b..09d52ded9eeb58bfd10e53e9d497334d380c26d9 100644 (file)
@@ -58,7 +58,7 @@
 #define CONFIG_BOOTCOMMAND \
        "setenv bootargs console=ttyS0,38400 debug " \
        "root=/dev/ram rw ramdisk_size=4096 " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm ff800000 ff900000"
 #endif
 
@@ -67,8 +67,8 @@
 #define CONFIG_BOOTCOMMAND \
        "bootp; " \
        "setenv bootargs console=ttyS0,38400 debug " \
-       "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; " \
+       "root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \
        "bootm"
 #endif
 
  * Cache configuration
  *
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's */
+#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
 
diff --git a/include/configs/csb637.h b/include/configs/csb637.h
new file mode 100644 (file)
index 0000000..071d5b7
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * (C) Copyright 2005 REA Elektronik GmbH <www.rea.de>
+ * Anders Larsen <alarsen@rea.de>
+ *
+ * Configuation settings for the Cogent CSB637 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
+
+/* ARM asynchronous clock */
+#define AT91C_MAIN_CLOCK       184320000       /* from 3.6864 MHz crystal (3686400 * 50) */
+#define AT91C_MASTER_CLOCK     46080000        /* (AT91C_MAIN_CLOCK/4) peripheral clock */
+
+#define AT91_SLOW_CLOCK                32768   /* slow clock */
+
+#define CONFIG_ARM920T         1       /* This is an ARM920T Core      */
+#define CONFIG_AT91RM9200      1       /* It's an Atmel AT91RM9200 SoC */
+#define CONFIG_CSB637          1       /* on a CSB637 board            */
+#undef  CONFIG_USE_IRQ                 /* we don't need IRQ/FIQ stuff  */
+#define USE_920T_MMU           1
+
+#define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs      */
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_INITRD_TAG      1
+
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+#define CFG_USE_MAIN_OSCILLATOR                1
+/* flash */
+#define MC_PUIA_VAL    0x00000000
+#define MC_PUP_VAL     0x00000000
+#define MC_PUER_VAL    0x00000000
+#define MC_ASR_VAL     0x00000000
+#define MC_AASR_VAL    0x00000000
+#define EBI_CFGR_VAL   0x00000000
+#define SMC2_CSR_VAL   0x00003284 /* 16bit, 2 TDF, 4 WS */
+
+/* clocks */
+#define PLLAR_VAL      0x2031BE01 /* 184.320000 MHz for PCK */
+#define PLLBR_VAL      0x128A3E19 /* 47.996928 MHz (divider by 2 for USB) */
+#define MCKR_VAL       0x00000302 /* PCK/4 = MCK Master Clock = 46.080000 MHz from PLLA */
+
+/* sdram */
+#define PIOC_ASR_VAL   0xFFFF0000 /* Configure PIOC as peripheral (D16/D31) */
+#define PIOC_BSR_VAL   0x00000000
+#define PIOC_PDR_VAL   0xFFFF0000
+#define EBI_CSA_VAL    0x00000002 /* CS1=SDRAM */
+#define SDRC_CR_VAL    0x21914159 /* set up the SDRAM */
+#define SDRAM          0x20000000 /* address of the SDRAM */
+#define SDRAM1         0x20000080 /* address of the SDRAM */
+#define SDRAM_VAL      0x00000000 /* value written to SDRAM */
+#define SDRC_MR_VAL    0x00000002 /* Precharge All */
+#define SDRC_MR_VAL1   0x00000004 /* refresh */
+#define SDRC_MR_VAL2   0x00000003 /* Load Mode Register */
+#define SDRC_MR_VAL3   0x00000000 /* Normal Mode */
+#define SDRC_TR_VAL    0x000002E0 /* Write refresh rate */
+#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+
+#define CONFIG_BAUDRATE 115200
+
+#define CFG_AT91C_BRGR_DIVISOR 75      /* hardcode so no __divsi3 : AT91C_MASTER_CLOCK / baudrate / 16 */
+
+/*
+ * Hardware drivers
+ */
+
+/* define one of these to choose the DBGU, USART0  or USART1 as console */
+#define CONFIG_DBGU
+#undef CONFIG_USART0
+#undef CONFIG_USART1
+
+#undef CONFIG_HWFLOW                   /* don't include RTS/CTS flow control support   */
+
+#undef CONFIG_MODEM_SUPPORT            /* disable modem initialization stuff */
+
+#define CONFIG_BOOTDELAY      3
+/* #define CONFIG_ENV_OVERWRITE        1 */
+
+#define CONFIG_COMMANDS                \
+                      ((CONFIG_CMD_DFL | \
+                       CFG_CMD_JFFS2 | \
+                       CFG_CMD_DHCP | \
+                       CFG_CMD_PING ) & \
+                     ~(CFG_CMD_BDI | \
+                       CFG_CMD_IMI | \
+                       CFG_CMD_AUTOSCRIPT | \
+                       CFG_CMD_FPGA | \
+                       CFG_CMD_MISC | \
+                       CFG_CMD_LOADS ))
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CFG_MAX_NAND_DEVICE    1       /* Max number of NAND devices           */
+#define SECTORSIZE 512
+
+#define ADDR_COLUMN 1
+#define ADDR_PAGE 2
+#define ADDR_COLUMN_PAGE 3
+
+#define NAND_ChipID_UNKNOWN    0x00
+#define NAND_MAX_FLOORS 1
+#define NAND_MAX_CHIPS 1
+
+#define AT91_SMART_MEDIA_ALE (1 << 22) /* our ALE is AD22 */
+#define AT91_SMART_MEDIA_CLE (1 << 21) /* our CLE is AD21 */
+
+#define NAND_DISABLE_CE(nand) do { *AT91C_PIOC_SODR = AT91C_PIO_PC0;} while(0)
+#define NAND_ENABLE_CE(nand) do { *AT91C_PIOC_CODR = AT91C_PIO_PC0;} while(0)
+
+#define NAND_WAIT_READY(nand) while (!(*AT91C_PIOC_PDSR & AT91C_PIO_PC2))
+
+#define WRITE_NAND_COMMAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_CLE) = (__u8)(d); } while(0)
+#define WRITE_NAND_ADDRESS(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_ALE) = (__u8)(d); } while(0)
+#define WRITE_NAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)d; } while(0)
+#define READ_NAND(adr) ((volatile unsigned char)(*(volatile __u8 *)(unsigned long)adr))
+/* the following are NOP's in our implementation */
+#define NAND_CTL_CLRALE(nandptr)
+#define NAND_CTL_SETALE(nandptr)
+#define NAND_CTL_CLRCLE(nandptr)
+#define NAND_CTL_SETCLE(nandptr)
+
+#define CONFIG_NR_DRAM_BANKS 1
+#define PHYS_SDRAM                     0x20000000
+#define PHYS_SDRAM_SIZE                        0x4000000  /* 64 megs */
+
+#define CFG_MEMTEST_START              PHYS_SDRAM
+#define CFG_MEMTEST_END                        CFG_MEMTEST_START + PHYS_SDRAM_SIZE - 512*1024 - 4
+#define CFG_ALT_MEMTEST                        1
+#define CFG_MEMTEST_SCRATCH            CFG_MEMTEST_START + PHYS_SDRAM_SIZE - 4
+
+#define CONFIG_DRIVER_ETHER
+#define CONFIG_NET_RETRY_COUNT         20
+#undef CONFIG_AT91C_USE_RMII
+
+#undef CONFIG_HAS_DATAFLASH
+#define CFG_SPI_WRITE_TOUT             (5*CFG_HZ)
+#define CFG_MAX_DATAFLASH_BANKS        0
+#define CFG_MAX_DATAFLASH_PAGES        16384
+#define CFG_DATAFLASH_LOGIC_ADDR_CS0   0xC0000000      /* Logical adress for CS0 */
+#define CFG_DATAFLASH_LOGIC_ADDR_CS3   0xD0000000      /* Logical adress for CS3 */
+
+/*
+ * FLASH Device configuration
+ */
+#define PHYS_FLASH_1                   0x10000000
+#define PHYS_FLASH_SIZE                        0x800000  /* 8 megs main flash */
+#define CFG_FLASH_BASE                 PHYS_FLASH_1
+#define CFG_FLASH_CFI          1       /* flash is CFI conformant      */
+#define CFG_FLASH_CFI_DRIVER   1       /* use common cfi driver        */
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster) */
+#define CFG_MAX_FLASH_BANKS    1       /* max # of memory banks        */
+#define CFG_FLASH_INCREMENT    0       /* there is only one bank       */
+#define CFG_FLASH_PROTECTION   1       /* hardware flash protection    */
+#define CFG_MAX_FLASH_SECT             64
+
+#define CFG_JFFS2_FIRST_BANK   0
+#define CFG_JFFS2_FIRST_SECTOR 3
+#define CFG_JFFS2_NUM_BANKS    1
+
+#undef CFG_ENV_IS_IN_DATAFLASH
+
+#ifdef CFG_ENV_IS_IN_DATAFLASH
+#define CFG_ENV_OFFSET                 0x20000
+#define CFG_ENV_ADDR                   (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
+#define CFG_ENV_SIZE                   0x2000  /* 0x8000 */
+#else
+#define CFG_ENV_IS_IN_FLASH            1
+#define CFG_ENV_ADDR                   (PHYS_FLASH_1 + 0x20000)  /* after u-boot.bin */
+#define CFG_ENV_SIZE                   0x20000 /* sectors are 128K here */
+#endif /* CFG_ENV_IS_IN_DATAFLASH */
+
+
+#define CFG_LOAD_ADDR          0x21000000  /* default load address */
+
+#define CFG_BAUDRATE_TABLE     {115200, 57600, 38400, 19200, 9600 }
+
+#define CFG_PROMPT             "U-Boot> "      /* Monitor Command Prompt */
+#define CFG_CBSIZE             256             /* Console I/O Buffer Size */
+#define CFG_MAXARGS            16              /* max number of command args */
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+
+#ifndef __ASSEMBLY__
+/*-----------------------------------------------------------------------
+ * Board specific extension for bd_info
+ *
+ * This structure is embedded in the global bd_info (bd_t) structure
+ * and can be used by the board specific code (eg board/...)
+ */
+
+struct bd_info_ext {
+       /* helper variable for board environment handling
+        *
+        * env_crc_valid == 0    =>   uninitialised
+        * env_crc_valid  > 0    =>   environment crc in flash is valid
+        * env_crc_valid  < 0    =>   environment crc in flash is invalid
+        */
+       int env_crc_valid;
+};
+#endif
+
+#define CFG_HZ 1000
+#define CFG_HZ_CLOCK AT91C_MASTER_CLOCK/2      /* AT91C_TC0_CMR is implicitly set to */
+                                       /* AT91C_TC_TIMER_DIV1_CLOCK */
+
+#define CONFIG_STACKSIZE       (32*1024)       /* regular stack */
+
+#ifdef CONFIG_USE_IRQ
+#error CONFIG_USE_IRQ not supported
+#endif
+
+#endif
index 984115ae5f2231a9b5a540d07d4d747437ed78bc..0a10e3c75b4c0bdd6c5d9c97afaa95f880c455fd 100644 (file)
 #undef CONFIG_BOOTARGS
 
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
-       "addmisc=setenv bootargs $(bootargs) "                          \
-               "console=ttyS0,$(baudrate) "                            \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
                "panic=1\0"                                             \
        "bootfile=/tftpboot/vmlinux.srec\0"                             \
-       "load=tftp 80500000 $(u-boot)\0"                                \
+       "load=tftp 80500000 ${u-boot}\0"                                \
        ""
 
 #ifdef CONFIG_DBAU1550
index b483f407d2ed3f04f5e35744a75dc3d6408cfe23..8ff963f55a2ff9d7b5f3a75fa4c222dea2438db1 100644 (file)
@@ -45,9 +45,9 @@
 #define CONFIG_BOOTCOMMAND \
        "tftp 800000 pImage; " \
        "setenv bootargs console=ttyS0,9600 init=/linuxrc " \
-       "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):" \
-       "$(netmask):$(hostname):eth0:none " \
+       "root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:" \
+       "${netmask}:${hostname}:eth0:none " \
        "mtdparts=phys:12m(root),-(kernel); " \
        "bootm 800000"
 
index ebd0b535b406383d280a1d2ecf58a599b7785ad5..a26af6952ef89e5498bcbd75e89f86fc2ce110a2 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 /************************************************************************
- * board/config_EBONY.h - configuration for IBM 440GP Ref (Ebony)
+ * board/config_EBONY.h - configuration for AMCC 440GP Ref (Ebony)
  ***********************************************************************/
 
 #ifndef __CONFIG_H
@@ -31,6 +31,7 @@
  * High Level Configuration Options
  *----------------------------------------------------------------------*/
 #define CONFIG_EBONY           1           /* Board is ebony           */
+#define CONFIG_440GP           1           /* Specifc GP support       */
 #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! */
        "netdev=eth0\0"                                                 \
        "hostname=ebony\0"                                              \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/ebony/uImage\0"                             \
 
 #define CONFIG_MII             1       /* MII PHY management           */
 #define CONFIG_PHY_ADDR                8       /* PHY address                  */
+#define CONFIG_HAS_ETH1
+#define CONFIG_PHY1_ADDR       9       /* EMAC1 PHY address            */
+#define CONFIG_NET_MULTI       1
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
 
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
                                CFG_CMD_ASKENV  | \
 #define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
 #define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
 
-#define CFG_RX_ETH_BUFFER      32        /* Number of ethernet rx buffers & descriptors */
-
 /*-----------------------------------------------------------------------
  * PCI stuff
  *-----------------------------------------------------------------------
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                8192    /* For IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                8192    /* For AMCC 405 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index 8b0afd5a67670e5f27bc042826866ac0b4ba53c0..686251930918bf87afcca4ff66d5b0073a0de2cb 100644 (file)
                                        CFG_CMD_BSP     | \
                                        CFG_CMD_DCR     | \
                                        CFG_CMD_DHCP    | \
+                                       CFG_CMD_DISPLAY | \
                                        CFG_CMD_DOC     | \
                                        CFG_CMD_DTT     | \
                                        CFG_CMD_EEPROM  | \
 #define CFG_MAX_FLASH_SECT    71      /* max number of sectors on one chip  */
 #endif
 
+#ifdef CFG_EP8260_H2
+#define CFG_FLASH_ERASE_TOUT  240000  /* Timeout for Flash Erase (in ms)    */
+#define CFG_FLASH_WRITE_TOUT  500     /* Timeout for Flash Write (in ms)    */
+#else
 #define CFG_FLASH_ERASE_TOUT  8000    /* Timeout for Flash Erase (in ms)    */
 #define CFG_FLASH_WRITE_TOUT  1       /* Timeout for Flash Write (in ms)    */
+#endif
 
 #ifndef CFG_RAMBOOT
 #  define CFG_ENV_IS_IN_FLASH  1
  * SCCR - System Clock Control                                   9-8
  *-----------------------------------------------------------------------
  */
+#ifdef CFG_EP8260_H2
+#define CFG_SCCR        (SCCR_DFBRG00)
+#else
 #define CFG_SCCR        (SCCR_DFBRG01)
+#endif
 
 /*-----------------------------------------------------------------------
  * RCCR - RISC Controller Configuration                         13-7
index 1486377caa9b5f102095d109e0b97fbd87f64b6b..91117bab726242f00eeb9a5253e86dca829bc46b 100644 (file)
@@ -55,8 +55,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 9da15ed982f8aa0a37f62a8157add8d06eb5de57..cfaf1532233264ec1091ada20b30e260d16cbe0f 100644 (file)
  */
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
                                CFG_CMD_DATE    | \
+                               CFG_CMD_DISPLAY | \
                                CFG_CMD_DHCP    | \
                                CFG_CMD_EEPROM  | \
                                CFG_CMD_I2C     | \
                                CFG_CMD_IDE     | \
                                CFG_CMD_NFS     | \
                                CFG_CMD_PCI     | \
-                               CFG_CMD_SNTP)
+                               CFG_CMD_SNTP    )
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
-       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
+               "bootm ${kernel_addr}\0"                                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/eldk/ppc_82xx\0"                                 \
        ""
 
 #define CONFIG_BOOTCOMMAND     "run net_nfs"
 
+#define CONFIG_MISC_INIT_R     1
+
 /*
  * IPB Bus clocking configuration.
  */
 #define CFG_MBAR               0xF0000000
 #define CFG_SDRAM_BASE         0x00000000
 #define CFG_DEFAULT_MBAR       0x80000000
+#define CFG_DISPLAY_BASE       0x80600000
+#define CFG_STATUS1_BASE       0x80600200
+#define CFG_STATUS2_BASE       0x80600300
 
 /* Settings for XLB = 132 MHz */
 #define SDRAM_DDR       1
 
 /* Display H1, Status Inputs, EPLD @0x80600000 */
 #define CFG_CS3_START          0x80600000
-#define CFG_CS3_SIZE           0x00000210
-#define CFG_CS3_CFG            0x9800
+#define CFG_CS3_SIZE           0x00100000
+#define CFG_CS3_CFG            0x00019800
 
 #define CFG_CS_BURST           0x00000000
 #define CFG_CS_DEADCYCLE       0x33333333
 
 #define CONFIG_ATAPI            1
 
+#define CONFIG_VIDEO_SMI_LYNXEM
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_VIDEO_LOGO
+
 /*
  * PCI Mapping:
  * 0x40000000 - 0x4fffffff - PCI Memory
 #define CONFIG_PCI_IO_PHYS     CONFIG_PCI_IO_BUS
 #define CONFIG_PCI_IO_SIZE     0x01000000
 
+#define CFG_ISA_IO             CONFIG_PCI_IO_BUS
+
+/*---------------------------------------------------------------------*/
+/* Display addresses                                                  */
+/*---------------------------------------------------------------------*/
+
+#define CFG_DISP_CHR_RAM       (CFG_DISPLAY_BASE + 0x38)
+#define CFG_DISP_CWORD         (CFG_DISPLAY_BASE + 0x30)
+
 #endif /* __CONFIG_H */
index aadb59f1f114c038841ab065b1c55c4afd81337a..8cad98dbd29d9a217f91a7c0d931c3526e5b0070 100644 (file)
 #define CONFIG_COMMANDS                (CFG_CMD_ALL & ~( \
                                        CFG_CMD_BEDBUG  | \
                                        CFG_CMD_BMP     | \
+                                       CFG_CMD_DISPLAY | \
                                        CFG_CMD_DOC     | \
                                        CFG_CMD_EXT2    | \
                                        CFG_CMD_FDC     | \
index 0f548a52a244720c54a28c8cbe2df84814ec57cc..1c6216be843e89f037e0f373992e77e21730eff8 100644 (file)
 
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off\0"                          \
-       "addmisc=setenv bootargs $(bootargs) "                          \
-               "console=ttyS0,$(baudrate) "                            \
-               "ethaddr=$(ethaddr) "                                   \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off\0"                          \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
+               "ethaddr=${ethaddr} "                                   \
                "panic=1\0"                                             \
        "flash_nfs=run nfsargs addip addmisc;"                          \
-               "bootm $(kernel_addr)\0"                                \
+               "bootm ${kernel_addr}\0"                                \
        "flash_self=run ramargs addip addmisc;"                         \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
-       "net_nfs=tftp 80500000 $(bootfile);"                            \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 80500000 ${bootfile};"                            \
                "run nfsargs addip addmisc;bootm\0"                     \
        "rootpath=/opt/eldk/mips_4KC\0"                                 \
        "bootfile=/tftpboot/INCA/uImage\0"                              \
        "kernel_addr=B0040000\0"                                        \
        "ramdisk_addr=B0100000\0"                                       \
        "u-boot=/tftpboot/INCA/u-boot.bin\0"                            \
-       "load=tftp 80500000 $(u-boot)\0"                                \
+       "load=tftp 80500000 ${u-boot}\0"                                \
        "update=protect off 1:0-2;era 1:0-2;"                           \
-               "cp.b 80500000 B0000000 $(filesize)\0"                  \
+               "cp.b 80500000 B0000000 ${filesize}\0"                  \
        ""
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
index 5cbb0c392dc058129a80d258d1bdc7a26e426690..773d5d2c1d963374b0923f8da78e359fbe0390b8 100644 (file)
 /*
  * Autobooting
  */
-#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds */
+#define CONFIG_BOOTDELAY       1       /* autoboot after 1 second */
 
 #define CONFIG_PREBOOT "echo;" \
        "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \
 
 #undef CONFIG_BOOTARGS
 
+#define        CONFIG_ETHADDR          00:a0:a4:03:00:00
+#define        CONFIG_OVERWRITE_ETHADDR_ONCE
+
+#define        CONFIG_IPADDR           192.168.100.2
+#define        CONFIG_SERVERIP         192.168.100.1
+#define        CONFIG_NETMASK          255.255.255.0
+#define HOSTNAME               inka4x0
+#define CONFIG_BOOTFILE                /tftpboot/inka4x0/uImage
+#define        CONFIG_ROOTPATH         /opt/eldk/ppc_6xx
+
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"                                \
-       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
-       "rootpath=/opt/eldk/ppc_82xx\0"                                 \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "addcons=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate}\0"                           \
+       "flash_nfs=run nfsargs addip addcons;"                          \
+               "bootm ${kernel_addr}\0"                                \
+       "net_nfs=tftp 200000 ${bootfile};"                              \
+               "run nfsargs addip addcons;bootm\0"                     \
+       "enable_disp=mw.l 100000 04000000 1;"                           \
+               "cp.l 100000 f0000b20 1;"                               \
+               "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"           \
+       "brightness=255\0"                                              \
        ""
 
-#define CONFIG_BOOTCOMMAND     "run net_nfs"
+#define CONFIG_BOOTCOMMAND     "run ide_boot"
 
 /*
  * IPB Bus clocking configuration.
  */
 /* #define CONFIG_FEC_10MBIT 1 */
 #define CONFIG_PHY_ADDR                0x00
+#define CONFIG_MII
 
 /*
  * GPIO configuration
 #define CFG_IDE_MAXDEVICE      2       /* max. 1 drive per IDE bus     */
 
 #define CFG_ATA_IDE0_OFFSET    0x0000
-
 #define CFG_ATA_BASE_ADDR      MPC5XXX_ATA
-
-/* Offset for data I/O                 */
-#define CFG_ATA_DATA_OFFSET    (0x0060)
-
-/* Offset for normal register accesses */
-#define CFG_ATA_REG_OFFSET     (CFG_ATA_DATA_OFFSET)
-
-/* Offset for alternate registers      */
-#define CFG_ATA_ALT_OFFSET     (0x005C)
-
-/* Interval between registers                                                */
-#define CFG_ATA_STRIDE          4
+#define CFG_ATA_DATA_OFFSET    0x0060  /* Offset for data I/O          */
+#define CFG_ATA_REG_OFFSET (CFG_ATA_DATA_OFFSET) /* Offset for normal register accesses */
+#define CFG_ATA_ALT_OFFSET     0x005C  /* Offset for alternate registers */
+#define CFG_ATA_STRIDE          4      /* Interval between registers   */
 
 #define CONFIG_ATAPI            1
-#define CFG_BRIGHTNESS          0x20
+
+#define CFG_BRIGHTNESS          0xFF   /* LCD Default Brightness (255 = off) */
 
 #endif /* __CONFIG_H */
index 2674b52bf528edb386c2f19eecc7200dd1a98dfa..2f6e3993be426c455677ebceef25de3a7728dd89 100644 (file)
 
 #ifndef __CONFIG_H
 #define __CONFIG_H
-
 /*
  * High Level Configuration Options
  * (easy to change)
  */
-#define CONFIG_ARM926EJS       1       /* This is an arm926ejs CPU core  */
-#define CONFIG_INTEGRATOR      1       /* in an Integrator board       */
-#define CONFIG_ARCH_CINTEGRATOR 1      /* Specifically, a CP           */
-
-
-#define CFG_MEMTEST_START   0x100000
-#define CFG_MEMTEST_END   0x10000000
-#define CFG_HZ (1000000 / 256)         /* Timer 1 is clocked at 1Mhz, with 256 divider */
-#define CFG_TIMERBASE 0x13000100
+#define CFG_MEMTEST_START      0x100000
+#define CFG_MEMTEST_END                0x10000000
+#define CFG_HZ                 1000
+#define CFG_HZ_CLOCK           24000000        /* Timer 1 is clocked at 24Mhz */
+#define CFG_TIMERBASE          0x13000100      /* Timer1                      */
 
 #define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs  */
 #define CONFIG_SETUP_MEMORY_TAGS       1
 #define CONFIG_MISC_INIT_R     1       /* call misc_init_r during start up */
+
+#undef CONFIG_INIT_CRITICAL
+#define CONFIG_CM_INIT         1
+#define CONFIG_CM_REMAP                1
+#undef CONFIG_CM_SPD_DETECT
+
 /*
  * Size of malloc() pool
  */
  */
 #define CFG_PL010_SERIAL
 #define CONFIG_CONS_INDEX      0
-#define CONFIG_BAUDRATE         38400
+#define CONFIG_BAUDRATE                38400
 #define CONFIG_PL01x_PORTS     { (void *) (CFG_SERIAL0), (void *) (CFG_SERIAL1) }
-#define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
 #define CFG_SERIAL0            0x16000000
 #define CFG_SERIAL1            0x17000000
 
 /*#define CONFIG_COMMANDS      (CFG_CMD_DHCP | CFG_CMD_IMI | CFG_CMD_NET | CFG_CMD_PING | CFG_CMD_BDI | CFG_CMD_PCI) */
 /*#define CONFIG_NET_MULTI */
-/*#define CONFIG_BOOTP_MASK       CONFIG_BOOTP_DEFAULT */
+/*#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_DEFAULT */
 
-#define CONFIG_COMMANDS        (CFG_CMD_IMI | CFG_CMD_BDI | CFG_CMD_MEMORY)
+#define CONFIG_COMMANDS (CFG_CMD_IMI | CFG_CMD_BDI | CFG_CMD_MEMORY)
 
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
-#define CONFIG_BOOTDELAY        2
-#define CONFIG_BOOTARGS         "root=/dev/mtdblock0 mem=32M console=ttyAM0 console=tty"
-#define CONFIG_BOOTCOMMAND      ""
+#define CONFIG_BOOTDELAY       2
+#define CONFIG_BOOTARGS                "root=/dev/mtdblock0 mem=32M console=ttyAM0 console=tty"
+#define CONFIG_BOOTCOMMAND     ""
 
 /*
  * Miscellaneous configurable options
  */
-#define CFG_LONGHELP   /* undef to save memory     */
+#define CFG_LONGHELP   /* undef to save memory     */
 #define CFG_PROMPT     "Integrator-AP # "      /* Monitor Command 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_MAXARGS    16              /* max number of command args   */
+#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
 
 #undef CFG_CLKS_IN_HZ          /* everything, incl board info, in Hz */
 #define CFG_LOAD_ADDR  0x7fc0  /* default load address */
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
-#define CONFIG_NR_DRAM_BANKS    1      /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1            0x00000000     /* SDRAM Bank #1 */
+#define CONFIG_NR_DRAM_BANKS         /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1           0x00000000      /* SDRAM Bank #1 */
 #define PHYS_SDRAM_1_SIZE      0x02000000      /* 32 MB */
 
-#define CFG_FLASH_BASE          0x24000000
+#define CFG_FLASH_BASE         0x24000000
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
 #define CFG_MAX_FLASH_BANKS    1               /* max number of memory banks */
 #define PHYS_FLASH_SIZE                0x01000000      /* 16MB */
 /* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT   (20*CFG_HZ)     /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT   (20*CFG_HZ)     /* Timeout for Flash Write */
-#define CFG_MAX_FLASH_SECT     128
-#define CFG_ENV_SIZE           32768
+#define CFG_FLASH_ERASE_TOUT   (2*CFG_HZ)      /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT   (2*CFG_HZ)      /* Timeout for Flash Write */
+#define CFG_MAX_FLASH_SECT     128
+#define CFG_ENV_SIZE           32768
 
 #define PHYS_FLASH_1           (CFG_FLASH_BASE)
 
  * PCI definitions
  */
 
-/*#define CONFIG_PCI                   /--* include pci support                        */
+/*#define CONFIG_PCI                   /--* include pci support        */
 #undef CONFIG_PCI_PNP
-#define CONFIG_PCI_SCAN_SHOW    1       /* show pci devices on startup  */
+#define CONFIG_PCI_SCAN_SHOW   1       /* show pci devices on startup  */
 #define DEBUG
 
 #define CONFIG_EEPRO100
-#define CFG_RX_ETH_BUFFER      8       /* use 8 rx buffer on eepro100  */
+#define CFG_RX_ETH_BUFFER      8       /* use 8 rx buffer on eepro100  */
 
 
 #define INTEGRATOR_BOOT_ROM_BASE       0x20000000
-#define INTEGRATOR_HDR0_SDRAM_BASE      0x80000000
+#define INTEGRATOR_HDR0_SDRAM_BASE     0x80000000
 
 /* PCI Base area */
 #define INTEGRATOR_PCI_BASE            0x40000000
 #define INTEGRATOR_PCI_SIZE            0x3FFFFFFF
 
 /* memory map as seen by the CPU on the local bus */
-#define CPU_PCI_IO_ADRS                0x60000000      /* PCI I/O space base */
+#define CPU_PCI_IO_ADRS                0x60000000      /* PCI I/O space base */
 #define CPU_PCI_IO_SIZE                0x10000
 
 #define CPU_PCI_CNFG_ADRS      0x61000000      /* PCI config space */
 #define CPU_PCI_CNFG_SIZE      0x1000000
 
-#define PCI_MEM_BASE            0x40000000   /* 512M to xxx */
+#define PCI_MEM_BASE           0x40000000   /* 512M to xxx */
 /*  unused 256M from A0000000-AFFFFFFF might be used for I2O ??? */
-#define INTEGRATOR_PCI_IO_BASE  0x60000000   /* 16M to xxx */
+#define INTEGRATOR_PCI_IO_BASE 0x60000000   /* 16M to xxx */
 /*  unused (128-16)M from B1000000-B7FFFFFF */
-#define PCI_CONFIG_BASE         0x61000000   /* 16M to xxx */
+#define PCI_CONFIG_BASE                0x61000000   /* 16M to xxx */
 /*  unused ((128-16)M - 64K) from XXX */
 
-#define PCI_V3_BASE             0x62000000
+#define PCI_V3_BASE            0x62000000
 
 /* V3 PCI bridge controller */
 #define V3_BASE                        0x62000000    /* V360EPC registers */
 #define PCI_ENET0_MEMADDR      (PCI_MEM_BASE)
 
 
-#define V3_PCI_VENDOR           0x00000000
-#define V3_PCI_DEVICE           0x00000002
-#define V3_PCI_CMD              0x00000004
-#define V3_PCI_STAT             0x00000006
-#define V3_PCI_CC_REV           0x00000008
-#define V3_PCI_HDR_CF           0x0000000C
-#define V3_PCI_IO_BASE          0x00000010
-#define V3_PCI_BASE0            0x00000014
-#define V3_PCI_BASE1            0x00000018
-#define V3_PCI_SUB_VENDOR       0x0000002C
-#define V3_PCI_SUB_ID           0x0000002E
-#define V3_PCI_ROM              0x00000030
-#define V3_PCI_BPARAM           0x0000003C
-#define V3_PCI_MAP0             0x00000040
-#define V3_PCI_MAP1             0x00000044
-#define V3_PCI_INT_STAT         0x00000048
-#define V3_PCI_INT_CFG          0x0000004C
-#define V3_LB_BASE0             0x00000054
-#define V3_LB_BASE1             0x00000058
-#define V3_LB_MAP0              0x0000005E
-#define V3_LB_MAP1              0x00000062
-#define V3_LB_BASE2             0x00000064
-#define V3_LB_MAP2              0x00000066
-#define V3_LB_SIZE              0x00000068
-#define V3_LB_IO_BASE           0x0000006E
-#define V3_FIFO_CFG             0x00000070
-#define V3_FIFO_PRIORITY        0x00000072
-#define V3_FIFO_STAT            0x00000074
-#define V3_LB_ISTAT             0x00000076
-#define V3_LB_IMASK             0x00000077
-#define V3_SYSTEM               0x00000078
-#define V3_LB_CFG               0x0000007A
-#define V3_PCI_CFG              0x0000007C
-#define V3_DMA_PCI_ADR0         0x00000080
-#define V3_DMA_PCI_ADR1         0x00000090
-#define V3_DMA_LOCAL_ADR0       0x00000084
-#define V3_DMA_LOCAL_ADR1       0x00000094
-#define V3_DMA_LENGTH0          0x00000088
-#define V3_DMA_LENGTH1          0x00000098
-#define V3_DMA_CSR0             0x0000008B
-#define V3_DMA_CSR1             0x0000009B
-#define V3_DMA_CTLB_ADR0        0x0000008C
-#define V3_DMA_CTLB_ADR1        0x0000009C
-#define V3_DMA_DELAY            0x000000E0
-#define V3_MAIL_DATA            0x000000C0
-#define V3_PCI_MAIL_IEWR        0x000000D0
-#define V3_PCI_MAIL_IERD        0x000000D2
-#define V3_LB_MAIL_IEWR         0x000000D4
-#define V3_LB_MAIL_IERD         0x000000D6
-#define V3_MAIL_WR_STAT         0x000000D8
-#define V3_MAIL_RD_STAT         0x000000DA
-#define V3_QBA_MAP              0x000000DC
+#define V3_PCI_VENDOR          0x00000000
+#define V3_PCI_DEVICE          0x00000002
+#define V3_PCI_CMD             0x00000004
+#define V3_PCI_STAT            0x00000006
+#define V3_PCI_CC_REV          0x00000008
+#define V3_PCI_HDR_CF          0x0000000C
+#define V3_PCI_IO_BASE         0x00000010
+#define V3_PCI_BASE0           0x00000014
+#define V3_PCI_BASE1           0x00000018
+#define V3_PCI_SUB_VENDOR      0x0000002C
+#define V3_PCI_SUB_ID          0x0000002E
+#define V3_PCI_ROM             0x00000030
+#define V3_PCI_BPARAM          0x0000003C
+#define V3_PCI_MAP0            0x00000040
+#define V3_PCI_MAP1            0x00000044
+#define V3_PCI_INT_STAT                0x00000048
+#define V3_PCI_INT_CFG         0x0000004C
+#define V3_LB_BASE0            0x00000054
+#define V3_LB_BASE1            0x00000058
+#define V3_LB_MAP0             0x0000005E
+#define V3_LB_MAP1             0x00000062
+#define V3_LB_BASE2            0x00000064
+#define V3_LB_MAP2             0x00000066
+#define V3_LB_SIZE             0x00000068
+#define V3_LB_IO_BASE          0x0000006E
+#define V3_FIFO_CFG            0x00000070
+#define V3_FIFO_PRIORITY       0x00000072
+#define V3_FIFO_STAT           0x00000074
+#define V3_LB_ISTAT            0x00000076
+#define V3_LB_IMASK            0x00000077
+#define V3_SYSTEM              0x00000078
+#define V3_LB_CFG              0x0000007A
+#define V3_PCI_CFG             0x0000007C
+#define V3_DMA_PCI_ADR0                0x00000080
+#define V3_DMA_PCI_ADR1                0x00000090
+#define V3_DMA_LOCAL_ADR0      0x00000084
+#define V3_DMA_LOCAL_ADR1      0x00000094
+#define V3_DMA_LENGTH0         0x00000088
+#define V3_DMA_LENGTH1         0x00000098
+#define V3_DMA_CSR0            0x0000008B
+#define V3_DMA_CSR1            0x0000009B
+#define V3_DMA_CTLB_ADR0       0x0000008C
+#define V3_DMA_CTLB_ADR1       0x0000009C
+#define V3_DMA_DELAY           0x000000E0
+#define V3_MAIL_DATA           0x000000C0
+#define V3_PCI_MAIL_IEWR       0x000000D0
+#define V3_PCI_MAIL_IERD       0x000000D2
+#define V3_LB_MAIL_IEWR                0x000000D4
+#define V3_LB_MAIL_IERD                0x000000D6
+#define V3_MAIL_WR_STAT                0x000000D8
+#define V3_MAIL_RD_STAT                0x000000DA
+#define V3_QBA_MAP             0x000000DC
 
 /* SYSTEM register bits */
-#define V3_SYSTEM_M_RST_OUT             (1 << 15)
-#define V3_SYSTEM_M_LOCK                (1 << 14)
+#define V3_SYSTEM_M_RST_OUT            (1 << 15)
+#define V3_SYSTEM_M_LOCK               (1 << 14)
 
 /*  PCI_CFG bits */
-#define V3_PCI_CFG_M_RETRY_EN           (1 << 10)
-#define V3_PCI_CFG_M_AD_LOW1            (1 << 9)
-#define V3_PCI_CFG_M_AD_LOW0            (1 << 8)
+#define V3_PCI_CFG_M_RETRY_EN          (1 << 10)
+#define V3_PCI_CFG_M_AD_LOW1           (1 << 9)
+#define V3_PCI_CFG_M_AD_LOW0           (1 << 8)
 
 /* PCI MAP register bits (PCI -> Local bus) */
-#define V3_PCI_MAP_M_MAP_ADR            0xFFF00000
-#define V3_PCI_MAP_M_RD_POST_INH        (1 << 15)
-#define V3_PCI_MAP_M_ROM_SIZE           (1 << 11 | 1 << 10)
-#define V3_PCI_MAP_M_SWAP               (1 << 9 | 1 << 8)
-#define V3_PCI_MAP_M_ADR_SIZE           0x000000F0
-#define V3_PCI_MAP_M_REG_EN             (1 << 1)
-#define V3_PCI_MAP_M_ENABLE             (1 << 0)
+#define V3_PCI_MAP_M_MAP_ADR           0xFFF00000
+#define V3_PCI_MAP_M_RD_POST_INH       (1 << 15)
+#define V3_PCI_MAP_M_ROM_SIZE          (1 << 11 | 1 << 10)
+#define V3_PCI_MAP_M_SWAP              (1 << 9 | 1 << 8)
+#define V3_PCI_MAP_M_ADR_SIZE          0x000000F0
+#define V3_PCI_MAP_M_REG_EN            (1 << 1)
+#define V3_PCI_MAP_M_ENABLE            (1 << 0)
 
 /* 9 => 512M window size */
-#define V3_PCI_MAP_M_ADR_SIZE_512M      0x00000090
+#define V3_PCI_MAP_M_ADR_SIZE_512M     0x00000090
 
 /* A => 1024M window size */
-#define V3_PCI_MAP_M_ADR_SIZE_1024M     0x000000A0
+#define V3_PCI_MAP_M_ADR_SIZE_1024M    0x000000A0
 
 /* LB_BASE register bits (Local bus -> PCI) */
-#define V3_LB_BASE_M_MAP_ADR            0xFFF00000
-#define V3_LB_BASE_M_SWAP               (1 << 8 | 1 << 9)
-#define V3_LB_BASE_M_ADR_SIZE           0x000000F0
-#define V3_LB_BASE_M_PREFETCH           (1 << 3)
-#define V3_LB_BASE_M_ENABLE             (1 << 0)
+#define V3_LB_BASE_M_MAP_ADR           0xFFF00000
+#define V3_LB_BASE_M_SWAP              (1 << 8 | 1 << 9)
+#define V3_LB_BASE_M_ADR_SIZE          0x000000F0
+#define V3_LB_BASE_M_PREFETCH          (1 << 3)
+#define V3_LB_BASE_M_ENABLE            (1 << 0)
 
 /* PCI COMMAND REGISTER bits */
-#define V3_COMMAND_M_FBB_EN             (1 << 9)
-#define V3_COMMAND_M_SERR_EN            (1 << 8)
-#define V3_COMMAND_M_PAR_EN             (1 << 6)
-#define V3_COMMAND_M_MASTER_EN          (1 << 2)
-#define V3_COMMAND_M_MEM_EN             (1 << 1)
-#define V3_COMMAND_M_IO_EN              (1 << 0)
+#define V3_COMMAND_M_FBB_EN            (1 << 9)
+#define V3_COMMAND_M_SERR_EN           (1 << 8)
+#define V3_COMMAND_M_PAR_EN            (1 << 6)
+#define V3_COMMAND_M_MASTER_EN         (1 << 2)
+#define V3_COMMAND_M_MEM_EN            (1 << 1)
+#define V3_COMMAND_M_IO_EN             (1 << 0)
 
 #define INTEGRATOR_SC_BASE             0x11000000
 #define INTEGRATOR_SC_PCIENABLE_OFFSET 0x18
 #define INTEGRATOR_SC_PCIENABLE \
                        (INTEGRATOR_SC_BASE + INTEGRATOR_SC_PCIENABLE_OFFSET)
 
+/*-----------------------------------------------------------------------
+ * There are various dependencies on the core module (CM) fitted
+ * Users should refer to their CM user guide
+ * - when porting adjust u-boot/Makefile accordingly
+ *   to define the necessary CONFIG_ s for the CM involved
+ * see e.g. integratorcp_CM926EJ-S_config
+ */
+#include "armcoremodule.h"
 
-#endif                                                 /* __CONFIG_H */
+#endif /* __CONFIG_H */
index 0b0ffd43c658f7b4df8d0e49072886fa5bd74803..4189f9c995c6d492e75cc5515e1ac27adc6dc955 100644 (file)
  * High Level Configuration Options
  * (easy to change)
  */
-#if 1
-#define CONFIG_ARM926EJS       1       /* This is an arm926ejs CPU core  */
-#else
-#define CONFIG_ARM946ES                1       /* This is an arm946es CPU core */
-#endif
-#define CONFIG_INTEGRATOR      1       /* in an Integrator board       */
-#define CONFIG_ARCH_CINTEGRATOR 1      /* Specifically, a CP           */
-
+#define CFG_MEMTEST_START      0x100000
+#define CFG_MEMTEST_END                0x10000000
+#define CFG_HZ                 1000
+#define CFG_HZ_CLOCK           1000000 /* Timer 1 is clocked at 1Mhz */
+#define CFG_TIMERBASE          0x13000100
 
-#define CFG_MEMTEST_START       0x100000
-#define CFG_MEMTEST_END         0x10000000
-#define CFG_HZ                  (1000000 / 256)        /* Timer 1 is clocked at 1Mhz, with 256 divider */
-#define CFG_TIMERBASE           0x13000100
-
-#define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs  */
+#define CONFIG_CMDLINE_TAG             1       /* enable passing of ATAGs  */
 #define CONFIG_SETUP_MEMORY_TAGS       1
-#define CONFIG_MISC_INIT_R     1       /* call misc_init_r during start up */
+#define CONFIG_MISC_INIT_R             1       /* call misc_init_r during start up */
 /*
  * Size of malloc() pool
  */
@@ -74,7 +66,7 @@
 #define CONFIG_PL01x_PORTS     { (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
 #define CONFIG_CONS_INDEX      0
 #define CONFIG_BAUDRATE                38400
-#define CFG_BAUDRATE_TABLE      { 9600, 19200, 38400, 57600, 115200 }
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
 #define CFG_SERIAL0            0x16000000
 #define CFG_SERIAL1            0x17000000
 
 
 #if 0
 #define CONFIG_BOOTDELAY       2
-#define CONFIG_BOOTARGS        "root=/dev/nfs mem=128M ip=dhcp netdev=27,0,0xfc800000,0xfc800010,eth0"
+#define CONFIG_BOOTARGS        "root=/dev/nfs nfsroot=<IP address>:/<exported rootfs>  mem=128M ip=dhcp netdev=27,0,0xfc800000,0xfc800010,eth0 video=clcdfb:0"
 #define CONFIG_BOOTCOMMAND "bootp ; bootm"
 #endif
+/* The kernel command line & boot command below are for a platform flashed with afu.axf
+
+Image 666 Block  0 End Block  0 address 0x24000000 exec 0x24000000- name u-boot
+Image 667 Block  1 End Block 13 address 0x24040000 exec 0x24040000- name u-linux
+Image 668 Block 14 End Block 33 address 0x24380000 exec 0x24380000- name rootfs
+SIB at Block62 End Block62 address 0x24f80000
+
+*/
+#define CONFIG_BOOTDELAY       2
+#define CONFIG_BOOTARGS        "root=/dev/mtdblock2 mem=128M ip=dhcp netdev=27,0,0xfc800000,0xfc800010,eth0 video=clcdfb:0 console=ttyAMA0"
+#define CONFIG_BOOTCOMMAND "cp 0x24080000 0x7fc0 0x100000; bootm"
 
 /*
  * Miscellaneous configurable options
  */
-#define CFG_LONGHELP                           /* undef to save memory     */
-#define CFG_PROMPT     "Integrator-CP # "      /* Monitor Command Prompt   */
-#define CFG_CBSIZE     256                     /* Console I/O Buffer Size  */
+#define CFG_LONGHELP                           /* undef to save memory */
+#define CFG_PROMPT     "Integrator-CP # "      /* Monitor Command 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_MAXARGS    16                      /* max number of command args */
+#define CFG_BARGSIZE   CFG_CBSIZE              /* Boot Argument Buffer Size*/
 
 #undef CFG_CLKS_IN_HZ          /* everything, incl board info, in Hz */
 #define CFG_LOAD_ADDR  0x7fc0  /* default load address */
 /*-----------------------------------------------------------------------
  * Physical Memory Map
  */
-#define CONFIG_NR_DRAM_BANKS    1              /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1            0x00000000     /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE       0x08000000     /* 128 MB */
+#define CONFIG_NR_DRAM_BANKS                 /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1           0x00000000      /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE      0x08000000      /* 128 MB */
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
+
+ * Top varies according to amount fitted
+ * Reserve top 4 blocks of flash
+ * - ARM Boot Monitor
+ * - Unused
+ * - SIB block
+ * - U-Boot environment
+ *
+ * Base is always 0x24000000
+
  */
-#define CFG_FLASH_BASE          0x24000000
+#define CFG_FLASH_BASE         0x24000000
 #define CFG_MAX_FLASH_SECT     64
 #define CFG_MAX_FLASH_BANKS    1               /* max number of memory banks */
-#define PHYS_FLASH_SIZE         0x01000000     /* 16MB */
-#define CFG_FLASH_ERASE_TOUT   (20*CFG_HZ)     /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT   (20*CFG_HZ)     /* Timeout for Flash Write */
+#define PHYS_FLASH_SIZE        0x01000000      /* 16MB */
+#define CFG_FLASH_ERASE_TOUT   (2*CFG_HZ)      /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT   (2*CFG_HZ)      /* Timeout for Flash Write */
+
+#define CFG_MONITOR_LEN                0x00100000
+#define CFG_ENV_IS_IN_FLASH    (1)
+
+/*
+ * 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
+ * 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
+ */
+#if ( PHYS_FLASH_SIZE == 0x04000000 )
+
+#define CFG_ENV_ADDR           0x27F00000
+#define CFG_MONITOR_BASE       0x27F40000
+
+#elif (PHYS_FLASH_SIZE == 0x02000000 )
+
+#define CFG_ENV_ADDR           0x25F00000
+#define CFG_MONITOR_BASE       0x25F40000
+
+#else
 
-#define CFG_MONITOR_BASE       0x24F40000
-#define CFG_ENV_IS_IN_FLASH
 #define CFG_ENV_ADDR           0x24F00000
+#define CFG_MONITOR_BASE       0x27F40000
+
+#endif
+
 #define CFG_ENV_SECT_SIZE      0x40000         /* 256KB */
 #define CFG_ENV_SIZE           8192            /* 8KB */
+/*-----------------------------------------------------------------------
+ * CP control registers
+ */
+#define CPCR_BASE              0xCB000000      /* CP Registers*/
+#define OS_FLASHPROG           0x00000004      /* Flash register*/
+#define CPMASK_EXTRABANK       0x8
+#define CPMASK_FLASHSIZE       0x4
+#define CPMASK_FLWREN          0x2
+#define CPMASK_FLVPPEN         0x1
+
+/*
+ * The ARM boot monitor initializes the board.
+ * However, the default U-Boot code also performs the initialization.
+ * If desired, this can be prevented by defining SKIP_LOWLEVEL_INIT
+ * - see documentation supplied with board for details of how to choose the
+ * image to run at reset/power up
+ * e.g. whether the ARM Boot Monitor runs before U-Boot
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+ */
+
+/*
+ * The ARM boot monitor does not relocate U-Boot.
+ * However, the default U-Boot code performs the relocation check,
+ * and may relocate the code if the memory map is changed.
+ * If necessary this can be prevented by defining SKIP_RELOCATE_UBOOT
+
+#define SKIP_CONFIG_RELOCATE_UBOOT
+
+ */
+/*-----------------------------------------------------------------------
+ * There are various dependencies on the core module (CM) fitted
+ * Users should refer to their CM user guide
+ * - when porting adjust u-boot/Makefile accordingly
+ * to define the necessary CONFIG_ s for the CM involved
+ * see e.g. cp_926ejs_config
+ */
+
+#include "armcoremodule.h"
+
+/*
+ * If CONFIG_SKIP_LOWLEVEL_INIT is not defined &
+ * the core module has a CM_INIT register
+ * then the U-Boot initialisation code will
+ * e.g. ARM Boot Monitor or pre-loader is repeated once
+ * (to re-initialise any existing CM_INIT settings to safe values).
+ *
+ * This is usually not the desired behaviour since the platform
+ * will either reboot into the ARM monitor (or pre-loader)
+ * or continuously cycle thru it without U-Boot running,
+ * depending upon the setting of Integrator/CP switch S2-4.
+ *
+ * However it may be needed if Integrator/CP switch S2-1
+ * is set OFF to boot direct into U-Boot.
+ * In that case comment out the line below.
+#undef CONFIG_CM_INIT
+ */
 
 #endif /* __CONFIG_H */
diff --git a/include/configs/kb9202.h b/include/configs/kb9202.h
new file mode 100644 (file)
index 0000000..6590f6f
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * Rick Bronson <rick@efn.org>
+ *
+ * Configuation settings for the AT91RM9200DK 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
+ */
+
+/*
+ * Adatped for KwikByte KB920x board from at91rm9200dk.h: 22APR2005
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* ARM asynchronous clock */
+#define AT91C_MAIN_CLOCK       180000000       /* from 10 MHz crystal */
+#define AT91C_MASTER_CLOCK     60000000        /* peripheral clock (AT91C_MASTER_CLOCK / 3) */
+
+#define AT91_SLOW_CLOCK                32768   /* slow clock */
+
+#define CONFIG_ARM920T         1       /* This is an ARM920T Core      */
+#define CONFIG_AT91RM9200      1       /* It's an Atmel AT91RM9200 SoC */
+/* Only define one of the following, based on board type               */
+/* #define     CONFIG_KB9200           1        KwikByte KB9202 board  */
+/* #define     CONFIG_KB9201           1        KwikByte KB9202 board  */
+#define        CONFIG_KB9202           1       /* KwikByte KB9202 board        */
+
+#define        CONFIG_KB920x           1       /* Any KB920x board             */
+#undef  CONFIG_USE_IRQ                 /* we don't need IRQ/FIQ stuff  */
+#define USE_920T_MMU           1
+
+#define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs      */
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_INITRD_TAG      1
+
+#define        CONFIG_SKIP_LOWLEVEL_INIT
+
+#define        CFG_LONGHELP
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+
+#define CONFIG_BAUDRATE 115200
+
+/*
+ * Hardware drivers
+ */
+
+/* define one of these to choose the DBGU, USART0  or USART1 as console */
+#define CONFIG_DBGU
+#undef CONFIG_USART0
+#undef CONFIG_USART1
+
+#undef CONFIG_HWFLOW                   /* don't include RTS/CTS flow control support   */
+
+#undef CONFIG_MODEM_SUPPORT            /* disable modem initialization stuff */
+
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_ENV_OVERWRITE   1
+
+#define CONFIG_COMMANDS                \
+                      ((CONFIG_CMD_DFL | \
+                       CFG_CMD_I2C | \
+                       CFG_CMD_PING | \
+                       CFG_CMD_DHCP ) & \
+                     ~(CFG_CMD_BDI | \
+                       CFG_CMD_FPGA | \
+                       CFG_CMD_MISC))
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_NR_DRAM_BANKS 1
+#define PHYS_SDRAM 0x20000000
+#define PHYS_SDRAM_SIZE 0x2000000  /* 32 megs */
+
+#define CFG_MEMTEST_START              PHYS_SDRAM
+#define CFG_MEMTEST_END                        CFG_MEMTEST_START + PHYS_SDRAM_SIZE - (512*1024)
+
+#define CONFIG_DRIVER_ETHER
+#define CONFIG_NET_RETRY_COUNT         20
+
+#define CFG_FLASH_BASE                 0x10000000
+
+#ifdef CONFIG_KB9202
+#define PHYS_FLASH_SIZE                        0x1000000
+#else
+#define PHYS_FLASH_SIZE                        0x200000
+#endif
+
+#define CFG_MAX_FLASH_BANKS            1
+#define CFG_MAX_FLASH_SECT             256
+
+#define        CONFIG_HARD_I2C
+
+#define        CFG_ENV_IS_IN_EEPROM
+
+#ifdef CONFIG_KB9202
+#define CFG_ENV_OFFSET                 0x3E00
+#define CFG_ENV_SIZE                   0x0200
+#else
+#define CFG_ENV_OFFSET                 0x1000
+#define CFG_ENV_SIZE                   0x1000
+#endif
+#define        CFG_I2C_EEPROM_ADDR             0x50
+#define        CFG_EEPROM_PAGE_WRITE_BITS      6
+#define        CFG_I2C_EEPROM_ADDR_LEN         2
+#define        CFG_I2C_SPEED                   50000
+#define        CFG_I2C_SLAVE                   0 /* not used */
+#define        CFG_EEPROM_PAGE_WRITE_DELAY_MS  10
+
+#define CFG_LOAD_ADDR          0x21000000  /* default load address */
+
+#define CFG_BAUDRATE_TABLE     {115200 , 19200, 38400, 57600, 9600 }
+
+#define CFG_PROMPT             "U-Boot> "      /* Monitor Command Prompt */
+#define CFG_CBSIZE             256             /* Console I/O Buffer Size */
+#define CFG_MAXARGS            16              /* max number of command args */
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+
+#define        CFG_FLASH_CFI_DRIVER
+#define        CFG_FLASH_CFI
+
+#ifndef __ASSEMBLY__
+/*-----------------------------------------------------------------------
+ * Board specific extension for bd_info
+ *
+ * This structure is embedded in the global bd_info (bd_t) structure
+ * and can be used by the board specific code (eg board/...)
+ */
+
+struct bd_info_ext {
+       /* helper variable for board environment handling
+        *
+        * env_crc_valid == 0    =>   uninitialised
+        * env_crc_valid  > 0    =>   environment crc in flash is valid
+        * env_crc_valid  < 0    =>   environment crc in flash is invalid
+        */
+       int env_crc_valid;
+};
+#endif
+
+#define CFG_HZ 1000
+#define CFG_HZ_CLOCK AT91C_MASTER_CLOCK/2      /* AT91C_TC0_CMR is implicitly set to */
+                                       /* AT91C_TC_TIMER_DIV1_CLOCK */
+
+#define CONFIG_STACKSIZE       (32*1024)       /* regular stack */
+
+#ifdef CONFIG_USE_IRQ
+#error CONFIG_USE_IRQ not supported
+#endif
+
+#endif
diff --git a/include/configs/luan.h b/include/configs/luan.h
new file mode 100644 (file)
index 0000000..0335a00
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ * John Otken, jotken@softadvances.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
+ */
+
+/************************************************************************
+ * luan.h - configuration for LUAN board
+ ***********************************************************************/
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_LUAN            1       /* Board is Luan                */
+#define CONFIG_440SP           1       /* Specific PPC440SP support    */
+#define CONFIG_4xx             1       /* PPC4xx family                */
+#define CONFIG_440             1
+#define CONFIG_SYS_CLK_FREQ    33333333 /* external freq to pll        */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1     /* call board_early_init_f()   */
+#define CONFIG_MISC_INIT_R     1       /* call misc_init_r()           */
+
+/*-----------------------------------------------------------------------
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ *----------------------------------------------------------------------*/
+#define CFG_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Monitor */
+#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc  */
+#define CFG_MONITOR_BASE       (-CFG_MONITOR_LEN)
+#define CFG_SDRAM_BASE         0x00000000      /* MUST be zero */
+
+#define CFG_LARGE_FLASH                0xffc00000      /* 4MB flash address CS0 */
+#define CFG_SMALL_FLASH                0xff900000      /* 1MB flash address CS2 */
+#define CFG_SRAM_BASE          0xff800000      /* 1MB SRAM  address CS2 */
+#define CFG_EPLD_BASE          0xff000000      /* EPLD and FRAM     CS1 */
+
+#define CFG_ISRAM_BASE         0xf8000000      /* internal 8k SRAM (L2 cache) */
+
+#define CFG_PERIPHERAL_BASE     0xf0000000     /* internal peripherals */
+
+#define CFG_PCI_MEMBASE                0x80000000      /* mapped pci memory */
+#define CFG_PCI_BASE           0xd0000000      /* internal PCI regs */
+#define CFG_PCI_TARGBASE       0x80000000      /* PCIaddr mapped to CFG_PCI_MEMBASE */
+
+#if CFG_LARGE_FLASH == 0xffc00000
+#define CFG_FLASH_BASE         CFG_LARGE_FLASH
+#else
+#define CFG_FLASH_BASE         CFG_SMALL_FLASH
+#endif
+
+#undef CFG_DRAM_TEST
+#if CFG_SRAM_BASE
+#define CFG_KBYTES_SDRAM       1024*2
+#else
+#define CFG_KBYTES_SDRAM       1024
+#endif
+
+/*-----------------------------------------------------------------------
+ * Initial RAM & stack pointer (placed in SDRAM)
+ *----------------------------------------------------------------------*/
+#define CFG_INIT_RAM_ADDR      CFG_ISRAM_BASE
+#define CFG_INIT_RAM_END       (8 << 10)
+#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#define CFG_EXT_SERIAL_CLOCK   11059200 /* external 11.059MHz clk */
+#define CONFIG_BAUDRATE                115200
+#undef  CONFIG_SERIAL_MULTI
+#undef  CONFIG_UART1_CONSOLE           /* define if you want console on UART1 */
+
+#define CFG_BAUDRATE_TABLE  \
+    {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*-----------------------------------------------------------------------
+ * Environment
+ *----------------------------------------------------------------------*/
+/*
+ * Define here the location of the environment variables (FLASH or EEPROM).
+ * Note: DENX encourages to use redundant environment in FLASH.
+ */
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environment vars       */
+
+/*-----------------------------------------------------------------------
+ * FLASH related
+ *----------------------------------------------------------------------*/
+#define CFG_MAX_FLASH_BANKS    3       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     64      /* 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_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+
+#define CFG_FLASH_ADDR0         0x555
+#define CFG_FLASH_ADDR1         0x2aa
+#define CFG_FLASH_WORD_SIZE     unsigned char
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x10000 /* size of one complete sector  */
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE-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 /* CFG_ENV_IS_IN_FLASH */
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#undef  CONFIG_SPD_EEPROM              /* SPD EEPROM init doesn't support DDR2 */
+#define SPD_EEPROM_ADDRESS {0x52,0x53} /* I2C SPD addresses */
+#define IIC0_DIMM0_ADDR         0x52
+#define IIC0_DIMM1_ADDR         0x53
+
+/*-----------------------------------------------------------------------
+ * 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 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"                                                 \
+       "hostname=luan\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"                                               \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
+       "bootfile=/tftpboot/luan/uImage\0"                              \
+       "kernel_addr=fc000000\0"                                        \
+       "ramdisk_addr=fc100000\0"                                       \
+       "load=tftp 100000 /tftpboot/luan/u-boot.bin\0"                  \
+       "update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;"   \
+               "cp.b 100000 fffc0000 40000;"                           \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load;run update\0"                                     \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#if 0
+#define CONFIG_BOOTDELAY       -1      /* autoboot disabled            */
+#else
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+#endif
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                1
+#define CONFIG_CIS8201_PHY     1       /* Enable 'special' RGMII mode for Cicada phy */
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
+#define CONFIG_NET_MULTI               /* needed for NetConsole        */
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+
+#ifdef DEBUG
+#define CONFIG_PANIC_HANG
+#else
+#define CONFIG_HW_WATCHDOG                     /* watchdog */
+#endif
+
+#define CONFIG_COMMANDS               (CONFIG_CMD_DFL          |       \
+                               CFG_CMD_ASKENV          |       \
+                               CFG_CMD_CACHE           |       \
+                               CFG_CMD_DHCP            |       \
+                               CFG_CMD_DIAG            |       \
+                               CFG_CMD_ELF             |       \
+                               CFG_CMD_I2C             |       \
+                               CFG_CMD_IRQ             |       \
+                               CFG_CMD_MII             |       \
+                               CFG_CMD_NET             |       \
+                               CFG_CMD_NFS             |       \
+                               CFG_CMD_PCI             |       \
+                               CFG_CMD_PING            |       \
+                               CFG_CMD_REGINFO         |       \
+                               CFG_CMD_SETGETDCR       |       \
+                               CFG_CMD_SDRAM           |       \
+                               0)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS */
+#include <cmd_confdefs.h>
+
+/*
+ * 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) /* 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) */
+#undef  CONFIG_LYNXKDI                 /* support kdi files            */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *-----------------------------------------------------------------------
+ */
+#if (CONFIG_COMMANDS & CFG_CMD_PCI)
+
+/* General PCI */
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_PNP                 /* do (not) pci plug-and-play   */
+#define CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup  */
+
+/* Board-specific PCI */
+#define CFG_PCI_PRE_INIT                /* enable board pci_pre_init()  */
+#define CFG_PCI_TARGET_INIT
+#undef  CFG_PCI_MASTER_INIT
+
+#define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC */
+#define CFG_PCI_SUBSYS_DEVICEID 0x4403 /* whatever */
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_PCI */
+
+/*
+ * 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                (32<<10) /* For AMCC 440 CPUs                   */
+#define CFG_CACHELINE_SIZE     32      /* ...                  */
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+#endif /* __CONFIG_H */
index 9ac62c7e076a6add6461b0e382e90e8982421b8a..ad1035b6d63173dda5c1ab3553c9715fb798278d 100644 (file)
 #define CONFIG_NETMASK         255.255.0.0
 #define CONFIG_IPADDR          192.168.0.21
 #define CONFIG_SERVERIP                192.168.0.250
-#define CONFIG_BOOTCOMMAND     "bootm 40000"
+#define CONFIG_BOOTCOMMAND     "bootm 80000"
 #define CONFIG_BOOTARGS                "root=/dev/mtdblock2 rootfstype=cramfs console=ttyS0,115200"
 #define CONFIG_CMDLINE_TAG
+#define CONFIG_TIMESTAMP
 
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CONFIG_KGDB_BAUDRATE   230400          /* speed to run kgdb serial port */
 
 #undef CFG_CLKS_IN_HZ          /* everything, incl board info, in Hz */
 
-#define CFG_LOAD_ADDR          0xa8000000      /* default load address */
+#define CFG_LOAD_ADDR  (CFG_DRAM_BASE + 0x8000) /* default load address */
 
 #define CFG_HZ                 3686400         /* incrementer freq: 3.6864 MHz */
 #define CFG_CPUSPEED           0x161           /* set core clock to 400/200/100 MHz */
 #define CFG_FLASH_ERASE_TOUT   (25*CFG_HZ) /* Timeout for Flash Erase */
 #define CFG_FLASH_WRITE_TOUT   (25*CFG_HZ) /* Timeout for Flash Write */
 
-/* FIXME */
+/* NOTE: many default partitioning schemes assume the kernel starts at the
+ * second sector, not an environment.  You have been warned!
+ */
+#define        CFG_MONITOR_LEN         PHYS_FLASH_SECT_SIZE
 #define CFG_ENV_IS_IN_FLASH    1
-#define CFG_ENV_ADDR           (PHYS_FLASH_1 + 0x1C000)        /* Addr of Environment Sector   */
-#define CFG_ENV_SIZE           0x4000  /* Total Size of Environment Sector     */
+#define CFG_ENV_ADDR           (PHYS_FLASH_1 + PHYS_FLASH_SECT_SIZE)
+#define CFG_ENV_SECT_SIZE      PHYS_FLASH_SECT_SIZE
+#define CFG_ENV_SIZE           (PHYS_FLASH_SECT_SIZE / 16)
 
 
 /*
index abad059ccf2ff969a38a86eb2015559cc85605f6..6762cd61eae5b50d11a259e592bfa588a90a8d3d 100644 (file)
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs     */
+#define CFG_DCACHE_SIZE                16384   /* For AMCC 405 CPUs    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 
 /*-----------------------------------------------------------------------
diff --git a/include/configs/mp2usb.h b/include/configs/mp2usb.h
new file mode 100644 (file)
index 0000000..04f1f24
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * 2004-2005 Gary Jennejohn <garyj@denx.de>
+ *
+ * Modified for the MP2USB by (C) Copyright 2005 Eric Benard
+ * ebenard@eukrea.com
+ *
+ * Configuration settings for the MP2USB 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
+
+/* ARM asynchronous clock */
+#define AT91C_MAIN_CLOCK       179712000       /* from 18.432 MHz crystal (18432000 / 4 * 45) */
+#define AT91C_MASTER_CLOCK     (AT91C_MAIN_CLOCK/3)    /* peripheral clock */
+
+#define AT91_SLOW_CLOCK                32768   /* slow clock */
+
+#define CONFIG_ARM920T         1       /* This is an ARM920T Core      */
+#define CONFIG_AT91RM9200      1       /* It's an Atmel AT91RM9200 SoC */
+#define CONFIG_AT91RM9200DK    1       /* on an AT91RM9200DK Board     */
+#define CONFIG_MP2USB          1       /* on an MP2USB Board           */
+#undef  CONFIG_USE_IRQ                 /* we don't need IRQ/FIQ stuff  */
+#define USE_920T_MMU           1
+
+#define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs      */
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_INITRD_TAG      1
+
+#define CFG_ATMEL_PLL_INIT_BUG 1
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+#define CFG_USE_MAIN_OSCILLATOR                1
+/* flash */
+#define MC_PUIA_VAL    0x00000000
+#define MC_PUP_VAL     0x00000000
+#define MC_PUER_VAL    0x00000000
+#define MC_ASR_VAL     0x00000000
+#define MC_AASR_VAL    0x00000000
+#define EBI_CFGR_VAL   0x00000000
+#define SMC2_CSR_VAL   0x00003084 /* 16bit, 2 TDF, 4 WS */
+
+/* clocks */
+#define PLLAR_VAL      0x20263E04 /* 180 MHz for PCK */
+#define PLLBR_VAL      0x1048bE0E /* 48 MHz (divider by 2 for USB) */
+#define MCKR_VAL       0x00000202 /* PCK/3 = MCK Master Clock = 60MHz from PLLA */
+
+/* sdram */
+#define PIOC_ASR_VAL   0xFFFF0000 /* Configure PIOC as peripheral (D16/D31) */
+#define PIOC_BSR_VAL   0x00000000
+#define PIOC_PDR_VAL   0xFFFF0000
+#define EBI_CSA_VAL    0x00000002 /* CS1=SDRAM */
+#define SDRC_CR_VAL    0x3211295A /* set up the SDRAM */
+#define SDRAM          0x20000000 /* address of the SDRAM */
+#define SDRAM1         0x20000020 /* address of the SDRAM */
+#define SDRAM_VAL      0x00000000 /* value written to SDRAM */
+#define SDRC_MR_VAL    0x00000002 /* Precharge All */
+#define SDRC_MR_VAL1   0x00000004 /* refresh */
+#define SDRC_MR_VAL2   0x00000003 /* Load Mode Register */
+#define SDRC_MR_VAL3   0x00000000 /* Normal Mode */
+#define SDRC_TR_VAL    0x000002E0 /* Write refresh rate */
+#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+
+#define CONFIG_BAUDRATE                115200
+
+#define CFG_AT91C_BRGR_DIVISOR 33      /* hardcode so no __divsi3 : AT91C_MASTER_CLOCK /(baudrate * 16) */
+
+/*
+ * Hardware drivers
+ */
+
+/* define one of these to choose the DBGU, USART0  or USART1 as console */
+#define CONFIG_DBGU
+#undef CONFIG_USART0
+#undef CONFIG_USART1
+
+#undef CONFIG_HWFLOW                   /* don't include RTS/CTS flow control support   */
+
+#undef CONFIG_MODEM_SUPPORT            /* disable modem initialization stuff */
+
+#define CONFIG_USB_OHCI                1
+#define CONFIG_USB_KEYBOARD    1
+#define CONFIG_USB_STORAGE     1
+#define CONFIG_DOS_PARTITION   1
+#define CONFIG_AT91C_PQFP_UHPBUG 1
+
+#undef CONFIG_HARD_I2C
+
+#ifdef CONFIG_HARD_I2C
+#define CFG_I2C_SPEED          0       /* not used */
+#define CFG_I2C_SLAVE          0       /* not used */
+#define CONFIG_RTC_RS5C372A            /* RICOH I2C RTC */
+#define CFG_I2C_RTC_ADDR       0x32
+#define CFG_I2C_EEPROM_ADDR    0x50
+#define CFG_I2C_EEPROM_ADDR_LEN 1
+#define CFG_I2C_EEPROM_ADDR_OVERFLOW
+#endif
+/* still about 20 kB free with this defined */
+#define CFG_LONGHELP
+
+#define CONFIG_BOOTDELAY      3
+
+#ifdef CONFIG_HARD_I2C
+#define CONFIG_COMMANDS                \
+                      ((CONFIG_CMD_DFL | \
+                       CFG_CMD_DATE    | \
+                       CFG_CMD_DHCP    | \
+                       CFG_CMD_EEPROM  | \
+                       CFG_CMD_I2C     | \
+                       CFG_CMD_NFS     | \
+                       CFG_CMD_SNTP    | \
+                       CFG_CMD_MISC))
+#else
+#define CONFIG_COMMANDS                \
+                      ((CONFIG_CMD_DFL | \
+                       CFG_CMD_DHCP    | \
+                       CFG_CMD_NFS     | \
+                       CFG_CMD_SNTP    | \
+                       CFG_CMD_USB      | \
+                       CFG_CMD_CACHE)  & \
+                     ~(CFG_CMD_BDI | \
+                       CFG_CMD_IMI | \
+                       CFG_CMD_AUTOSCRIPT | \
+                       CFG_CMD_FPGA | \
+                       CFG_CMD_MISC | \
+                       CFG_CMD_LOADS ))
+#define CONFIG_TIMESTAMP
+#endif
+#define CFG_LONGHELP
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_NR_DRAM_BANKS   1
+#define PHYS_SDRAM             0x20000000
+#define PHYS_SDRAM_SIZE                0x08000000      /* 128 megs */
+
+#define CFG_MEMTEST_START      PHYS_SDRAM
+#define CFG_MEMTEST_END                CFG_MEMTEST_START + PHYS_SDRAM_SIZE - 262144
+
+#define CONFIG_DRIVER_ETHER
+#define CONFIG_NET_RETRY_COUNT         20
+#undef CONFIG_AT91C_USE_RMII
+
+#define PHYS_FLASH_1                   0x10000000
+#define PHYS_FLASH_SIZE                        0x1000000  /* 16 megs main flash */
+#define CFG_FLASH_BASE                 PHYS_FLASH_1
+#define CFG_MONITOR_BASE               CFG_FLASH_BASE
+#define CFG_MAX_FLASH_BANKS            1
+#define CFG_MAX_FLASH_SECT             256
+#define CFG_FLASH_ERASE_TOUT           (2 * CFG_HZ)    /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT           (2 * CFG_HZ)    /* Timeout for Flash Write */
+#define CFG_FLASH_LOCK_TOUT            (10*CFG_HZ)     /* Timeout for Flash Set Lock Bit */
+#define CFG_FLASH_UNLOCK_TOUT          (10*CFG_HZ)     /* Timeout for Flash Clear Lock Bits */
+#define CFG_FLASH_PROTECTION                           /* "Real" (hardware) sectors protection */
+
+#define CFG_ENV_IS_IN_FLASH            1
+#define CFG_ENV_OFFSET                 0x20000         /* after u-boot.bin */
+#define CFG_ENV_ADDR                   (CFG_FLASH_BASE+CFG_ENV_OFFSET)
+#define CFG_ENV_SIZE                   0x20000
+
+#define CFG_LOAD_ADDR          0x21000000  /* default load address */
+
+#define CFG_BAUDRATE_TABLE     { 115200, 57600, 38400, 19200, 9600 }
+
+#define CFG_PROMPT             "=> "           /* Monitor Command Prompt */
+#define CFG_CBSIZE             256             /* Console I/O Buffer Size */
+#define CFG_MAXARGS            32              /* max number of command args */
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+
+#define CFG_DEVICE_DEREGISTER           /* needs device_deregister */
+#define LITTLEENDIAN            1       /* used by usb_ohci.c  */
+
+#ifndef __ASSEMBLY__
+/*-----------------------------------------------------------------------
+ * Board specific extension for bd_info
+ *
+ * This structure is embedded in the global bd_info (bd_t) structure
+ * and can be used by the board specific code (eg board/...)
+ */
+
+struct bd_info_ext {
+       /* helper variable for board environment handling
+        *
+        * env_crc_valid == 0    =>   uninitialised
+        * env_crc_valid  > 0    =>   environment crc in flash is valid
+        * env_crc_valid  < 0    =>   environment crc in flash is invalid
+        */
+       int env_crc_valid;
+};
+#endif /* __ASSEMBLY__ */
+
+#define CFG_HZ 1000
+#define CFG_HZ_CLOCK (AT91C_MASTER_CLOCK/2)    /* AT91C_TC0_CMR is implicitly set to */
+                                               /* AT91C_TC_TIMER_DIV1_CLOCK */
+
+#define CONFIG_STACKSIZE       (32*1024)       /* regular stack */
+
+#ifdef CONFIG_USE_IRQ
+#error CONFIG_USE_IRQ not supported
+#endif
+
+#define CFG_DEVICE_NULLDEV      1      /* enble null device            */
+#undef CONFIG_SILENT_CONSOLE           /* enable silent startup        */
+
+#define CONFIG_AUTOBOOT_KEYED
+#define CONFIG_AUTOBOOT_PROMPT "Press SPACE to abort autoboot in %d seconds\n"
+#define CONFIG_AUTOBOOT_STOP_STR " "
+#define CONFIG_AUTOBOOT_DELAY_STR "d"
+
+#define CONFIG_VERSION_VARIABLE        1       /* include version env variable */
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/o2dnt.h b/include/configs/o2dnt.h
new file mode 100644 (file)
index 0000000..5c05a74
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * (C) Copyright 2005
+ * 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
+ */
+
+#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
+#define CONFIG_O2DNT           1       /* ... on O2DNT board */
+
+#define CFG_MPC5XXX_CLKIN      33000000 /* ... running at 33.000000MHz */
+
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH  */
+#define BOOTFLAG_WARM          0x02    /* Software reboot           */
+
+#define CFG_CACHELINE_SIZE     32      /* For MPC5xxx CPUs */
+#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     5       /* console is on PSC5 */
+#define CONFIG_BAUDRATE                115200  /* ... at 115200 bps */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+/*
+ * PCI Mapping:
+ * 0x40000000 - 0x4fffffff - PCI Memory
+ * 0x50000000 - 0x50ffffff - PCI IO Space
+ */
+#define CONFIG_PCI             1
+#define CONFIG_PCI_PNP         1
+/* #define CONFIG_PCI_SCAN_SHOW        1 */
+
+#define CONFIG_PCI_MEM_BUS     0x40000000
+#define CONFIG_PCI_MEM_PHYS    CONFIG_PCI_MEM_BUS
+#define CONFIG_PCI_MEM_SIZE    0x10000000
+
+#define CONFIG_PCI_IO_BUS      0x50000000
+#define CONFIG_PCI_IO_PHYS     CONFIG_PCI_IO_BUS
+#define CONFIG_PCI_IO_SIZE     0x01000000
+
+#define CFG_XLB_PIPELINING     1
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_EEPRO100
+#define CFG_RX_ETH_BUFFER      8  /* use 8 rx buffer on eepro100  */
+#define CONFIG_NS8382X         1
+
+#define ADD_PCI_CMD            CFG_CMD_PCI
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+
+#define CONFIG_TIMESTAMP       /* Print image info with timestamp */
+
+/*
+ * Supported commands
+ */
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
+                               CFG_CMD_EEPROM  | \
+                               CFG_CMD_FAT     | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_NFS     | \
+                               CFG_CMD_MII     | \
+                               CFG_CMD_PING    | \
+                               ADD_PCI_CMD     )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#if (TEXT_BASE == 0xFF000000)          /* Boot low with 16 MB Flash */
+#   define CFG_LOWBOOT         1
+#else
+#   error "TEXT_BASE must be 0xFF000000"
+#endif
+
+/*
+ * Autobooting
+ */
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds */
+
+#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_82xx\0"                                 \
+       "bootfile=/tftpboot/MPC5200/uImage\0"                           \
+       ""
+
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#if defined(CONFIG_MPC5200)
+/*
+ * 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 */
+#endif
+#endif
+
+/*
+ * I2C configuration
+ */
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support */
+#define CFG_I2C_MODULE         1       /* Select I2C module #1 or #2 */
+
+#define CFG_I2C_SPEED          100000 /* 100 kHz */
+#define CFG_I2C_SLAVE          0x7F
+
+/*
+ * EEPROM configuration:
+ *
+ * O2DNT board is equiped with Ramtron FRAM device FM24CL16
+ * 16 Kib Ferroelectric Nonvolatile serial RAM memory
+ * organized as 2048 x 8 bits and addressable as eight I2C devices
+ * 0x50 ... 0x57 each 256 bytes in size
+ *
+ */
+#define CFG_I2C_FRAM
+#define CFG_I2C_EEPROM_ADDR            0x50    /* 1010000x */
+#define CFG_I2C_EEPROM_ADDR_LEN                1
+#define CFG_EEPROM_PAGE_WRITE_BITS     3
+/*
+ * There is no write delay with FRAM, write operations are performed at bus
+ * speed. Thus, no status polling or write delay is needed.
+ */
+/*#define CFG_EEPROM_PAGE_WRITE_DELAY_MS       70*/
+
+
+/*
+ * Flash configuration
+ */
+#define CFG_FLASH_BASE         0xFF000000
+#define CFG_FLASH_SIZE         0x01000000
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x00040000)
+
+#define CFG_MAX_FLASH_BANKS    1       /* max num of memory banks      */
+#define CFG_MAX_FLASH_SECT     128     /* max num of sects on one chip */
+
+#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_UNLOCK_TOUT  10000   /* Timeout for Flash Clear Lock Bits (in ms) */
+#define CFG_FLASH_PROTECTION           /* "Real" (hardware) sectors protection */
+
+/*
+ * Environment settings
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_SIZE           0x20000
+#define CFG_ENV_SECT_SIZE      0x20000
+#define CONFIG_ENV_OVERWRITE   1
+
+/*
+ * Memory map
+ */
+#define CFG_MBAR               0xF0000000
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_DEFAULT_MBAR       0x80000000
+
+/* 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
+#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 */
+
+/*
+ * Ethernet configuration
+ */
+#define CONFIG_MPC5xxx_FEC     1
+/*
+ * Define CONFIG_FEC_10MBIT to force FEC at 10Mb
+ */
+/* #define CONFIG_FEC_10MBIT 1 */
+#define CONFIG_PHY_ADDR                0x00
+
+/*
+ * GPIO configuration
+ */
+/*#define CFG_GPS_PORT_CONFIG  0x10002004 */
+#define CFG_GPS_PORT_CONFIG    0x00002006      /* no CAN */
+
+/*
+ * 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)  /* 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 */
+
+/*
+ * Various low-level settings
+ */
+#if defined(CONFIG_MPC5200)
+#define CFG_HID0_INIT          HID0_ICE | HID0_ICFI
+#define CFG_HID0_FINAL         HID0_ICE
+#else
+#define CFG_HID0_INIT          0
+#define CFG_HID0_FINAL         0
+#endif
+
+#define CFG_BOOTCS_START       CFG_FLASH_BASE
+#define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
+
+#ifdef CFG_PCISPEED_66
+/*
+ * For 66 MHz PCI clock additional Wait State is needed for CS0 (flash).
+ */
+#define CFG_BOOTCS_CFG         0x00057801 /* for pci_clk = 66 MHz */
+#else
+#define CFG_BOOTCS_CFG         0x00047801 /* for pci_clk = 33 MHz */
+#endif
+
+#define CFG_CS0_START          CFG_FLASH_BASE
+#define CFG_CS0_SIZE           CFG_FLASH_SIZE
+
+#define CFG_CS_BURST           0x00000000
+#define CFG_CS_DEADCYCLE       0x33333333
+
+#define CFG_RESET_ADDRESS      0xff000000
+
+#endif /* __CONFIG_H */
index 2b0f6874c3b03da2dd314b8418242c9aeb421336..a13d6a870abc921a87ffdbfce889e5a21d6dc758 100644 (file)
@@ -30,7 +30,7 @@
 
 
 /************************************************************************
- * OCOTEA.h - configuration for IBM 440GX Ref (Ocotea)
+ * OCOTEA.h - configuration for AMCC 440GX Ref (Ocotea)
  ***********************************************************************/
 
 #ifndef __CONFIG_H
        "netdev=eth0\0"                                                 \
        "hostname=ocotea\0"                                             \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/ocotea/uImage\0"                            \
 #define CONFIG_PHY1_ADDR       2
 #define CONFIG_PHY2_ADDR       0x10
 #define CONFIG_PHY3_ADDR       0x18
+#define CONFIG_HAS_ETH0
+#define CONFIG_HAS_ETH1
+#define CONFIG_HAS_ETH2
+#define CONFIG_HAS_ETH3
 #define CONFIG_CIS8201_PHY     1       /* Enable 'special' RGMII mode for Cicada phy */
 #define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+#define CONFIG_PHY_RESET        1       /* reset phy upon startup         */
+#define CONFIG_PHY_RESET_DELAY 1000
 
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
                                CFG_CMD_ASKENV  | \
 #define CFG_LOAD_ADDR          0x100000        /* default load address */
 #define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
 
-#define CFG_HZ         100             /* decrementer freq: 1 ms ticks */
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
 
 #define CONFIG_AUTO_COMPLETE   1       /* add autocompletion support   */
 #define CONFIG_LOOPW            1       /* enable loopw command         */
 #define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
 #define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
 
-#define CFG_RX_ETH_BUFFER      32        /* Number of ethernet rx buffers & descriptors */
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
 
 /*-----------------------------------------------------------------------
  * PCI stuff
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                32768   /* For IBM 440 CPUs                     */
+#define CFG_DCACHE_SIZE                32768   /* For AMCC 440 CPUs                    */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index c7916036ff3b83f7d04722573ff996338101c32d..12252ac129e096251d9013e02ea890f5d22852a5 100644 (file)
 /*#define CONFIG_VIRTIO          1    #* Using Virtio simulator */
 
 /* Clock config to target*/
-#define PRCM_CONFIG_II         1
-/*#define PRCM_CONFIG_III      1 */
-
-/* Memory configuration on board */
-/*#define CONFIG_OPTIMIZE_DDR  1 */
+#define PRCM_CONFIG_II 1
+/* #define PRCM_CONFIG_III             1 */
 
 #include <asm/arch/omap2420.h>        /* get chip and board defs */
 
 #ifdef CFG_NAND_BOOT
 #define CONFIG_COMMANDS          (CONFIG_CMD_DFL | CFG_CMD_DHCP | CFG_CMD_I2C | CFG_CMD_NAND | CFG_CMD_JFFS2)
 #else
-#define CONFIG_COMMANDS          (CONFIG_CMD_DFL | CFG_CMD_DHCP | CFG_CMD_I2C | CFG_CMD_JFFS2)
+#define CONFIG_COMMANDS          ((CONFIG_CMD_DFL | CFG_CMD_DHCP | CFG_CMD_I2C | CFG_CMD_JFFS2) & ~CFG_CMD_AUTOSCRIPT)
 #endif
-/* I'd like to get to these. Snap kernel loads if we make MMC go */
-  /* #define CONFIG_COMMANDS       (CONFIG_CMD_DFL | CFG_CMD_NAND | CFG_CMD_JFFS2 | CFG_CMD_DHCP | CFG_CMD_MMC | CFG_CMD_FAT | CFG_CMD_I2C) */
-
 #define CONFIG_BOOTP_MASK        CONFIG_BOOTP_DEFAULT
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #define NAND_WP_OFF()  do {*(volatile u32 *)(0x6800A050) |= 0x00000010;} while(0)
 #define NAND_WP_ON()  do {*(volatile u32 *)(0x6800A050) &= ~0x00000010;} while(0)
 
-
 #define NAND_CTL_CLRALE(nandptr)
 #define NAND_CTL_SETALE(nandptr)
 #define NAND_CTL_CLRCLE(nandptr)
 #define NAND_DISABLE_CE(nand)
 #define NAND_ENABLE_CE(nand)
 
-
 #define CONFIG_BOOTDELAY         3
 
 #ifdef NFS_BOOT_DEFAULTS
 #define PHYS_SDRAM_1_SIZE        SZ_32M            /* at least 32 meg */
 #define PHYS_SDRAM_2             OMAP2420_SDRC_CS1
 
+#define PHYS_FLASH_SECT_SIZE     SZ_128K
 #define PHYS_FLASH_1             H4_CS0_BASE      /* Flash Bank #1 */
 #define PHYS_FLASH_SIZE_1        SZ_32M
 #define PHYS_FLASH_2             (H4_CS0_BASE+SZ_32M) /* same cs, 2 chips in series */
 #define PHYS_FLASH_SIZE_2        SZ_32M
-#define CFG_FLASH_BASE           PHYS_FLASH_1
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
+#define CFG_FLASH_BASE           PHYS_FLASH_1
 #define CFG_MAX_FLASH_BANKS      2           /* max number of memory banks */
 #define CFG_MAX_FLASH_SECT       (259)      /* max number of sectors on one chip */
+#define CFG_MONITOR_BASE       CFG_FLASH_BASE /* Monitor at beginning of flash */
+#define CFG_MONITOR_LEN                SZ_128K      /* Reserve 1 sector */
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE, CFG_FLASH_BASE + PHYS_FLASH_SIZE_1 }
 
 #ifdef CFG_NAND_BOOT
 #define CFG_ENV_IS_IN_NAND     1
 #else
 #define CFG_ENV_ADDR             (CFG_FLASH_BASE + SZ_128K)
 #define        CFG_ENV_IS_IN_FLASH      1
+#define CFG_ENV_SECT_SIZE      PHYS_FLASH_SECT_SIZE
+#define CFG_ENV_OFFSET ( CFG_MONITOR_BASE + CFG_MONITOR_LEN ) /* Environment after Monitor */
 #endif
 
+/*-----------------------------------------------------------------------
+ * 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 hardware sector protection */
+
 /* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT     (30*75*CFG_HZ) /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT     (30*75*CFG_HZ) /* Timeout for Flash Write */
+#define CFG_FLASH_ERASE_TOUT     (100*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT     (100*CFG_HZ) /* Timeout for Flash Write */
 
 #define CFG_JFFS2_MEM_NAND
 
diff --git a/include/configs/p3p440.h b/include/configs/p3p440.h
new file mode 100644 (file)
index 0000000..831d018
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (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
+ */
+
+/************************************************************************
+ * board/config_p3p440.h - configuration for Prodrive P3P440
+ ***********************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*-----------------------------------------------------------------------
+ * High Level Configuration Options
+ *----------------------------------------------------------------------*/
+#define CONFIG_P3P440          1           /* Board is P3P440          */
+#define CONFIG_440GP           1           /* Specifc GP support       */
+#define CONFIG_4xx             1           /* ... PPC4xx family        */
+#define CONFIG_BOARD_EARLY_INIT_F 1        /* Call board_early_init_f  */
+#define CONFIG_MISC_INIT_R     1           /* Call misc_init_r         */
+#define CONFIG_SYS_CLK_FREQ    33333333    /* external freq 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           */
+#define CFG_MONITOR_BASE    0xfffc0000     /* start of monitor         */
+#define CFG_PCI_MEMBASE            0x80000000      /* mapped pci memory        */
+#define CFG_PERIPHERAL_BASE 0xe0000000     /* internal peripherals     */
+#define CFG_ISRAM_BASE     0xc0000000      /* internal SRAM            */
+#define CFG_PCI_BASE       0xd0000000      /* internal PCI regs        */
+
+#define CFG_USB_BASE       (CFG_PERIPHERAL_BASE + 0x00000000)
+
+/*-----------------------------------------------------------------------
+ * 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                (256 * 1024)    /* Reserve 256 kB for Mon*/
+#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserve 128 kB for malloc*/
+
+/*-----------------------------------------------------------------------
+ * DDR SDRAM
+ *----------------------------------------------------------------------*/
+#define CONFIG_SDRAM_BANK0     1       /* init onboard DDR SDRAM bank 0*/
+#define CFG_SDRAM_TABLE        {       \
+               {(256 << 20), 0x000C4001}, /* 256MB mode 3, 13x10(4) */ \
+               {(64 << 20),  0x00082001}} /* 64MB mode 2, 12x9(4)   */
+
+/*-----------------------------------------------------------------------
+ * Serial Port
+ *----------------------------------------------------------------------*/
+#undef CFG_EXT_SERIAL_CLOCK
+#define CONFIG_BAUDRATE                115200
+
+#define CFG_BAUDRATE_TABLE                                             \
+       { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400,               \
+                       57600, 115200, 230400, 460800, 921600 }
+
+/*-----------------------------------------------------------------------
+ * 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 CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs      */
+
+/*-----------------------------------------------------------------------
+ * I2C RTC
+ *----------------------------------------------------------------------*/
+#define CONFIG_RTC_MAX6900     1               /* MAX6900 RTC          */
+
+/*-----------------------------------------------------------------------
+ * I2C EEPROM (PCF8594C) for environment
+ *----------------------------------------------------------------------*/
+#define CFG_I2C_EEPROM_ADDR    0x54    /* EEPROM PCF8594C              */
+#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 3   /* The Philips PCF8594C has     */
+                                       /* 8 byte page write mode using */
+                                       /* last 3 bits of the address   */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 40   /* and takes up to 40 msec */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+
+/*-----------------------------------------------------------------------
+ * Default configuration (environment varibles...)
+ *----------------------------------------------------------------------*/
+#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"                                                 \
+       "hostname=p3p440\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"                                               \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
+       "bootfile=/tftpboot/p3p440/uImage\0"                            \
+       "kernel_addr=ff800000\0"                                        \
+       "ramdisk_addr=ff810000\0"                                       \
+       "load=tftp 100000 /tftpboot/p3p440/u-boot.bin\0"                \
+       "update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;"   \
+               "cp.b 100000 fffc0000 40000;"                           \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load;run update\0"                                     \
+       ""
+#define CONFIG_BOOTCOMMAND     "run net_nfs"
+
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                0x1c    /* PHY address                  */
+#define CONFIG_HAS_ETH1
+#define CONFIG_PHY1_ADDR       0x1d    /* EMAC1 PHY address            */
+#define CONFIG_NET_MULTI       1
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
+
+#define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
+                               CFG_CMD_ASKENV  | \
+                               CFG_CMD_DATE    | \
+                               CFG_CMD_DHCP    | \
+                               CFG_CMD_DIAG    | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_MII     | \
+                               CFG_CMD_NET     | \
+                               CFG_CMD_NFS     | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_PING    | \
+                               CFG_CMD_REGINFO | \
+                               CFG_CMD_EEPROM  | \
+                               CFG_CMD_SNTP    )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*-----------------------------------------------------------------------
+ * 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) /* 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_AUTO_COMPLETE   1       /* add autocompletion support   */
+#define CONFIG_LOOPW            1       /* enable loopw command         */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ *----------------------------------------------------------------------*/
+/* General PCI */
+#define CONFIG_PCI                                 /* include pci support              */
+#define CONFIG_PCI_PNP                         /* do pci plug-and-play         */
+#define CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE    0x80000000  /* PCIaddr mapped to CFG_PCI_MEMBASE */
+
+/* Board-specific PCI */
+#define CFG_PCI_PRE_INIT                /* enable board pci_pre_init()  */
+#define CFG_PCI_TARGET_INIT                /* let board init pci target    */
+
+#define CONFIG_DISABLE_PISE_TEST       /* disable PISE test (PCIX only)*/
+
+#define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC */
+#define CFG_PCI_SUBSYS_DEVICEID 0xcafe  /* Whatever */
+
+/*-----------------------------------------------------------------------
+ * External Bus Controller (EBC) Setup
+ *----------------------------------------------------------------------*/
+#define CFG_FLASH0             0xFF800000
+#define CFG_FLASH1             0xFF000000
+#define CFG_FLASH2             0xFE800000
+#define CFG_FLASH3             0xFE000000
+#define CFG_USB                        0xF0000000
+
+/* Memory Bank 0 (Flash Bank 0, NOR-FLASH) initialization                      */
+#define CFG_EBC_PB0AP          0x03050200
+#define CFG_EBC_PB0CR          (CFG_FLASH0 | 0x7A000) /* BAS=0xFF8,BS=8MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 1 (Flash Bank 1, NOR-FLASH) initialization                      */
+#define CFG_EBC_PB1AP          0x03050200
+#define CFG_EBC_PB1CR          (CFG_FLASH1 | 0x7A000) /* BAS=0xFF8,BS=8MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 2 (Flash Bank 2, NOR-FLASH) initialization                      */
+#define CFG_EBC_PB2AP          0x03050200
+#define CFG_EBC_PB2CR          (CFG_FLASH2 | 0x7A000) /* BAS=0xFF8,BS=8MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 3 (Flash Bank 3, NOR-FLASH) initialization                      */
+#define CFG_EBC_PB3AP          0x03050200
+#define CFG_EBC_PB3CR          (CFG_FLASH3 | 0x7A000) /* BAS=0xFF8,BS=8MB,BU=R/W,BW=16bit */
+
+/* Memory Bank 7 (USB controller) initialization                               */
+#define CFG_EBC_PB7AP          0x02015000
+#define CFG_EBC_PB7CR          (CFG_USB | 0xFE000) /* BAS=0xF00,BS=128MB,BU=R/W,BW=16bit*/
+
+/*-----------------------------------------------------------------------
+ * 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_FLASH3, CFG_FLASH2, CFG_FLASH1, CFG_FLASH0 }
+
+#define CFG_MAX_FLASH_BANKS    4       /* 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_EMPTY_INFO           /* print 'E' for empty sector on flinfo */
+#define CFG_FLASH_QUIET_TEST   1       /* don't warn upon unknown flash        */
+
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environment vars       */
+
+#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            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)
+
+/*
+ * 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                (32<<10)        /* For AMCC 405 CPUs            */
+#define CFG_CACHELINE_SIZE     32      /* ...                                  */
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
+#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+#endif /* __CONFIG_H */
diff --git a/include/configs/pb1x00.h b/include/configs/pb1x00.h
new file mode 100644 (file)
index 0000000..ed1893f
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * This file contains the configuration parameters for the dbau1x00 board.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_MIPS32          1  /* MIPS32 CPU core   */
+#define CONFIG_PB1X00          1
+#define CONFIG_AU1X00          1  /* alchemy series cpu */
+
+#ifdef CONFIG_PB1000
+#define CONFIG_AU1000          1
+#else
+#ifdef CONFIG_PB1100
+#define CONFIG_AU1100          1
+#else
+#ifdef CONFIG_PB1500
+#define CONFIG_AU1500          1
+#else
+#error "No valid board set"
+#endif
+#endif
+#endif
+
+#define CONFIG_ETHADDR         DE:AD:BE:EF:01:01    /* Ethernet address */
+
+#define CONFIG_BOOTDELAY       2       /* autoboot after 2 seconds     */
+
+#define CONFIG_BAUDRATE                115200
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+#define        CONFIG_TIMESTAMP                /* Print image info with timestamp */
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
+               "panic=1\0"                                             \
+       "bootfile=/vmlinux.img\0"                               \
+       "load=tftp 80500000 ${u-boot}\0"                                \
+       ""
+/* Boot from NFS root */
+#define CONFIG_BOOTCOMMAND     "bootp; setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; bootm"
+
+/*
+ * Miscellaneous configurable options
+ */
+#define        CFG_LONGHELP                            /* undef to save memory      */
+#define        CFG_PROMPT              "Pb1x00 # "     /* Monitor Command Prompt    */
+#define        CFG_CBSIZE              256             /* Console I/O Buffer Size   */
+#define        CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)  /* Print Buffer Size */
+#define        CFG_MAXARGS             16              /* max number of command args*/
+
+#define CFG_MALLOC_LEN         128*1024
+
+#define CFG_BOOTPARAMS_LEN     128*1024
+
+#define CFG_HZ                 396000000      /* FIXME causes overflow in net.c */
+
+#define CFG_SDRAM_BASE         0x80000000     /* Cached addr */
+
+#define        CFG_LOAD_ADDR           0x81000000     /* default load address  */
+
+#define CFG_MEMTEST_START      0x80100000
+#undef CFG_MEMTEST_START
+#define CFG_MEMTEST_START       0x80200000
+#define CFG_MEMTEST_END                0x83800000
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+#define CFG_MAX_FLASH_BANKS    2       /* max number of memory banks */
+#define CFG_MAX_FLASH_SECT     (128)   /* max number of sectors on one chip */
+
+#define PHYS_FLASH_1           0xbec00000 /* Flash Bank #1 */
+#define PHYS_FLASH_2           0xbfc00000 /* Flash Bank #2 */
+
+/* The following #defines are needed to get flash environment right */
+#define        CFG_MONITOR_BASE        TEXT_BASE
+#define        CFG_MONITOR_LEN         (192 << 10)
+
+#define CFG_INIT_SP_OFFSET     0x4000000
+
+/* We boot from this flash, selected with dip switch */
+#define CFG_FLASH_BASE         PHYS_FLASH_2
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT   (2 * CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT   (2 * CFG_HZ) /* Timeout for Flash Write */
+
+#define        CFG_ENV_IS_NOWHERE      1
+
+/* Address and size of Primary Environment Sector      */
+#define CFG_ENV_ADDR           0xB0030000
+#define CFG_ENV_SIZE           0x10000
+
+#define CONFIG_FLASH_16BIT
+
+#define CONFIG_NR_DRAM_BANKS   2
+
+#define CONFIG_NET_MULTI
+
+#define CONFIG_MEMSIZE_IN_BYTES
+
+
+/*---USB -------------------------------------------*/
+#if 0
+#define CONFIG_USB_OHCI
+#define ADD_USB_CMD             CFG_CMD_USB | CFG_CMD_FAT
+#define CONFIG_USB_STORAGE
+#define CONFIG_DOS_PARTITION
+#else
+#define ADD_USB_CMD             0
+#endif
+
+/*---ATA PCMCIA ------------------------------------*/
+#if 0
+#define CFG_PCMCIA_MEM_SIZE 0x4000000 /* Offset to slot 1 FIXME!!! */
+#define CFG_PCMCIA_MEM_ADDR 0x20000000
+#define CONFIG_PCMCIA_SLOT_A
+
+#define CONFIG_ATAPI 1
+#define CONFIG_MAC_PARTITION 1
+
+/* We run CF in "true ide" mode or a harddrive via pcmcia */
+#define CONFIG_IDE_PCMCIA 1
+
+/* We only support one slot for now */
+#define CFG_IDE_MAXBUS         1       /* max. 1 IDE bus               */
+#define CFG_IDE_MAXDEVICE      1       /* max. 1 drive per IDE bus     */
+
+#undef CONFIG_IDE_LED                  /* LED   for ide not supported  */
+#undef CONFIG_IDE_RESET                /* reset for ide not supported  */
+
+#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     8
+
+/* Offset for normal register accesses  */
+#define CFG_ATA_REG_OFFSET      0
+
+/* Offset for alternate registers       */
+#define CFG_ATA_ALT_OFFSET      0x0100
+
+#endif
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_DCACHE_SIZE                16384
+#define CFG_ICACHE_SIZE                16384
+#define CFG_CACHELINE_SIZE     32
+
+#define CONFIG_COMMANDS        \
+  (((CONFIG_CMD_DFL | CFG_CMD_DHCP | CFG_CMD_ELF | CFG_CMD_MII | CFG_CMD_PING) & \
+ ~(CFG_CMD_ENV | CFG_CMD_FAT | CFG_CMD_FLASH | CFG_CMD_FPGA | CFG_CMD_IDE | \
+   CFG_CMD_LOADS | CFG_CMD_RUN | CFG_CMD_LOADB | CFG_CMD_ELF | \
+   CFG_CMD_BDI | CFG_CMD_BEDBUG)) | ADD_USB_CMD)
+#include <cmd_confdefs.h>
+
+#endif /* __CONFIG_H */
index e261e5367a5f7d63b2a0afb994b034729c079a53..73aa3a88259a4d7334d93a7230d157e854cfa71c 100644 (file)
@@ -56,8 +56,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp;"                                                                \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
diff --git a/include/configs/pf5200.h b/include/configs/pf5200.h
new file mode 100644 (file)
index 0000000..fefdb3c
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ * (C) Copyright 2003-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*************************************************************************
+ * (c) 2005 esd gmbh Hannover
+ *
+ *
+ * from IceCube.h file
+ * by Reinhard Arlt reinhard.arlt@esd-electronics.com
+ *
+ *************************************************************************/
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_MPC5200         1       /* This is an MPC5xxx CPU */
+#define CONFIG_MPC5xxx         1       /* This is an MPC5xxx CPU */
+#define CONFIG_ICECUBE         1       /* ... on IceCube board */
+#define CONFIG_PF5200          1       /* ... on PF5200  board */
+#define CONFIG_MPC5200_DDR     1       /* ... use DDR RAM      */
+
+#define CFG_MPC5XXX_CLKIN      33000000        /* ... running at 33.000000MHz */
+
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH  */
+#define BOOTFLAG_WARM          0x02    /* Software reboot           */
+
+#define CFG_CACHELINE_SIZE     32      /* For MPC5xxx CPUs */
+#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 */
+#if 0                          /* test-only */
+#define CONFIG_BAUDRATE                115200  /* ... at 115200 bps */
+#else
+#define CONFIG_BAUDRATE                9600    /* ... at 115200 bps */
+#endif
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+#ifdef CONFIG_MPC5200          /* MPC5100 PCI is not supported yet. */
+/*
+ * PCI Mapping:
+ * 0x40000000 - 0x4fffffff - PCI Memory
+ * 0x50000000 - 0x50ffffff - PCI IO Space
+ */
+#define CONFIG_PCI             1
+#define CONFIG_PCI_PNP         1
+#define CONFIG_PCI_SCAN_SHOW   1
+
+#define CONFIG_PCI_MEM_BUS     0x40000000
+#define CONFIG_PCI_MEM_PHYS    CONFIG_PCI_MEM_BUS
+#define CONFIG_PCI_MEM_SIZE    0x10000000
+
+#define CONFIG_PCI_IO_BUS      0x50000000
+#define CONFIG_PCI_IO_PHYS     CONFIG_PCI_IO_BUS
+#define CONFIG_PCI_IO_SIZE     0x01000000
+
+#define CONFIG_MII             1
+#if 0                          /* test-only !!! */
+#define CONFIG_NET_MULTI       1
+#define CONFIG_EEPRO100                1
+#define CFG_RX_ETH_BUFFER      8       /* use 8 rx buffer on eepro100  */
+#define CONFIG_NS8382X         1
+#endif
+
+#define ADD_PCI_CMD            CFG_CMD_PCI
+
+#else                          /* MPC5100 */
+
+#define ADD_PCI_CMD            0       /* no CFG_CMD_PCI */
+
+#endif
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+
+/* USB */
+#if 0
+#define CONFIG_USB_OHCI
+#define ADD_USB_CMD            CFG_CMD_USB | CFG_CMD_FAT
+#define CONFIG_USB_STORAGE
+#else
+#define ADD_USB_CMD            0
+#endif
+
+/*
+ * Supported commands
+ */
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
+                                CFG_CMD_EEPROM | \
+                                CFG_CMD_FAT    | \
+                                CFG_CMD_I2C    | \
+                                CFG_CMD_IDE    | \
+                                CFG_CMD_BSP    | \
+                                CFG_CMD_ELF    | \
+                                ADD_PCI_CMD      )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#if (TEXT_BASE == 0xFF000000)  /* Boot low with 16 MB Flash */
+#   define CFG_LOWBOOT         1
+#   define CFG_LOWBOOT16       1
+#endif
+#if (TEXT_BASE == 0xFF800000)  /* Boot low with  8 MB Flash */
+#   define CFG_LOWBOOT         1
+#   define CFG_LOWBOOT08       1
+#endif
+
+/*
+ * Autobooting
+ */
+#define CONFIG_BOOTDELAY       3       /* autoboot after 5 seconds */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Welcome to ParaFinder pf5200;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS \
+       "netdev=eth0\0" \
+       "flash_vxworks0=run ata_vxworks_args;setenv loadaddr ff000000;bootvx\0" \
+       "flash_vxworks1=run ata_vxworks_args;setenv loadaddr ff200000:bootvx\0" \
+       "net_vxworks=phypower 1;sleep 2;tftp ${loadaddr} ${image};run vxworks_args;bootvx\0" \
+       "vxworks_args=setenv bootargs fec(0,0)${host}:${image} h=${serverip} e=${ipaddr} g=${gatewayip} u=${user} ${pass} tn=${target} s=${script}\0" \
+       "ata_vxworks_args=setenv bootargs /ata0/vxWorks h=${serverip} e=${ipaddr} g=${gatewayip} u=${user} ${pass} tn=${target} s=${script} o=fec0 \0" \
+       "loadaddr=01000000\0" \
+       "serverip=192.168.2.99\0" \
+       "gatewayip=10.0.0.79\0" \
+       "user=mu\0" \
+       "target=pf5200.esd\0" \
+       "script=pf5200.bat\0" \
+       "image=/tftpboot/vxWorks_pf5200\0" \
+       "ipaddr=10.0.13.196\0" \
+       "netmask=255.255.0.0\0" \
+       ""
+
+#define CONFIG_BOOTCOMMAND     "run flash_vxworks0"
+
+#if defined(CONFIG_MPC5200)
+/*
+ * IPB Bus clocking configuration.
+ */
+#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#endif
+/*
+ * I2C configuration
+ */
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support */
+#define CFG_I2C_MODULE         2       /* Select I2C module #1 or #2 */
+
+#define CFG_I2C_SPEED          86000   /* 100 kHz */
+#define CFG_I2C_SLAVE          0x7F
+
+/*
+ * EEPROM configuration
+ */
+#define CFG_I2C_EEPROM_ADDR            0x50    /* 1010000x */
+#define CFG_I2C_EEPROM_ADDR_LEN                2
+#define CFG_EEPROM_PAGE_WRITE_BITS     5
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20
+#define CFG_I2C_MULTI_EEPROMS          1
+/*
+ * Flash configuration
+ */
+#define CFG_FLASH_BASE         0xFE000000
+#define CFG_FLASH_SIZE         0x02000000
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x00000000)
+#define CFG_MAX_FLASH_BANKS    1       /* max num of memory banks      */
+#define CFG_MAX_FLASH_SECT     512
+
+#define CFG_FLASH_ERASE_TOUT   240000  /* Flash Erase Timeout (in ms)  */
+#define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (in ms)  */
+
+/*
+ * Environment settings
+ */
+#if 1                          /* test-only */
+#define CFG_ENV_IS_IN_FLASH    0
+#define CFG_ENV_SIZE           0x10000
+#define CFG_ENV_SECT_SIZE      0x10000
+#define CONFIG_ENV_OVERWRITE   1
+#else
+#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars */
+#define CFG_ENV_OFFSET         0x0000  /* environment starts at the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x0400  /* 8192 bytes may be used for env vars */
+                                  /* total size of a CAT24WC32 is 8192 bytes */
+#define CONFIG_ENV_OVERWRITE   1
+#endif
+
+/*
+ * Memory map
+ */
+#define CFG_MBAR               0xF0000000
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_DEFAULT_MBAR       0x80000000
+
+/* 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 */
+
+/*
+ * Ethernet configuration
+ */
+#define CONFIG_MPC5xxx_FEC     1
+/*
+ * Define CONFIG_FEC_10MBIT to force FEC at 10Mb
+ */
+/* #define CONFIG_FEC_10MBIT 1 */
+#define CONFIG_PHY_ADDR                0x00
+#define CONFIG_UDP_CHECKSUM    1
+
+/*
+ * GPIO configuration
+ */
+#define CFG_GPS_PORT_CONFIG    0x01052444
+
+/*
+ * 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)  /* 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_VXWORKS_MAC_PTR    0x00000000      /* Pass Ethernet MAC to VxWorks */
+
+/*
+ * Various low-level settings
+ */
+#if defined(CONFIG_MPC5200)
+#define CFG_HID0_INIT          HID0_ICE | HID0_ICFI
+#define CFG_HID0_FINAL         HID0_ICE
+#else
+#define CFG_HID0_INIT          0
+#define CFG_HID0_FINAL         0
+#endif
+
+#define CFG_BOOTCS_START       CFG_FLASH_BASE
+#define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
+#define CFG_BOOTCS_CFG         0x0004DD00
+
+#define CFG_CS0_START          CFG_FLASH_BASE
+#define CFG_CS0_SIZE           CFG_FLASH_SIZE
+
+#define CFG_CS1_START          0xfd000000
+#define CFG_CS1_SIZE           0x00010000
+#define CFG_CS1_CFG            0x10101410
+
+#define CFG_CS_BURST           0x00000000
+#define CFG_CS_DEADCYCLE       0x33333333
+
+#define CFG_RESET_ADDRESS      0xff000000
+
+/*-----------------------------------------------------------------------
+ * USB stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_USB_CLOCK       0x0001BBBB
+#define CONFIG_USB_CONFIG      0x00001000
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA stuff Supports IDE harddisk
+ *-----------------------------------------------------------------------
+ */
+
+#undef CONFIG_IDE_8xx_PCCARD   /* Use IDE with PC Card Adapter */
+
+#undef CONFIG_IDE_8xx_DIRECT   /* Direct IDE    not supported  */
+#undef CONFIG_IDE_LED          /* LED   for ide not supported  */
+
+#define        CONFIG_IDE_RESET        /* reset for ide supported      */
+#define CONFIG_IDE_PREINIT
+
+#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      MPC5XXX_ATA
+
+/* Offset for data I/O                 */
+#define CFG_ATA_DATA_OFFSET    (0x0060)
+
+/* Offset for normal register accesses */
+#define CFG_ATA_REG_OFFSET     (CFG_ATA_DATA_OFFSET)
+
+/* Offset for alternate registers      */
+#define CFG_ATA_ALT_OFFSET     (0x005C)
+
+/* Interval between registers                                               */
+#define CFG_ATA_STRIDE         4
+
+/*-----------------------------------------------------------------------
+ * CPLD stuff
+ */
+#define CFG_FPGA_XC95XL                1       /* using Xilinx XC95XL CPLD      */
+#define CFG_FPGA_MAX_SIZE      32*1024 /* 32kByte is enough for CPLD    */
+
+/* CPLD program pin configuration */
+#define CFG_FPGA_PRG           0x20000000      /* JTAG TMS pin (ppc output)           */
+#define CFG_FPGA_CLK           0x10000000      /* JTAG TCK pin (ppc output)           */
+#define CFG_FPGA_DATA          0x20000000      /* JTAG TDO->TDI data pin (ppc output) */
+#define CFG_FPGA_DONE          0x10000000      /* JTAG TDI->TDO pin (ppc input)       */
+
+#define JTAG_GPIO_ADDR_TMS     (CFG_MBAR + 0xB10)      /* JTAG TMS pin (GPS data out value reg.)      */
+#define JTAG_GPIO_ADDR_TCK     (CFG_MBAR + 0xC0C)      /* JTAG TCK pin (GPW data out value reg.)      */
+#define JTAG_GPIO_ADDR_TDI     (CFG_MBAR + 0xC0C)      /* JTAG TDO->TDI pin (GPW data out value reg.) */
+#define JTAG_GPIO_ADDR_TDO     (CFG_MBAR + 0xB14)      /* JTAG TDI->TDO pin (GPS data in value reg.)  */
+
+#define JTAG_GPIO_ADDR_CFG     (CFG_MBAR + 0xB00)
+#define JTAG_GPIO_CFG_SET      0x00000000
+#define JTAG_GPIO_CFG_RESET    0x00F00000
+
+#define JTAG_GPIO_ADDR_EN_TMS  (CFG_MBAR + 0xB04)
+#define JTAG_GPIO_TMS_EN_SET   0x20000000      /* Enable for GPIO */
+#define JTAG_GPIO_TMS_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TMS (CFG_MBAR + 0xB0C)
+#define JTAG_GPIO_TMS_DDR_SET  0x20000000      /* Set as output   */
+#define JTAG_GPIO_TMS_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TCK  (CFG_MBAR + 0xC00)
+#define JTAG_GPIO_TCK_EN_SET   0x20000000      /* Enable for GPIO */
+#define JTAG_GPIO_TCK_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TCK (CFG_MBAR + 0xC08)
+#define JTAG_GPIO_TCK_DDR_SET  0x20000000      /* Set as output   */
+#define JTAG_GPIO_TCK_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TDI  (CFG_MBAR + 0xC00)
+#define JTAG_GPIO_TDI_EN_SET   0x10000000      /* Enable as GPIO  */
+#define JTAG_GPIO_TDI_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TDI (CFG_MBAR + 0xC08)
+#define JTAG_GPIO_TDI_DDR_SET  0x10000000      /* Set as output   */
+#define JTAG_GPIO_TDI_DDR_RESET 0x00000000
+
+#define JTAG_GPIO_ADDR_EN_TDO  (CFG_MBAR + 0xB04)
+#define JTAG_GPIO_TDO_EN_SET   0x10000000      /* Enable as GPIO  */
+#define JTAG_GPIO_TDO_EN_RESET 0x00000000
+#define JTAG_GPIO_ADDR_DDR_TDO (CFG_MBAR + 0xB0C)
+#define JTAG_GPIO_TDO_DDR_SET  0x00000000
+#define JTAG_GPIO_TDO_DDR_RESET 0x10000000     /* Set as input    */
+
+#endif                         /* __CONFIG_H */
index 60b0b3713b792ab08df0f6de280ebded7cc26dae..757922210244c0c2f8fe934853694f71a8081879 100644 (file)
        "echo;" \
        "bootp;" \
        "setenv bootargs root=/dev/ram0 rw " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_INITRD */
 
        "version;" \
        "echo;" \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_NFS */
 
index 7ffd3fd36f87f5c0bc7a4611db1d8985262fa20c..2ecb7fb2bf73e8607fea9012dd8899d10fe07e39 100644 (file)
 
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off\0"                          \
-       "addmisc=setenv bootargs $(bootargs) "                          \
-               "console=ttyS0,$(baudrate) "                            \
-               "ethaddr=$(ethaddr) "                                   \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off\0"                          \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
+               "ethaddr=${ethaddr} "                                   \
                "panic=1\0"                                             \
        "flash_nfs=run nfsargs addip addmisc;"                          \
-               "bootm $(kernel_addr)\0"                                \
+               "bootm ${kernel_addr}\0"                                \
        "flash_self=run ramargs addip addmisc;"                         \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
-       "net_nfs=tftp 80500000 $(bootfile);"                            \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 80500000 ${bootfile};"                            \
                "run nfsargs addip addmisc;bootm\0"                     \
        "rootpath=/opt/eldk/mips_5KC\0"                                 \
        "bootfile=/tftpboot/purple/uImage\0"                            \
        "kernel_addr=B0040000\0"                                        \
        "ramdisk_addr=B0100000\0"                                       \
        "u-boot=/tftpboot/purple/u-boot.bin\0"                          \
-       "load=tftp 80500000 $(u-boot)\0"                                \
+       "load=tftp 80500000 ${u-boot}\0"                                \
        "update=protect off 1:0-4;era 1:0-4;"                           \
-               "cp.b 80500000 B0000000 $(filesize)\0"                  \
+               "cp.b 80500000 B0000000 ${filesize}\0"                  \
        ""
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
diff --git a/include/configs/pxa255_idp.h b/include/configs/pxa255_idp.h
new file mode 100644 (file)
index 0000000..e5e2772
--- /dev/null
@@ -0,0 +1,338 @@
+/*
+ * (C) Copyright 2002
+ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * Copied from lubbock.h
+ *
+ * (C) Copyright 2004
+ * BEC Systems <http://bec-systems.com>
+ * Cliff Brake <cliff.brake@gmail.com>
+ * Configuation settings for the Accelent/Vibren PXA255 IDP
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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
+
+#include <asm/arch/pxa-regs.h>
+
+/*
+ * If we are developing, we might want to start armboot from ram
+ * so we MUST NOT initialize critical regs like mem-timing ...
+ */
+#define CONFIG_INIT_CRITICAL                   /* undef for developing */
+
+/*
+ * define the following to enable debug blinks.  A debug blink function
+ * must be defined in memsetup.S
+ */
+#undef DEBUG_BLINK_ENABLE
+#undef DEBUG_BLINKC_ENABLE
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_PXA250          1       /* This is an PXA250 CPU    */
+
+#undef CONFIG_LCD
+#ifdef CONFIG_LCD
+#define CONFIG_SHARP_LM8V31
+#endif
+
+#define CONFIG_MMC             1
+#define BOARD_LATE_INIT                1
+
+#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN     (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+
+/*
+ * PXA250 IDP memory map information
+ */
+
+#define IDP_CS5_ETH_OFFSET     0x03400000
+
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_DRIVER_SMC91111
+#define CONFIG_SMC91111_BASE   (PXA_CS5_PHYS + IDP_CS5_ETH_OFFSET + 0x300)
+#define CONFIG_SMC_USE_32_BIT  1
+/* #define CONFIG_SMC_USE_IOFUNCS */
+
+/* the following has to be set high -- suspect something is wrong with
+ * with the tftp timeout routines. FIXME!!!
+ */
+#define CONFIG_NET_RETRY_COUNT 100
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_FFUART         1       /* we use FFUART on LUBBOCK */
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | CFG_CMD_MMC | CFG_CMD_FAT | CFG_CMD_DHCP )
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY       3
+#define CONFIG_BOOTCOMMAND     "bootm 40000"
+#define CONFIG_BOOTARGS                "root=/dev/mtdblock2 rootfstype=cramfs console=ttyS0,115200"
+#define CONFIG_CMDLINE_TAG
+
+/*
+ * Current memory map for Vibren supplied Linux images:
+ *
+ * Flash:
+ * 0 - 0x3ffff (size = 0x40000): bootloader
+ * 0x40000 - 0x13ffff (size = 0x100000): kernel
+ * 0x140000 - 0x1f3ffff (size = 0x1e00000): jffs
+ *
+ * RAM:
+ * 0xa0008000 - kernel is loaded
+ * 0xa3000000 - Uboot runs (48MB into RAM)
+ *
+ */
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "prog_boot_mmc="                                                \
+                       "mw.b 0xa0000000 0xff 0x40000; "                \
+                       "if      mmcinit && "                           \
+                               "fatload mmc 0 0xa0000000 u-boot.bin; " \
+                       "then "                                         \
+                               "protect off 0x0 0x3ffff; "             \
+                               "erase 0x0 0x3ffff; "                   \
+                               "cp.b 0xa0000000 0x0 0x40000; "         \
+                               "reset;"                                \
+                       "fi\0"                                          \
+       "prog_uzImage_mmc="                                             \
+                       "mw.b 0xa0000000 0xff 0x100000; "               \
+                       "if      mmcinit && "                           \
+                               "fatload mmc 0 0xa0000000 uzImage; "    \
+                       "then "                                         \
+                               "protect off 0x40000 0xfffff; "         \
+                               "erase 0x40000 0xfffff; "               \
+                               "cp.b 0xa0000000 0x40000 0x100000; "    \
+                       "fi\0"                                          \
+       "prog_jffs_mmc="                                                \
+                       "mw.b 0xa0000000 0xff 0x1e00000; "              \
+                       "if      mmcinit && "                           \
+                               "fatload mmc 0 0xa0000000 root.jffs; "  \
+                       "then "                                         \
+                               "protect off 0x140000 0x1f3ffff; "      \
+                               "erase 0x140000 0x1f3ffff; "            \
+                               "cp.b 0xa0000000 0x140000 0x1e00000; "  \
+                       "fi\0"                                          \
+       "boot_mmc="                                                     \
+                       "if      mmcinit && "                           \
+                               "fatload mmc 0 0xa1000000 uzImage && "  \
+                       "then "                                         \
+                               "bootm 0xa1000000; "                    \
+                       "fi\0"                                          \
+       "prog_boot_net="                                                \
+                       "mw.b 0xa0000000 0xff 0x100000; "               \
+                       "if      bootp 0xa0000000 u-boot.bin; "         \
+                       "then "                                         \
+                               "protect off 0x0 0x3ffff; "             \
+                               "erase 0x0 0x3ffff; "                   \
+                               "cp.b 0xa0000000 0x0 0x40000; "         \
+                               "reset; "                               \
+                       "fi\0"                                          \
+       "prog_uzImage_net="                                             \
+                       "mw.b 0xa0000000 0xff 0x100000; "               \
+                       "if      bootp 0xa0000000 uzImage; "            \
+                       "then "                                         \
+                               "protect off 0x40000 0xfffff; "         \
+                               "erase 0x40000 0xfffff; "               \
+                               "cp.b 0xa0000000 0x40000 0x100000; "    \
+                       "fi\0"                                          \
+       "prog_jffs_net="                                                \
+                       "mw.b 0xa0000000 0xff 0x1e00000; "              \
+                       "if      bootp 0xa0000000 root.jffs; "          \
+                       "then "                                         \
+                               "protect off 0x140000 0x1f3ffff; "      \
+                               "erase 0x140000 0x1f3ffff; "            \
+                               "cp.b 0xa0000000 0x140000 0x1e00000; "  \
+                       "fi\0"
+
+
+/*     "erase_env="                    */
+/*                     "protect off"   */
+
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   115200          /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2               /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_HUSH_PARSER                1
+#define CFG_PROMPT_HUSH_PS2    "> "
+
+#define CFG_LONGHELP                           /* undef to save memory         */
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT             "$ "            /* Monitor Command Prompt */
+#else
+#define CFG_PROMPT             "=> "           /* Monitor Command Prompt */
+#endif
+#define CFG_CBSIZE             256             /* Console I/O Buffer Size      */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS            16              /* max number of command args   */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_DEVICE_NULLDEV     1
+
+#define CFG_MEMTEST_START      0xa0400000      /* memtest works on     */
+#define CFG_MEMTEST_END                0xa0800000      /* 4 ... 8 MB in DRAM   */
+
+#undef CFG_CLKS_IN_HZ          /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR          0xa0800000      /* default load address */
+
+#define CFG_HZ                 3686400         /* incrementer freq: 3.6864 MHz */
+#define CFG_CPUSPEED           0x161           /* set core clock to 400/200/100 MHz */
+
+#define RTC    1                               /* enable 32KHz osc */
+
+                                               /* valid baudrates */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+#define CFG_MMC_BASE           0xF0000000
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE       (128*1024)      /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ   (4*1024)        /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ   (4*1024)        /* FIQ stack */
+#endif
+
+/*
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS   4          /* we have 1 banks of DRAM */
+#define PHYS_SDRAM_1           0xa0000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE      0x04000000 /* 64 MB */
+#define PHYS_SDRAM_2           0xa4000000 /* SDRAM Bank #2 */
+#define PHYS_SDRAM_2_SIZE      0x00000000 /* 0 MB */
+#define PHYS_SDRAM_3           0xa8000000 /* SDRAM Bank #3 */
+#define PHYS_SDRAM_3_SIZE      0x00000000 /* 0 MB */
+#define PHYS_SDRAM_4           0xac000000 /* SDRAM Bank #4 */
+#define PHYS_SDRAM_4_SIZE      0x00000000 /* 0 MB */
+
+#define PHYS_FLASH_1           0x00000000 /* Flash Bank #1 */
+#define PHYS_FLASH_2           0x04000000 /* Flash Bank #2 */
+#define PHYS_FLASH_SIZE                0x02000000 /* 32 MB */
+#define PHYS_FLASH_BANK_SIZE   0x02000000 /* 32 MB Banks */
+#define PHYS_FLASH_SECT_SIZE   0x00040000 /* 256 KB sectors (x2) */
+
+#define CFG_DRAM_BASE          0xa0000000
+#define CFG_DRAM_SIZE          0x04000000
+
+#define CFG_FLASH_BASE         PHYS_FLASH_1
+
+/*
+ * GPIO settings
+ */
+
+#define CFG_GAFR0_L_VAL        0x80001005
+#define CFG_GAFR0_U_VAL        0xa5128012
+#define CFG_GAFR1_L_VAL        0x699a9558
+#define CFG_GAFR1_U_VAL        0xaaa5aa6a
+#define CFG_GAFR2_L_VAL        0xaaaaaaaa
+#define CFG_GAFR2_U_VAL        0x2
+#define CFG_GPCR0_VAL  0x1800400
+#define CFG_GPCR1_VAL  0x0
+#define CFG_GPCR2_VAL  0x0
+#define CFG_GPDR0_VAL  0xc1818440
+#define CFG_GPDR1_VAL  0xfcffab82
+#define CFG_GPDR2_VAL  0x1ffff
+#define CFG_GPSR0_VAL  0x8000
+#define CFG_GPSR1_VAL  0x3f0002
+#define CFG_GPSR2_VAL  0x1c000
+
+#define CFG_PSSR_VAL           0x20
+
+/*
+ * Memory settings
+ */
+#define CFG_MSC0_VAL           0x29DCA4D2
+#define CFG_MSC1_VAL           0x43AC494C
+#define CFG_MSC2_VAL           0x39D449D4
+#define CFG_MDCNFG_VAL         0x090009C9
+#define CFG_MDREFR_VAL         0x0085C017
+#define CFG_MDMRS_VAL          0x00220022
+
+/*
+ * PCMCIA and CF Interfaces
+ */
+#define CFG_MECR_VAL           0x00000003
+#define CFG_MCMEM0_VAL         0x00014405
+#define CFG_MCMEM1_VAL         0x00014405
+#define CFG_MCATT0_VAL         0x00014405
+#define CFG_MCATT1_VAL         0x00014405
+#define CFG_MCIO0_VAL          0x00014405
+#define CFG_MCIO1_VAL          0x00014405
+
+/*
+ * FLASH and environment organization
+ */
+#define CFG_FLASH_CFI
+#define CFG_FLASH_CFI_DRIVER   1
+
+#define CFG_MONITOR_BASE       0
+#define CFG_MONITOR_LEN                0x40000
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     128  /* max number of sectors on one chip    */
+
+#define CFG_FLASH_USE_BUFFER_WRITE     1
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT   (25*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT   (25*CFG_HZ) /* Timeout for Flash Write */
+
+/* put cfg at end of flash for now */
+#define CFG_ENV_IS_IN_FLASH    1
+ /* Addr of Environment Sector */
+#define CFG_ENV_ADDR           (PHYS_FLASH_1 + PHYS_FLASH_SIZE - 0x40000)
+#define CFG_ENV_SIZE           0x40000 /* Total Size of Environment Sector     */
+#define        CFG_ENV_SECT_SIZE       0x40000
+
+#endif /* __CONFIG_H */
index a38ec6232205e17547fb318a3d130d442b584908..21ec5acadefd545ffe43fd4501a4b6aeac1d8562 100644 (file)
@@ -65,9 +65,9 @@
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
     "serial#=12345\0"          \
-       "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath)\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)::off\0"
+    "addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0"
 
 /*
  * Select the more full-featured memory test (Barr embedded systems)
index b67c41877c1d08ad9467dd5d0540b59726f0c590..b319cf497d3e8e9d1ca231cf3c704bad0c3a4058 100644 (file)
@@ -52,8 +52,8 @@
 #undef CONFIG_BOOTARGS
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 031eba597de8394f7267e231720e529330f16b9a..4e0cfdb4c36244a81eabf1261a50d196d5f590ee 100644 (file)
     "tftpboot 0x140000 /bdi2000/u-boot.bin; " \
     "protect off 60000000 6003FFFF; " \
     "erase 60000000 6003FFFF; " \
-    "cp.b 140000 60000000 $(filesize); " \
+    "cp.b 140000 60000000 ${filesize}; " \
     "protect on 60000000 6003FFFF\0" \
 "copyenv="\
     "protect off 60040000 6004FFFF; " \
     "echo\\;" \
     "bootp\\;" \
     "setenv bootargs root=/dev/ram0 rw quiet " \
-    "ip=\\$(ipaddr):\\$(serverip):\\$(gatewayip):\\$(netmask):\\$(hostname)::off\\;" \
+    "ip=\\${ipaddr}:\\${serverip}:\\${gatewayip}:\\${netmask}:\\${hostname}::off\\;" \
     "run boot-hook\\;" \
     "bootm\0" \
 "root-on-initrd-debug="\
     "echo\\;" \
     "bootp\\;" \
     "setenv bootargs root=/dev/ram0 rw debug " \
-    "ip=\\$(ipaddr):\\$(serverip):\\$(gatewayip):\\$(netmask):\\$(hostname)::off\\;" \
+    "ip=\\${ipaddr}:\\${serverip}:\\${gatewayip}:\\${netmask}:\\${hostname}::off\\;" \
     "run debug-hook\\;" \
     "run boot-hook\\;" \
     "bootm\0" \
     "echo\\;" \
     "bootp\\;" \
     "setenv bootargs root=/dev/nfs rw quiet " \
-    "nfsroot=\\$(serverip):\\$(rootpath) " \
-    "ip=\\$(ipaddr):\\$(serverip):\\$(gatewayip):\\$(netmask):\\$(hostname)::off\\;" \
+    "nfsroot=\\${serverip}:\\${rootpath} " \
+    "ip=\\${ipaddr}:\\${serverip}:\\${gatewayip}:\\${netmask}:\\${hostname}::off\\;" \
     "run boot-hook\\;" \
     "bootm\0" \
 "root-on-nfs-debug="\
     "echo\\;" \
     "bootp\\;" \
     "setenv bootargs root=/dev/nfs rw debug " \
-    "nfsroot=\\$(serverip):\\$(rootpath) " \
-    "ip=\\$(ipaddr):\\$(serverip):\\$(gatewayip):\\$(netmask):\\$(hostname)::off\\;" \
+    "nfsroot=\\${serverip}:\\${rootpath} " \
+    "ip=\\${ipaddr}:\\${serverip}:\\${gatewayip}:\\${netmask}:\\${hostname}::off\\;" \
     "run debug-hook\\;" \
     "run boot-hook\\;" \
     "bootm\0" \
     "setenv checkhostname;" \
     "setenv ethaddr 00:09:70:00:00:01;" \
     "bootp;" \
-    "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) debug " \
-    "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+    "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} debug " \
+    "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
     "run debug-hook;" \
     "run boot-hook;" \
     "bootm\0" \
 "debug-hook="\
-    "echo ipaddr    $(ipaddr);" \
-    "echo serverip  $(serverip);" \
-    "echo gatewayip $(gatewayip);" \
-    "echo netmask   $(netmask);" \
-    "echo hostname  $(hostname)\0" \
+    "echo ipaddr    ${ipaddr};" \
+    "echo serverip  ${serverip};" \
+    "echo gatewayip ${gatewayip};" \
+    "echo netmask   ${netmask};" \
+    "echo hostname  ${hostname}\0" \
 "ana=run adc ; run dac\0" \
 "adc=run adc-12 ; run adc-34\0" \
 "adc-12=echo ### ADC-12 ; imd.b e 81 e\0" \
        "echo;" \
        "bootp;" \
        "setenv bootargs root=/dev/ram0 rw quiet " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "run boot-hook;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_INITRD */
        "version;" \
        "echo;" \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) quiet " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} quiet " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "run boot-hook;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_NFS */
index aeb51268284623e8744b07ad76082ce1dc888076..beff28ab32f51c6d7663ca06d43b05ea9750377c 100644 (file)
 #define CONFIG_PREBOOT "echo;echo Welcome to U-Boot for the sbc405;echo;echo Type \"? or help\" to get on-line help;echo"
 
 #define CONFIG_RAMBOOT                                                         \
-       "setenv bootargs root=/dev/ram rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/ram rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm ffc00000 ffca0000"
 #define CONFIG_NFSBOOT                                                         \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;"    \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;"    \
        "bootm ffc00000"
 
 #undef CONFIG_BOOTARGS
-#define CONFIG_BOOTCOMMAND      "version;echo;tftpboot $(loadaddr) $(loadfile);bootvx"      /* autoboot command     */
+#define CONFIG_BOOTCOMMAND      "version;echo;tftpboot ${loadaddr} ${loadfile};bootvx"      /* autoboot command     */
 
 
 #define CONFIG_MII             1       /* MII PHY management           */
        "env_endaddr=FF03FFFF\0" \
        "loadfile=vxWorks.st\0" \
        "loadaddr=0x01000000\0" \
-       "net_load=tftpboot $(loadaddr) $(loadfile)\0" \
+       "net_load=tftpboot ${loadaddr} ${loadfile}\0" \
        "uboot_startaddr=FFFC0000\0" \
        "uboot_endaddr=FFFFFFFF\0" \
-       "update=tftp $(loadaddr) u-boot.bin;" \
-               "protect off $(uboot_startaddr) $(uboot_endaddr);" \
-               "era $(uboot_startaddr) $(uboot_endaddr);" \
-               "cp.b $(loadaddr) $(uboot_startaddr) $(filesize);" \
-               "protect on $(uboot_startaddr) $(uboot_endaddr)\0" \
-       "zapenv=protect off $(env_startaddr) $(env_endaddr);" \
-               "era $(env_startaddr) $(env_endaddr);" \
-               "protect on $(env_startaddr) $(env_endaddr)\0"
+       "update=tftp ${loadaddr} u-boot.bin;" \
+               "protect off ${uboot_startaddr} ${uboot_endaddr};" \
+               "era ${uboot_startaddr} ${uboot_endaddr};" \
+               "cp.b ${loadaddr} ${uboot_startaddr} ${filesize};" \
+               "protect on ${uboot_startaddr} ${uboot_endaddr}\0" \
+       "zapenv=protect off ${env_startaddr} ${env_endaddr};" \
+               "era ${env_startaddr} ${env_endaddr};" \
+               "protect on ${env_startaddr} ${env_endaddr}\0"
 
 #define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 45e4494ec616d5f78935c828a03231ebedff630c..180ce057d7921fda1e5408cf7690abe8ba938586 100644 (file)
  *
  * => printenv bootcmd
  * bootcmd=version;echo;bootp;setenv bootargs root=/dev/nfs rw
- * nfsroot=$(serverip):$(rootpath)
- * ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;run boot-hook;bootm
+ * nfsroot=${serverip}:${rootpath}
+ * ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;run boot-hook;bootm
  *
  * => run root-on-initrd
  * => printenv bootcmd
  * bootcmd=version;echo;bootp;setenv bootargs root=/dev/ram0 rw
- * ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;run boot-hook;bootm
+ * ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;run boot-hook;bootm
  *
  * => run root-on-nfs
  * => printenv bootcmd
  * bootcmd=version;echo;bootp;setenv bootargs root=/dev/nfs rw
- * nfsroot=$(serverip):$(rootpath)
- * ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;run boot-hook;bootm
+ * nfsroot=${serverip}:${rootpath}
+ * ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;run boot-hook;bootm
  *
  */
 #define CONFIG_EXTRA_ENV_SETTINGS \
                "tftpboot 0x140000 /bdi2000/u-boot.bin;" \
                "protect off 1:0;" \
                "erase 1:0;" \
-               "cp.b 140000 40000000 $(filesize);" \
+               "cp.b 140000 40000000 ${filesize};" \
                "protect on 1:0\0" \
        "zapenv="\
                "protect off 1:1;" \
                "echo;" \
                "bootp;" \
                "setenv bootargs root=/dev/ram0 rw " \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
                "run boot-hook;" \
                "bootm\0" \
        "root-on-nfs="\
                "echo;" \
                "bootp;" \
                "setenv bootargs root=/dev/nfs rw " \
-               "nfsroot=$(serverip):$(rootpath) " \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+               "nfsroot=${serverip}:${rootpath} " \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
                "run boot-hook;" \
                "bootm\0" \
        "boot-hook=echo\0"
        "echo;" \
        "bootp;" \
        "setenv bootargs root=/dev/ram0 rw " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_INITRD */
 
        "version;" \
        "echo;" \
        "bootp;" \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off;" \
        "bootm"
 #endif /* CONFIG_BOOT_ROOT_NFS */
 
index 0dab9b0f508a86f1adc6c1b5c3ae1a12ade3bf29..96cb6e4c7af02a3820277de940081e13d5aa23df 100644 (file)
        "rootpath=/opt/eldk/ppc_6xx\0"                                  \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
-       "addip=setenv bootargs $(bootargs) "                            \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)"      \
-               ":$(hostname):$(netdev):off panic=1\0"                  \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
        "flash_self=run ramargs addip;"                                 \
-               "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
        "flash_nfs=run nfsargs addip;"                                  \
-               "bootm $(kernel_addr)\0"                                \
-       "net_nfs=tftp 200000 $(bootfile);run nfsargs addip;bootm\0"     \
+               "bootm ${kernel_addr}\0"                                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip;bootm\0"     \
        "bootfile=/tftpboot/tqm5200/uImage\0"                           \
-       "load=tftp 200000 $(u-boot)\0"                                  \
+       "load=tftp 200000 ${u-boot}\0"                                  \
        "u-boot=/tftpboot/tqm5200/u-boot.bin"   CONFIG_U_BOOT_SUFFIX    \
        "update=protect off FC000000 FC05FFFF;"                         \
                "erase FC000000 FC05FFFF;"                              \
-               "cp.b 200000 FC000000 $(filesize);"                     \
+               "cp.b 200000 FC000000 ${filesize};"                     \
                "protect on FC000000 FC05FFFF\0"                        \
        ""
 
index a0e1ba7f176dabae2b54bc812ab0c638f0d32025..3ffe6b2e05f429aeea8443f51821f143cc12fc39 100644 (file)
@@ -42,7 +42,7 @@
 #undef CONFIG_8xx_CONS_SMC2
 #undef CONFIG_8xx_CONS_NONE
 
-#define CONFIG_BAUDRATE                38400   /* console baudrate = 38.4kbps  */
+#define CONFIG_BAUDRATE                115200  /* console baudrate = 115.2kbps */
 
 #define CONFIG_XIN             10000000        /* 10 MHz input xtal */
 
@@ -574,19 +574,15 @@ typedef unsigned int led_id_t;
 #define CONFIG_CRC32_VERIFY    1
 #define CONFIG_HUSH_OLD_PARSER_COMPATIBLE      1
 
-/* Note: change below for your network setting!!!
- * This was done just to facilitate manufacturing test and configuration.
- */
-#define CONFIG_ETHADDR  00:e0:0c:07:9b:8a
+/*****************************************************************************/
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
 
-#define CONFIG_SERVERIP        192.168.08.1
-#define CONFIG_IPADDR                  192.168.08.85
-#define CONFIG_GATEWAYIP       192.168.08.1
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_HOSTNAME        stx_xtc
-#define CONFIG_ROOTPATH        /xtcroot
-#define CONFIG_BOOTFILE        uImage
-#define CONFIG_LOADADDR                0x1000000
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
 
+#define OF_CPU                 "PowerPC,MPC870@0"
+#define OF_TBCLK               (MPC8XX_HZ / 16)
 
 #endif /* __CONFIG_H */
index 9589050a6d130a015cdc5e86612bb1647226aa20..7118f3f74be7380d94fa2ab527e82d7e5bab5f52 100644 (file)
 #undef CONFIG_BOOTARGS
 #define CONFIG_EXTRA_ENV_SETTINGS                                       \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-        "nfsroot=$(serverip):$(rootpath)\0"                     \
+        "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"                  \
+       "addip=setenv bootargs ${bootargs} "                            \
+              "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
                "flash_nfs=run nfsargs addip;"                                  \
-            "bootm $(kernel_addr)\0"                                \
+            "bootm ${kernel_addr}\0"                                \
        "flash_self=run ramargs addip;"                                 \
-              "bootm $(kernel_addr) $(ramdisk_addr)\0"                \
-       "net_nfs=tftp 0x210000 $(bootfile);run nfsargs addip;bootm\0"     \
+              "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 0x210000 ${bootfile};run nfsargs addip;bootm\0"     \
        "rootpath=/opt/sinovee/ppc8xx-linux-2.0/target\0"                                  \
        "bootfile=pImage-sc855t\0"                           \
        "kernel_addr=48000000\0"                                        \
        "ramdisk_addr=48100000\0"                                       \
        ""
 #define CONFIG_BOOTCOMMAND                                                     \
-       "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "tftpboot 0x210000 pImage-sc855t;bootm 0x210000"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 5a20473dd5775ba9f5c94db952e7055346fe9d7f..dac1eb736d8934ad8e6fd8a884465645d5b6e358 100644 (file)
        "netboot=dhcp;tftp;run netargs; bootm\0"                        \
        "nfsargs=setenv bootargs root=/dev/nfs ip=dhcp\0"               \
        "localargs=setenv bootargs root=1F02 ip=dhcp\0"                 \
-       "addmisc=setenv bootargs $(bootargs) "                          \
-               "console=ttyS0,$(baudrate) "                            \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
                "read-only=readonly\0"                                  \
        "netargs=run nfsargs addmisc\0"                                 \
        "flash_nfs=run nfsargs addmisc;"                                \
-               "bootm $(kernel_addr)\0"                                \
+               "bootm ${kernel_addr}\0"                                \
        "flash_local=run localargs addmisc;"                            \
-               "bootm $(kernel_addr)\0"                                \
+               "bootm ${kernel_addr}\0"                                \
        "netboot_initrd=dhcp;tftp;tftp 80600000 initrd;"                \
                "setenv bootargs root=/dev/ram ramdisk_size=8192 ip=dhcp;"\
                "run addmisc;"                                          \
        "ramdisk_addr=B0100000\0"                                       \
        "u-boot=u-boot.bin\0"                                           \
        "bootfile=uImage\0"                                             \
-       "load=dhcp;tftp 80400000 $(u-boot)\0"                           \
-       "load_kernel=dhcp;tftp 80400000 $(bootfile)\0"                  \
+       "load=dhcp;tftp 80400000 ${u-boot}\0"                           \
+       "load_kernel=dhcp;tftp 80400000 ${bootfile}\0"                  \
        "update_uboot=run load;"                                        \
                "protect off BFC00000 BFC3FFFF;"                        \
                "erase BFC00000 BFC3FFFF;"                              \
-               "cp.b 80400000 BFC00000 $(filesize)\0"                  \
+               "cp.b 80400000 BFC00000 ${filesize}\0"                  \
        "update_kernel=run load_kernel;"                                \
                "erase BFC60000 BFD5FFFF;"                              \
-               "cp.b 80400000 BFC60000 $(filesize)\0"                  \
+               "cp.b 80400000 BFC60000 ${filesize}\0"                  \
        "initenv=erase bfc40000 bfc5ffff\0"                             \
        ""
 /*#define CONFIG_BOOTCOMMAND   "run flash_local" */
index 3ca00497eda2701415348b0710f541d85e464938..85ee756e05fe18667011ac75b84f8c7e26e3879f 100644 (file)
                                CFG_CMD_BSP                     | \
                                CFG_CMD_DATE                    | \
                                CFG_CMD_DHCP                    | \
-                               CFG_CMD_USB                     | \
                                CFG_CMD_FAT                     | \
+                               CFG_CMD_JFFS2                   | \
                                CFG_CMD_NFS                     | \
-                               CFG_CMD_SNTP    )
+                               CFG_CMD_SNTP                    | \
+                               CFG_CMD_USB     )
 #else
 #define CONFIG_COMMANDS               (CONFIG_CMD_DFL                  | \
                                CONFIG_COMMANDS_ADD_HWFLOW      | \
                                CFG_CMD_BSP                     | \
                                CFG_CMD_DATE                    | \
                                CFG_CMD_DHCP                    | \
-                               CFG_CMD_USB                     | \
                                CFG_CMD_FAT                     | \
+                               CFG_CMD_JFFS2                   | \
                                CFG_CMD_NFS                     | \
-                               CFG_CMD_SNTP    )
+                               CFG_CMD_SNTP                    | \
+                               CFG_CMD_USB     )
 #endif
 
 /* moved up */
 #else /* !CFG_HUSH_PARSER */
 #define        CONFIG_EXTRA_ENV_SETTINGS       \
        "nfs_args=setenv bootargs root=/dev/nfs rw " \
-               "nfsroot=$(serverip):$(rootpath)\0" \
+               "nfsroot=${serverip}:${rootpath}\0" \
        "rootpath=/opt/eldk/arm_920TDI\0" \
        "ram_args=setenv bootargs root=/dev/ram rw\0" \
-       "add_net=setenv bootargs $(bootargs) ethaddr=$(ethaddr) " \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off\0" \
-       "add_misc=setenv bootargs $(bootargs) console=ttyS0 panic=1\0" \
+       "add_net=setenv bootargs ${bootargs} ethaddr=${ethaddr} " \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0" \
+       "add_misc=setenv bootargs ${bootargs} console=ttyS0 panic=1\0" \
        "u-boot=/tftpboot/TRAB/u-boot.bin\0" \
-       "load=tftp C100000 $(u-boot)\0" \
+       "load=tftp C100000 ${u-boot}\0" \
        "update=protect off 0 5FFFF;era 0 5FFFF;" \
-               "cp.b C100000 0 $(filesize)\0" \
+               "cp.b C100000 0 ${filesize}\0" \
        "loadfile=/tftpboot/TRAB/uImage\0" \
        "loadaddr=c400000\0" \
-       "net_load=tftpboot $(loadaddr) $(loadfile)\0" \
+       "net_load=tftpboot ${loadaddr} ${loadfile}\0" \
        "net_nfs=run net_load nfs_args add_net add_misc;bootm\0" \
        "kernel_addr=000C0000\0" \
-       "flash_nfs=run nfs_args add_net add_misc;bootm $(kernel_addr)\0" \
+       "flash_nfs=run nfs_args add_net add_misc;bootm ${kernel_addr}\0" \
        "mdm_init1=ATZ\0" \
        "mdm_init2=ATS0=1\0" \
        "mdm_flow_control=rts/cts\0"
 #else /* !CFG_HUSH_PARSER */
 #define        CONFIG_EXTRA_ENV_SETTINGS       \
        "nfs_args=setenv bootargs root=/dev/nfs rw " \
-               "nfsroot=$(serverip):$(rootpath)\0" \
+               "nfsroot=${serverip}:${rootpath}\0" \
        "rootpath=/opt/eldk/arm_920TDI\0" \
        "ram_args=setenv bootargs root=/dev/ram rw\0" \
-       "add_net=setenv bootargs $(bootargs) ethaddr=$(ethaddr) " \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off\0" \
-       "add_misc=setenv bootargs $(bootargs) console=ttyS0 panic=1\0" \
+       "add_net=setenv bootargs ${bootargs} ethaddr=${ethaddr} " \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0" \
+       "add_misc=setenv bootargs ${bootargs} console=ttyS0 panic=1\0" \
        "u-boot=/tftpboot/TRAB/u-boot.bin\0" \
-       "load=tftp C100000 $(u-boot)\0" \
+       "load=tftp C100000 ${u-boot}\0" \
        "update=protect off 0 3FFFF;era 0 3FFFF;" \
-               "cp.b C100000 0 $(filesize);" \
+               "cp.b C100000 0 ${filesize};" \
                "setenv filesize;saveenv\0" \
        "loadfile=/tftpboot/TRAB/uImage\0" \
        "loadaddr=C400000\0" \
-       "net_load=tftpboot $(loadaddr) $(loadfile)\0" \
+       "net_load=tftpboot ${loadaddr} ${loadfile}\0" \
        "net_nfs=run net_load nfs_args add_net add_misc;bootm\0" \
        "kernel_addr=000C0000\0" \
-       "flash_nfs=run nfs_args add_net add_misc;bootm $(kernel_addr)\0" \
+       "flash_nfs=run nfs_args add_net add_misc;bootm ${kernel_addr}\0" \
        "mdm_init1=ATZ\0" \
        "mdm_init2=ATS0=1\0" \
        "mdm_flow_control=rts/cts\0"
 #define        CFG_MONITOR_BASE        CFG_FLASH_BASE
 #define        CFG_MONITOR_LEN         (256 << 10)
 
+/* Dynamic MTD partition support */
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT         "nor0=0"
+
+/* production flash layout */
+#define MTDPARTS_DEFAULT       "mtdparts=0:32k(Firmware1)ro,"          \
+                                               "16k(Env1),"            \
+                                               "16k(Env2),"            \
+                                               "320k(Firmware2)ro,"    \
+                                               "896k(Kernel),"         \
+                                               "5376k(Root-FS),"       \
+                                               "1408k(JFFS2),"         \
+                                               "-(VFD)"
+
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define CFG_ENV_SIZE           0x4000
 #define CFG_ENV_SECT_SIZE      0x20000
 #else
-#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x8000)
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x4000)
 #define CFG_ENV_SIZE           0x4000
 #define CFG_ENV_SECT_SIZE      0x4000
 #endif
index 187df71ddb09a10386a75b509d5d30ebdad4206d..c4e629ade2bec799d546a509442ca1c004c97582 100644 (file)
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
        "bootfile=/tftpboot/uc100/uImage\0"                             \
@@ -86,7 +86,7 @@
        "ramdisk_addr=40100000\0"                                       \
        "load=tftp 100000 /tftpboot/uc100/u-boot.bin\0"                 \
        "update=protect off 40700000 4073ffff;era 40700000 4073ffff;"   \
-               "cp.b 100000 40700000 $(filesize);"                     \
+               "cp.b 100000 40700000 ${filesize};"                     \
                "setenv filesize;saveenv\0"                             \
        ""
 #define CONFIG_BOOTCOMMAND     "run flash_self"
index 4c4c279fa185e1e9cb1f8b08963a50663bd7195e..d312b6559ad3cc2b6969fd7fec8ad9c846ff582e 100644 (file)
        "ramdisk_addr=FF800000\0" \
        "u-boot_startaddr=FFB00000\0" \
        "u-boot_endaddr=FFB2FFFF\0" \
-       "nfsargs=setenv bootargs console=ttyS0,$(baudrate) root=/dev/nfs rw \
-nfsroot=$(nfsrootip):$(rootpath) ip=dhcp\0" \
-       "ramargs=setenv bootargs console=ttyS0,$(baudrate) root=/dev/ram0\0" \
-       "smargs=setenv bootargs console=ttyS0,$(baudrate) root=/dev/mtdblock1 ro\0" \
-       "fwargs=setenv bootargs console=ttyS0,$(baudrate) root=/dev/sda2 ro\0" \
-       "nfsboot=run nfsargs;bootm $(kernel_addr)\0" \
-       "ramboot=run ramargs;bootm $(kernel_addr) $(ramdisk_addr)\0" \
-       "smboot=run smargs;bootm $(kernel_addr) $(ramdisk_addr)\0" \
-       "fwboot=run fwargs;bootm $(kernel_addr) $(ramdisk_addr)\0" \
-       "update_u-boot=tftp $(loadaddr) /bdi2000/u-boot.bin;protect off \
-$(u-boot_startaddr) $(u-boot_endaddr);era $(u-boot_startaddr) \
-$(u-boot_endaddr);cp.b $(loadaddr) $(u-boot_startaddr) $(filesize);\
-protect on $(u-boot_startaddr) $(u-boot_endaddr)"
+       "nfsargs=setenv bootargs console=ttyS0,${baudrate} root=/dev/nfs rw \
+nfsroot=${nfsrootip}:${rootpath} ip=dhcp\0" \
+       "ramargs=setenv bootargs console=ttyS0,${baudrate} root=/dev/ram0\0" \
+       "smargs=setenv bootargs console=ttyS0,${baudrate} root=/dev/mtdblock1 ro\0" \
+       "fwargs=setenv bootargs console=ttyS0,${baudrate} root=/dev/sda2 ro\0" \
+       "nfsboot=run nfsargs;bootm ${kernel_addr}\0" \
+       "ramboot=run ramargs;bootm ${kernel_addr} ${ramdisk_addr}\0" \
+       "smboot=run smargs;bootm ${kernel_addr} ${ramdisk_addr}\0" \
+       "fwboot=run fwargs;bootm ${kernel_addr} ${ramdisk_addr}\0" \
+       "update_u-boot=tftp ${loadaddr} /bdi2000/u-boot.bin;protect off \
+${u-boot_startaddr} ${u-boot_endaddr};era ${u-boot_startaddr} \
+${u-boot_endaddr};cp.b ${loadaddr} ${u-boot_startaddr} ${filesize};\
+protect on ${u-boot_startaddr} ${u-boot_endaddr}"
 
 #define CONFIG_ENV_OVERWRITE
 
index b3c62556d2a640835fd17e2dcebcd622db27514e..a2e99b59e2a02f7c98bacc1918ad12eed70e793a 100644 (file)
@@ -65,8 +65,8 @@
 #define CONFIG_BOOTCOMMAND                                                     \
        "tftpboot; "                                                            \
        "setenv bootargs console=tty0 "                                   \
-       "root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) "                     \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "root=/dev/nfs rw nfsroot=${serverip}:${rootpath} "                     \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
index 72b0a4c8e8b4853a875a525dca8df7c3c3252ae3..c5ee78ff4d71b5ef41f414565f1c6f7bebee5161 100644 (file)
 #define CFG_AUTOLOAD           "n"     /* no autoload */
 #define CONFIG_PREBOOT         "run setup"
 #define        CONFIG_EXTRA_ENV_SETTINGS                               \
-       "setup=setenv bootargs console=ttyS0,$(baudrate) "      \
+       "setup=setenv bootargs console=ttyS0,${baudrate} "      \
                "root=/dev/nfs ip=dhcp\0"                       \
        "update=erase c000000 c03ffff; "                        \
-               "cp.b 10400000 c000000 $(filesize)\0"
+               "cp.b 10400000 c000000 ${filesize}\0"
 #else
 #define CONFIG_BOOTDELAY       3
 #undef  CONFIG_BOOTARGS                /* boot command will set bootargs */
index 3a8e61c087d37e70ee7f12966da05ef9101e3562..1171ee5ae5130094e217663353213b98c1a4d853 100644 (file)
        "netdev=eth0\0"                                                 \
        "hostname=walnut\0"                                             \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/walnut/uImage\0"                            \
 
 #define CFG_RX_ETH_BUFFER      16      /* use 16 rx buffer on 405 emac */
 
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
+#define CONFIG_NET_MULTI               /* needed for NetConsole        */
+
 /*-----------------------------------------------------------------------
  * I2C stuff
  *-----------------------------------------------------------------------
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                16384   /* For IBM 405 CPUs, older 405 ppc's    */
+#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 (CONFIG_COMMANDS & CFG_CMD_KGDB)
index 2b863371433e554ac6269029b6c32d1ca37feb45..d3e9671bc31a28d7571bfa02ded2df254f3c4f11 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * (C) Copyright 2005
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 /*-----------------------------------------------------------------------
  * High Level Configuration Options
  *----------------------------------------------------------------------*/
-#define CONFIG_YELLOWSTONE                     1       /* Board is BAMBOO           */
-#define CONFIG_440GR                           1       /* Specific PPC440GR support */
-
-#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_YOLLOWSTONE     1       /* Board is Yellowstone         */
+#define CONFIG_440GR           1       /* Specific PPC440EP support    */
+#define CONFIG_4xx             1       /* ... PPC4xx family            */
 #define CONFIG_SYS_CLK_FREQ    66666666    /* external freq to pll     */
 
+#define CONFIG_BOARD_EARLY_INIT_F 1     /* Call board_early_init_f     */
+#define CONFIG_MISC_INIT_R     1       /* call misc_init_r()           */
+
 /*-----------------------------------------------------------------------
  * 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     0xf0000000      /* start of FLASH           */
-#define CFG_MONITOR_BASE    TEXT_BASE      /* start of monitor         */
-#define CFG_PCI_MEMBASE            0xa0000000      /* 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_MONITOR_LEN                (512 * 1024)    /* Reserve 512 kB for Monitor   */
+#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
+#define CFG_MONITOR_BASE       (-CFG_MONITOR_LEN)
+#define CFG_SDRAM_BASE         0x00000000          /* _must_ be 0      */
+#define CFG_FLASH_BASE         0xfc000000          /* start of FLASH   */
+#define CFG_PCI_MEMBASE                0xa0000000          /* 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_PCI_BASE       0xe0000000      /* internal PCI regs        */
+#define CFG_PERIPHERAL_BASE     0xef600000         /* internal peripherals*/
+#define CFG_PCI_BASE           0xe0000000          /* internal PCI regs*/
 /*Don't change either of these*/
 
-#define CFG_USB_DEVICE 0x50000000
-#define CFG_NVRAM_BASE_ADDR 0x80000000
-#define CFG_BCSR_BASE      (CFG_NVRAM_BASE_ADDR | 0x2000)
+#define CFG_USB_DEVICE          0x50000000
+#define CFG_NVRAM_BASE_ADDR     0x80000000
+#define CFG_BCSR_BASE          (CFG_NVRAM_BASE_ADDR | 0x2000)
+#define CFG_BOOT_BASE_ADDR      0xf0000000
 
 /*-----------------------------------------------------------------------
  * Initial RAM & stack pointer (placed in SDRAM)
  *----------------------------------------------------------------------*/
-#define CFG_INIT_RAM_ADDR        0xf0000000            /* DCache */
-#define CFG_INIT_RAM_END       0x2000
-#define CFG_GBL_DATA_SIZE      256                     /* num bytes initial data       */
+#define CFG_INIT_RAM_ADDR      0x70000000              /* DCache       */
+#define CFG_INIT_RAM_END       (8 << 10)
+#define CFG_GBL_DATA_SIZE      256                     /* num bytes initial data*/
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
 #define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
 
-#define CFG_MONITOR_LEN            (256 * 1024)    /* Reserve 256 kB for Mon   */
-#define CFG_MALLOC_LEN     (128 * 1024)    /* Reserve 128 kB for malloc*/
-#define CFG_KBYTES_SDRAM       ( 128 * 1024)   /* 128MB                     */
-#define CFG_SDRAM_BANKS            (2)
 /*-----------------------------------------------------------------------
  * Serial Port
  *----------------------------------------------------------------------*/
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
 #define CFG_EXT_SERIAL_CLOCK   11059200 /* use external 11.059MHz clk  */
-#define CONFIG_BAUDRATE                        9600
-#define CONFIG_SERIAL_MULTI   1
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI     1
 /*define this if you want console on UART1*/
 #undef CONFIG_UART1_CONSOLE
 
     {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
 
 /*-----------------------------------------------------------------------
- * NVRAM/RTC
- *
- * NOTE: The RTC registers are located at 0x7FFF0 - 0x7FFFF
- * The DS1558 code assumes this condition
- *
+ * Environment
  *----------------------------------------------------------------------*/
-#define CFG_NVRAM_SIZE     (0x2000 - 0x10) /* NVRAM size(8k)- RTC regs */
-#define CONFIG_RTC_DS1556      1                        /* DS1556 RTC          */
+/*
+ * Define here the location of the environment variables (FLASH or EEPROM).
+ * Note: DENX encourages to use redundant environment in FLASH.
+ */
+#if 1
+#define CFG_ENV_IS_IN_FLASH     1      /* use FLASH for environment vars       */
+#else
+#define CFG_ENV_IS_IN_EEPROM   1       /* use EEPROM for environment vars      */
+#endif
 
 /*-----------------------------------------------------------------------
  * FLASH related
  *----------------------------------------------------------------------*/
-#define CFG_MAX_FLASH_BANKS    1                   /* number of banks      */
-#define CFG_MAX_FLASH_SECT     256                 /* sectors per device   */
+#define CFG_FLASH_CFI                          /* The flash is CFI compatible  */
+#define CFG_FLASH_CFI_DRIVER                   /* Use common CFI driver        */
+#define CFG_FLASH_CFI_AMD_RESET 1              /* AMD RESET for STM 29W320DB!  */
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip    */
 
-#undef CFG_FLASH_CHECKSUM
 #define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
-#define CFG_FLASH_WRITE_TOUT   120000      /* Timeout for Flash Write (in ms)  */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
+#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            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 /* CFG_ENV_IS_IN_FLASH */
 
 /*-----------------------------------------------------------------------
  * DDR SDRAM
  *----------------------------------------------------------------------*/
 #undef CONFIG_SPD_EEPROM              /* Don't use SPD EEPROM for setup    */
+#define CFG_KBYTES_SDRAM        (128 * 1024)    /* 128MB                   */
+#define CFG_SDRAM_BANKS                (2)
+
 
 /*-----------------------------------------------------------------------
  * I2C
 #define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
 #define CFG_I2C_SLAVE          0x7F
 
-
-/*-----------------------------------------------------------------------
- * Environment
- *----------------------------------------------------------------------*/
-#undef CFG_ENV_IS_IN_NVRAM                 /*No NVRAM on board*/
-#undef CFG_ENV_IS_IN_FLASH                 /* ... not in flash         */
-#define CFG_ENV_IS_IN_EEPROM 1
-
-/* Define to allow the user to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
 #define CFG_I2C_MULTI_EEPROMS
-#define CFG_ENV_SIZE           0x200       /* Size of Environment vars */
-#define CFG_ENV_OFFSET         0x0
 #define CFG_I2C_EEPROM_ADDR    (0xa8>>1)
 #define CFG_I2C_EEPROM_ADDR_LEN 1
 #define CFG_EEPROM_PAGE_WRITE_ENABLE
 #define CFG_EEPROM_PAGE_WRITE_BITS 3
 #define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
 
-#define CONFIG_BOOTCOMMAND     "bootm 0xfe000000"    /* autoboot command */
-#define CONFIG_BOOTDELAY       3                   /* disable autoboot */
+#ifdef CFG_ENV_IS_IN_EEPROM
+#define CFG_ENV_SIZE           0x200       /* Size of Environment vars */
+#define CFG_ENV_OFFSET         0x0
+#endif /* CFG_ENV_IS_IN_EEPROM */
+
+#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"                                                 \
+       "hostname=yellowstone\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"                                               \
+       "rootpath=/opt/eldk/ppc_4xx\0"                                  \
+       "bootfile=/tftpboot/yellowstone/uImage\0"                       \
+       "kernel_addr=fc000000\0"                                        \
+       "ramdisk_addr=fc100000\0"                                       \
+       "load=tftp 100000 /tftpboot/yellowstone/u-boot.bin\0"           \
+       "update=protect off fff80000 ffffffff;era fff80000 ffffffff;"   \
+               "cp.b 100000 fff80000 80000;"                           \
+               "setenv filesize;saveenv\0"                             \
+       "upd=run load;run update\0"                                     \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#if 0
+#define CONFIG_BOOTDELAY       -1      /* autoboot disabled            */
+#else
+#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
+#endif
+
+#define CONFIG_BAUDRATE                115200
 
-#define CONFIG_LOADS_ECHO              1       /* echo on for serial download  */
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
 #define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
 
-#define CONFIG_MII                     1       /* MII PHY management           */
-#define CONFIG_NET_MULTI    1  /* required for netconsole  */
-#define CONFIG_PHY1_ADDR    3
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_NET_MULTI        1      /* required for netconsole      */
+#define CONFIG_PHY1_ADDR        3
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
 #define CONFIG_PHY_ADDR                1       /* PHY address, See schematics  */
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_IPADDR          10.0.4.251
-#define CONFIG_ETHADDR         00:10:EC:00:12:34
-#define CONFIG_ETH1ADDR                00:10:EC:00:12:35
 
-#define CFG_RX_ETH_BUFFER      32        /* Number of ethernet rx buffers & descriptors */
-#define CONFIG_SERVERIP                10.0.4.115
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
 
 /* Partitions */
 #define CONFIG_MAC_PARTITION
 #define CONFIG_HW_WATCHDOG                     /* watchdog */
 #endif
 
-#ifdef CONFIG_440EP
-       /* Need to define POST */
-#define CONFIG_COMMANDS               ((CONFIG_CMD_DFL | \
-                       CFG_CMD_DATE    |   \
-                       CFG_CMD_DHCP    |   \
-                       CFG_CMD_DIAG    |   \
-                       CFG_CMD_ECHO    |   \
-                       CFG_CMD_EEPROM  |   \
-                       CFG_CMD_ELF     |   \
-    /*     CFG_CMD_EXT2    |*/ \
-       /*              CFG_CMD_FAT             |*/     \
-                       CFG_CMD_I2C     |       \
-       /*              CFG_CMD_IDE             |*/     \
-                       CFG_CMD_IRQ     |       \
-    /*         CFG_CMD_KGDB    |*/     \
-                       CFG_CMD_MII     |   \
-                       CFG_CMD_PCI             |       \
-                       CFG_CMD_PING    |       \
-                       CFG_CMD_REGINFO |       \
-                       CFG_CMD_SDRAM   |   \
-                       CFG_CMD_FLASH   |   \
-       /*              CFG_CMD_SPI             |*/     \
-                       CFG_CMD_USB     |       \
-                       0 ) & ~CFG_CMD_IMLS)
-#else
-#define CONFIG_COMMANDS               ((CONFIG_CMD_DFL | \
-                       CFG_CMD_DATE    |   \
-                       CFG_CMD_DHCP    |   \
-                       CFG_CMD_DIAG    |   \
-                       CFG_CMD_ECHO    |   \
-                       CFG_CMD_EEPROM  |   \
-                       CFG_CMD_ELF     |   \
-    /*     CFG_CMD_EXT2    |*/ \
-       /*              CFG_CMD_FAT             |*/     \
-                       CFG_CMD_I2C     |       \
-       /*              CFG_CMD_IDE             |*/     \
-                       CFG_CMD_IRQ     |       \
-    /*         CFG_CMD_KGDB    |*/     \
-                       CFG_CMD_MII     |   \
-                       CFG_CMD_PCI             |       \
-                       CFG_CMD_PING    |       \
-                       CFG_CMD_REGINFO |       \
-                       CFG_CMD_SDRAM   |   \
-                       CFG_CMD_FLASH   |   \
-       /*              CFG_CMD_SPI             |*/     \
-                       0 ) & ~CFG_CMD_IMLS)
-#endif
+#define CONFIG_COMMANDS               (CONFIG_CMD_DFL  | \
+                               CFG_CMD_ASKENV  | \
+                               CFG_CMD_DHCP    | \
+                               CFG_CMD_DIAG    | \
+                               CFG_CMD_ELF     | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_IRQ     | \
+                               CFG_CMD_MII     | \
+                               CFG_CMD_NET     | \
+                               CFG_CMD_NFS     | \
+                               CFG_CMD_PCI     | \
+                               CFG_CMD_PING    | \
+                               CFG_CMD_REGINFO | \
+                               CFG_CMD_SDRAM)
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
  * Miscellaneous configurable options
  */
 #define CFG_LONGHELP                   /* undef to save memory         */
-#define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CFG_CBSIZE     1024            /* Console I/O Buffer Size      */
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
 #else
-#define CFG_CBSIZE     256             /* Console I/O Buffer Size      */
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
 #endif
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS    16              /* max number of command args   */
-#define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument 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      0x0400000       /* memtest works on     */
-#define CFG_MEMTEST_END                0x0C00000       /* 4 ... 12 MB in DRAM  */
+#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 CONFIG_LYNXKDI         1   /* support kdi files */
+#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
+#define CONFIG_LYNXKDI          1       /* support kdi files            */
 
-#define CFG_HZ         1000            /* decrementer freq: 1 ms ticks */
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
 
 /*-----------------------------------------------------------------------
  * PCI stuff
  *-----------------------------------------------------------------------
  */
 /* General PCI */
-#define CONFIG_PCI                                 /* include pci support              */
-#undef CONFIG_PCI_PNP                          /* do (not) pci plug-and-play         */
-#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup  */
-#define CFG_PCI_TARGBASE    0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE */
+#define CONFIG_PCI                     /* include pci support          */
+#undef  CONFIG_PCI_PNP                 /* do (not) pci plug-and-play   */
+#define CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE        0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE*/
 
 /* Board-specific PCI */
-#define CFG_PCI_PRE_INIT               /* enable board pci_pre_init()  */
+#define CFG_PCI_PRE_INIT                /* enable board pci_pre_init()  */
 #define CFG_PCI_TARGET_INIT
 #define CFG_PCI_MASTER_INIT
 
-#define CFG_PCI_SUBSYS_VENDORID 0x1014 /* IBM */
-#define CFG_PCI_SUBSYS_ID 0xcafe       /* Whatever */
+#define CFG_PCI_SUBSYS_VENDORID 0x10e8 /* AMCC */
+#define CFG_PCI_SUBSYS_ID       0xcafe /* Whatever */
 
 /*
  * For booting Linux, the board info and command line data
  * 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 IBM 405 CPUs                     */
+#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
 #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 4ac930b42aa1764db90c0bcd582b1ba6799fc993..a67b834866ba9869f231ca2465e1a396f04dc8d1 100644 (file)
        "netdev=eth0\0"                                                 \
        "hostname=yosemite\0"                                           \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
+               "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"\
+       "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"                                \
+               "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 ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${bootfile};run nfsargs addip addtty;"     \
                "bootm\0"                                               \
        "rootpath=/opt/eldk/ppc_4xx\0"                                  \
        "bootfile=/tftpboot/yosemite/uImage\0"                          \
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
 #define CONFIG_PHY_ADDR                1       /* PHY address, See schematics  */
 
-#define CFG_RX_ETH_BUFFER      32        /* Number of ethernet rx buffers & descriptors */
+#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+
+#define CONFIG_NETCONSOLE              /* include NetConsole support   */
 
 /* Partitions */
 #define CONFIG_MAC_PARTITION
                                CFG_CMD_PING    | \
                                CFG_CMD_REGINFO | \
                                CFG_CMD_SDRAM   | \
+                               CFG_CMD_FAT     | \
+                               CFG_CMD_EXT2    | \
                                CFG_CMD_USB     )
 
+#define CONFIG_SUPPORT_VFAT
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
  */
-#define CFG_DCACHE_SIZE                (32<<10) /* For IBM 440 CPUs                    */
+#define CFG_DCACHE_SIZE                (32<<10) /* For AMCC 440 CPUs                   */
 #define CFG_CACHELINE_SIZE     32      /* ...                  */
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value        */
index e0c14f04af57489bcb3da6184f53b4199ab5742a..9f1b1d529c917eafc8cb6aa01e4c2eff07736351 100644 (file)
@@ -84,6 +84,7 @@ struct cramfs_super {
                                | CRAMFS_FLAG_WRONG_SIGNATURE \
                                | CRAMFS_FLAG_SHIFTED_ROOT_OFFSET )
 
+#if __BYTE_ORDER == __LITTLE_ENDIAN
 #define CRAMFS_16(x)   (x)
 #define CRAMFS_24(x)   (x)
 #define CRAMFS_32(x)   (x)
@@ -91,6 +92,27 @@ struct cramfs_super {
 #define CRAMFS_GET_OFFSET(x)   ((x)->offset)
 #define CRAMFS_SET_OFFSET(x,y) ((x)->offset = (y))
 #define CRAMFS_SET_NAMELEN(x,y) ((x)->namelen = (y))
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#ifdef __KERNEL__
+#define CRAMFS_16(x)   swab16(x)
+#define CRAMFS_24(x)   ((swab32(x)) >> 8)
+#define CRAMFS_32(x)   swab32(x)
+#else /* not __KERNEL__ */
+#define CRAMFS_16(x)   bswap_16(x)
+#define CRAMFS_24(x)   ((bswap_32(x)) >> 8)
+#define CRAMFS_32(x)   bswap_32(x)
+#endif /* not __KERNEL__ */
+#define CRAMFS_GET_NAMELEN(x)  (((u8*)(x))[8] & 0x3f)
+#define CRAMFS_GET_OFFSET(x)   ((CRAMFS_24(((u32*)(x))[2] & 0xffffff) << 2) |\
+                                ((((u32*)(x))[2] & 0xc0000000) >> 30))
+#define CRAMFS_SET_NAMELEN(x,y)        (((u8*)(x))[8] = (((0x3f & (y))) | \
+                                                 (0xc0 & ((u8*)(x))[8])))
+#define CRAMFS_SET_OFFSET(x,y) (((u32*)(x))[2] = (((y) & 3) << 30) | \
+                                CRAMFS_24((((y) & 0x03ffffff) >> 2)) | \
+                                (((u32)(((u8*)(x))[8] & 0x3f)) << 24))
+#else
+#error "__BYTE_ORDER must be __LITTLE_ENDIAN or __BIG_ENDIAN"
+#endif
 
 /* Uncompression interfaces to the underlying zlib */
 int cramfs_uncompress_block(void *dst, void *src, int srclen);
index 706e215af357ec5e4e11c2ec25b9156c58205ce2..f5bfb1960d4f9164b4f18a29a11548138ad60e7a 100644 (file)
 
 
 /******************  function prototypes **********************/
-static unsigned int dm9161_IsPhyConnected(AT91PS_EMAC p_mac);
-static unsigned char  dm9161_GetLinkSpeed(AT91PS_EMAC p_mac);
-static unsigned char dm9161_AutoNegotiate(AT91PS_EMAC p_mac, int *status);
-static unsigned char dm9161_InitPhy(AT91PS_EMAC p_mac);
+unsigned int  dm9161_IsPhyConnected(AT91PS_EMAC p_mac);
+unsigned char dm9161_GetLinkSpeed(AT91PS_EMAC p_mac);
+unsigned char dm9161_AutoNegotiate(AT91PS_EMAC p_mac, int *status);
+unsigned char dm9161_InitPhy(AT91PS_EMAC p_mac);
index 2981bde51ad5e2d41300ef3880eae5feabf53ac0..069aa63414d05190963b05114c78253d4227e2c9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000-2004
+ * (C) Copyright 2000-2005
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
@@ -83,7 +83,7 @@ extern int flash_sect_protect (int flag, ulong addr_first, ulong addr_last);
 
 /* common/flash.c */
 extern void flash_protect (int flag, ulong from, ulong to, flash_info_t *info);
-extern int flash_write (uchar *, ulong, ulong);
+extern int flash_write (char *, ulong, ulong);
 extern flash_info_t *addr2info (ulong);
 extern int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt);
 
@@ -128,7 +128,7 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define MX_MANUFACT    0x00C200C2      /* MXIC    manuf. ID in D23..D16, D7..D0 */
 #define TOSH_MANUFACT  0x00980098      /* TOSHIBA manuf. ID in D23..D16, D7..D0 */
 #define MT2_MANUFACT   0x002C002C      /* alternate MICRON manufacturer ID*/
-#define EXCEL_MANUFACT 0x004A004A      /* Excel Semiconductor                  */
+#define EXCEL_MANUFACT 0x004A004A      /* Excel Semiconductor                  */
 
                                        /* Micron Technologies (INTEL compat.)  */
 #define MT_ID_28F400_T 0x44704470      /* 28F400B3 ID ( 4 M, top boot sector)  */
@@ -137,7 +137,15 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define AMD_ID_LV040B  0x4F            /* 29LV040B ID                          */
                                        /* 4 Mbit, 512K x 8,                    */
                                        /* 8 64K x 8 uniform sectors            */
-
+#define AMD_ID_F033C   0xA3            /* 29LV033C ID                          */
+                                       /* 32 Mbit, 4Mbits x 8,                 */
+                                       /* 64 64K x 8 uniform sectors           */
+#define AMD_ID_F065D   0x93            /* 29LV065D ID                          */
+                                       /* 64 Mbit, 8Mbits x 8,                 */
+                                       /* 126 64K x 8 uniform sectors          */
+#define ATM_ID_LV040   0x13            /* 29LV040B ID                          */
+                                       /* 4 Mbit, 512K x 8,                    */
+                                       /* 8 64K x 8 uniform sectors            */
 #define AMD_ID_F040B   0xA4            /* 29F040B ID                           */
                                        /* 4 Mbit, 512K x 8,                    */
                                        /* 8 64K x 8 uniform sectors            */
@@ -150,10 +158,10 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define AMD_ID_F016D   0xAD            /* 29F016  ID  ( 2 M x 8)               */
 #define AMD_ID_F032B   0x41            /* 29F032  ID  ( 4 M x 8)               */
 #define AMD_ID_LV116DT 0xC7            /* 29LV116DT   ( 2 M x 8, top boot sect) */
-#define AMD_ID_LV116DB  0x4C           /* 29LV116DB   ( 2 M x 8, bottom boot sect) */
+#define AMD_ID_LV116DB 0x4C            /* 29LV116DB   ( 2 M x 8, bottom boot sect) */
 #define AMD_ID_LV016B  0xc8            /* 29LV016 ID  ( 2 M x 8)               */
 
-#define AMD_ID_PL160CB  0x22452245      /* 29PL160CB ID (16 M, bottom boot sect */
+#define AMD_ID_PL160CB 0x22452245      /* 29PL160CB ID (16 M, bottom boot sect */
 
 #define AMD_ID_LV400T  0x22B922B9      /* 29LV400T ID ( 4 M, top boot sector)  */
 #define AMD_ID_LV400B  0x22BA22BA      /* 29LV400B ID ( 4 M, bottom boot sect) */
@@ -168,7 +176,7 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define AMD_ID_LV160B  0x22492249      /* 29LV160B ID (16 M, bottom boot sect) */
 
 #define AMD_ID_DL163T  0x22282228      /* 29DL163T ID (16 M, top boot sector)  */
-#define AMD_ID_DL163B  0x222B222B      /* 29DL163B ID (16 M, bottom boot sect) */
+#define AMD_ID_DL163B  0x222B222B      /* 29DL163B ID (16 M, bottom boot sect) */
 
 #define AMD_ID_LV320T  0x22F622F6      /* 29LV320T ID (32 M, top boot sector)  */
 #define MX_ID_LV320T   0x22A722A7      /* 29LV320T by Macronix, AMD compatible */
@@ -184,10 +192,10 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 
 #define AMD_ID_DL640   0x227E227E      /* 29DL640D ID (64 M, dual boot sectors)*/
 #define AMD_ID_MIRROR  0x227E227E      /* 1st ID word for MirrorBit family */
-#define AMD_ID_DL640G_2        0x22022202      /* 2nd ID word for AM29DL640G  at 0x38 */
-#define AMD_ID_DL640G_3        0x22012201      /* 3rd ID word for AM29DL640G  at 0x3c */
-#define AMD_ID_LV640U_2        0x220C220C      /* 2nd ID word for AM29LV640M  at 0x38 */
-#define AMD_ID_LV640U_3        0x22012201      /* 3rd ID word for AM29LV640M  at 0x3c */
+#define AMD_ID_DL640G_2 0x22022202     /* 2nd ID word for AM29DL640G  at 0x38 */
+#define AMD_ID_DL640G_3 0x22012201     /* 3rd ID word for AM29DL640G  at 0x3c */
+#define AMD_ID_LV640U_2 0x220C220C     /* 2nd ID word for AM29LV640M  at 0x38 */
+#define AMD_ID_LV640U_3 0x22012201     /* 3rd ID word for AM29LV640M  at 0x3c */
 #define AMD_ID_LV640MT_2 0x22102210    /* 2nd ID word for AM29LV640MT at 0x38 */
 #define AMD_ID_LV640MT_3 0x22012201    /* 3rd ID word for AM29LV640MT at 0x3c */
 #define AMD_ID_LV640MB_2 0x22102210    /* 2nd ID word for AM29LV640MB at 0x38 */
@@ -198,11 +206,14 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define AMD_ID_LV256U_3 0x22012201     /* 3rd ID word for AM29LV256M  at 0x3c */
 #define AMD_ID_GL064M_2 0x22132213     /* 2nd ID word for S29GL064M-R6 */
 #define AMD_ID_GL064M_3 0x22012201     /* 3rd ID word for S29GL064M-R6 */
+#define AMD_ID_GL064MT_2 0x22102210    /* 2nd ID word for S29GL064M-R3 (top boot sector) */
+#define AMD_ID_GL064MT_3 0x22012201    /* 3rd ID word for S29GL064M-R3 (top boot sector) */
 
-#define AMD_ID_LV320B_2        0x221A221A      /* 2d ID word for AM29LV320MB at 0x38 */
+#define AMD_ID_LV320B_2 0x221A221A     /* 2d ID word for AM29LV320MB at 0x38 */
 #define AMD_ID_LV320B_3 0x22002200     /* 3d ID word for AM29LV320MB at 0x3c */
 
 #define AMD_ID_LV640U  0x22D722D7      /* 29LV640U ID (64 M, uniform sectors)  */
+#define AMD_ID_LV650U  0x22D722D7      /* 29LV650U ID (64 M, uniform sectors)  */
 
 #define ATM_ID_BV1614  0x000000C0      /* 49BV1614  ID */
 #define ATM_ID_BV1614A 0x000000C8      /* 49BV1614A ID */
@@ -258,6 +269,7 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define INTEL_ID_28F320J3A  0x00160016 /*  32M = 128K x  32    */
 #define INTEL_ID_28F640J3A  0x00170017 /*  64M = 128K x  64    */
 #define INTEL_ID_28F128J3A  0x00180018 /* 128M = 128K x 128    */
+#define INTEL_ID_28F256J3A  0x001D001D /* 256M = 128K x 256    */
 #define INTEL_ID_28F256L18T 0x880D880D /* 256M = 128K x 255 + 32k x 4 */
 #define INTEL_ID_28F64K3    0x88018801 /*  64M =  32K x 255 + 32k x 4 */
 #define INTEL_ID_28F128K3   0x88028802 /* 128M =  64K x 255 + 32k x 4 */
@@ -309,13 +321,13 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define FLASH_AMDL324T 0x0014          /* AMD AM29DL324                        */
 #define FLASH_AMDL324B 0x0015
 
-#define FLASH_AMDLV033C        0x0018
-#define FLASH_AMDLV065D        0x001A
+#define FLASH_AMDLV033C 0x0018
+#define FLASH_AMDLV065D 0x001A
 
 #define FLASH_AMDL640  0x0016          /* AMD AM29DL640D                       */
 #define FLASH_AMD016   0x0018          /* AMD AM29F016D                        */
-#define FLASH_AMDL640MB        0x0019          /* AMD AM29LV640MB (64M, bottom boot sect)*/
-#define FLASH_AMDL640MT        0x001A          /* AMD AM29LV640MT (64M, top boot sect) */
+#define FLASH_AMDL640MB 0x0019         /* AMD AM29LV640MB (64M, bottom boot sect)*/
+#define FLASH_AMDL640MT 0x001A         /* AMD AM29LV640MT (64M, top boot sect) */
 
 #define FLASH_SST200A  0x0040          /* SST 39xF200A ID (  2M = 128K x 16 )  */
 #define FLASH_SST400A  0x0042          /* SST 39xF400A ID (  4M = 256K x 16 )  */
@@ -355,6 +367,7 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define FLASH_AM033C   0x0091          /* AMD AM29LV033   ( 32M = 4M x 8 )     */
 #define FLASH_LH28F016SCT 0x0092       /* Sharp 28F016SCT ( 8 Meg Flash SIMM ) */
 #define FLASH_28F160F3B 0x0093         /* Intel 28F160F3B ( 16M = 1M x 16 )    */
+#define FLASH_AM065D   0x0093
 
 #define FLASH_28F640J5 0x0099          /* INTEL 28F640J5  ( 64M = 128K x  64)  */
 
@@ -366,27 +379,33 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define FLASH_28F320C3B 0x009F         /* Intel 28F320C3B ( 32M = 2M x 16 )    */
 #define FLASH_28F640C3T 0x00A0         /* Intel 28F640C3T ( 64M = 4M x 16 )    */
 #define FLASH_28F640C3B 0x00A1         /* Intel 28F640C3B ( 64M = 4M x 16 )    */
-#define FLASH_AMLV320U 0x00A2          /* AMD 29LV320M    ( 32M = 2M x 16 )    */
-#define FLASH_AMLV640U 0x00A4          /* AMD 29LV640M    ( 64M = 4M x 16 )    */
+#define FLASH_AMLV320U 0x00A2          /* AMD 29LV320M    ( 32M = 2M x 16 )    */
+
+#define FLASH_AM033    0x00A3          /* AMD AmL033C90V1   (32M = 4M x 8)     */
+#define FLASH_AM065    0x0093          /* AMD AmL065DU12RI  (64M = 8M x 8)     */
+#define FLASH_AT040    0x00A5          /* Amtel AT49LV040   (4M = 512K x 8)    */
+
+#define FLASH_AMLV640U 0x00A4          /* AMD 29LV640M    ( 64M = 4M x 16 )    */
 #define FLASH_AMLV128U 0x00A6          /* AMD 29LV128M    ( 128M = 8M x 16 )   */
-#define FLASH_AMLV320B  0x00A7         /* AMD 29LV320MB   ( 32M = 2M x 16 )    */
+#define FLASH_AMLV320B 0x00A7          /* AMD 29LV320MB   ( 32M = 2M x 16 )    */
 #define FLASH_AMLV320T 0x00A8          /* AMD 29LV320MT   ( 32M = 2M x 16 )    */
 #define FLASH_AMLV256U 0x00AA          /* AMD 29LV256M    ( 256M = 16M x 16 )  */
-#define FLASH_MXLV320B  0x00AB         /* MX  29LV320MB   ( 32M = 2M x 16 )    */
+#define FLASH_MXLV320B 0x00AB          /* MX  29LV320MB   ( 32M = 2M x 16 )    */
 #define FLASH_MXLV320T 0x00AC          /* MX  29LV320MT   ( 32M = 2M x 16 )    */
 #define FLASH_28F256L18T 0x00B0                /* Intel 28F256L18T 256M = 128K x 255 + 32k x 4 */
 #define FLASH_AMDL163T 0x00B2          /* AMD AM29DL163T (2M x 16 )                    */
 #define FLASH_AMDL163B 0x00B3
 #define FLASH_28F64K3  0x00B4          /* Intel 28F64K3   (  64M)              */
-#define FLASH_28F128K3 0x00B6          /* Intel 28F128K3  ( 128M = 8M x 16 )   */
-#define FLASH_28F256K3 0x00B8          /* Intel 28F256K3  ( 256M = 16M x 16 )  */
+#define FLASH_28F128K3 0x00B6          /* Intel 28F128K3  ( 128M = 8M x 16 )   */
+#define FLASH_28F256K3 0x00B8          /* Intel 28F256K3  ( 256M = 16M x 16 )  */
 
 #define FLASH_28F320J3A 0x00C0         /* INTEL 28F320J3A ( 32M = 128K x  32)  */
 #define FLASH_28F640J3A 0x00C2         /* INTEL 28F640J3A ( 64M = 128K x  64)  */
 #define FLASH_28F128J3A 0x00C4         /* INTEL 28F128J3A (128M = 128K x 128)  */
+#define FLASH_28F256J3A 0x00C6         /* INTEL 28F256J3A (256M = 128K x 256)  */
 
 #define FLASH_FUJLV650 0x00D0          /* Fujitsu MBM 29LV650UE/651UE          */
-#define FLASH_MT28S4M16LC 0x00E1       /* Micron MT28S4M16LC                   */
+#define FLASH_MT28S4M16LC 0x00E1       /* Micron MT28S4M16LC                   */
 #define FLASH_S29GL064M 0x00F0         /* Spansion S29GL064M-R6                */
 
 #define FLASH_UNKNOWN  0xFFFF          /* unknown flash type                   */
@@ -400,11 +419,12 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
 #define FLASH_MAN_MX   0x00030000      /* MXIC                                 */
 #define FLASH_MAN_STM  0x00040000
 #define FLASH_MAN_TOSH 0x00050000      /* Toshiba                              */
-#define FLASH_MAN_EXCEL 0x00060000      /* Excel Semiconductor                  */
+#define FLASH_MAN_EXCEL 0x00060000     /* Excel Semiconductor                  */
 #define FLASH_MAN_SST  0x00100000
 #define FLASH_MAN_INTEL 0x00300000
 #define FLASH_MAN_MT   0x00400000
 #define FLASH_MAN_SHARP 0x00500000
+#define FLASH_MAN_ATM  0x00600000
 
 
 #define FLASH_TYPEMASK 0x0000FFFF      /* extract FLASH type   information     */
index 782b58e7e6382bb271ca43b9824979e421526435..a038aa189577a749f476bed4c46c7ef52d48f8d3 100644 (file)
@@ -73,7 +73,7 @@ typedef struct {               /* typedef fpga_desc */
 /* root function definitions */
 extern void fpga_init( ulong reloc_off );
 extern int fpga_add( fpga_type devtype, void *desc );
-extern const int fpga_count( void );
+extern int fpga_count( void );
 extern int fpga_load( int devnum, void *buf, size_t bsize );
 extern int fpga_dump( int devnum, void *buf, size_t bsize );
 extern int fpga_info( int devnum );
diff --git a/include/ft_build.h b/include/ft_build.h
new file mode 100644 (file)
index 0000000..9104b1a
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * OF Flat tree builder
+ *
+ */
+
+#ifndef FT_BUILD_H
+#define FT_BUILD_H
+
+#include <linux/types.h>
+#include <asm/u-boot.h>
+
+/* Definitions used by the flattened device tree */
+#define OF_DT_HEADER           0xd00dfeed      /* marker */
+#define OF_DT_BEGIN_NODE       0x1     /* Start of node, full name */
+#define OF_DT_END_NODE         0x2     /* End node */
+#define OF_DT_PROP             0x3     /* Property: name off, size,
+                                        * content */
+#define OF_DT_NOP              0x4     /* nop */
+#define OF_DT_END              0x9
+
+#define OF_DT_VERSION          0x10
+
+struct boot_param_header {
+       u32 magic;              /* magic word OF_DT_HEADER */
+       u32 totalsize;          /* total size of DT block */
+       u32 off_dt_struct;      /* offset to structure */
+       u32 off_dt_strings;     /* offset to strings */
+       u32 off_mem_rsvmap;     /* offset to memory reserve map */
+       u32 version;            /* format version */
+       u32 last_comp_version;  /* last compatible version */
+       /* version 2 fields below */
+       u32 boot_cpuid_phys;    /* Physical CPU id we're booting on */
+       /* version 3 fields below */
+       u32 dt_strings_size;    /* size of the DT strings block */
+};
+
+struct ft_cxt {
+       struct boot_param_header *bph;
+       int max_size;           /* maximum size of tree */
+       int overflow;           /* set when this happens */
+       u8 *p, *pstr, *pres;    /* running pointers */
+       u8 *p_begin, *pstr_begin, *pres_begin;  /* starting pointers */
+       u8 *p_anchor;           /* start of constructed area */
+       int struct_size, strings_size, res_size;
+};
+
+void ft_begin_node(struct ft_cxt *cxt, const char *name);
+void ft_end_node(struct ft_cxt *cxt);
+
+void ft_begin_tree(struct ft_cxt *cxt);
+int ft_end_tree(struct ft_cxt *cxt);
+
+void ft_nop(struct ft_cxt *cxt);
+void ft_prop(struct ft_cxt *cxt, const char *name, const void *data, int sz);
+void ft_prop_str(struct ft_cxt *cxt, const char *name, const char *str);
+void ft_prop_int(struct ft_cxt *cxt, const char *name, int val);
+void ft_begin(struct ft_cxt *cxt, void *blob, int max_size);
+void ft_add_rsvmap(struct ft_cxt *cxt, u64 physaddr, u64 size);
+
+void ft_setup(void *blob, int size, bd_t * bd);
+
+void ft_dump_blob(const void *bphp);
+void ft_merge_blob(struct ft_cxt *cxt, void *blob);
+void *ft_get_prop(void *bphp, const char *propname, int *szp);
+
+#endif
index 4c23f0e5b5293652391b81c2cf364e10ba77f030..af37bcad5aae712549fc38cd764ed59f95849ca4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2000
+ * (C) Copyright 2000-2005
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
+ *
+ ********************************************************************
+ * NOTE: This header file defines an interface to U-Boot. Including
+ * this (unmodified) header file in another file is considered normal
+ * use of U-Boot, and does *not* fall under the heading of "derived
+ * work".
+ ********************************************************************
  */
 
 #ifndef __IMAGE_H__
index 03468f70864c7af36fbffe084176a9fc3d684a81..b1d570e528ef9215ce9b9d76e8cc20fbb677d380 100644 (file)
@@ -96,7 +96,7 @@
 #endif /* OPTIMIZE */
 
 
-static __inline__ __const__ __u16 __fswab16(__u16 x)
+static __inline__ __attribute__((const)) __u16 __fswab16(__u16 x)
 {
        return __arch__swab16(x);
 }
@@ -109,7 +109,7 @@ static __inline__ void __swab16s(__u16 *addr)
        __arch__swab16s(addr);
 }
 
-static __inline__ __const__ __u32 __fswab32(__u32 x)
+static __inline__ __attribute__((const)) __u32 __fswab32(__u32 x)
 {
        return __arch__swab32(x);
 }
@@ -123,7 +123,7 @@ static __inline__ void __swab32s(__u32 *addr)
 }
 
 #ifdef __BYTEORDER_HAS_U64__
-static __inline__ __const__ __u64 __fswab64(__u64 x)
+static __inline__ __attribute__((const)) __u64 __fswab64(__u64 x)
 {
 #  ifdef __SWAB_64_THRU_32__
        __u32 h = x >> 32;
index 065e1cb4e4a77161d2fca784a0d70bd7422216c8..b0894c5e83d474dc29133474dbe7c89cd5afb863 100644 (file)
@@ -2,10 +2,10 @@
  *  linux/include/linux/mtd/nand.h
  *
  *  Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
- *                     Steven J. Hill <sjhill@realitydiluted.com>
- *                    Thomas Gleixner <tglx@linutronix.de>
+ *                     Steven J. Hill <sjhill@cotw.com>
+ *                    Thomas Gleixner <gleixner@autronix.de>
  *
- * $Id: nand.h,v 1.68 2004/11/12 10:40:37 gleixner Exp $
+ * $Id: nand.h,v 1.7 2003/07/24 23:30:46 a0384864 Exp $
  *
  * 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
  *                     command delay times for different chips
  *   04-28-2002 TG     OOB config defines moved from nand.c to avoid duplicate
  *                     defines in jffs2/wbuf.c
- *   08-07-2002 TG     forced bad block location to byte 5 of OOB, even if
- *                     CONFIG_MTD_NAND_ECC_JFFS2 is not set
- *   08-10-2002 TG     extensions to nand_chip structure to support HW-ECC
- *
- *   08-29-2002 tglx   nand_chip structure: data_poi for selecting
- *                     internal / fs-driver buffer
- *                     support for 6byte/512byte hardware ECC
- *                     read_ecc, write_ecc extended for different oob-layout
- *                     oob layout selections: NAND_NONE_OOB, NAND_JFFS2_OOB,
- *                     NAND_YAFFS_OOB
- *  11-25-2002 tglx    Added Manufacturer code FUJITSU, NATIONAL
- *                     Split manufacturer and device ID structures
- *
- *  02-08-2004 tglx    added option field to nand structure for chip anomalities
- *  05-25-2004 tglx    added bad block table support, ST-MICRO manufacturer id
- *                     update of nand_chip structure description
  */
 #ifndef __LINUX_MTD_NAND_H
 #define __LINUX_MTD_NAND_H
 
-#include <linux/mtd/compat.h>
-#include <linux/mtd/mtd.h>
-
-struct mtd_info;
-/* Scan and identify a NAND device */
-extern int nand_scan (struct mtd_info *mtd, int max_chips);
-/* Free resources held by the NAND device */
-extern void nand_release (struct mtd_info *mtd);
-
-/* Read raw data from the device without ECC */
-extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_t len, size_t ooblen);
-
-
-/* The maximum number of NAND chips in an array */
-#define NAND_MAX_CHIPS         8
-
-/* This constant declares the max. oobsize / page, which
- * is supported now. If you add a chip with bigger oobsize/page
- * adjust this accordingly.
- */
-#define NAND_MAX_OOBSIZE       64
-
-/*
- * Constants for hardware specific CLE/ALE/NCE function
-*/
-/* Select the chip by setting nCE to low */
-#define NAND_CTL_SETNCE        1
-/* Deselect the chip by setting nCE to high */
-#define NAND_CTL_CLRNCE                2
-/* Select the command latch by setting CLE to high */
-#define NAND_CTL_SETCLE                3
-/* Deselect the command latch by setting CLE to low */
-#define NAND_CTL_CLRCLE                4
-/* Select the address latch by setting ALE to high */
-#define NAND_CTL_SETALE                5
-/* Deselect the address latch by setting ALE to low */
-#define NAND_CTL_CLRALE                6
-/* Set write protection by setting WP to high. Not used! */
-#define NAND_CTL_SETWP         7
-/* Clear write protection by setting WP to low. Not used! */
-#define NAND_CTL_CLRWP         8
-
+#ifdef CONFIG_NEW_NAND_CODE
+#include "nand_new.h"
+#else
 /*
  * Standard NAND flash commands
  */
@@ -103,104 +48,12 @@ extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_
 #define NAND_CMD_READOOB       0x50
 #define NAND_CMD_ERASE1                0x60
 #define NAND_CMD_STATUS                0x70
-#define NAND_CMD_STATUS_MULTI  0x71
 #define NAND_CMD_SEQIN         0x80
 #define NAND_CMD_READID                0x90
 #define NAND_CMD_ERASE2                0xd0
 #define NAND_CMD_RESET         0xff
 
-/* Extended commands for large page devices */
-#define NAND_CMD_READSTART     0x30
-#define NAND_CMD_CACHEDPROG    0x15
-
-/* Status bits */
-#define NAND_STATUS_FAIL       0x01
-#define NAND_STATUS_FAIL_N1    0x02
-#define NAND_STATUS_TRUE_READY 0x20
-#define NAND_STATUS_READY      0x40
-#define NAND_STATUS_WP         0x80
-
-/*
- * Constants for ECC_MODES
- */
-
-/* No ECC. Usage is not recommended ! */
-#define NAND_ECC_NONE          0
-/* Software ECC 3 byte ECC per 256 Byte data */
-#define NAND_ECC_SOFT          1
-/* Hardware ECC 3 byte ECC per 256 Byte data */
-#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 */
-#define NAND_ECC_HW6_512       4
-/* Hardware ECC 8 byte ECC per 512 Byte data */
-#define NAND_ECC_HW8_512       6
-/* Hardware ECC 12 byte ECC per 2048 Byte data */
-#define NAND_ECC_HW12_2048     7
-
 /*
- * Constants for Hardware ECC
-*/
-/* Reset Hardware ECC for read */
-#define NAND_ECC_READ          0
-/* Reset Hardware ECC for write */
-#define NAND_ECC_WRITE         1
-/* Enable Hardware ECC before syndrom is read back from flash */
-#define NAND_ECC_READSYN       2
-
-/* Option constants for bizarre disfunctionality and real
-*  features
-*/
-/* Chip can not auto increment pages */
-#define NAND_NO_AUTOINCR       0x00000001
-/* Buswitdh is 16 bit */
-#define NAND_BUSWIDTH_16       0x00000002
-/* Device supports partial programming without padding */
-#define NAND_NO_PADDING                0x00000004
-/* Chip has cache program function */
-#define NAND_CACHEPRG          0x00000008
-/* Chip has copy back function */
-#define NAND_COPYBACK          0x00000010
-/* AND Chip which has 4 banks and a confusing page / block
- * assignment. See Renesas datasheet for further information */
-#define NAND_IS_AND            0x00000020
-/* Chip has a array of 4 pages which can be read without
- * additional ready /busy waits */
-#define NAND_4PAGE_ARRAY       0x00000040
-
-/* Options valid for Samsung large page devices */
-#define NAND_SAMSUNG_LP_OPTIONS \
-       (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
-
-/* Macros to identify the above */
-#define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR))
-#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
-#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
-#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
-
-/* Mask to zero out the chip options, which come from the id table */
-#define NAND_CHIPOPTIONS_MSK   (0x0000ffff & ~NAND_NO_AUTOINCR)
-
-/* Non chip related options */
-/* Use a flash based bad block table. This option is passed to the
- * default bad block table function. */
-#define NAND_USE_FLASH_BBT     0x00010000
-/* The hw ecc generator provides a syndrome instead a ecc value on read
- * This can only work if we have the ecc bytes directly behind the
- * data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
-#define NAND_HWECC_SYNDROME    0x00020000
-
-
-/* Options set by nand scan */
-/* Nand scan has allocated oob_buf */
-#define NAND_OOBBUF_ALLOC      0x40000000
-/* Nand scan has allocated data_buf */
-#define NAND_DATABUF_ALLOC     0x80000000
-
-
-/*
- * nand_state_t - chip states
  * Enumeration for NAND flash chip state
  */
 typedef enum {
@@ -208,138 +61,71 @@ typedef enum {
        FL_READING,
        FL_WRITING,
        FL_ERASING,
-       FL_SYNCING,
-       FL_CACHEDPRG,
+       FL_SYNCING
 } nand_state_t;
 
-/* Keep gcc happy */
-struct nand_chip;
 
-#if 0
-/**
- * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independend devices
- * @lock:               protection lock
- * @active:            the mtd device which holds the controller currently
+/*
+ * NAND Private Flash Chip Data
+ *
+ * Structure overview:
+ *
+ *  IO_ADDR - address to access the 8 I/O lines of the flash device
+ *
+ *  hwcontrol - hardwarespecific function for accesing control-lines
+ *
+ *  dev_ready - hardwarespecific function for accesing device ready/busy line
+ *
+ *  chip_lock - spinlock used to protect access to this structure
+ *
+ *  wq - wait queue to sleep on if a NAND operation is in progress
+ *
+ *  state - give the current state of the NAND device
+ *
+ *  page_shift - number of address bits in a page (column address bits)
+ *
+ *  data_buf - data buffer passed to/from MTD user modules
+ *
+ *  data_cache - data cache for redundant page access and shadow for
+ *              ECC failure
+ *
+ *  ecc_code_buf - used only for holding calculated or read ECCs for
+ *                 a page read or written when ECC is in use
+ *
+ *  reserved - padding to make structure fall on word boundary if
+ *             when ECC is in use
  */
-struct nand_hw_control {
-       spinlock_t       lock;
-       struct nand_chip *active;
+struct Nand {
+       char floor, chip;
+       unsigned long curadr;
+       unsigned char curmode;
+       /* Also some erase/write/pipeline info when we get that far */
 };
-#endif
-
-/**
- * struct nand_chip - NAND Private Flash Chip Data
- * @IO_ADDR_R:         [BOARDSPECIFIC] address to read the 8 I/O lines of the flash device
- * @IO_ADDR_W:         [BOARDSPECIFIC] address to write the 8 I/O lines of the flash device
- * @read_byte:         [REPLACEABLE] read one byte from the chip
- * @write_byte:                [REPLACEABLE] write one byte to the chip
- * @read_word:         [REPLACEABLE] read one word from the chip
- * @write_word:                [REPLACEABLE] write one word to the chip
- * @write_buf:         [REPLACEABLE] write data from the buffer to the chip
- * @read_buf:          [REPLACEABLE] read data from the chip into the buffer
- * @verify_buf:                [REPLACEABLE] verify buffer contents against the chip data
- * @select_chip:       [REPLACEABLE] select chip nr
- * @block_bad:         [REPLACEABLE] check, if the block is bad
- * @block_markbad:     [REPLACEABLE] mark the block bad
- * @hwcontrol:         [BOARDSPECIFIC] hardwarespecific function for accesing control-lines
- * @dev_ready:         [BOARDSPECIFIC] hardwarespecific function for accesing device ready/busy line
- *                     If set to NULL no access to ready/busy is available and the ready/busy information
- *                     is read from the chip status register
- * @cmdfunc:           [REPLACEABLE] hardwarespecific function for writing commands to the chip
- * @waitfunc:          [REPLACEABLE] hardwarespecific function for wait on ready
- * @calculate_ecc:     [REPLACEABLE] function for ecc calculation or readback from ecc hardware
- * @correct_data:      [REPLACEABLE] function for ecc correction, matching to ecc generator (sw/hw)
- * @enable_hwecc:      [BOARDSPECIFIC] function to enable (reset) hardware ecc generator. Must only
- *                     be provided if a hardware ECC is available
- * @erase_cmd:         [INTERN] erase command write function, selectable due to AND support
- * @scan_bbt:          [REPLACEABLE] function to scan bad block table
- * @eccmode:           [BOARDSPECIFIC] mode of ecc, see defines
- * @eccsize:           [INTERN] databytes used per ecc-calculation
- * @eccbytes:          [INTERN] number of ecc bytes per ecc-calculation step
- * @eccsteps:          [INTERN] number of ecc calculation steps per page
- * @chip_delay:                [BOARDSPECIFIC] chip dependent delay for transfering data from array to read regs (tR)
- * @chip_lock:         [INTERN] spinlock used to protect access to this structure and the chip
- * @wq:                        [INTERN] wait queue to sleep on if a NAND operation is in progress
- * @state:             [INTERN] the current state of the NAND device
- * @page_shift:                [INTERN] number of address bits in a page (column address bits)
- * @phys_erase_shift:  [INTERN] number of address bits in a physical eraseblock
- * @bbt_erase_shift:   [INTERN] number of address bits in a bbt entry
- * @chip_shift:                [INTERN] number of address bits in one chip
- * @data_buf:          [INTERN] internal buffer for one page + oob
- * @oob_buf:           [INTERN] oob buffer for one eraseblock
- * @oobdirty:          [INTERN] indicates that oob_buf must be reinitialized
- * @data_poi:          [INTERN] pointer to a data buffer
- * @options:           [BOARDSPECIFIC] various chip options. They can partly be set to inform nand_scan about
- *                     special functionality. See the defines for further explanation
- * @badblockpos:       [INTERN] position of the bad block marker in the oob area
- * @numchips:          [INTERN] number of physical chips
- * @chipsize:          [INTERN] the size of one chip for multichip arrays
- * @pagemask:          [INTERN] page number mask = number of (pages / chip) - 1
- * @pagebuf:           [INTERN] holds the pagenumber which is currently in data_buf
- * @autooob:           [REPLACEABLE] the default (auto)placement scheme
- * @bbt:               [INTERN] bad block table pointer
- * @bbt_td:            [REPLACEABLE] bad block table descriptor for flash lookup
- * @bbt_md:            [REPLACEABLE] bad block table mirror descriptor
- * @badblock_pattern:  [REPLACEABLE] bad block scan pattern used for initial bad block scan
- * @controller:                [OPTIONAL] a pointer to a hardware controller structure which is shared among multiple independend devices
- * @priv:              [OPTIONAL] pointer to private chip date
- */
 
 struct nand_chip {
-       void  __iomem   *IO_ADDR_R;
-       void  __iomem   *IO_ADDR_W;
-
-       u_char          (*read_byte)(struct mtd_info *mtd);
-       void            (*write_byte)(struct mtd_info *mtd, u_char byte);
-       u16             (*read_word)(struct mtd_info *mtd);
-       void            (*write_word)(struct mtd_info *mtd, u16 word);
-
-       void            (*write_buf)(struct mtd_info *mtd, const u_char *buf, int len);
-       void            (*read_buf)(struct mtd_info *mtd, u_char *buf, int len);
-       int             (*verify_buf)(struct mtd_info *mtd, const u_char *buf, int len);
-       void            (*select_chip)(struct mtd_info *mtd, int chip);
-       int             (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
-       int             (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
-       void            (*hwcontrol)(struct mtd_info *mtd, int cmd);
-       int             (*dev_ready)(struct mtd_info *mtd);
-       void            (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column, int page_addr);
-       int             (*waitfunc)(struct mtd_info *mtd, struct nand_chip *this, int state);
-       int             (*calculate_ecc)(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code);
-       int             (*correct_data)(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc);
-       void            (*enable_hwecc)(struct mtd_info *mtd, int mode);
-       void            (*erase_cmd)(struct mtd_info *mtd, int page);
-       int             (*scan_bbt)(struct mtd_info *mtd);
-       int             eccmode;
-       int             eccsize;
-       int             eccbytes;
-       int             eccsteps;
-       int             chip_delay;
-#if 0
-       spinlock_t      chip_lock;
-       wait_queue_head_t wq;
-       nand_state_t    state;
-#endif
        int             page_shift;
-       int             phys_erase_shift;
-       int             bbt_erase_shift;
-       int             chip_shift;
        u_char          *data_buf;
-       u_char          *oob_buf;
-       int             oobdirty;
-       u_char          *data_poi;
-       unsigned int    options;
-       int             badblockpos;
-       int             numchips;
-       unsigned long   chipsize;
-       int             pagemask;
-       int             pagebuf;
-       struct nand_oobinfo     *autooob;
-       uint8_t         *bbt;
-       struct nand_bbt_descr   *bbt_td;
-       struct nand_bbt_descr   *bbt_md;
-       struct nand_bbt_descr   *badblock_pattern;
-       struct nand_hw_control  *controller;
-       void            *priv;
+       u_char          *data_cache;
+       int             cache_page;
+       u_char          ecc_code_buf[6];
+       u_char          reserved[2];
+       char ChipID; /* Type of DiskOnChip */
+       struct Nand *chips;
+       int chipshift;
+       char* chips_name;
+       unsigned long erasesize;
+       unsigned long mfr; /* Flash IDs - only one type of flash per device */
+       unsigned long id;
+       char* name;
+       int numchips;
+       char page256;
+       char pageadrlen;
+       unsigned long IO_ADDR;  /* address to access the 8 I/O lines to the flash device */
+       unsigned long totlen;
+       uint oobblock;  /* Size of OOB blocks (e.g. 512) */
+       uint oobsize;   /* Amount of OOB data per block (e.g. 16) */
+       uint eccsize;
+       int bus16;
 };
 
 /*
@@ -347,125 +133,71 @@ struct nand_chip {
  */
 #define NAND_MFR_TOSHIBA       0x98
 #define NAND_MFR_SAMSUNG       0xec
-#define NAND_MFR_FUJITSU       0x04
-#define NAND_MFR_NATIONAL      0x8f
-#define NAND_MFR_RENESAS       0x07
-#define NAND_MFR_STMICRO       0x20
 
-/**
- * struct nand_flash_dev - NAND Flash Device ID Structure
+/*
+ * NAND Flash Device ID Structure
+ *
+ * Structure overview:
+ *
+ *  name - Complete name of device
+ *
+ *  manufacture_id - manufacturer ID code of device.
+ *
+ *  model_id - model ID code of device.
+ *
+ *  chipshift - total number of address bits for the device which
+ *              is used to calculate address offsets and the total
+ *              number of bytes the device is capable of.
  *
- * @name:      Identify the device type
- * @id:        device ID code
- * @pagesize:          Pagesize in bytes. Either 256 or 512 or 0
- *             If the pagesize is 0, then the real pagesize
- *             and the eraseize are determined from the
- *             extended id bytes in the chip
- * @erasesize:         Size of an erase block in the flash device.
- * @chipsize:          Total chipsize in Mega Bytes
- * @options:   Bitfield to store chip relevant options
+ *  page256 - denotes if flash device has 256 byte pages or not.
+ *
+ *  pageadrlen - number of bytes minus one needed to hold the
+ *               complete address into the flash array. Keep in
+ *               mind that when a read or write is done to a
+ *               specific address, the address is input serially
+ *               8 bits at a time. This structure member is used
+ *               by the read/write routines as a loop index for
+ *               shifting the address out 8 bits at a time.
+ *
+ *  erasesize - size of an erase block in the flash device.
  */
 struct nand_flash_dev {
-       char *name;
-       int id;
-       unsigned long pagesize;
-       unsigned long chipsize;
-       unsigned long erasesize;
-       unsigned long options;
-};
-
-/**
- * struct nand_manufacturers - NAND Flash Manufacturer ID Structure
- * @name:      Manufacturer name
- * @id:        manufacturer ID code of device.
-*/
-struct nand_manufacturers {
-       int id;
        char * name;
+       int manufacture_id;
+       int model_id;
+       int chipshift;
+       char page256;
+       char pageadrlen;
+       unsigned long erasesize;
+       int bus16;
 };
 
-extern struct nand_flash_dev nand_flash_ids[];
-extern struct nand_manufacturers nand_manuf_ids[];
-
-/**
- * struct nand_bbt_descr - bad block table descriptor
- * @options:   options for this descriptor
- * @pages:     the page(s) where we find the bbt, used with option BBT_ABSPAGE
- *             when bbt is searched, then we store the found bbts pages here.
- *             Its an array and supports up to 8 chips now
- * @offs:      offset of the pattern in the oob area of the page
- * @veroffs:   offset of the bbt version counter in the oob are of the page
- * @version:   version read from the bbt page during scan
- * @len:       length of the pattern, if 0 no pattern check is performed
- * @maxblocks: maximum number of blocks to search for a bbt. This number of
- *             blocks is reserved at the end of the device where the tables are
- *             written.
- * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than
- *              bad) block in the stored bbt
- * @pattern:   pattern to identify bad block table or factory marked good /
- *             bad blocks, can be NULL, if len = 0
- *
- * Descriptor for the bad block table marker and the descriptor for the
- * pattern which identifies good and bad blocks. The assumption is made
- * that the pattern and the version count are always located in the oob area
- * of the first block.
- */
-struct nand_bbt_descr {
-       int     options;
-       int     pages[NAND_MAX_CHIPS];
-       int     offs;
-       int     veroffs;
-       uint8_t version[NAND_MAX_CHIPS];
-       int     len;
-       int     maxblocks;
-       int     reserved_block_code;
-       uint8_t *pattern;
-};
-
-/* Options for the bad block table descriptors */
-
-/* The number of bits used per block in the bbt on the device */
-#define NAND_BBT_NRBITS_MSK    0x0000000F
-#define NAND_BBT_1BIT          0x00000001
-#define NAND_BBT_2BIT          0x00000002
-#define NAND_BBT_4BIT          0x00000004
-#define NAND_BBT_8BIT          0x00000008
-/* The bad block table is in the last good block of the device */
-#define        NAND_BBT_LASTBLOCK      0x00000010
-/* The bbt is at the given page, else we must scan for the bbt */
-#define NAND_BBT_ABSPAGE       0x00000020
-/* The bbt is at the given page, else we must scan for the bbt */
-#define NAND_BBT_SEARCH                0x00000040
-/* bbt is stored per chip on multichip devices */
-#define NAND_BBT_PERCHIP       0x00000080
-/* bbt has a version counter at offset veroffs */
-#define NAND_BBT_VERSION       0x00000100
-/* Create a bbt if none axists */
-#define NAND_BBT_CREATE                0x00000200
-/* Search good / bad pattern through all pages of a block */
-#define NAND_BBT_SCANALLPAGES  0x00000400
-/* Scan block empty during good / bad block scan */
-#define NAND_BBT_SCANEMPTY     0x00000800
-/* Write bbt if neccecary */
-#define NAND_BBT_WRITE         0x00001000
-/* Read and write back block contents when writing bbt */
-#define NAND_BBT_SAVECONTENT   0x00002000
-/* Search good / bad pattern on the first and the second page */
-#define NAND_BBT_SCAN2NDPAGE   0x00004000
-
-/* The maximum number of blocks to scan for a bbt */
-#define NAND_BBT_SCAN_MAXBLOCKS        4
-
-extern int nand_scan_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd);
-extern int nand_update_bbt (struct mtd_info *mtd, loff_t offs);
-extern int nand_default_bbt (struct mtd_info *mtd);
-extern int nand_isbad_bbt (struct mtd_info *mtd, loff_t offs, int allowbbt);
-extern int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int allowbbt);
-
 /*
 * Constants for oob configuration
 */
-#define NAND_SMALL_BADBLOCK_POS                5
-#define NAND_LARGE_BADBLOCK_POS                0
-
+#define NAND_NOOB_ECCPOS0              0
+#define NAND_NOOB_ECCPOS1              1
+#define NAND_NOOB_ECCPOS2              2
+#define NAND_NOOB_ECCPOS3              3
+#define NAND_NOOB_ECCPOS4              6
+#define NAND_NOOB_ECCPOS5              7
+#define NAND_NOOB_BADBPOS              -1
+#define NAND_NOOB_ECCVPOS              -1
+
+#define NAND_JFFS2_OOB_ECCPOS0         0
+#define NAND_JFFS2_OOB_ECCPOS1         1
+#define NAND_JFFS2_OOB_ECCPOS2         2
+#define NAND_JFFS2_OOB_ECCPOS3         3
+#define NAND_JFFS2_OOB_ECCPOS4         6
+#define NAND_JFFS2_OOB_ECCPOS5         7
+#define NAND_JFFS2_OOB_BADBPOS         5
+#define NAND_JFFS2_OOB_ECCVPOS         4
+
+#define NAND_JFFS2_OOB8_FSDAPOS                6
+#define NAND_JFFS2_OOB16_FSDAPOS       8
+#define NAND_JFFS2_OOB8_FSDALEN                2
+#define NAND_JFFS2_OOB16_FSDALEN       8
+
+unsigned long nand_probe(unsigned long physadr);
+#endif /* !CONFIG_NEW_NAND_CODE */
 #endif /* __LINUX_MTD_NAND_H */
diff --git a/include/linux/mtd/nand_new.h b/include/linux/mtd/nand_new.h
new file mode 100644 (file)
index 0000000..7d4b805
--- /dev/null
@@ -0,0 +1,469 @@
+/*
+ *  linux/include/linux/mtd/nand.h
+ *
+ *  Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com>
+ *                     Steven J. Hill <sjhill@realitydiluted.com>
+ *                    Thomas Gleixner <tglx@linutronix.de>
+ *
+ * $Id: nand.h,v 1.68 2004/11/12 10:40:37 gleixner Exp $
+ *
+ * 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.
+ *
+ *  Info:
+ *   Contains standard defines and IDs for NAND flash devices
+ *
+ *  Changelog:
+ *   01-31-2000 DMW     Created
+ *   09-18-2000 SJH     Moved structure out of the Disk-On-Chip drivers
+ *                     so it can be used by other NAND flash device
+ *                     drivers. I also changed the copyright since none
+ *                     of the original contents of this file are specific
+ *                     to DoC devices. David can whack me with a baseball
+ *                     bat later if I did something naughty.
+ *   10-11-2000 SJH     Added private NAND flash structure for driver
+ *   10-24-2000 SJH     Added prototype for 'nand_scan' function
+ *   10-29-2001 TG     changed nand_chip structure to support
+ *                     hardwarespecific function for accessing control lines
+ *   02-21-2002 TG     added support for different read/write adress and
+ *                     ready/busy line access function
+ *   02-26-2002 TG     added chip_delay to nand_chip structure to optimize
+ *                     command delay times for different chips
+ *   04-28-2002 TG     OOB config defines moved from nand.c to avoid duplicate
+ *                     defines in jffs2/wbuf.c
+ *   08-07-2002 TG     forced bad block location to byte 5 of OOB, even if
+ *                     CONFIG_MTD_NAND_ECC_JFFS2 is not set
+ *   08-10-2002 TG     extensions to nand_chip structure to support HW-ECC
+ *
+ *   08-29-2002 tglx   nand_chip structure: data_poi for selecting
+ *                     internal / fs-driver buffer
+ *                     support for 6byte/512byte hardware ECC
+ *                     read_ecc, write_ecc extended for different oob-layout
+ *                     oob layout selections: NAND_NONE_OOB, NAND_JFFS2_OOB,
+ *                     NAND_YAFFS_OOB
+ *  11-25-2002 tglx    Added Manufacturer code FUJITSU, NATIONAL
+ *                     Split manufacturer and device ID structures
+ *
+ *  02-08-2004 tglx    added option field to nand structure for chip anomalities
+ *  05-25-2004 tglx    added bad block table support, ST-MICRO manufacturer id
+ *                     update of nand_chip structure description
+ */
+#ifndef __LINUX_MTD_NAND_NEW_H
+#define __LINUX_MTD_NAND_NEW_H
+
+#include <linux/mtd/compat.h>
+#include <linux/mtd/mtd.h>
+
+struct mtd_info;
+/* Scan and identify a NAND device */
+extern int nand_scan (struct mtd_info *mtd, int max_chips);
+/* Free resources held by the NAND device */
+extern void nand_release (struct mtd_info *mtd);
+
+/* Read raw data from the device without ECC */
+extern int nand_read_raw (struct mtd_info *mtd, uint8_t *buf, loff_t from, size_t len, size_t ooblen);
+
+
+
+/* This constant declares the max. oobsize / page, which
+ * is supported now. If you add a chip with bigger oobsize/page
+ * adjust this accordingly.
+ */
+#define NAND_MAX_OOBSIZE       64
+
+/*
+ * Constants for hardware specific CLE/ALE/NCE function
+*/
+/* Select the chip by setting nCE to low */
+#define NAND_CTL_SETNCE        1
+/* Deselect the chip by setting nCE to high */
+#define NAND_CTL_CLRNCE                2
+/* Select the command latch by setting CLE to high */
+#define NAND_CTL_SETCLE                3
+/* Deselect the command latch by setting CLE to low */
+#define NAND_CTL_CLRCLE                4
+/* Select the address latch by setting ALE to high */
+#define NAND_CTL_SETALE                5
+/* Deselect the address latch by setting ALE to low */
+#define NAND_CTL_CLRALE                6
+/* Set write protection by setting WP to high. Not used! */
+#define NAND_CTL_SETWP         7
+/* Clear write protection by setting WP to low. Not used! */
+#define NAND_CTL_CLRWP         8
+
+/*
+ * Standard NAND flash commands
+ */
+#define NAND_CMD_READ0         0
+#define NAND_CMD_READ1         1
+#define NAND_CMD_PAGEPROG      0x10
+#define NAND_CMD_READOOB       0x50
+#define NAND_CMD_ERASE1                0x60
+#define NAND_CMD_STATUS                0x70
+#define NAND_CMD_STATUS_MULTI  0x71
+#define NAND_CMD_SEQIN         0x80
+#define NAND_CMD_READID                0x90
+#define NAND_CMD_ERASE2                0xd0
+#define NAND_CMD_RESET         0xff
+
+/* Extended commands for large page devices */
+#define NAND_CMD_READSTART     0x30
+#define NAND_CMD_CACHEDPROG    0x15
+
+/* Status bits */
+#define NAND_STATUS_FAIL       0x01
+#define NAND_STATUS_FAIL_N1    0x02
+#define NAND_STATUS_TRUE_READY 0x20
+#define NAND_STATUS_READY      0x40
+#define NAND_STATUS_WP         0x80
+
+/*
+ * Constants for ECC_MODES
+ */
+
+/* No ECC. Usage is not recommended ! */
+#define NAND_ECC_NONE          0
+/* Software ECC 3 byte ECC per 256 Byte data */
+#define NAND_ECC_SOFT          1
+/* Hardware ECC 3 byte ECC per 256 Byte data */
+#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 */
+#define NAND_ECC_HW6_512       4
+/* Hardware ECC 8 byte ECC per 512 Byte data */
+#define NAND_ECC_HW8_512       6
+/* Hardware ECC 12 byte ECC per 2048 Byte data */
+#define NAND_ECC_HW12_2048     7
+
+/*
+ * Constants for Hardware ECC
+*/
+/* Reset Hardware ECC for read */
+#define NAND_ECC_READ          0
+/* Reset Hardware ECC for write */
+#define NAND_ECC_WRITE         1
+/* Enable Hardware ECC before syndrom is read back from flash */
+#define NAND_ECC_READSYN       2
+
+/* Option constants for bizarre disfunctionality and real
+*  features
+*/
+/* Chip can not auto increment pages */
+#define NAND_NO_AUTOINCR       0x00000001
+/* Buswitdh is 16 bit */
+#define NAND_BUSWIDTH_16       0x00000002
+/* Device supports partial programming without padding */
+#define NAND_NO_PADDING                0x00000004
+/* Chip has cache program function */
+#define NAND_CACHEPRG          0x00000008
+/* Chip has copy back function */
+#define NAND_COPYBACK          0x00000010
+/* AND Chip which has 4 banks and a confusing page / block
+ * assignment. See Renesas datasheet for further information */
+#define NAND_IS_AND            0x00000020
+/* Chip has a array of 4 pages which can be read without
+ * additional ready /busy waits */
+#define NAND_4PAGE_ARRAY       0x00000040
+
+/* Options valid for Samsung large page devices */
+#define NAND_SAMSUNG_LP_OPTIONS \
+       (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)
+
+/* Macros to identify the above */
+#define NAND_CANAUTOINCR(chip) (!(chip->options & NAND_NO_AUTOINCR))
+#define NAND_MUST_PAD(chip) (!(chip->options & NAND_NO_PADDING))
+#define NAND_HAS_CACHEPROG(chip) ((chip->options & NAND_CACHEPRG))
+#define NAND_HAS_COPYBACK(chip) ((chip->options & NAND_COPYBACK))
+
+/* Mask to zero out the chip options, which come from the id table */
+#define NAND_CHIPOPTIONS_MSK   (0x0000ffff & ~NAND_NO_AUTOINCR)
+
+/* Non chip related options */
+/* Use a flash based bad block table. This option is passed to the
+ * default bad block table function. */
+#define NAND_USE_FLASH_BBT     0x00010000
+/* The hw ecc generator provides a syndrome instead a ecc value on read
+ * This can only work if we have the ecc bytes directly behind the
+ * data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
+#define NAND_HWECC_SYNDROME    0x00020000
+
+
+/* Options set by nand scan */
+/* Nand scan has allocated oob_buf */
+#define NAND_OOBBUF_ALLOC      0x40000000
+/* Nand scan has allocated data_buf */
+#define NAND_DATABUF_ALLOC     0x80000000
+
+
+/*
+ * nand_state_t - chip states
+ * Enumeration for NAND flash chip state
+ */
+typedef enum {
+       FL_READY,
+       FL_READING,
+       FL_WRITING,
+       FL_ERASING,
+       FL_SYNCING,
+       FL_CACHEDPRG,
+} nand_state_t;
+
+/* Keep gcc happy */
+struct nand_chip;
+
+#if 0
+/**
+ * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independend devices
+ * @lock:               protection lock
+ * @active:            the mtd device which holds the controller currently
+ */
+struct nand_hw_control {
+       spinlock_t       lock;
+       struct nand_chip *active;
+};
+#endif
+
+/**
+ * struct nand_chip - NAND Private Flash Chip Data
+ * @IO_ADDR_R:         [BOARDSPECIFIC] address to read the 8 I/O lines of the flash device
+ * @IO_ADDR_W:         [BOARDSPECIFIC] address to write the 8 I/O lines of the flash device
+ * @read_byte:         [REPLACEABLE] read one byte from the chip
+ * @write_byte:                [REPLACEABLE] write one byte to the chip
+ * @read_word:         [REPLACEABLE] read one word from the chip
+ * @write_word:                [REPLACEABLE] write one word to the chip
+ * @write_buf:         [REPLACEABLE] write data from the buffer to the chip
+ * @read_buf:          [REPLACEABLE] read data from the chip into the buffer
+ * @verify_buf:                [REPLACEABLE] verify buffer contents against the chip data
+ * @select_chip:       [REPLACEABLE] select chip nr
+ * @block_bad:         [REPLACEABLE] check, if the block is bad
+ * @block_markbad:     [REPLACEABLE] mark the block bad
+ * @hwcontrol:         [BOARDSPECIFIC] hardwarespecific function for accesing control-lines
+ * @dev_ready:         [BOARDSPECIFIC] hardwarespecific function for accesing device ready/busy line
+ *                     If set to NULL no access to ready/busy is available and the ready/busy information
+ *                     is read from the chip status register
+ * @cmdfunc:           [REPLACEABLE] hardwarespecific function for writing commands to the chip
+ * @waitfunc:          [REPLACEABLE] hardwarespecific function for wait on ready
+ * @calculate_ecc:     [REPLACEABLE] function for ecc calculation or readback from ecc hardware
+ * @correct_data:      [REPLACEABLE] function for ecc correction, matching to ecc generator (sw/hw)
+ * @enable_hwecc:      [BOARDSPECIFIC] function to enable (reset) hardware ecc generator. Must only
+ *                     be provided if a hardware ECC is available
+ * @erase_cmd:         [INTERN] erase command write function, selectable due to AND support
+ * @scan_bbt:          [REPLACEABLE] function to scan bad block table
+ * @eccmode:           [BOARDSPECIFIC] mode of ecc, see defines
+ * @eccsize:           [INTERN] databytes used per ecc-calculation
+ * @eccbytes:          [INTERN] number of ecc bytes per ecc-calculation step
+ * @eccsteps:          [INTERN] number of ecc calculation steps per page
+ * @chip_delay:                [BOARDSPECIFIC] chip dependent delay for transfering data from array to read regs (tR)
+ * @chip_lock:         [INTERN] spinlock used to protect access to this structure and the chip
+ * @wq:                        [INTERN] wait queue to sleep on if a NAND operation is in progress
+ * @state:             [INTERN] the current state of the NAND device
+ * @page_shift:                [INTERN] number of address bits in a page (column address bits)
+ * @phys_erase_shift:  [INTERN] number of address bits in a physical eraseblock
+ * @bbt_erase_shift:   [INTERN] number of address bits in a bbt entry
+ * @chip_shift:                [INTERN] number of address bits in one chip
+ * @data_buf:          [INTERN] internal buffer for one page + oob
+ * @oob_buf:           [INTERN] oob buffer for one eraseblock
+ * @oobdirty:          [INTERN] indicates that oob_buf must be reinitialized
+ * @data_poi:          [INTERN] pointer to a data buffer
+ * @options:           [BOARDSPECIFIC] various chip options. They can partly be set to inform nand_scan about
+ *                     special functionality. See the defines for further explanation
+ * @badblockpos:       [INTERN] position of the bad block marker in the oob area
+ * @numchips:          [INTERN] number of physical chips
+ * @chipsize:          [INTERN] the size of one chip for multichip arrays
+ * @pagemask:          [INTERN] page number mask = number of (pages / chip) - 1
+ * @pagebuf:           [INTERN] holds the pagenumber which is currently in data_buf
+ * @autooob:           [REPLACEABLE] the default (auto)placement scheme
+ * @bbt:               [INTERN] bad block table pointer
+ * @bbt_td:            [REPLACEABLE] bad block table descriptor for flash lookup
+ * @bbt_md:            [REPLACEABLE] bad block table mirror descriptor
+ * @badblock_pattern:  [REPLACEABLE] bad block scan pattern used for initial bad block scan
+ * @controller:                [OPTIONAL] a pointer to a hardware controller structure which is shared among multiple independend devices
+ * @priv:              [OPTIONAL] pointer to private chip date
+ */
+
+struct nand_chip {
+       void  __iomem   *IO_ADDR_R;
+       void  __iomem   *IO_ADDR_W;
+
+       u_char          (*read_byte)(struct mtd_info *mtd);
+       void            (*write_byte)(struct mtd_info *mtd, u_char byte);
+       u16             (*read_word)(struct mtd_info *mtd);
+       void            (*write_word)(struct mtd_info *mtd, u16 word);
+
+       void            (*write_buf)(struct mtd_info *mtd, const u_char *buf, int len);
+       void            (*read_buf)(struct mtd_info *mtd, u_char *buf, int len);
+       int             (*verify_buf)(struct mtd_info *mtd, const u_char *buf, int len);
+       void            (*select_chip)(struct mtd_info *mtd, int chip);
+       int             (*block_bad)(struct mtd_info *mtd, loff_t ofs, int getchip);
+       int             (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
+       void            (*hwcontrol)(struct mtd_info *mtd, int cmd);
+       int             (*dev_ready)(struct mtd_info *mtd);
+       void            (*cmdfunc)(struct mtd_info *mtd, unsigned command, int column, int page_addr);
+       int             (*waitfunc)(struct mtd_info *mtd, struct nand_chip *this, int state);
+       int             (*calculate_ecc)(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code);
+       int             (*correct_data)(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc);
+       void            (*enable_hwecc)(struct mtd_info *mtd, int mode);
+       void            (*erase_cmd)(struct mtd_info *mtd, int page);
+       int             (*scan_bbt)(struct mtd_info *mtd);
+       int             eccmode;
+       int             eccsize;
+       int             eccbytes;
+       int             eccsteps;
+       int             chip_delay;
+#if 0
+       spinlock_t      chip_lock;
+       wait_queue_head_t wq;
+       nand_state_t    state;
+#endif
+       int             page_shift;
+       int             phys_erase_shift;
+       int             bbt_erase_shift;
+       int             chip_shift;
+       u_char          *data_buf;
+       u_char          *oob_buf;
+       int             oobdirty;
+       u_char          *data_poi;
+       unsigned int    options;
+       int             badblockpos;
+       int             numchips;
+       unsigned long   chipsize;
+       int             pagemask;
+       int             pagebuf;
+       struct nand_oobinfo     *autooob;
+       uint8_t         *bbt;
+       struct nand_bbt_descr   *bbt_td;
+       struct nand_bbt_descr   *bbt_md;
+       struct nand_bbt_descr   *badblock_pattern;
+       struct nand_hw_control  *controller;
+       void            *priv;
+};
+
+/*
+ * NAND Flash Manufacturer ID Codes
+ */
+#define NAND_MFR_TOSHIBA       0x98
+#define NAND_MFR_SAMSUNG       0xec
+#define NAND_MFR_FUJITSU       0x04
+#define NAND_MFR_NATIONAL      0x8f
+#define NAND_MFR_RENESAS       0x07
+#define NAND_MFR_STMICRO       0x20
+
+/**
+ * struct nand_flash_dev - NAND Flash Device ID Structure
+ *
+ * @name:      Identify the device type
+ * @id:        device ID code
+ * @pagesize:          Pagesize in bytes. Either 256 or 512 or 0
+ *             If the pagesize is 0, then the real pagesize
+ *             and the eraseize are determined from the
+ *             extended id bytes in the chip
+ * @erasesize:         Size of an erase block in the flash device.
+ * @chipsize:          Total chipsize in Mega Bytes
+ * @options:   Bitfield to store chip relevant options
+ */
+struct nand_flash_dev {
+       char *name;
+       int id;
+       unsigned long pagesize;
+       unsigned long chipsize;
+       unsigned long erasesize;
+       unsigned long options;
+};
+
+/**
+ * struct nand_manufacturers - NAND Flash Manufacturer ID Structure
+ * @name:      Manufacturer name
+ * @id:        manufacturer ID code of device.
+*/
+struct nand_manufacturers {
+       int id;
+       char * name;
+};
+
+extern struct nand_flash_dev nand_flash_ids[];
+extern struct nand_manufacturers nand_manuf_ids[];
+
+/**
+ * struct nand_bbt_descr - bad block table descriptor
+ * @options:   options for this descriptor
+ * @pages:     the page(s) where we find the bbt, used with option BBT_ABSPAGE
+ *             when bbt is searched, then we store the found bbts pages here.
+ *             Its an array and supports up to 8 chips now
+ * @offs:      offset of the pattern in the oob area of the page
+ * @veroffs:   offset of the bbt version counter in the oob are of the page
+ * @version:   version read from the bbt page during scan
+ * @len:       length of the pattern, if 0 no pattern check is performed
+ * @maxblocks: maximum number of blocks to search for a bbt. This number of
+ *             blocks is reserved at the end of the device where the tables are
+ *             written.
+ * @reserved_block_code: if non-0, this pattern denotes a reserved (rather than
+ *              bad) block in the stored bbt
+ * @pattern:   pattern to identify bad block table or factory marked good /
+ *             bad blocks, can be NULL, if len = 0
+ *
+ * Descriptor for the bad block table marker and the descriptor for the
+ * pattern which identifies good and bad blocks. The assumption is made
+ * that the pattern and the version count are always located in the oob area
+ * of the first block.
+ */
+struct nand_bbt_descr {
+       int     options;
+       int     pages[NAND_MAX_CHIPS];
+       int     offs;
+       int     veroffs;
+       uint8_t version[NAND_MAX_CHIPS];
+       int     len;
+       int     maxblocks;
+       int     reserved_block_code;
+       uint8_t *pattern;
+};
+
+/* Options for the bad block table descriptors */
+
+/* The number of bits used per block in the bbt on the device */
+#define NAND_BBT_NRBITS_MSK    0x0000000F
+#define NAND_BBT_1BIT          0x00000001
+#define NAND_BBT_2BIT          0x00000002
+#define NAND_BBT_4BIT          0x00000004
+#define NAND_BBT_8BIT          0x00000008
+/* The bad block table is in the last good block of the device */
+#define        NAND_BBT_LASTBLOCK      0x00000010
+/* The bbt is at the given page, else we must scan for the bbt */
+#define NAND_BBT_ABSPAGE       0x00000020
+/* The bbt is at the given page, else we must scan for the bbt */
+#define NAND_BBT_SEARCH                0x00000040
+/* bbt is stored per chip on multichip devices */
+#define NAND_BBT_PERCHIP       0x00000080
+/* bbt has a version counter at offset veroffs */
+#define NAND_BBT_VERSION       0x00000100
+/* Create a bbt if none axists */
+#define NAND_BBT_CREATE                0x00000200
+/* Search good / bad pattern through all pages of a block */
+#define NAND_BBT_SCANALLPAGES  0x00000400
+/* Scan block empty during good / bad block scan */
+#define NAND_BBT_SCANEMPTY     0x00000800
+/* Write bbt if neccecary */
+#define NAND_BBT_WRITE         0x00001000
+/* Read and write back block contents when writing bbt */
+#define NAND_BBT_SAVECONTENT   0x00002000
+/* Search good / bad pattern on the first and the second page */
+#define NAND_BBT_SCAN2NDPAGE   0x00004000
+
+/* The maximum number of blocks to scan for a bbt */
+#define NAND_BBT_SCAN_MAXBLOCKS        4
+
+extern int nand_scan_bbt (struct mtd_info *mtd, struct nand_bbt_descr *bd);
+extern int nand_update_bbt (struct mtd_info *mtd, loff_t offs);
+extern int nand_default_bbt (struct mtd_info *mtd);
+extern int nand_isbad_bbt (struct mtd_info *mtd, loff_t offs, int allowbbt);
+extern int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int allowbbt);
+
+/*
+* Constants for oob configuration
+*/
+#define NAND_SMALL_BADBLOCK_POS                5
+#define NAND_LARGE_BADBLOCK_POS                0
+
+#endif /* __LINUX_MTD_NAND_NEW_H */
index 63a96f13cc2dd1c9da9e57860e15d21a15beb994..2f7a3b36acf08862dc486fd1364bf7e0cc91c3cf 100644 (file)
@@ -67,7 +67,7 @@ struct stat {
 
 #endif /* __PPC__ */
 
-#if defined (__ARM__) || defined (__I386__)
+#if defined (__ARM__) || defined (__I386__) || defined (__M68K__)
 
 struct stat {
        unsigned short st_dev;
index afdd5a7fe15bff0823afb6caeb5254596be0df8b..71716b04d403351884c798517e4b6d948c8e98fc 100644 (file)
 #ifndef _miiphy_h_
 #define _miiphy_h_
 
+#include <net.h>
 
-int  miiphy_read(unsigned char addr, unsigned char reg, unsigned short * value);
-int  miiphy_write(unsigned char addr, unsigned char reg, unsigned short value);
-int  miiphy_info(unsigned char addr, unsigned int  *oui, unsigned char *model,
-                unsigned char *rev);
-int  miiphy_reset(unsigned char addr);
-int  miiphy_speed(unsigned char addr);
-int  miiphy_duplex(unsigned char addr);
+int  miiphy_read(char *devname, unsigned char addr, unsigned char reg,
+               unsigned short *value);
+int  miiphy_write(char *devname, unsigned char addr, unsigned char reg,
+               unsigned short value);
+int  miiphy_info(char *devname, unsigned char addr, unsigned int  *oui,
+               unsigned char *model, unsigned char *rev);
+int  miiphy_reset(char *devname, unsigned char addr);
+int  miiphy_speed(char *devname, unsigned char addr);
+int  miiphy_duplex(char *devname, unsigned char addr);
 #ifdef CFG_FAULT_ECHO_LINK_DOWN
-int  miiphy_link(unsigned char addr);
+int  miiphy_link(char *devname, unsigned char addr);
 #endif
 
+void miiphy_init(void);
+
+void miiphy_register(char *devname,
+       int (* read)(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value),
+       int (* write)(char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value));
+
+int miiphy_set_current_dev(char *devname);
+char *miiphy_get_current_dev(void);
+
+void miiphy_listdev(void);
+
+#define BB_MII_DEVNAME "bbmii"
+
+int bb_miiphy_read (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short *value);
+int bb_miiphy_write (char *devname, unsigned char addr,
+               unsigned char reg, unsigned short value);
 
 /* phy seed setup */
 #define AUTO                   99
index 887dc3ea0bc00149585c0aab81aa3e22e7a730c4..f33d8585522388826b1bba794adbeb05a5ed4f90 100644 (file)
@@ -91,6 +91,7 @@
 #define MPC5XXX_GPIO           (CFG_MBAR + 0x0b00)
 #define MPC5XXX_WU_GPIO         (CFG_MBAR + 0x0c00)
 #define MPC5XXX_PCI            (CFG_MBAR + 0x0d00)
+#define MPC5XXX_SPI            (CFG_MBAR + 0x0f00)
 #define MPC5XXX_USB            (CFG_MBAR + 0x1000)
 #define MPC5XXX_SDMA           (CFG_MBAR + 0x1200)
 #define MPC5XXX_XLBARB         (CFG_MBAR + 0x1f00)
@@ -381,17 +382,18 @@ struct mpc5xxx_psc {
        volatile u8     ctur;           /* PSC + 0x18 */
        volatile u8     reserved5[3];
        volatile u8     ctlr;           /* PSC + 0x1c */
-       volatile u8     reserved6[19];
+       volatile u8     reserved6[3];
+       volatile u16    ccr;            /* PSC + 0x20 */
+       volatile u8     reserved7[14];
        volatile u8     ivr;            /* PSC + 0x30 */
-       volatile u8     reserved7[3];
-       volatile u8     ip;             /* PSC + 0x34 */
        volatile u8     reserved8[3];
-       volatile u8     op1;            /* PSC + 0x38 */
+       volatile u8     ip;             /* PSC + 0x34 */
        volatile u8     reserved9[3];
-       volatile u8     op0;            /* PSC + 0x3c */
+       volatile u8     op1;            /* PSC + 0x38 */
        volatile u8     reserved10[3];
-       volatile u8     sicr;           /* PSC + 0x40 */
+       volatile u8     op0;            /* PSC + 0x3c */
        volatile u8     reserved11[3];
+       volatile u32    sicr;           /* PSC + 0x40 */
        volatile u8     ircr1;          /* PSC + 0x44 */
        volatile u8     reserved12[3];
        volatile u8     ircr2;          /* PSC + 0x44 */
@@ -599,6 +601,101 @@ struct mpc5xxx_i2c {
        volatile u32 mdr;               /* I2Cn + 0x10 */
 };
 
+struct mpc5xxx_spi {
+       volatile u8 cr1;                /* SPI + 0x0F00 */
+       volatile u8 cr2;                /* SPI + 0x0F01 */
+       volatile u8 reserved1[2];
+       volatile u8 brr;                /* SPI + 0x0F04 */
+       volatile u8 sr;                 /* SPI + 0x0F05 */
+       volatile u8 reserved2[3];
+       volatile u8 dr;                 /* SPI + 0x0F09 */
+       volatile u8 reserved3[3];
+       volatile u8 pdr;                /* SPI + 0x0F0D */
+       volatile u8 reserved4[2];
+       volatile u8 ddr;                /* SPI + 0x0F10 */
+};
+
+
+struct mpc5xxx_gpt {
+       volatile u32 emsr;              /* GPT + Timer# * 0x10 + 0x00 */
+       volatile u32 cir;               /* GPT + Timer# * 0x10 + 0x04 */
+       volatile u32 pwmcr;             /* GPT + Timer# * 0x10 + 0x08 */
+       volatile u32 sr;                /* GPT + Timer# * 0x10 + 0x0c */
+};
+
+struct mpc5xxx_gpt_0_7 {
+       struct mpc5xxx_gpt gpt0;
+       struct mpc5xxx_gpt gpt1;
+       struct mpc5xxx_gpt gpt2;
+       struct mpc5xxx_gpt gpt3;
+       struct mpc5xxx_gpt gpt4;
+       struct mpc5xxx_gpt gpt5;
+       struct mpc5xxx_gpt gpt6;
+       struct mpc5xxx_gpt gpt7;
+};
+
+struct mscan_buffer {
+       volatile u8  idr[0x8];          /* 0x00 */
+       volatile u8  dsr[0x10];         /* 0x08 */
+       volatile u8  dlr;               /* 0x18 */
+       volatile u8  tbpr;              /* 0x19 */      /* This register is not applicable for receive buffers */
+       volatile u16 rsrv1;             /* 0x1A */
+       volatile u8  tsrh;              /* 0x1C */
+       volatile u8  tsrl;              /* 0x1D */
+       volatile u16 rsrv2;             /* 0x1E */
+};
+
+struct mpc5xxx_mscan {
+       volatile u8  canctl0;           /* MSCAN + 0x00 */
+       volatile u8  canctl1;           /* MSCAN + 0x01 */
+       volatile u16 rsrv1;             /* MSCAN + 0x02 */
+       volatile u8  canbtr0;           /* MSCAN + 0x04 */
+       volatile u8  canbtr1;           /* MSCAN + 0x05 */
+       volatile u16 rsrv2;             /* MSCAN + 0x06 */
+       volatile u8  canrflg;           /* MSCAN + 0x08 */
+       volatile u8  canrier;           /* MSCAN + 0x09 */
+       volatile u16 rsrv3;             /* MSCAN + 0x0A */
+       volatile u8  cantflg;           /* MSCAN + 0x0C */
+       volatile u8  cantier;           /* MSCAN + 0x0D */
+       volatile u16 rsrv4;             /* MSCAN + 0x0E */
+       volatile u8  cantarq;           /* MSCAN + 0x10 */
+       volatile u8  cantaak;           /* MSCAN + 0x11 */
+       volatile u16 rsrv5;             /* MSCAN + 0x12 */
+       volatile u8  cantbsel;          /* MSCAN + 0x14 */
+       volatile u8  canidac;           /* MSCAN + 0x15 */
+       volatile u16 rsrv6[3];          /* MSCAN + 0x16 */
+       volatile u8  canrxerr;          /* MSCAN + 0x1C */
+       volatile u8  cantxerr;          /* MSCAN + 0x1D */
+       volatile u16 rsrv7;             /* MSCAN + 0x1E */
+       volatile u8  canidar0;          /* MSCAN + 0x20 */
+       volatile u8  canidar1;          /* MSCAN + 0x21 */
+       volatile u16 rsrv8;             /* MSCAN + 0x22 */
+       volatile u8  canidar2;          /* MSCAN + 0x24 */
+       volatile u8  canidar3;          /* MSCAN + 0x25 */
+       volatile u16 rsrv9;             /* MSCAN + 0x26 */
+       volatile u8  canidmr0;          /* MSCAN + 0x28 */
+       volatile u8  canidmr1;          /* MSCAN + 0x29 */
+       volatile u16 rsrv10;            /* MSCAN + 0x2A */
+       volatile u8  canidmr2;          /* MSCAN + 0x2C */
+       volatile u8  canidmr3;          /* MSCAN + 0x2D */
+       volatile u16 rsrv11;            /* MSCAN + 0x2E */
+       volatile u8  canidar4;          /* MSCAN + 0x30 */
+       volatile u8  canidar5;          /* MSCAN + 0x31 */
+       volatile u16 rsrv12;            /* MSCAN + 0x32 */
+       volatile u8  canidar6;          /* MSCAN + 0x34 */
+       volatile u8  canidar7;          /* MSCAN + 0x35 */
+       volatile u16 rsrv13;            /* MSCAN + 0x36 */
+       volatile u8  canidmr4;          /* MSCAN + 0x38 */
+       volatile u8  canidmr5;          /* MSCAN + 0x39 */
+       volatile u16 rsrv14;            /* MSCAN + 0x3A */
+       volatile u8  canidmr6;          /* MSCAN + 0x3C */
+       volatile u8  canidmr7;          /* MSCAN + 0x3D */
+       volatile u16 rsrv15;            /* MSCAN + 0x3E */
+
+       struct mscan_buffer canrxfg;    /* MSCAN + 0x40 */    /* Foreground receive buffer */
+       struct mscan_buffer cantxfg;    /* MSCAN + 0x60 */    /* Foreground transmit buffer */
+       };
+
 /* function prototypes */
 void loadtask(int basetask, int tasks);
 
index 38f7115b189f0b61d1353ca951787e8388dfda03..ea40bad395da4a9c65c4827039554c2b3d20443c 100644 (file)
 #define BR6 0x5030
 #define BR7 0x5038
 
-#define BR_BA   0xFFFF8000
-#define BR_BA_SHIFT     15
-#define BR_PS   0x00001800
-#define BR_PS_SHIFT     11
-#define BR_DECC 0x00000600
-#define BR_DECC_SHIFT    9
-#define BR_WP   0x00000100
-#define BR_WP_SHIFT      8
-#define BR_MSEL 0x000000E0
-#define BR_MSEL_SHIFT    5
-#define BR_V    0x00000001
-#define BR_V_SHIFT       0
-#define BR_RES  ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
+#define BR_BA          0xFFFF8000
+#define BR_BA_SHIFT            15
+#define BR_PS          0x00001800
+#define BR_PS_SHIFT            11
+#define BR_PS_8                0x00000800  /* Port Size 8 bit */
+#define BR_PS_16       0x00001000  /* Port Size 16 bit */
+#define BR_PS_32       0x00001800  /* Port Size 32 bit */
+#define BR_DECC                0x00000600
+#define BR_DECC_SHIFT           9
+#define BR_WP          0x00000100
+#define BR_WP_SHIFT             8
+#define BR_MSEL                0x000000E0
+#define BR_MSEL_SHIFT           5
+#define BR_MS_GPCM     0x00000000  /* GPCM */
+#define BR_MS_SDRAM    0x00000060  /* SDRAM */
+#define BR_MS_UPMA     0x00000080  /* UPMA */
+#define BR_MS_UPMB     0x000000A0  /* UPMB */
+#define BR_MS_UPMC     0x000000C0  /* UPMC */
+#define BR_V           0x00000001
+#define BR_V_SHIFT              0
+#define BR_RES         ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
 
 #define OR0 0x5004
 #define OR1 0x500C
 #define OR6 0x5034
 #define OR7 0x503C
 
-#define OR_GPCM_AM    0xFFFF8000
-#define OR_GPCM_AM_SHIFT      15
-#define OR_GPCM_BCTLD 0x00001000
-#define OR_GPCM_BCTLD_SHIFT   12
-#define OR_GPCM_CSNT  0x00000800
-#define OR_GPCM_CSNT_SHIFT    11
-#define OR_GPCM_ACS   0x00000600
-#define OR_GPCM_ACS_SHIFT      9
-#define OR_GPCM_XACS  0x00000100
-#define OR_GPCM_XACS_SHIFT     8
-#define OR_GPCM_SCY   0x000000F0
-#define OR_GPCM_SCY_SHIFT      4
-#define OR_GPCM_SETA  0x00000008
-#define OR_GPCM_SETA_SHIFT     3
-#define OR_GPCM_TRLX  0x00000004
-#define OR_GPCM_TRLX_SHIFT     2
-#define OR_GPCM_EHTR  0x00000002
-#define OR_GPCM_EHTR_SHIFT     1
-#define OR_GPCM_EAD   0x00000001
-#define OR_GPCM_EAD_SHIFT      0
+#define OR_GPCM_AM             0xFFFF8000
+#define OR_GPCM_AM_SHIFT               15
+#define OR_GPCM_BCTLD          0x00001000
+#define OR_GPCM_BCTLD_SHIFT            12
+#define OR_GPCM_CSNT           0x00000800
+#define OR_GPCM_CSNT_SHIFT             11
+#define OR_GPCM_ACS            0x00000600
+#define OR_GPCM_ACS_SHIFT               9
+#define OR_GPCM_ACS_0b10       0x00000400
+#define OR_GPCM_ACS_0b11       0x00000600
+#define OR_GPCM_XACS           0x00000100
+#define OR_GPCM_XACS_SHIFT              8
+#define OR_GPCM_SCY            0x000000F0
+#define OR_GPCM_SCY_SHIFT               4
+#define OR_GPCM_SCY_1          0x00000010
+#define OR_GPCM_SCY_2          0x00000020
+#define OR_GPCM_SCY_3          0x00000030
+#define OR_GPCM_SCY_4          0x00000040
+#define OR_GPCM_SCY_5          0x00000050
+#define OR_GPCM_SCY_6          0x00000060
+#define OR_GPCM_SCY_7          0x00000070
+#define OR_GPCM_SCY_8          0x00000080
+#define OR_GPCM_SCY_9          0x00000090
+#define OR_GPCM_SCY_10         0x000000a0
+#define OR_GPCM_SCY_11         0x000000b0
+#define OR_GPCM_SCY_12         0x000000c0
+#define OR_GPCM_SCY_13         0x000000d0
+#define OR_GPCM_SCY_14         0x000000e0
+#define OR_GPCM_SCY_15         0x000000f0
+#define OR_GPCM_SETA           0x00000008
+#define OR_GPCM_SETA_SHIFT              3
+#define OR_GPCM_TRLX           0x00000004
+#define OR_GPCM_TRLX_SHIFT              2
+#define OR_GPCM_EHTR           0x00000002
+#define OR_GPCM_EHTR_SHIFT              1
+#define OR_GPCM_EAD            0x00000001
+#define OR_GPCM_EAD_SHIFT               0
 
 #define OR_UPM_AM    0xFFFF8000
 #define OR_UPM_AM_SHIFT      15
index 349034772370572ddb65c50ac2bcf660c69c1868..905115b3dac4114a45cfcb257cc33652435c4cc7 100644 (file)
@@ -35,12 +35,12 @@ extern nand_info_t nand_info[];
 
 static inline int nand_read(nand_info_t *info, ulong ofs, ulong *len, u_char *buf)
 {
-       return info->read(info, ofs, *len, len, buf);
+       return info->read(info, ofs, *len, (size_t *)len, buf);
 }
 
 static inline int nand_write(nand_info_t *info, ulong ofs, ulong *len, u_char *buf)
 {
-       return info->write(info, ofs, *len, len, buf);
+       return info->write(info, ofs, *len, (size_t *)len, buf);
 }
 
 static inline int nand_block_isbad(nand_info_t *info, ulong ofs)
index 623d22508239b81466f61bea037db7d070f1132f..461e03801417aa2c097e9ca03122fa26cbc55519 100644 (file)
@@ -114,6 +114,7 @@ extern void eth_try_another(int first_restart);     /* Change the device            */
 extern void eth_set_current(void);             /* set nterface to ethcur var.  */
 #endif
 extern struct eth_device *eth_get_dev(void);   /* get the current device MAC   */
+extern struct eth_device *eth_get_dev_by_name(char *devname); /* get device    */
 extern int eth_get_dev_index (void);           /* get the device index         */
 extern void eth_set_enetaddr(int num, char* a);        /* Set new MAC address          */
 
@@ -453,7 +454,7 @@ extern IPaddr_t getenv_IPaddr (char *);
 extern ushort getenv_VLAN(char *);
 
 /* copy a filename (allow for "..." notation, limit length) */
-extern void    copy_filename (uchar *dst, uchar *src, int size);
+extern void    copy_filename (char *dst, char *src, int size);
 
 /**********************************************************************/
 
diff --git a/include/ns7520_eth.h b/include/ns7520_eth.h
new file mode 100644 (file)
index 0000000..5019802
--- /dev/null
@@ -0,0 +1,335 @@
+/***********************************************************************
+ *
+ *  Copyright 2003 by FS Forth-Systeme GmbH.
+ *  All rights reserved.
+ *
+ *  $Id$
+ *  @Author: Markus Pietrek
+ *  @Descr: Defines the NS7520 ethernet registers.
+ *          Stick with the old ETH prefix names instead going to the
+ *          new EFE names in the manual.
+ *          NS7520_ETH_* refer to NS7520 Hardware
+ *           Reference/January 2003 [1]
+ *          PHY_LXT971_* refer to Intel LXT971 Datasheet
+ *           #249414 Rev. 02 [2]
+ *          Partly derived from netarm_eth_module.h
+ *
+ * Modified by Arthur Shipkowski <art@videon-central.com> from the
+ * Linux version to be properly formatted for U-Boot (i.e. no C++ comments)
+ *
+ ***********************************************************************/
+
+#ifndef FS_NS7520_ETH_H
+#define FS_NS7520_ETH_H
+
+#ifdef CONFIG_DRIVER_NS7520_ETHERNET
+
+#include "lxt971a.h"
+
+/* The port addresses */
+
+#define        NS7520_ETH_MODULE_BASE          (0xFF800000)
+
+#define get_eth_reg_addr(c) \
+     ((volatile unsigned int*) ( NS7520_ETH_MODULE_BASE+(unsigned int) (c)))
+#define NS7520_ETH_EGCR                 (0x0000)       /* Ethernet Gen Control */
+#define NS7520_ETH_EGSR                 (0x0004)       /* Ethernet Gen Status */
+#define NS7520_ETH_FIFO                 (0x0008)       /* FIFO Data */
+#define NS7520_ETH_FIFOL        (0x000C)       /* FIFO Data Last */
+#define NS7520_ETH_ETSR                 (0x0010)       /* Ethernet Transmit Status */
+#define NS7520_ETH_ERSR                 (0x0014)       /* Ethernet Receive Status */
+#define NS7520_ETH_MAC1                 (0x0400)       /* MAC Config 1 */
+#define NS7520_ETH_MAC2                 (0x0404)       /* MAC Config 2 */
+#define NS7520_ETH_IPGT                 (0x0408)       /* Back2Back InterPacket Gap */
+#define NS7520_ETH_IPGR                 (0x040C)       /* non back2back InterPacket Gap */
+#define NS7520_ETH_CLRT                 (0x0410)       /* Collision Window/Retry */
+#define NS7520_ETH_MAXF                 (0x0414)       /* Maximum Frame Register */
+#define NS7520_ETH_SUPP                 (0x0418)       /* PHY Support */
+#define NS7520_ETH_TEST                 (0x041C)       /* Test Register */
+#define NS7520_ETH_MCFG                 (0x0420)       /* MII Management Configuration */
+#define NS7520_ETH_MCMD                 (0x0424)       /* MII Management Command */
+#define NS7520_ETH_MADR                 (0x0428)       /* MII Management Address */
+#define NS7520_ETH_MWTD                 (0x042C)       /* MII Management Write Data */
+#define NS7520_ETH_MRDD                 (0x0430)       /* MII Management Read Data */
+#define NS7520_ETH_MIND                 (0x0434)       /* MII Management Indicators */
+#define NS7520_ETH_SMII                 (0x0438)       /* SMII Status Register */
+#define NS7520_ETH_SA1          (0x0440)       /* Station Address 1 */
+#define NS7520_ETH_SA2          (0x0444)       /* Station Address 2 */
+#define NS7520_ETH_SA3          (0x0448)       /* Station Address 3 */
+#define NS7520_ETH_SAFR                 (0x05C0)       /* Station Address Filter */
+#define NS7520_ETH_HT1          (0x05D0)       /* Hash Table 1 */
+#define NS7520_ETH_HT2          (0x05D4)       /* Hash Table 2 */
+#define NS7520_ETH_HT3          (0x05D8)       /* Hash Table 3 */
+#define NS7520_ETH_HT4          (0x05DC)       /* Hash Table 4 */
+
+/* EGCR Ethernet General Control Register Bit Fields*/
+
+#define NS7520_ETH_EGCR_ERX     (0x80000000)   /* Enable Receive FIFO */
+#define NS7520_ETH_EGCR_ERXDMA  (0x40000000)   /* Enable Receive DMA */
+#define NS7520_ETH_EGCR_ERXLNG  (0x20000000)   /* Accept Long packets */
+#define NS7520_ETH_EGCR_ERXSHT  (0x10000000)   /* Accept Short packets */
+#define NS7520_ETH_EGCR_ERXREG  (0x08000000)   /* Enable Receive Data Interrupt */
+#define NS7520_ETH_EGCR_ERFIFOH         (0x04000000)   /* Enable Receive Half-Full Int */
+#define NS7520_ETH_EGCR_ERXBR   (0x02000000)   /* Enable Receive buffer ready */
+#define NS7520_ETH_EGCR_ERXBAD  (0x01000000)   /* Accept bad receive packets */
+#define NS7520_ETH_EGCR_ETX     (0x00800000)   /* Enable Transmit FIFO */
+#define NS7520_ETH_EGCR_ETXDMA  (0x00400000)   /* Enable Transmit DMA */
+#define NS7520_ETH_EGCR_ETXWM_R  (0x00300000)  /* Enable Transmit FIFO mark Reserv */
+#define NS7520_ETH_EGCR_ETXWM_75 (0x00200000)  /* Enable Transmit FIFO mark 75% */
+#define NS7520_ETH_EGCR_ETXWM_50 (0x00100000)  /* Enable Transmit FIFO mark 50% */
+#define NS7520_ETH_EGCR_ETXWM_25 (0x00000000)  /* Enable Transmit FIFO mark 25% */
+#define NS7520_ETH_EGCR_ETXREG  (0x00080000)   /* Enable Transmit Data Read Int */
+#define NS7520_ETH_EGCR_ETFIFOH         (0x00040000)   /* Enable Transmit Fifo Half Int */
+#define NS7520_ETH_EGCR_ETXBC   (0x00020000)   /* Enable Transmit Buffer Compl Int */
+#define NS7520_ETH_EGCR_EFULLD  (0x00010000)   /* Enable Full Duplex Operation */
+#define NS7520_ETH_EGCR_MODE_MA  (0x0000C000)  /* Mask */
+#define NS7520_ETH_EGCR_MODE_SEE (0x0000C000)  /* 10 Mbps SEEQ ENDEC PHY */
+#define NS7520_ETH_EGCR_MODE_LEV (0x00008000)  /* 10 Mbps Level1 ENDEC PHY */
+#define NS7520_ETH_EGCR_RES1     (0x00002000)  /* Reserved */
+#define NS7520_ETH_EGCR_RXCINV  (0x00001000)   /* Invert the receive clock input */
+#define NS7520_ETH_EGCR_TXCINV  (0x00000800)   /* Invert the transmit clock input */
+#define NS7520_ETH_EGCR_PNA     (0x00000400)   /* pSOS pNA buffer */
+#define NS7520_ETH_EGCR_MAC_RES         (0x00000200)   /* MAC Software reset */
+#define NS7520_ETH_EGCR_ITXA    (0x00000100)   /* Insert Transmit Source Address */
+#define NS7520_ETH_EGCR_ENDEC_MA (0x000000FC)  /* ENDEC media control bits */
+#define NS7520_ETH_EGCR_EXINT_MA (0x00000003)  /* Mask */
+#define NS7520_ETH_EGCR_EXINT_RE (0x00000003)  /* Reserved */
+#define NS7520_ETH_EGCR_EXINT_TP (0x00000002)  /* TP-PMD Mode */
+#define NS7520_ETH_EGCR_EXINT_10 (0x00000001)  /* 10-MBit Mode */
+#define NS7520_ETH_EGCR_EXINT_NO (0x00000000)  /* MII normal operation */
+
+/* EGSR Ethernet General Status Register Bit Fields*/
+
+#define NS7520_ETH_EGSR_RES1    (0xC0000000)   /* Reserved */
+#define NS7520_ETH_EGSR_RXFDB_MA (0x30000000)  /* Receive FIFO mask */
+#define NS7520_ETH_EGSR_RXFDB_3         (0x30000000)   /* Receive FIFO 3 bytes available */
+#define NS7520_ETH_EGSR_RXFDB_2         (0x20000000)   /* Receive FIFO 2 bytes available */
+#define NS7520_ETH_EGCR_RXFDB_1         (0x10000000)   /* Receive FIFO 1 Bytes available */
+#define NS7520_ETH_EGCR_RXFDB_4         (0x00000000)   /* Receive FIFO 4 Bytes available */
+#define NS7520_ETH_EGSR_RXREGR  (0x08000000)   /* Receive Register Ready */
+#define NS7520_ETH_EGSR_RXFIFOH         (0x04000000)   /* Receive FIFO Half Full */
+#define NS7520_ETH_EGSR_RXBR    (0x02000000)   /* Receive Buffer Ready */
+#define NS7520_ETH_EGSR_RXSKIP  (0x01000000)   /* Receive Buffer Skip */
+#define NS7520_ETH_EGSR_RES2    (0x00F00000)   /* Reserved */
+#define NS7520_ETH_EGSR_TXREGE  (0x00080000)   /* Transmit Register Empty */
+#define NS7520_ETH_EGSR_TXFIFOH         (0x00040000)   /* Transmit FIFO half empty */
+#define NS7520_ETH_EGSR_TXBC    (0x00020000)   /* Transmit buffer complete */
+#define NS7520_ETH_EGSR_TXFIFOE         (0x00010000)   /* Transmit FIFO empty */
+#define NS7520_ETH_EGSR_RXPINS  (0x0000FC00)   /* ENDEC Phy Status */
+#define NS7520_ETH_EGSR_RES3    (0x000003FF)   /* Reserved */
+
+/* ETSR Ethernet Transmit Status Register Bit Fields*/
+
+#define NS7520_ETH_ETSR_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_ETSR_TXOK    (0x00008000)   /* Packet transmitted OK */
+#define NS7520_ETH_ETSR_TXBR    (0x00004000)   /* Broadcast packet transmitted */
+#define NS7520_ETH_ETSR_TXMC    (0x00002000)   /* Multicast packet transmitted */
+#define NS7520_ETH_ETSR_TXAL    (0x00001000)   /* Transmit abort - late collision */
+#define NS7520_ETH_ETSR_TXAED   (0x00000800)   /* Transmit abort - deferral */
+#define NS7520_ETH_ETSR_TXAEC   (0x00000400)   /* Transmit abort - exc collisions */
+#define NS7520_ETH_ETSR_TXAUR   (0x00000200)   /* Transmit abort - underrun */
+#define NS7520_ETH_ETSR_TXAJ    (0x00000100)   /* Transmit abort - jumbo */
+#define NS7520_ETH_ETSR_RES2    (0x00000080)   /* Reserved */
+#define NS7520_ETH_ETSR_TXDEF   (0x00000040)   /* Transmit Packet Deferred */
+#define NS7520_ETH_ETSR_TXCRC   (0x00000020)   /* Transmit CRC error */
+#define NS7520_ETH_ETSR_RES3    (0x00000010)   /* Reserved */
+#define NS7520_ETH_ETSR_TXCOLC   (0x0000000F)  /* Transmit Collision Count */
+
+/* ERSR Ethernet Receive Status Register Bit Fields*/
+
+#define NS7520_ETH_ERSR_RXSIZE  (0xFFFF0000)   /* Receive Buffer Size */
+#define NS7520_ETH_ERSR_RXCE    (0x00008000)   /* Receive Carrier Event */
+#define NS7520_ETH_ERSR_RXDV    (0x00004000)   /* Receive Data Violation Event */
+#define NS7520_ETH_ERSR_RXOK    (0x00002000)   /* Receive Packet OK */
+#define NS7520_ETH_ERSR_RXBR    (0x00001000)   /* Receive Broadcast Packet */
+#define NS7520_ETH_ERSR_RXMC    (0x00000800)   /* Receive Multicast Packet */
+#define NS7520_ETH_ERSR_RXCRC   (0x00000400)   /* Receive Packet has CRC error */
+#define NS7520_ETH_ERSR_RXDR    (0x00000200)   /* Receive Packet has dribble error */
+#define NS7520_ETH_ERSR_RXCV    (0x00000100)   /* Receive Packet code violation */
+#define NS7520_ETH_ERSR_RXLNG   (0x00000080)   /* Receive Packet too long */
+#define NS7520_ETH_ERSR_RXSHT   (0x00000040)   /* Receive Packet too short */
+#define NS7520_ETH_ERSR_ROVER   (0x00000020)   /* Recive overflow */
+#define NS7520_ETH_ERSR_RES     (0x0000001F)   /* Reserved */
+
+/* MAC1 MAC Configuration Register 1 Bit Fields*/
+
+#define NS7520_ETH_MAC1_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_MAC1_SRST    (0x00008000)   /* Soft Reset */
+#define NS7520_ETH_MAC1_SIMMRST         (0x00004000)   /* Simulation Reset */
+#define NS7520_ETH_MAC1_RES2    (0x00003000)   /* Reserved */
+#define NS7520_ETH_MAC1_RPEMCSR         (0x00000800)   /* Reset PEMCS/RX */
+#define NS7520_ETH_MAC1_RPERFUN         (0x00000400)   /* Reset PERFUN */
+#define NS7520_ETH_MAC1_RPEMCST         (0x00000200)   /* Reset PEMCS/TX */
+#define NS7520_ETH_MAC1_RPETFUN         (0x00000100)   /* Reset PETFUN */
+#define NS7520_ETH_MAC1_RES3    (0x000000E0)   /* Reserved */
+#define NS7520_ETH_MAC1_LOOPBK  (0x00000010)   /* Internal Loopback */
+#define NS7520_ETH_MAC1_TXFLOW  (0x00000008)   /* TX flow control */
+#define NS7520_ETH_MAC1_RXFLOW  (0x00000004)   /* RX flow control */
+#define NS7520_ETH_MAC1_PALLRX  (0x00000002)   /* Pass ALL receive frames */
+#define NS7520_ETH_MAC1_RXEN    (0x00000001)   /* Receive enable */
+
+/* MAC Configuration Register 2 Bit Fields*/
+
+#define NS7520_ETH_MAC2_RES1    (0xFFFF8000)   /* Reserved */
+#define NS7520_ETH_MAC2_EDEFER  (0x00004000)   /* Excess Deferral */
+#define NS7520_ETH_MAC2_BACKP   (0x00002000)   /* Backpressure/NO back off */
+#define NS7520_ETH_MAC2_NOBO    (0x00001000)   /* No back off */
+#define NS7520_ETH_MAC2_RES2    (0x00000C00)   /* Reserved */
+#define NS7520_ETH_MAC2_LONGP   (0x00000200)   /* Long Preable enforcement */
+#define NS7520_ETH_MAC2_PUREP   (0x00000100)   /* Pure preamble enforcement */
+#define NS7520_ETH_MAC2_AUTOP   (0x00000080)   /* Auto detect PAD enable */
+#define NS7520_ETH_MAC2_VLANP   (0x00000040)   /* VLAN pad enable */
+#define NS7520_ETH_MAC2_PADEN           (0x00000020)   /* PAD/CRC enable */
+#define NS7520_ETH_MAC2_CRCEN   (0x00000010)   /* CRC enable */
+#define NS7520_ETH_MAC2_DELCRC  (0x00000008)   /* Delayed CRC */
+#define NS7520_ETH_MAC2_HUGE    (0x00000004)   /* Huge frame enable */
+#define NS7520_ETH_MAC2_FLENC   (0x00000002)   /* Frame length checking */
+#define NS7520_ETH_MAC2_FULLD   (0x00000001)   /* Full duplex */
+
+/* IPGT Back-to-Back Inter-Packet-Gap Register Bit Fields*/
+
+#define NS7520_ETH_IPGT_RES     (0xFFFFFF80)   /* Reserved */
+#define NS7520_ETH_IPGT_IPGT    (0x0000007F)   /* Back-to-Back Interpacket Gap */
+
+/* IPGR Non Back-to-Back Inter-Packet-Gap Register Bit Fields*/
+
+#define NS7520_ETH_IPGR_RES1    (0xFFFF8000)   /* Reserved */
+#define NS7520_ETH_IPGR_IPGR1   (0x00007F00)   /* Non Back-to-back Interpacket Gap */
+#define NS7520_ETH_IPGR_RES2    (0x00000080)   /* Reserved */
+#define NS7520_ETH_IPGR_IPGR2   (0x0000007F)   /* Non back-to-back Interpacket Gap */
+
+/* CLRT Collision Windows/Collision Retry Register Bit Fields*/
+
+#define NS7520_ETH_CLRT_RES1    (0xFFFFC000)   /* Reserved */
+#define NS7520_ETH_CLRT_CWIN    (0x00003F00)   /* Collision Windows */
+#define NS7520_ETH_CLRT_RES2    (0x000000F0)   /* Reserved */
+#define        NS7520_ETH_CLRT_RETX     (0x0000000F)   /* Retransmission maximum */
+
+/* MAXF Maximum Frame Register Bit Fields*/
+
+#define NS7520_ETH_MAXF_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_MAXF_MAXF    (0x0000FFFF)   /* Maximum frame length */
+
+/* SUPP PHY Support Register Bit Fields*/
+
+#define NS7520_ETH_SUPP_RES1    (0xFFFFFF00)   /* Reserved */
+#define NS7520_ETH_SUPP_RPE100X         (0x00000080)   /* Reset PE100X module */
+#define NS7520_ETH_SUPP_FORCEQ  (0x00000040)   /* Force Quit */
+#define NS7520_ETH_SUPP_NOCIPH  (0x00000020)   /* No Cipher */
+#define NS7520_ETH_SUPP_DLINKF  (0x00000010)   /* Disable link fail */
+#define NS7520_ETH_SUPP_RPE10T  (0x00000008)   /* Reset PE10T module */
+#define NS7520_ETH_SUPP_RES2    (0x00000004)   /* Reserved */
+#define NS7520_ETH_SUPP_JABBER  (0x00000002)   /* Enable Jabber protection */
+#define NS7520_ETH_SUPP_BITMODE         (0x00000001)   /* Bit Mode */
+
+/* TEST Register Bit Fields*/
+
+#define NS7520_ETH_TEST_RES1    (0xFFFFFFF8)   /* Reserved */
+#define NS7520_ETH_TEST_TBACK   (0x00000004)   /* Test backpressure */
+#define NS7520_ETH_TEST_TPAUSE  (0x00000002)   /* Test Pause */
+#define NS7520_ETH_TEST_SPQ     (0x00000001)   /* Shortcut pause quanta */
+
+/* MCFG MII Management Configuration Register Bit Fields*/
+
+#define NS7520_ETH_MCFG_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_MCFG_RMIIM   (0x00008000)   /* Reset MII management */
+#define NS7520_ETH_MCFG_RES2    (0x00007FE0)   /* Reserved */
+#define NS7520_ETH_MCFG_CLKS_MA         (0x0000001C)   /* Clock Select */
+#define NS7520_ETH_MCFG_CLKS_4  (0x00000004)   /* Sysclk / 4 */
+#define NS7520_ETH_MCFG_CLKS_6  (0x00000008)   /* Sysclk / 6 */
+#define NS7520_ETH_MCFG_CLKS_8  (0x0000000C)   /* Sysclk / 8 */
+#define NS7520_ETH_MCFG_CLKS_10         (0x00000010)   /* Sysclk / 10 */
+#define NS7520_ETH_MCFG_CLKS_14         (0x00000014)   /* Sysclk / 14 */
+#define NS7520_ETH_MCFG_CLKS_20         (0x00000018)   /* Sysclk / 20 */
+#define NS7520_ETH_MCFG_CLKS_28         (0x0000001C)   /* Sysclk / 28 */
+#define NS7520_ETH_MCFG_SPRE    (0x00000002)   /* Suppress preamble */
+#define NS7520_ETH_MCFG_SCANI   (0x00000001)   /* Scan increment */
+
+/* MCMD MII Management Command Register Bit Fields*/
+
+#define NS7520_ETH_MCMD_RES1    (0xFFFFFFFC)   /* Reserved */
+#define NS7520_ETH_MCMD_SCAN    (0x00000002)   /* Automatically Scan for Read Data */
+#define NS7520_ETH_MCMD_READ    (0x00000001)   /* Single scan for Read Data */
+
+/* MCMD MII Management Address Register Bit Fields*/
+
+#define NS7520_ETH_MADR_RES1    (0xFFFFE000)   /* Reserved */
+#define NS7520_ETH_MADR_DADR    (0x00001F00)   /* MII PHY device address */
+#define NS7520_ETH_MADR_RES2    (0x000000E0)   /* Reserved */
+#define NS7520_ETH_MADR_RADR    (0x0000001F)   /* MII PHY register address */
+
+/* MWTD MII Management Write Data Register Bit Fields*/
+
+#define NS7520_ETH_MWTD_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_MWTD_MWTD    (0x0000FFFF)   /* MII Write Data */
+
+/* MRRD MII Management Read Data Register Bit Fields*/
+
+#define NS7520_ETH_MRRD_RES1    (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_MRRD_MRDD    (0x0000FFFF)   /* MII Read Data */
+
+/* MIND MII Management Indicators Register Bit Fields*/
+
+#define NS7520_ETH_MIND_RES1    (0xFFFFFFF8)   /* Reserved */
+#define NS7520_ETH_MIND_NVALID  (0x00000004)   /* Read Data not valid */
+#define NS7520_ETH_MIND_SCAN    (0x00000002)   /* Automatically scan for read data */
+#define NS7520_ETH_MIND_BUSY    (0x00000001)   /* MII interface busy */
+
+/* SMII Status Register Bit Fields*/
+
+#define NS7520_ETH_SMII_RES1    (0xFFFFFFE0)   /* Reserved */
+#define NS7520_ETH_SMII_CLASH   (0x00000010)   /* MAC-to-MAC with PHY */
+#define NS7520_ETH_SMII_JABBER  (0x00000008)   /* Jabber condition present */
+#define NS7520_ETH_SMII_LINK    (0x00000004)   /* Link OK */
+#define NS7520_ETH_SMII_DUPLEX  (0x00000002)   /* Full-duplex operation */
+#define NS7520_ETH_SMII_SPEED   (0x00000001)   /* 100 Mbps */
+
+/* SA1 Station Address 1 Register Bit Fields*/
+
+#define NS7520_ETH_SA1_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_SA1_OCTET1   (0x0000FF00)   /* Station Address octet 1 */
+#define NS7520_ETH_SA1_OCTET2   (0x000000FF)   /* Station Address octet 2 */
+
+/* SA2 Station Address 2 Register Bit Fields*/
+
+#define NS7520_ETH_SA2_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_SA2_OCTET3   (0x0000FF00)   /* Station Address octet 3 */
+#define NS7520_ETH_SA2_OCTET4   (0x000000FF)   /* Station Address octet 4 */
+
+/* SA3 Station Address 3 Register Bit Fields*/
+
+#define NS7520_ETH_SA3_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_SA3_OCTET5   (0x0000FF00)   /* Station Address octet 5 */
+#define NS7520_ETH_SA3_OCTET6   (0x000000FF)   /* Station Address octet 6 */
+
+/* SAFR Station Address Filter Register Bit Fields*/
+
+#define NS7520_ETH_SAFR_RES1    (0xFFFFFFF0)   /* Reserved */
+#define NS7520_ETH_SAFR_PRO     (0x00000008)   /* Enable Promiscuous mode */
+#define NS7520_ETH_SAFR_PRM     (0x00000004)   /* Accept ALL multicast packets */
+#define NS7520_ETH_SAFR_PRA     (0x00000002)   /* Accept multicast packets table */
+#define NS7520_ETH_SAFR_BROAD   (0x00000001)   /* Accept ALL Broadcast packets */
+
+/* HT1 Hash Table 1 Register Bit Fields*/
+
+#define NS7520_ETH_HT1_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_HT1_HT1      (0x0000FFFF)   /* CRC value 15-0 */
+
+/* HT2 Hash Table 2 Register Bit Fields*/
+
+#define NS7520_ETH_HT2_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_HT2_HT2      (0x0000FFFF)   /* CRC value 31-16 */
+
+/* HT3 Hash Table 3 Register Bit Fields*/
+
+#define NS7520_ETH_HT3_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_HT3_HT3      (0x0000FFFF)   /* CRC value 47-32 */
+
+/* HT4 Hash Table 4 Register Bit Fields*/
+
+#define NS7520_ETH_HT4_RES1     (0xFFFF0000)   /* Reserved */
+#define NS7520_ETH_HT4_HT4      (0x0000FFFF)   /* CRC value 63-48 */
+
+#endif                         /* CONFIG_DRIVER_NS7520_ETHERNET */
+
+#endif                         /* FS_NS7520_ETH_H */
index 7dec378ad4be382410710b8bb16055b9d1340781..8cc3ec0a23537ceb79af94876ae80b633036c52d 100644 (file)
 #define PCI_DEVICE_ID_CT_65554         0x00e4
 #define PCI_DEVICE_ID_CT_65555         0x00e5
 #define PCI_DEVICE_ID_CT_69000         0x00c0
+#define PCI_DEVICE_ID_CT_69030         0x0c30
 
 #define PCI_VENDOR_ID_MIRO             0x1031
 #define PCI_DEVICE_ID_MIRO_36050       0x5601
index a5024e679bf9ce72cc0c50cc88465189472987ca..018f7be8ac0090ec5a3d4edbe64ccb191eb0cad2 100644 (file)
@@ -78,7 +78,7 @@
 #define         ivor13 0x19d   /* interrupt vector offset register 13 */
 #define         ivor14 0x19e   /* interrupt vector offset register 14 */
 #define         ivor15 0x19f   /* interrupt vector offset register 15 */
-#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_440GX) || defined(CONFIG_440EP) || defined(CONFIG_440GR) || defined(CONFIG_440SP)
 #define         mcsrr0 0x23a   /* machine check save/restore register 0 */
 #define         mcsrr1 0x23b   /* mahcine check save/restore register 1 */
 #define         mcsr   0x23c   /* machine check status register */
 #define sdr_plbtr      0x4200
 #define sdr_mfr                0x4300  /* SDR0_MFR reg */
 
-
 /*-----------------------------------------------------------------------------
  | SDRAM Controller
  +----------------------------------------------------------------------------*/
 #define mem_eccesr     0x0098  /* ECC error status                         */
 
 /*-----------------------------------------------------------------------------
- | Extrnal Bus Controller
+ | External Bus Controller
  +----------------------------------------------------------------------------*/
 #define EBC_DCR_BASE 0x12
 #define ebccfga (EBC_DCR_BASE+0x0)   /* External bus controller addr reg     */
 #define pbear          0x20    /* periph bus error addr reg            */
 #define pbesr          0x21    /* periph bus error status reg          */
 #define xbcfg          0x23    /* external bus configuration reg       */
-#define xbcid          0x23    /* external bus core id reg             */
+#define xbcid          0x24    /* external bus core id reg             */
 
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
 
 /*-----------------------------------------------------------------------------
  | L2 Cache
  +----------------------------------------------------------------------------*/
-#if defined (CONFIG_440GX)
+#if defined (CONFIG_440GX) || defined(CONFIG_440SP)
 #define L2_CACHE_BASE  0x030
 #define l2_cache_cfg   (L2_CACHE_BASE+0x00)    /* L2 Cache Config      */
 #define l2_cache_cmd   (L2_CACHE_BASE+0x01)    /* L2 Cache Command     */
  | Clocking, Power Management and Chip Control
  +----------------------------------------------------------------------------*/
 #define CNTRL_DCR_BASE 0x0b0
-#if defined (CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
 #define cpc0_er                (CNTRL_DCR_BASE+0x00)   /* CPM enable register          */
 #define cpc0_fr                (CNTRL_DCR_BASE+0x01)   /* CPM force register           */
 #define cpc0_sr                (CNTRL_DCR_BASE+0x02)   /* CPM status register          */
 #define cpc0_strp2     (CNTRL_DCR_BASE+0x36)   /* Power-on config reg 2 (RO)   */
 #define cpc0_strp3     (CNTRL_DCR_BASE+0x37)   /* Power-on config reg 3 (RO)   */
 
+#define cpc0_gpio      (CNTRL_DCR_BASE+0x38)   /* GPIO config reg (440GP)      */
+
 #define cntrl0         (CNTRL_DCR_BASE+0x3b)   /* Control 0 register           */
 #define cntrl1         (CNTRL_DCR_BASE+0x3a)   /* Control 1 register           */
 
 /*---------------------------------------------------------------------------+
 |  Universal interrupt controller 0 interrupts (UIC0)
 +---------------------------------------------------------------------------*/
+#if defined(CONFIG_440SP)
+#define UIC_U0         0x80000000      /* UART 0                           */
+#define UIC_U1         0x40000000      /* UART 1                           */
+#define UIC_IIC0       0x20000000      /* IIC                              */
+#define UIC_IIC1       0x10000000      /* IIC                              */
+#define UIC_PIM                0x08000000      /* PCI0 inbound message             */
+#define UIC_PCRW       0x04000000      /* PCI0 command write register      */
+#define UIC_PPM                0x02000000      /* PCI0 power management            */
+#define UIC_PVPD       0x01000000      /* PCI0 VPD Access                  */
+#define UIC_MSI0       0x00800000      /* PCI0 MSI level 0                 */
+#define UIC_P1IM       0x00400000      /* PCI1 Inbound Message             */
+#define UIC_P1CRW      0x00200000      /* PCI1 command write register      */
+#define UIC_P1PM       0x00100000      /* PCI1 power management            */
+#define UIC_P1VPD      0x00080000      /* PCI1 VPD Access                  */
+#define UIC_P1MSI0     0x00040000      /* PCI1 MSI level 0                 */
+#define UIC_P2IM       0x00020000      /* PCI2 inbound message             */
+#define UIC_P2CRW      0x00010000      /* PCI2 command register write      */
+#define UIC_P2PM       0x00008000      /* PCI2 power management            */
+#define UIC_P2VPD      0x00004000      /* PCI2 VPD access                  */
+#define UIC_P2MSI0     0x00002000      /* PCI2 MSI level 0                 */
+#define UIC_D0CPF      0x00001000      /* DMA0 command pointer             */
+#define UIC_D0CSF      0x00000800      /* DMA0 command status              */
+#define UIC_D1CPF      0x00000400      /* DMA1 command pointer             */
+#define UIC_D1CSF      0x00000200      /* DMA1 command status              */
+#define UIC_I2OID      0x00000100      /* I2O inbound doorbell             */
+#define UIC_I2OPLF     0x00000080      /* I2O inbound post list            */
+#define UIC_I2O0LL     0x00000040      /* I2O0 low latency PLB write       */
+#define UIC_I2O1LL     0x00000020      /* I2O1 low latency PLB write       */
+#define UIC_I2O0HB     0x00000010      /* I2O0 high bandwidth PLB write    */
+#define UIC_I2O1HB     0x00000008      /* I2O1 high bandwidth PLB write    */
+#define UIC_GPTCT      0x00000004      /* GPT count timer                  */
+#define UIC_UIC1NC     0x00000002      /* UIC1 non-critical interrupt      */
+#define UIC_UIC1C      0x00000001      /* UIC1 critical interrupt          */
+#else  /* CONFIG_440SP */
 #define UIC_U0         0x80000000      /* UART 0                           */
 #define UIC_U1         0x40000000      /* UART 1                           */
 #define UIC_IIC0       0x20000000      /* IIC                              */
 #define UIC_EIR6       0x00000004      /* External interrupt 6             */
 #define UIC_UIC1NC     0x00000002      /* UIC1 non-critical interrupt      */
 #define UIC_UIC1C      0x00000001      /* UIC1 critical interrupt          */
+#endif /* CONFIG_440SP */
 
 /* For compatibility with 405 code */
 #define UIC_MAL_TXEOB  UIC_MTE
 /*---------------------------------------------------------------------------+
 |  Universal interrupt controller 1 interrupts (UIC1)
 +---------------------------------------------------------------------------*/
+#if defined(CONFIG_440SP)
+#define UIC_EIR0       0x80000000      /* External interrupt 0             */
+#define UIC_MS         0x40000000      /* MAL SERR                         */
+#define UIC_MTDE       0x20000000      /* MAL TXDE                         */
+#define UIC_MRDE       0x10000000      /* MAL RXDE                         */
+#define UIC_DECE       0x08000000      /* DDR SDRAM correctible error      */
+#define UIC_EBCO       0x04000000      /* EBCO interrupt status            */
+#define UIC_MTE                0x02000000      /* MAL TXEOB                        */
+#define UIC_MRE                0x01000000      /* MAL RXEOB                        */
+#define UIC_P0MSI1     0x00800000      /* PCI0 MSI level 1                 */
+#define UIC_P1MSI1     0x00400000      /* PCI1 MSI level 1                 */
+#define UIC_P2MSI1     0x00200000      /* PCI2 MSI level 1                 */
+#define UIC_L2C                0x00100000      /* L2 cache                         */
+#define UIC_CT0                0x00080000      /* GPT compare timer 0              */
+#define UIC_CT1                0x00040000      /* GPT compare timer 1              */
+#define UIC_CT2                0x00020000      /* GPT compare timer 2              */
+#define UIC_CT3                0x00010000      /* GPT compare timer 3              */
+#define UIC_CT4                0x00008000      /* GPT compare timer 4              */
+#define UIC_EIR1       0x00004000      /* External interrupt 1             */
+#define UIC_EIR2       0x00002000      /* External interrupt 2             */
+#define UIC_EIR3       0x00001000      /* External interrupt 3             */
+#define UIC_EIR4       0x00000800      /* External interrupt 4             */
+#define UIC_EIR5       0x00000400      /* External interrupt 5             */
+#define UIC_DMAE       0x00000200      /* DMA error                        */
+#define UIC_I2OE       0x00000100      /* I2O error                        */
+#define UIC_SRE                0x00000080      /* Serial ROM error                 */
+#define UIC_P0AE       0x00000040      /* PCI0 asynchronous error          */
+#define UIC_P1AE       0x00000020      /* PCI1 asynchronous error          */
+#define UIC_P2AE       0x00000010      /* PCI2 asynchronous error          */
+#define UIC_ETH0       0x00000008      /* Ethernet 0                       */
+#define UIC_EWU0       0x00000004      /* Ethernet 0 wakeup                */
+#define UIC_ETH1       0x00000002      /* Reserved                         */
+#define UIC_XOR                0x00000001      /* XOR                              */
+#else /* CONFIG_440SP */
 #define UIC_MS         0x80000000      /* MAL SERR                         */
 #define UIC_MTDE       0x40000000      /* MAL TXDE                         */
 #define UIC_MRDE       0x20000000      /* MAL RXDE                         */
 #define UIC_EWU0       0x00000004      /* Ethernet 0 wakeup                */
 #define UIC_ETH1       0x00000002      /* Ethernet 1                       */
 #define UIC_EWU1       0x00000001      /* Ethernet 1 wakeup                */
+#endif /* CONFIG_440SP */
 
 /* For compatibility with 405 code */
 #define UIC_MAL_SERR   UIC_MS
 #define EBC_BXAP_TWT_ENCODE(n)         ((((unsigned long)(n))&0xFF)<<23)
 #define EBC_BXAP_BCE_DISABLE           0x00000000
 #define EBC_BXAP_BCE_ENABLE            0x00400000
+#define EBC_BXAP_BCT_MASK              0x00300000
+#define EBC_BXAP_BCT_2TRANS            0x00000000
+#define EBC_BXAP_BCT_4TRANS            0x00100000
+#define EBC_BXAP_BCT_8TRANS            0x00200000
+#define EBC_BXAP_BCT_16TRANS           0x00300000
 #define EBC_BXAP_CSN_ENCODE(n)         ((((unsigned long)(n))&0x3)<<18)
 #define EBC_BXAP_OEN_ENCODE(n)         ((((unsigned long)(n))&0x3)<<16)
 #define EBC_BXAP_WBN_ENCODE(n)         ((((unsigned long)(n))&0x3)<<14)
 #define EBC_CFG_PR_128                 0x0000C000
 
 /*-----------------------------------------------------------------------------+
-|  SDR 0 Bit Settings
+|  SDR0 Bit Settings
 +-----------------------------------------------------------------------------*/
-#define SDR0_SDSTP0_ENG_MASK           0x80000000
-#define SDR0_SDSTP0_ENG_PLLDIS         0x00000000
-#define SDR0_SDSTP0_ENG_PLLENAB                0x80000000
-#define SDR0_SDSTP0_ENG_ENCODE(n)      ((((unsigned long)(n))&0x01)<<31)
-#define SDR0_SDSTP0_ENG_DECODE(n)      ((((unsigned long)(n))>>31)&0x01)
-#define SDR0_SDSTP0_SRC_MASK           0x40000000
-#define SDR0_SDSTP0_SRC_PLLOUTA                0x00000000
-#define SDR0_SDSTP0_SRC_PLLOUTB                0x40000000
-#define SDR0_SDSTP0_SRC_ENCODE(n)      ((((unsigned long)(n))&0x01)<<30)
-#define SDR0_SDSTP0_SRC_DECODE(n)      ((((unsigned long)(n))>>30)&0x01)
-#define SDR0_SDSTP0_SEL_MASK           0x38000000
-#define SDR0_SDSTP0_SEL_PLLOUT         0x00000000
-#define SDR0_SDSTP0_SEL_CPU            0x08000000
-#define SDR0_SDSTP0_SEL_EBC            0x28000000
-#define SDR0_SDSTP0_SEL_ENCODE(n)      ((((unsigned long)(n))&0x07)<<27)
-#define SDR0_SDSTP0_SEL_DECODE(n)      ((((unsigned long)(n))>>27)&0x07)
-#define SDR0_SDSTP0_TUNE_MASK          0x07FE0000
-#define SDR0_SDSTP0_TUNE_ENCODE(n)     ((((unsigned long)(n))&0x3FF)<<17)
-#define SDR0_SDSTP0_TUNE_DECODE(n)     ((((unsigned long)(n))>>17)&0x3FF)
-#define SDR0_SDSTP0_FBDV_MASK          0x0001F000
-#define SDR0_SDSTP0_FBDV_ENCODE(n)     ((((unsigned long)(n))&0x1F)<<12)
-#define SDR0_SDSTP0_FBDV_DECODE(n)     ((((((unsigned long)(n))>>12)-1)&0x1F)+1)
-#define SDR0_SDSTP0_FWDVA_MASK         0x00000F00
-#define SDR0_SDSTP0_FWDVA_ENCODE(n)    ((((unsigned long)(n))&0x0F)<<8)
-#define SDR0_SDSTP0_FWDVA_DECODE(n)    ((((((unsigned long)(n))>>8)-1)&0x0F)+1)
-#define SDR0_SDSTP0_FWDVB_MASK         0x000000E0
-#define SDR0_SDSTP0_FWDVB_ENCODE(n)    ((((unsigned long)(n))&0x07)<<5)
-#define SDR0_SDSTP0_FWDVB_DECODE(n)    ((((((unsigned long)(n))>>5)-1)&0x07)+1)
-#define SDR0_SDSTP0_PRBDV0_MASK                0x0000001C
-#define SDR0_SDSTP0_PRBDV0_ENCODE(n)   ((((unsigned long)(n))&0x07)<<2)
-#define SDR0_SDSTP0_PRBDV0_DECODE(n)   ((((((unsigned long)(n))>>2)-1)&0x07)+1)
-#define SDR0_SDSTP0_OPBDV0_MASK                0x00000003
-#define SDR0_SDSTP0_OPBDV0_ENCODE(n)   ((((unsigned long)(n))&0x03)<<0)
-#define SDR0_SDSTP0_OPBDV0_DECODE(n)   ((((((unsigned long)(n))>>0)-1)&0x03)+1)
-
-#define SDR0_SDSTP1_LFBDV_MASK         0xFC000000
-#define SDR0_SDSTP1_LFBDV_ENCODE(n)    ((((unsigned long)(n))&0x3F)<<26)
-#define SDR0_SDSTP1_LFBDV_DECODE(n)    ((((unsigned long)(n))>>26)&0x3F)
-#define SDR0_SDSTP1_EBCDV0_MASK                0x03000000
-#define SDR0_SDSTP1_EBCDV0_ENCODE(n)   ((((unsigned long)(n))&0x03)<<24)
-#define SDR0_SDSTP1_EBCDV0_DECODE(n)   ((((unsigned long)(n))>>24)&0x03)
-#define SDR0_SDSTP1_MALDV0_MASK                0x00C00000
-#define SDR0_SDSTP1_MALDV0_ENCODE(n)   ((((unsigned long)(n))&0x03)<<22)
-#define SDR0_SDSTP1_MALDV0_DECODE(n)   ((((unsigned long)(n))>>22)&0x03)
-#define SDR0_SDSTP1_RW_MASK            0x00300000
-#define SDR0_SDSTP1_RW_8BIT            0x00000000
-#define SDR0_SDSTP1_RW_16BIT           0x00100000
-#define SDR0_SDSTP1_RW_32BIT           0x00200000
-#define SDR0_SDSTP1_RW_ENCODE(n)       ((((unsigned long)(n))&0x03)<<20)
-#define SDR0_SDSTP1_RW_DECODE(n)       ((((unsigned long)(n))>>20)&0x03)
-#define SDR0_SDSTP1_EARV_MASK          0x00080000
-#define SDR0_SDSTP1_EARV_EBC           0x00000000
-#define SDR0_SDSTP1_EARV_PCI           0x00080000
-#define SDR0_SDSTP1_PAE_MASK           0x00040000
-#define SDR0_SDSTP1_PAE_DISABLE                0x00000000
-#define SDR0_SDSTP1_PAE_ENABLE         0x00040000
-#define SDR0_SDSTP1_PAE_ENCODE(n)      ((((unsigned long)(n))&0x01)<<18)
-#define SDR0_SDSTP1_PAE_DECODE(n)      ((((unsigned long)(n))>>18)&0x01)
-#define SDR0_SDSTP1_PHCE_MASK          0x00020000
-#define SDR0_SDSTP1_PHCE_DISABLE       0x00000000
-#define SDR0_SDSTP1_PHCE_ENABLE                0x00020000
-#define SDR0_SDSTP1_PHCE_ENCODE(n)     ((((unsigned long)(n))&0x01)<<17)
-#define SDR0_SDSTP1_PHCE_DECODE(n)     ((((unsigned long)(n))>>17)&0x01)
-#define SDR0_SDSTP1_PISE_MASK          0x00010000
-#define SDR0_SDSTP1_PISE_DISABLE       0x00000000
-#define SDR0_SDSTP1_PISE_ENABLE                0x00010000
-#define SDR0_SDSTP1_PISE_ENCODE(n)     ((((unsigned long)(n))&0x01)<<16)
-#define SDR0_SDSTP1_PISE_DECODE(n)     ((((unsigned long)(n))>>16)&0x01)
-#define SDR0_SDSTP1_PCWE_MASK          0x00008000
-#define SDR0_SDSTP1_PCWE_DISABLE       0x00000000
-#define SDR0_SDSTP1_PCWE_ENABLE                0x00008000
-#define SDR0_SDSTP1_PCWE_ENCODE(n)     ((((unsigned long)(n))&0x01)<<15)
-#define SDR0_SDSTP1_PCWE_DECODE(n)     ((((unsigned long)(n))>>15)&0x01)
-#define SDR0_SDSTP1_PPIM_MASK          0x00008000
-#define SDR0_SDSTP1_PPIM_ENCODE(n)     ((((unsigned long)(n))&0x0F)<<11)
-#define SDR0_SDSTP1_PPIM_DECODE(n)     ((((unsigned long)(n))>>11)&0x0F)
-#define SDR0_SDSTP1_PR64E_MASK         0x00000400
-#define SDR0_SDSTP1_PR64E_DISABLE      0x00000000
-#define SDR0_SDSTP1_PR64E_ENABLE       0x00000400
-#define SDR0_SDSTP1_PR64E_ENCODE(n)    ((((unsigned long)(n))&0x01)<<10)
-#define SDR0_SDSTP1_PR64E_DECODE(n)    ((((unsigned long)(n))>>10)&0x01)
-#define SDR0_SDSTP1_PXFS_MASK          0x00000300
-#define SDR0_SDSTP1_PXFS_HIGH          0x00000000
-#define SDR0_SDSTP1_PXFS_MED           0x00000100
-#define SDR0_SDSTP1_PXFS_LOW           0x00000200
-#define SDR0_SDSTP1_PXFS_ENCODE(n)     ((((unsigned long)(n))&0x03)<<8)
-#define SDR0_SDSTP1_PXFS_DECODE(n)     ((((unsigned long)(n))>>8)&0x03)
-#define SDR0_SDSTP1_PDM_MASK           0x00000040
-#define SDR0_SDSTP1_PDM_MULTIPOINT     0x00000000
-#define SDR0_SDSTP1_PDM_P2P            0x00000040
-#define SDR0_SDSTP1_PDM_ENCODE(n)      ((((unsigned long)(n))&0x01)<<6)
-#define SDR0_SDSTP1_PDM_DECODE(n)      ((((unsigned long)(n))>>6)&0x01)
-#define SDR0_SDSTP1_EPS_MASK           0x00000038
-#define SDR0_SDSTP1_EPS_GROUP0         0x00000000
-#define SDR0_SDSTP1_EPS_GROUP1         0x00000008
-#define SDR0_SDSTP1_EPS_GROUP2         0x00000010
-#define SDR0_SDSTP1_EPS_GROUP3         0x00000018
-#define SDR0_SDSTP1_EPS_GROUP4         0x00000020
-#define SDR0_SDSTP1_EPS_GROUP5         0x00000028
-#define SDR0_SDSTP1_EPS_GROUP6         0x00000030
-#define SDR0_SDSTP1_EPS_GROUP7         0x00000038
-#define SDR0_SDSTP1_EPS_ENCODE(n)      ((((unsigned long)(n))&0x07)<<3)
-#define SDR0_SDSTP1_EPS_DECODE(n)      ((((unsigned long)(n))>>3)&0x07)
-#define SDR0_SDSTP1_RMII_MASK          0x00000004
-#define SDR0_SDSTP1_RMII_100MBIT       0x00000000
-#define SDR0_SDSTP1_RMII_10MBIT                0x00000004
-#define SDR0_SDSTP1_RMII_ENCODE(n)     ((((unsigned long)(n))&0x01)<<2)
-#define SDR0_SDSTP1_RMII_DECODE(n)     ((((unsigned long)(n))>>2)&0x01)
-#define SDR0_SDSTP1_TRE_MASK           0x00000002
-#define SDR0_SDSTP1_TRE_DISABLE                0x00000000
-#define SDR0_SDSTP1_TRE_ENABLE         0x00000002
-#define SDR0_SDSTP1_TRE_ENCODE(n)      ((((unsigned long)(n))&0x01)<<1)
-#define SDR0_SDSTP1_TRE_DECODE(n)      ((((unsigned long)(n))>>1)&0x01)
-#define SDR0_SDSTP1_NTO1_MASK          0x00000001
-#define SDR0_SDSTP1_NTO1_DISABLE       0x00000000
-#define SDR0_SDSTP1_NTO1_ENABLE                0x00000001
-#define SDR0_SDSTP1_NTO1_ENCODE(n)     ((((unsigned long)(n))&0x01)<<0)
-#define SDR0_SDSTP1_NTO1_DECODE(n)     ((((unsigned long)(n))>>0)&0x01)
-
-#define SDR0_EBC_RW_MASK               0x30000000
-#define SDR0_EBC_RW_8BIT               0x00000000
-#define SDR0_EBC_RW_16BIT              0x10000000
-#define SDR0_EBC_RW_32BIT              0x20000000
-#define SDR0_EBC_RW_ENCODE(n)          ((((unsigned long)(n))&0x03)<<28)
-#define SDR0_EBC_RW_DECODE(n)          ((((unsigned long)(n))>>28)&0x03)
+#define SDR0_SDCS_SDD                  (0x80000000 >> 31)
+
+#if defined(CONFIG_440GP)
+#define CPC0_STRP1_PAE_MASK            (0x80000000 >> 11)
+#define CPC0_STRP1_PISE_MASK           (0x80000000 >> 13)
+#endif /* defined(CONFIG_440GP) */
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
+#define SDR0_SDSTP1_PAE_MASK           (0x80000000 >> 13)
+#define SDR0_SDSTP1_PISE_MASK          (0x80000000 >> 15)
+#endif /* defined(CONFIG_440GX) || defined(CONFIG_440SP) */
+#if defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#define SDR0_SDSTP1_PAE_MASK           (0x80000000 >> 21)
+#define SDR0_SDSTP1_PAME_MASK          (0x80000000 >> 27)
+#endif /* defined(CONFIG_440EP) || defined(CONFIG_440GR) */
 
 #define SDR0_UARTX_UXICS_MASK          0xF0000000
 #define SDR0_UARTX_UXICS_PLB           0x20000000
 /*-----------------------------------------------------------------------------+
 |  Clocking
 +-----------------------------------------------------------------------------*/
-#if !defined (CONFIG_440GX) && !defined(CONFIG_440EP) && !defined(CONFIG_440GR)
+#if !defined (CONFIG_440GX) && !defined(CONFIG_440EP) && !defined(CONFIG_440GR) && !defined(CONFIG_440SP)
 #define PLLSYS0_TUNE_MASK      0xffc00000      /* PLL TUNE bits            */
 #define PLLSYS0_FB_DIV_MASK    0x003c0000      /* Feedback divisor         */
 #define PLLSYS0_FWD_DIV_A_MASK 0x00038000      /* Forward divisor A        */
 /******************************************************************************
  * GPIO macro register defines
  ******************************************************************************/
+#if defined(CONFIG_440GP)
+#define GPIO_BASE0             (CFG_PERIPHERAL_BASE+0x00000700)
+
+#define GPIO0_OR               (GPIO_BASE0+0x0)
+#define GPIO0_TCR              (GPIO_BASE0+0x4)
+#define GPIO0_ODR              (GPIO_BASE0+0x18)
+#define GPIO0_IR               (GPIO_BASE0+0x1C)
+#endif /* CONFIG_440GP */
+
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
 #define GPIO_BASE0             (CFG_PERIPHERAL_BASE+0x00000B00)
 #define GPIO_BASE1             (CFG_PERIPHERAL_BASE+0x00000C00)
similarity index 96%
rename from include/440gx_enet.h
rename to include/ppc4xx_enet.h
index 45c2f46e636471588b4b74774ed53dcb21f4fabc..d6d33b6957b4a13f1174393067d7039f8d6ab043 100644 (file)
 |             ported to handle 440GP and 440GX multiple EMACs
 +----------------------------------------------------------------------------*/
 
-#ifndef _emacgx_enet_h_
-#define _emacgx_enet_h_
+#ifndef _PPC4XX_ENET_H_
+#define _PPC4XX_ENET_H_
 
-#if defined(CONFIG_440)
 #include <net.h>
 #include "405_mal.h"
 
@@ -84,15 +83,15 @@ typedef struct emac_stats_st{       /* Statistic Block */
        int rx;
        int rx_prot_err;
        int int_err;
-    int pkts_tx;
-    int pkts_rx;
-    int pkts_handled;
+       int pkts_tx;
+       int pkts_rx;
+       int pkts_handled;
        short tx_err_log[MAX_ERR_LOG];
        short rx_err_log[MAX_ERR_LOG];
 } EMAC_STATS_ST, *EMAC_STATS_PST;
 
-/* Structure containing variables used by the shared code (440gx_enet.c) */
-typedef struct emac_440gx_hw_st {
+/* Structure containing variables used by the shared code (4xx_enet.c) */
+typedef struct emac_4xx_hw_st {
     uint32_t           hw_addr;                /* EMAC offset */
     uint32_t           tah_addr;               /* TAH offset */
     uint32_t           phy_id;
@@ -127,15 +126,17 @@ typedef struct emac_440gx_hw_st {
     int                        is_receiving;   /* sync with eth interrupt */
     int                        print_speed;    /* print speed message upon start */
     EMAC_STATS_ST      stats;
-} EMAC_440GX_HW_ST, *EMAC_440GX_HW_PST;
+} EMAC_4XX_HW_ST, *EMAC_4XX_HW_PST;
 
 
 #if defined(CONFIG_440GX)
 #define EMAC_NUM_DEV       4
-#elif defined(CONFIG_440) && !defined(CONFIG_440GX)
+#elif (defined(CONFIG_440) || defined(CONFIG_405EP)) &&        \
+       defined(CONFIG_NET_MULTI) &&                    \
+       !defined(CONFIG_440SP)
 #define EMAC_NUM_DEV       2
 #else
-#warning Bad configuration
+#define EMAC_NUM_DEV       1
 #endif
 
 
@@ -224,7 +225,6 @@ typedef struct emac_440gx_hw_st {
 #define TAH_SSR5               (TAH_BASE + 0x28)   /* Segment Size Reg 5 (R/W) */
 #define TAH_TSR                        (TAH_BASE + 0x2C)   /* Transmit Status Register (RO) */
 
-
 /* TAH Revision */
 #define TAH_REV_RN_M           (0x000FFF00)        /* Revision Number */
 #define TAH_REV_BN_M           (0x000000FF)        /* Branch Revision Number */
@@ -276,11 +276,15 @@ typedef struct emac_440gx_hw_st {
 
 
 /* Ethernet MAC Regsiter Addresses */
+#if defined(CONFIG_440)
 #if defined(CONFIG_440EP) || defined(CONFIG_440GR)
 #define EMAC_BASE                          (CFG_PERIPHERAL_BASE + 0x0E00)
 #else
 #define EMAC_BASE                          (CFG_PERIPHERAL_BASE + 0x0800)
 #endif
+#else
+#define EMAC_BASE                      0xEF600800
+#endif
 
 #define EMAC_M0                                    (EMAC_BASE)
 #define EMAC_M1                                    (EMAC_BASE + 4)
@@ -319,7 +323,7 @@ typedef struct emac_440gx_hw_st {
 #define EMAC_M0_WKE                        (0x04000000)
 
 /* on 440GX EMAC_MR1 has a different layout! */
-#if defined(CONFIG_440GX)
+#if defined(CONFIG_440GX) || defined(CONFIG_440SP)
 /* MODE Reg 1 */
 #define EMAC_M1_FDE            (0x80000000)
 #define EMAC_M1_ILE            (0x40000000)
@@ -471,5 +475,4 @@ typedef struct emac_440gx_hw_st {
 /* all the errors we care about */
 #define EMAC_RX_ERRORS         (0x03FF)
 
-#endif /* CONFIG_440 */
-#endif /* _enetLib_h_ */
+#endif /* _PPC4XX_ENET_H_ */
index d8f26fbf29713a294ee20c18e1d499e125e16c40..3e71dbb92f04487a32425e054d6e4d153490fff9 100644 (file)
@@ -32,6 +32,9 @@
 #ifndef _SM501_H_
 #define _SM501_H_
 
+#define PCI_VENDOR_SM          0x126f
+#define PCI_DEVICE_SM501       0x0501
+
 typedef struct {
        unsigned int Index;
        unsigned int Value;
diff --git a/include/spartan3.h b/include/spartan3.h
new file mode 100644 (file)
index 0000000..b14db03
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * (C) Copyright 2002
+ * Rich Ireland, Enterasys Networks, rireland@enterasys.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 _SPARTAN3_H_
+#define _SPARTAN3_H_
+
+#include <xilinx.h>
+
+extern int Spartan3_load( Xilinx_desc *desc, void *image, size_t size );
+extern int Spartan3_dump( Xilinx_desc *desc, void *buf, size_t bsize );
+extern int Spartan3_info( Xilinx_desc *desc );
+extern int Spartan3_reloc( Xilinx_desc *desc, ulong reloc_off );
+
+/* Slave Parallel Implementation function table */
+typedef struct {
+       Xilinx_pre_fn   pre;
+       Xilinx_pgm_fn   pgm;
+       Xilinx_init_fn  init;
+       Xilinx_err_fn   err;
+       Xilinx_done_fn  done;
+       Xilinx_clk_fn   clk;
+       Xilinx_cs_fn    cs;
+       Xilinx_wr_fn    wr;
+       Xilinx_rdata_fn rdata;
+       Xilinx_wdata_fn wdata;
+       Xilinx_busy_fn  busy;
+       Xilinx_abort_fn abort;
+       Xilinx_post_fn  post;
+       int             relocated;
+} Xilinx_Spartan3_Slave_Parallel_fns;
+
+/* Slave Serial Implementation function table */
+typedef struct {
+       Xilinx_pre_fn   pre;
+       Xilinx_pgm_fn   pgm;
+       Xilinx_clk_fn   clk;
+       Xilinx_init_fn  init;
+       Xilinx_done_fn  done;
+       Xilinx_wr_fn    wr;
+       int             relocated;
+} Xilinx_Spartan3_Slave_Serial_fns;
+
+/* Device Image Sizes
+ *********************************************************************/
+/* Spartan-III (1.2V) */
+#define XILINX_XC3S50_SIZE     439264/8
+#define XILINX_XC3S200_SIZE    1047616/8
+#define XILINX_XC3S400_SIZE    1699136/8
+#define XILINX_XC3S1000_SIZE   3223488/8
+#define XILINX_XC3S1500_SIZE   5214784/8
+#define XILINX_XC3S2000_SIZE   7673024/8
+#define XILINX_XC3S4000_SIZE   11316864/8
+#define XILINX_XC3S5000_SIZE   13271936/8
+
+/* Descriptor Macros
+ *********************************************************************/
+/* Spartan-II devices */
+#define XILINX_XC3S50_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S50_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S200_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S200_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S400_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S400_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S1000_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S1000_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S1500_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S1500_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S2000_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S2000E_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S4000_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S4000E_SIZE, fn_table, cookie }
+
+#define XILINX_XC3S5000_DESC(iface, fn_table, cookie) \
+{ Xilinx_Spartan3, iface, XILINX_XC3S5000E_SIZE, fn_table, cookie }
+
+#endif /* _SPARTAN3_H_ */
index ac6ba8c09147365b666a2684e5bbba851946367e..9265be9737245d7a1e8468c398aef12d07945bad 100644 (file)
@@ -84,7 +84,7 @@
        void reset_5xx_watchdog(volatile immap_t *immr);
 #endif
 
-/* IBM 4xx */
+/* AMCC 4xx */
 #if defined(CONFIG_4xx) && !defined(__ASSEMBLY__)
        void reset_4xx_watchdog(void);
 #endif
index b87cfe2edb917039596f3aef845e3adb4606c90b..3704e1d938dc70a1a5e4169b20343f1c2a81f596 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_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_SPARTAN3    (CFG_FPGA_XILINX | CFG_SPARTAN3)
 /* XXX - Add new models here */
 
 
@@ -65,6 +67,7 @@ typedef enum {                                        /* typedef Xilinx_Family */
     Xilinx_Spartan2,                   /* Spartan-II Family */
     Xilinx_VirtexE,                            /* Virtex-E Family */
     Xilinx_Virtex2,                            /* Virtex2 Family */
+    Xilinx_Spartan3,                           /* Spartan-III Family */
     max_xilinx_type                            /* insert all new types before this */
 } Xilinx_Family;                               /* end, typedef Xilinx_Family */
 
index d15860578a90906799c4881e7a5b05bd85e650d4..ca630b377e7093c9f195b4896bcd8b23429a343d 100644 (file)
@@ -167,7 +167,7 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
                        do_reset (cmdtp, flag, argc, argv);
                }
 
-#if defined(CONFIG_B2) || defined(CONFIG_EVB4510)
+#if defined(CONFIG_B2) || defined(CONFIG_EVB4510) || defined(CONFIG_ARMADILLO)
                /*
                 *we need to copy the ramdisk to SRAM to let Linux boot
                 */
index ada8cc887900ea566d2a29d7699ed2512dc603d6..3048cbe4084ba3cc226f1537151a0fcf5dbc865e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2002
+ * (C) Copyright 2002-2006
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * (C) Copyright 2002
  * MA 02111-1307 USA
  */
 
+/*
+ * To match the U-Boot user interface on ARM platforms to the U-Boot
+ * standard (as on PPC platforms), some messages with debug character
+ * are removed from the default U-Boot build.
+ *
+ * Define DEBUG here if you want additional info as shown below
+ * printed upon startup:
+ *
+ * U-Boot code: 00F00000 -> 00F3C774  BSS: -> 00FC3274
+ * IRQ Stack: 00ebff7c
+ * FIQ Stack: 00ebef7c
+ */
+
 #include <common.h>
 #include <command.h>
 #include <malloc.h>
@@ -120,14 +133,14 @@ static int init_baudrate (void)
 static int display_banner (void)
 {
        printf ("\n\n%s\n\n", version_string);
-       printf ("U-Boot code: %08lX -> %08lX  BSS: -> %08lX\n",
-               _armboot_start, _bss_start, _bss_end);
+       debug ("U-Boot code: %08lX -> %08lX  BSS: -> %08lX\n",
+              _armboot_start, _bss_start, _bss_end);
 #ifdef CONFIG_MODEM_SUPPORT
-       puts ("Modem Support enabled\n");
+       debug ("Modem Support enabled\n");
 #endif
 #ifdef CONFIG_USE_IRQ
-       printf ("IRQ Stack: %08lx\n", IRQ_STACK_START);
-       printf ("FIQ Stack: %08lx\n", FIQ_STACK_START);
+       debug ("IRQ Stack: %08lx\n", IRQ_STACK_START);
+       debug ("FIQ Stack: %08lx\n", FIQ_STACK_START);
 #endif
 
        return (0);
@@ -145,12 +158,22 @@ static int display_dram_config (void)
        DECLARE_GLOBAL_DATA_PTR;
        int i;
 
+#ifdef DEBUG
        puts ("RAM Configuration:\n");
 
        for(i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
                printf ("Bank #%d: %08lx ", i, gd->bd->bi_dram[i].start);
                print_size (gd->bd->bi_dram[i].size, "\n");
        }
+#else
+       ulong size = 0;
+
+       for (i=0; i<CONFIG_NR_DRAM_BANKS; i++) {
+               size += gd->bd->bi_dram[i].size;
+       }
+       puts("DRAM:  ");
+       print_size(size, "\n");
+#endif
 
        return (0);
 }
@@ -187,6 +210,8 @@ static void display_flash_config (ulong size)
  */
 typedef int (init_fnc_t) (void);
 
+int print_cpuinfo (void); /* test-only */
+
 init_fnc_t *init_sequence[] = {
        cpu_init,               /* basic cpu dependent setup */
        board_init,             /* basic board dependent setup */
@@ -196,11 +221,14 @@ init_fnc_t *init_sequence[] = {
        serial_init,            /* serial communications setup */
        console_init_f,         /* stage 1 init of console */
        display_banner,         /* say that we are here */
+#if defined(CONFIG_DISPLAY_CPUINFO)
+       print_cpuinfo,          /* display cpu info (and speed) */
+#endif
+#if defined(CONFIG_DISPLAY_BOARDINFO)
+       checkboard,             /* display board info */
+#endif
        dram_init,              /* configure available RAM banks */
        display_dram_config,
-#if defined(CONFIG_VCMA9) || defined (CONFIG_CMC_PU2)
-       checkboard,
-#endif
        NULL,
 };
 
@@ -301,10 +329,25 @@ void start_armboot (void)
                        if (s)
                                s = (*e) ? e + 1 : e;
                }
+
+#ifdef CONFIG_HAS_ETH1
+               i = getenv_r ("eth1addr", tmp, sizeof (tmp));
+               s = (i > 0) ? tmp : NULL;
+
+               for (reg = 0; reg < 6; ++reg) {
+                       gd->bd->bi_enet1addr[reg] = s ? simple_strtoul (s, &e, 16) : 0;
+                       if (s)
+                               s = (*e) ? e + 1 : e;
+               }
+#endif
        }
 
        devices_init ();        /* get the devices list going. */
 
+#ifdef CONFIG_CMC_PU2
+       load_sernum_ethaddr ();
+#endif /* CONFIG_CMC_PU2 */
+
        jumptable_init ();
 
        console_init_r ();      /* fully init console as a device */
@@ -341,8 +384,10 @@ void start_armboot (void)
 #ifdef BOARD_LATE_INIT
        board_late_init ();
 #endif
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
        puts ("Net:   ");
+#endif
        eth_initialize(gd->bd);
 #endif
        /* main_loop() can return to retry autoboot, if so just run it again. */
index 5ba8d7cb514e6561af04c6e3251014a07e5a60d1..0e99d1b2b50cc9200da6dc49de3a35a858490a90 100644 (file)
@@ -374,17 +374,18 @@ char * strsep(char **s, const char *ct)
  */
 char *strswab(const char *s)
 {
-       char *p;
+       char *p, *q;
 
        if ((NULL == s) || ('\0' == *s)) {
                return (NULL);
        }
 
-       for (p = ((char *)s + 1); '\0' != *p; p += 2) {
+       for (p=(char *)s, q=p+1; (*p != '\0') && (*q != '\0'); p+=2, q+=2) {
                char  tmp;
-               tmp = *(p-1);
-               *(p-1) = *p;
-               *p = tmp;
+
+               tmp = *p;
+               *p  = *q;
+               *q  = tmp;
        }
 
        return (char *) s;
index a1808142e0a1af6eeb02de5fc5f485497f9581d1..e90eb6e569b8374c35731ac1ed40f368d568aa09 100644 (file)
@@ -317,15 +317,6 @@ void start_i386boot (void)
        misc_init_r();
 #endif
 
-
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && (0)
-       WATCHDOG_RESET();
-# ifdef DEBUG
-       puts ("Reset Ethernet PHY\n");
-# endif
-       reset_phy();
-#endif
-
 #if (CONFIG_COMMANDS & CFG_CMD_PCMCIA) && !(CONFIG_COMMANDS & CFG_CMD_IDE)
        WATCHDOG_RESET();
        puts ("PCMCIA:");
@@ -387,12 +378,22 @@ void start_i386boot (void)
        doc_init();
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
        WATCHDOG_RESET();
        puts("Net:   ");
+#endif
        eth_initialize(gd->bd);
 #endif
 
+#if (CONFIG_COMMANDS & CFG_CMD_NET) && (0)
+       WATCHDOG_RESET();
+# ifdef DEBUG
+       puts ("Reset Ethernet PHY\n");
+# endif
+       reset_phy();
+#endif
+
 #ifdef CONFIG_LAST_STAGE_INIT
        WATCHDOG_RESET();
        /*
index 12df61fdde3734c88fb1933d49f95fc661d5d88a..b7d335641ae957db1a177375f7cc1b9bf0554566 100644 (file)
@@ -29,6 +29,8 @@
 #include <net.h>
 #include <environment.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \
       (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || \
     defined(CFG_ENV_IS_IN_NVRAM)
@@ -66,8 +68,6 @@ static ulong mem_malloc_brk;
  */
 static void mem_malloc_init (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        ulong dest_addr = CFG_MONITOR_BASE + gd->reloc_off;
 
        mem_malloc_end = dest_addr;
@@ -94,8 +94,6 @@ void *sbrk (ptrdiff_t increment)
 
 static int init_func_ram (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
 #ifdef CONFIG_BOARD_TYPES
        int board_type = gd->board_type;
 #else
@@ -127,9 +125,7 @@ static void display_flash_config(ulong size)
 
 static int init_baudrate (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
-       uchar tmp[64];  /* long enough for environment variables */
+       char tmp[64];   /* long enough for environment variables */
        int i = getenv_r ("baudrate", tmp, sizeof (tmp));
 
        gd->baudrate = (i > 0)
@@ -180,12 +176,11 @@ init_fnc_t *init_sequence[] = {
 
 void board_init_f(ulong bootflag)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        gd_t gd_data, *id;
        bd_t *bd;
        init_fnc_t **init_fnc_ptr;
        ulong addr, addr_sp, len = (ulong)&uboot_end - CFG_MONITOR_BASE;
+       ulong *s;
 #ifdef CONFIG_PURPLE
        void copy_code (ulong);
 #endif
@@ -262,8 +257,10 @@ void board_init_f(ulong bootflag)
         */
        addr_sp -= 16;
        addr_sp &= ~0xF;
-       *((ulong *) addr_sp)-- = 0;
-       *((ulong *) addr_sp)-- = 0;
+       s = (ulong *)addr_sp;
+       *s-- = 0;
+       *s-- = 0;
+       addr_sp = (ulong)s;
        debug ("Stack Pointer at: %08lx\n", addr_sp);
 
        /*
@@ -298,7 +295,6 @@ void board_init_f(ulong bootflag)
 
 void board_init_r (gd_t *id, ulong dest_addr)
 {
-       DECLARE_GLOBAL_DATA_PTR;
        cmd_tbl_t *cmdtp;
        ulong size;
        extern void malloc_bin_reloc (void);
@@ -414,8 +410,10 @@ void board_init_r (gd_t *id, ulong dest_addr)
        misc_init_r ();
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
        puts ("Net:   ");
+#endif
        eth_initialize(gd->bd);
 #endif
 
index 18eafe13de40dbb1f01573044e7e0a233db9049d..12e84359c92a14e08fac8a5bfd9f34f81a8d8b35 100644 (file)
@@ -94,7 +94,7 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                checksum = ntohl (hdr->ih_hcrc);
                hdr->ih_hcrc = 0;
 
-               if (crc32 (0, (char *) data, len) != checksum) {
+               if (crc32 (0, (uchar *) data, len) != checksum) {
                        printf ("Bad Header Checksum\n");
                        SHOW_BOOT_PROGRESS (-11);
                        do_reset (cmdtp, flag, argc, argv);
@@ -111,7 +111,7 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[],
                        ulong csum = 0;
 
                        printf ("   Verifying Checksum ... ");
-                       csum = crc32 (0, (char *) data, len);
+                       csum = crc32 (0, (uchar *) data, len);
                        if (csum != ntohl (hdr->ih_dcrc)) {
                                printf ("Bad Data CRC\n");
                                SHOW_BOOT_PROGRESS (-12);
index dab268e351ab9163663ba16752420f816bf41ffe..f40bb253b815a69db2dba67a28d97b30245110f3 100644 (file)
@@ -90,6 +90,7 @@ extern flash_info_t flash_info[];
 #endif
 
 #include <environment.h>
+DECLARE_GLOBAL_DATA_PTR;
 
 #if defined(CFG_ENV_IS_EMBEDDED)
 #define TOTAL_MALLOC_LEN       CFG_MALLOC_LEN
@@ -126,8 +127,6 @@ static      ulong   mem_malloc_brk   = 0;
  */
 static void mem_malloc_init (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        ulong dest_addr = CFG_MONITOR_BASE + gd->reloc_off;
 
        mem_malloc_end = dest_addr;
@@ -187,9 +186,7 @@ typedef int (init_fnc_t) (void);
 
 static int init_baudrate (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
-       uchar tmp[64];  /* long enough for environment variables */
+       char tmp[64];   /* long enough for environment variables */
        int i = getenv_r ("baudrate", tmp, sizeof (tmp));
 
        gd->baudrate = (i > 0)
@@ -200,10 +197,12 @@ static int init_baudrate (void)
 
 /***********************************************************************/
 
+#ifdef CONFIG_ADD_RAM_INFO
+void board_add_ram_info(int);
+#endif
+
 static int init_func_ram (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
 #ifdef CONFIG_BOARD_TYPES
        int board_type = gd->board_type;
 #else
@@ -212,7 +211,11 @@ static int init_func_ram (void)
        puts ("DRAM:  ");
 
        if ((gd->ram_size = initdram (board_type)) > 0) {
-               print_size (gd->ram_size, "\n");
+               print_size (gd->ram_size, "");
+#ifdef CONFIG_ADD_RAM_INFO
+               board_add_ram_info(0);
+#endif
+               putc('\n');
                return (0);
        }
        puts (failed);
@@ -348,10 +351,9 @@ init_fnc_t *init_sequence[] = {
 
 void board_init_f (ulong bootflag)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        bd_t *bd;
        ulong len, addr, addr_sp;
+       ulong *s;
        gd_t *id;
        init_fnc_t **init_fnc_ptr;
 #ifdef CONFIG_PRAM
@@ -407,8 +409,8 @@ void board_init_f (ulong bootflag)
        /*
         * reserve protected RAM
         */
-       i = getenv_r ("pram", tmp, sizeof (tmp));
-       reg = (i > 0) ? simple_strtoul (tmp, NULL, 10) : CONFIG_PRAM;
+       i = getenv_r ("pram", (char *)tmp, sizeof (tmp));
+       reg = (i > 0) ? simple_strtoul ((const char *)tmp, NULL, 10) : CONFIG_PRAM;
        addr -= (reg << 10);            /* size is in kB */
        debug ("Reserving %ldk for protected RAM at %08lx\n", reg, addr);
 #endif /* CONFIG_PRAM */
@@ -435,6 +437,10 @@ void board_init_f (ulong bootflag)
         */
        addr -= len;
        addr &= ~(4096 - 1);
+#ifdef CONFIG_E500
+       /* round down to next 64 kB limit so that IVPR stays aligned */
+       addr &= ~(65536 - 1);
+#endif
 
        debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
 
@@ -471,8 +477,10 @@ void board_init_f (ulong bootflag)
         */
        addr_sp -= 16;
        addr_sp &= ~0xF;
-       *((ulong *) addr_sp)-- = 0;
-       *((ulong *) addr_sp)-- = 0;
+       s = (ulong *)addr_sp;
+       *s-- = 0;
+       *s-- = 0;
+       addr_sp = (ulong)s;
        debug ("Stack Pointer at: %08lx\n", addr_sp);
 
        /*
@@ -542,8 +550,8 @@ void board_init_f (ulong bootflag)
        bd->bi_baudrate = gd->baudrate; /* Console Baudrate     */
 
 #ifdef CFG_EXTBDINFO
-       strncpy (bd->bi_s_version, "1.2", sizeof (bd->bi_s_version));
-       strncpy (bd->bi_r_version, U_BOOT_VERSION, sizeof (bd->bi_r_version));
+       strncpy ((char *)bd->bi_s_version, "1.2", sizeof (bd->bi_s_version));
+       strncpy ((char *)bd->bi_r_version, U_BOOT_VERSION, sizeof (bd->bi_r_version));
 
        bd->bi_procfreq = gd->cpu_clk;  /* Processor Speed, In Hz */
        bd->bi_plb_busfreq = gd->bus_clk;
@@ -573,7 +581,6 @@ void board_init_f (ulong bootflag)
        /* NOTREACHED - relocate_code() does not return */
 }
 
-
 /************************************************************************
  *
  * This is the next part if the initialization sequence: we are now
@@ -583,10 +590,8 @@ void board_init_f (ulong bootflag)
  *
  ************************************************************************
  */
-
 void board_init_r (gd_t *id, ulong dest_addr)
 {
-       DECLARE_GLOBAL_DATA_PTR;
        cmd_tbl_t *cmdtp;
        char *s, *e;
        bd_t *bd;
@@ -900,27 +905,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
                hermes_start_lxt980 ((int) bd->bi_ethspeed);
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && ( \
-    defined(CONFIG_CCM)                || \
-    defined(CONFIG_ELPT860)    || \
-    defined(CONFIG_EP8260)     || \
-    defined(CONFIG_IP860)      || \
-    defined(CONFIG_IVML24)     || \
-    defined(CONFIG_IVMS8)      || \
-    defined(CONFIG_MPC8260ADS) || \
-    defined(CONFIG_MPC8266ADS) || \
-    defined(CONFIG_MPC8560ADS) || \
-    defined(CONFIG_PCU_E)      || \
-    defined(CONFIG_RPXSUPER)   || \
-    defined(CONFIG_STXGP3)     || \
-    defined(CONFIG_SPD823TS)   || \
-    defined(CONFIG_RESET_PHY_R)        )
-
-       WATCHDOG_RESET ();
-       debug ("Reset Ethernet PHY\n");
-       reset_phy ();
-#endif
-
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
        WATCHDOG_RESET ();
        puts ("KGDB:  ");
@@ -979,12 +963,35 @@ void board_init_r (gd_t *id, ulong dest_addr)
        nand_init();            /* go init the NAND */
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
        WATCHDOG_RESET ();
        puts ("Net:   ");
+#endif
        eth_initialize (bd);
 #endif
 
+#if (CONFIG_COMMANDS & CFG_CMD_NET) && ( \
+    defined(CONFIG_CCM)                || \
+    defined(CONFIG_ELPT860)    || \
+    defined(CONFIG_EP8260)     || \
+    defined(CONFIG_IP860)      || \
+    defined(CONFIG_IVML24)     || \
+    defined(CONFIG_IVMS8)      || \
+    defined(CONFIG_MPC8260ADS) || \
+    defined(CONFIG_MPC8266ADS) || \
+    defined(CONFIG_MPC8560ADS) || \
+    defined(CONFIG_PCU_E)      || \
+    defined(CONFIG_RPXSUPER)   || \
+    defined(CONFIG_STXGP3)     || \
+    defined(CONFIG_SPD823TS)   || \
+    defined(CONFIG_RESET_PHY_R)        )
+
+       WATCHDOG_RESET ();
+       debug ("Reset Ethernet PHY\n");
+       reset_phy ();
+#endif
+
 #ifdef CONFIG_POST
        post_run (NULL, POST_RAM | post_bootmode_get(0));
 #endif
@@ -1043,8 +1050,8 @@ void board_init_r (gd_t *id, ulong dest_addr)
                /* Also take the logbuffer into account (pram is in kB) */
                pram += (LOGBUFF_LEN+LOGBUFF_OVERHEAD)/1024;
 #endif
-               sprintf (memsz, "%ldk", (bd->bi_memsize / 1024) - pram);
-               setenv ("mem", memsz);
+               sprintf ((char *)memsz, "%ldk", (bd->bi_memsize / 1024) - pram);
+               setenv ("mem", (char *)memsz);
        }
 #endif
 
@@ -1082,6 +1089,39 @@ void hang (void)
 
 #ifdef CONFIG_MODEM_SUPPORT
 /* called from main loop (common/main.c) */
+/* 'inline' - We have to do it fast */
+static inline void mdm_readline(char *buf, int bufsiz)
+{
+       char c;
+       char *p;
+       int n;
+
+       n = 0;
+       p = buf;
+       for(;;) {
+               c = serial_getc();
+
+               /*              dbg("(%c)", c); */
+
+               switch(c) {
+               case '\r':
+                       break;
+               case '\n':
+                       *p = '\0';
+                       return;
+
+               default:
+                       if(n++ > bufsiz) {
+                               *p = '\0';
+                               return; /* sanity check */
+                       }
+                       *p = c;
+                       p++;
+                       break;
+               }
+       }
+}
+
 extern void  dbg(const char *fmt, ...);
 int mdm_init (void)
 {
@@ -1089,7 +1129,6 @@ int mdm_init (void)
        char *init_str;
        int i;
        extern char console_buffer[];
-       static inline void mdm_readline(char *buf, int bufsiz);
        extern void enable_putc(void);
        extern int hwflow_onoff(int);
 
@@ -1144,38 +1183,6 @@ int mdm_init (void)
        return 0;
 }
 
-/* 'inline' - We have to do it fast */
-static inline void mdm_readline(char *buf, int bufsiz)
-{
-       char c;
-       char *p;
-       int n;
-
-       n = 0;
-       p = buf;
-       for(;;) {
-               c = serial_getc();
-
-               /*              dbg("(%c)", c); */
-
-               switch(c) {
-               case '\r':
-                       break;
-               case '\n':
-                       *p = '\0';
-                       return;
-
-               default:
-                       if(n++ > bufsiz) {
-                               *p = '\0';
-                               return; /* sanity check */
-                       }
-                       *p = c;
-                       p++;
-                       break;
-               }
-       }
-}
 #endif
 
 #if 0 /* We could use plain global data, but the resulting code is bigger */
index b907351f25c5434969731cfa2bb587ecd860eba6..8c56c0845f3c61e977f95e4ff4bea932b2627101 100644 (file)
@@ -330,7 +330,7 @@ BootpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
 
        /* Retrieve extended information (we must parse the vendor area) */
        if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
-               BootpVendorProcess(&bp->bp_vend[4], len);
+               BootpVendorProcess((uchar *)&bp->bp_vend[4], len);
 
        NetSetTimeout(0, (thand_f *)0);
 
@@ -387,7 +387,7 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
        u8 *x;
 #endif
 #if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SEND_HOSTNAME)
-       uchar *hostname;
+       char *hostname;
 #endif
 
        *e++ = 99;              /* RFC1048 Magic Cookie */
@@ -578,7 +578,7 @@ BootpRequest (void)
        unsigned char bi_enetaddr[6];
        int   reg;
        char  *e,*s;
-       uchar tmp[64];
+       char tmp[64];
        ulong tst1, tst2, sum, m_mask, m_value = 0;
 
        if (BootpTry ==0) {
@@ -679,9 +679,9 @@ BootpRequest (void)
 
        /* Request additional information from the BOOTP/DHCP server */
 #if (CONFIG_COMMANDS & CFG_CMD_DHCP)
-       ext_len = DhcpExtended(bp->bp_vend, DHCP_DISCOVER, 0, 0);
+       ext_len = DhcpExtended((u8 *)bp->bp_vend, DHCP_DISCOVER, 0, 0);
 #else
-       ext_len = BootpExtended(bp->bp_vend);
+       ext_len = BootpExtended((u8 *)bp->bp_vend);
 #endif /* CFG_CMD_DHCP */
 
        /*
@@ -836,7 +836,7 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)
         * Copy options from OFFER packet if present
         */
        NetCopyIP(&OfferedIP, &bp->bp_yiaddr);
-       extlen = DhcpExtended(bp->bp_vend, DHCP_REQUEST, NetDHCPServerIP, OfferedIP);
+       extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_REQUEST, NetDHCPServerIP, OfferedIP);
 
        pktlen = BOOTP_SIZE - sizeof(bp->bp_vend) + extlen;
        iplen = BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + extlen;
@@ -882,7 +882,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
                        dhcp_state = REQUESTING;
 
                        if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
-                               DhcpOptionsProcess(&bp->bp_vend[4]);
+                               DhcpOptionsProcess((u8 *)&bp->bp_vend[4]);
 
                        BootpCopyNetParams(bp); /* Store net params from reply */
 
@@ -897,11 +897,11 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
        case REQUESTING:
                debug ("DHCP State: REQUESTING\n");
 
-               if ( DhcpMessageType(bp->bp_vend) == DHCP_ACK ) {
+               if ( DhcpMessageType((u8 *)bp->bp_vend) == DHCP_ACK ) {
                        char *s;
 
                        if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
-                               DhcpOptionsProcess(&bp->bp_vend[4]);
+                               DhcpOptionsProcess((u8 *)&bp->bp_vend[4]);
                        BootpCopyNetParams(bp); /* Store net params from reply */
                        dhcp_state = BOUND;
                        puts ("DHCP client bound to address ");
index 61862aaba9e2047c59374d7a5280ad42a9cc59e1..9341e20e95c5ff5c36a8f9506b4039bbc6aefd43 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -24,6 +24,7 @@
 #include <common.h>
 #include <command.h>
 #include <net.h>
+#include <miiphy.h>
 
 #if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
 
@@ -47,7 +48,6 @@ extern int ns8382x_initialize(bd_t*);
 extern int pcnet_initialize(bd_t*);
 extern int plb2800_eth_initialize(bd_t*);
 extern int ppc_4xx_eth_initialize(bd_t *);
-extern int ppc_440x_eth_initialize(bd_t *);
 extern int rtl8139_initialize(bd_t*);
 extern int rtl8169_initialize(bd_t*);
 extern int scc_initialize(bd_t*);
@@ -61,6 +61,26 @@ struct eth_device *eth_get_dev(void)
        return eth_current;
 }
 
+struct eth_device *eth_get_dev_by_name(char *devname)
+{
+       struct eth_device *dev, *target_dev;
+
+       if (!eth_devices)
+               return NULL;
+
+       dev = eth_devices;
+       target_dev = NULL;
+       do {
+               if (strcmp(devname, dev->name) == 0) {
+                       target_dev = dev;
+                       break;
+               }
+               dev = dev->next;
+       } while (dev != eth_devices);
+
+       return target_dev;
+}
+
 int eth_get_dev_index (void)
 {
        struct eth_device *dev;
@@ -110,13 +130,17 @@ int eth_register(struct eth_device* dev)
 
 int eth_initialize(bd_t *bis)
 {
-       unsigned char enetvar[32], env_enetaddr[6];
+       char enetvar[32], env_enetaddr[6];
        int i, eth_number = 0;
        char *tmp, *end;
 
        eth_devices = NULL;
        eth_current = NULL;
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_init();
+#endif
+
 #ifdef CONFIG_DB64360
        mv6436x_eth_initialize(bis);
 #endif
@@ -126,13 +150,9 @@ int eth_initialize(bd_t *bis)
 #ifdef CONFIG_DB64460
        mv6446x_eth_initialize(bis);
 #endif
-#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
-  ( defined(CONFIG_440) && !defined(CONFIG_NET_MULTI) )
+#if defined(CONFIG_4xx) && !defined(CONFIG_IOP480) && !defined(CONFIG_AP1000)
        ppc_4xx_eth_initialize(bis);
 #endif
-#if defined(CONFIG_440) && defined(CONFIG_NET_MULTI)
-       ppc_440x_eth_initialize(bis);
-#endif
 #ifdef CONFIG_INCA_IP_SWITCH
        inca_switch_initialize(bis);
 #endif
@@ -142,9 +162,6 @@ int eth_initialize(bd_t *bis)
 #ifdef SCC_ENET
        scc_initialize(bis);
 #endif
-#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
-       fec_initialize(bis);
-#endif
 #if defined(CONFIG_MPC5xxx_FEC)
        mpc5xxx_fec_initialize(bis);
 #endif
@@ -178,6 +195,9 @@ int eth_initialize(bd_t *bis)
        tsec_initialize(bis, 3, CONFIG_MPC83XX_TSEC4_NAME);
 #    endif
 #endif
+#if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
+       fec_initialize(bis);
+#endif
 #if defined(CONFIG_AU1X00)
        au1x00_enet_initialize(bis);
 #endif
@@ -307,9 +327,9 @@ void eth_set_enetaddr(int num, char *addr) {
        debug ( "Setting new HW address on %s\n"
                "New Address is             %02X:%02X:%02X:%02X:%02X:%02X\n",
                dev->name,
-               dev->enetaddr[0], dev->enetaddr[1],
-               dev->enetaddr[2], dev->enetaddr[3],
-               dev->enetaddr[4], dev->enetaddr[5]);
+               enetaddr[0], enetaddr[1],
+               enetaddr[2], enetaddr[3],
+               enetaddr[4], enetaddr[5]);
 
        memcpy(dev->enetaddr, enetaddr, 6);
 }
@@ -418,4 +438,32 @@ char *eth_get_name (void)
 {
        return (eth_current ? eth_current->name : "unknown");
 }
+#elif (CONFIG_COMMANDS & CFG_CMD_NET) && !defined(CONFIG_NET_MULTI)
+
+extern int at91rm9200_miiphy_initialize(bd_t *bis);
+extern int emac4xx_miiphy_initialize(bd_t *bis);
+extern int mcf52x2_miiphy_initialize(bd_t *bis);
+extern int ns7520_miiphy_initialize(bd_t *bis);
+
+int eth_initialize(bd_t *bis)
+{
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+       miiphy_init();
+#endif
+
+#if defined(CONFIG_AT91RM9200)
+       at91rm9200_miiphy_initialize(bis);
+#endif
+#if defined(CONFIG_4xx) && !defined(CONFIG_IOP480) \
+       && !defined(CONFIG_AP1000) && !defined(CONFIG_405)
+       emac4xx_miiphy_initialize(bis);
+#endif
+#if defined(CONFIG_MCF52x2)
+       mcf52x2_miiphy_initialize(bis);
+#endif
+#if defined(CONFIG_NETARM)
+       ns7520_miiphy_initialize(bis);
+#endif
+       return 0;
+}
 #endif
index 00217be08103f85aef1b7b584a2f65da2aee41c6..37c5fb698e1b18ef1a4bc925a3685b1fe9dbddb1 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -461,7 +461,7 @@ restart:
        /*
         * Echo the inverted link state to the fault LED.
         */
-       if(miiphy_link(CFG_FAULT_MII_ADDR)) {
+       if(miiphy_link(eth_get_dev()->name, CFG_FAULT_MII_ADDR)) {
                status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
        } else {
                status_led_set (STATUS_LED_RED, STATUS_LED_ON);
@@ -512,7 +512,7 @@ restart:
                        /*
                         * Echo the inverted link state to the fault LED.
                         */
-                       if(miiphy_link(CFG_FAULT_MII_ADDR)) {
+                       if(miiphy_link(eth_get_dev()->name, CFG_FAULT_MII_ADDR)) {
                                status_led_set (STATUS_LED_RED, STATUS_LED_OFF);
                        } else {
                                status_led_set (STATUS_LED_RED, STATUS_LED_ON);
@@ -810,6 +810,7 @@ static ushort CDP_compute_csum(const uchar *buff, ushort len)
        int     odd;
        ulong   result = 0;
        ushort  leftover;
+       ushort *p;
 
        if (len > 0) {
                odd = 1 & (ulong)buff;
@@ -819,14 +820,19 @@ static ushort CDP_compute_csum(const uchar *buff, ushort len)
                        buff++;
                }
                while (len > 1) {
-                       result += *((const ushort *)buff)++;
+                       p = (ushort *)buff;
+                       result += *p++;
+                       buff = (uchar *)p;
                        if (result & 0x80000000)
                                result = (result & 0xFFFF) + (result >> 16);
                        len -= 2;
                }
                if (len) {
                        leftover = (signed short)(*(const signed char *)buff);
-                       /* * XXX CISCO SUCKS big time! (and blows too) */
+                       /* CISCO SUCKS big time! (and blows too):
+                        * CDP uses the IP checksum algorithm with a twist;
+                        * for the last byte it *sign* extends and sums.
+                        */
                        result = (result & 0xffff0000) | ((result + leftover) & 0x0000ffff);
                }
                while (result >> 16)
@@ -1574,10 +1580,11 @@ unsigned
 NetCksum(uchar * ptr, int len)
 {
        ulong   xsum;
+       ushort *p = (ushort *)ptr;
 
        xsum = 0;
        while (len-- > 0)
-               xsum += *((ushort *)ptr)++;
+               xsum += *p++;
        xsum = (xsum & 0xffff) + (xsum >> 16);
        xsum = (xsum & 0xffff) + (xsum >> 16);
        return (xsum & 0xffff);
@@ -1654,7 +1661,7 @@ NetSetIP(volatile uchar * xip, IPaddr_t dest, int dport, int sport, int len)
        ip->ip_sum   = ~NetCksum((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2);
 }
 
-void copy_filename (uchar *dst, uchar *src, int size)
+void copy_filename (char *dst, char *src, int size)
 {
        if (*src && (*src == '"')) {
                ++src;
index 64a5576663c68ff6216d82b3d4a2eade05e7f2b0..eca21d294eb3cae2dfbb7072142c61fc39b703e6 100644 (file)
@@ -58,7 +58,7 @@ static char default_filename[DEFAULT_NAME_LEN];
 static char *tftp_filename;
 
 #ifdef CFG_DIRECT_FLASH_TFTP
-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+extern flash_info_t flash_info[];
 #endif
 
 static __inline__ void
@@ -78,7 +78,7 @@ store_block (unsigned block, uchar * src, unsigned len)
        }
 
        if (rc) { /* Flash is destination for this packet */
-               rc = flash_write ((uchar *)src, (ulong)(load_addr+offset), len);
+               rc = flash_write ((char *)src, (ulong)(load_addr+offset), len);
                if (rc) {
                        flash_perror (rc);
                        NetState = NETLOOP_FAIL;
@@ -106,6 +106,7 @@ TftpSend (void)
        volatile uchar *        pkt;
        volatile uchar *        xp;
        int                     len = 0;
+       volatile ushort *s;
 
        /*
         *      We will always be sending some sort of packet, so
@@ -117,7 +118,9 @@ TftpSend (void)
 
        case STATE_RRQ:
                xp = pkt;
-               *((ushort *)pkt)++ = htons(TFTP_RRQ);
+               s = (ushort *)pkt;
+               *s++ = htons(TFTP_RRQ);
+               pkt = (uchar *)s;
                strcpy ((char *)pkt, tftp_filename);
                pkt += strlen(tftp_filename) + 1;
                strcpy ((char *)pkt, "octet");
@@ -135,15 +138,19 @@ TftpSend (void)
        case STATE_DATA:
        case STATE_OACK:
                xp = pkt;
-               *((ushort *)pkt)++ = htons(TFTP_ACK);
-               *((ushort *)pkt)++ = htons(TftpBlock);
+               s = (ushort *)pkt;
+               *s++ = htons(TFTP_ACK);
+               *s++ = htons(TftpBlock);
+               pkt = (uchar *)s;
                len = pkt - xp;
                break;
 
        case STATE_TOO_LARGE:
                xp = pkt;
-               *((ushort *)pkt)++ = htons(TFTP_ERROR);
-               *((ushort *)pkt)++ = htons(3);
+               s = (ushort *)pkt;
+               *s++ = htons(TFTP_ERROR);
+               *s++ = htons(3);
+               pkt = (uchar *)s;
                strcpy ((char *)pkt, "File too large");
                pkt += 14 /*strlen("File too large")*/ + 1;
                len = pkt - xp;
@@ -151,8 +158,10 @@ TftpSend (void)
 
        case STATE_BAD_MAGIC:
                xp = pkt;
-               *((ushort *)pkt)++ = htons(TFTP_ERROR);
-               *((ushort *)pkt)++ = htons(2);
+               s = (ushort *)pkt;
+               *s++ = htons(TFTP_ERROR);
+               *s++ = htons(2);
+               pkt = (uchar *)s;
                strcpy ((char *)pkt, "File has bad magic");
                pkt += 18 /*strlen("File has bad magic")*/ + 1;
                len = pkt - xp;
@@ -167,6 +176,7 @@ static void
 TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
 {
        ushort proto;
+       ushort *s;
 
        if (dest != TftpOurPort) {
                return;
@@ -180,7 +190,9 @@ TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
        }
        len -= 2;
        /* warning: don't use increment (++) in ntohs() macros!! */
-       proto = *((ushort *)pkt)++;
+       s = (ushort *)pkt;
+       proto = *s++;
+       pkt = (uchar *)s;
        switch (ntohs(proto)) {
 
        case TFTP_RRQ:
@@ -301,6 +313,10 @@ TftpTimeout (void)
 void
 TftpStart (void)
 {
+#ifdef CONFIG_TFTP_PORT
+       char *ep;             /* Environment pointer */
+#endif
+
        if (BootFile[0] == '\0') {
                sprintf(default_filename, "%02lX%02lX%02lX%02lX.img",
                        NetOurIP & 0xFF,
@@ -352,7 +368,16 @@ TftpStart (void)
        TftpServerPort = WELL_KNOWN_PORT;
        TftpTimeoutCount = 0;
        TftpState = STATE_RRQ;
+       /* Use a pseudo-random port unless a specific port is set */
        TftpOurPort = 1024 + (get_timer(0) % 3072);
+#ifdef CONFIG_TFTP_PORT
+       if ((ep = getenv("tftpdstp")) != NULL) {
+               TftpServerPort = simple_strtol(ep, NULL, 10);
+       }
+       if ((ep = getenv("tftpsrcp")) != NULL) {
+               TftpOurPort= simple_strtol(ep, NULL, 10);
+       }
+#endif
        TftpBlock = 0;
 
        /* zero out server ether in case the server ip has changed */
index 0dac858ea49c7640c4d05356015a3b53d4184229..a10bc502d33e7ecce1befb347356bc1b5e9aa230 100644 (file)
@@ -224,7 +224,7 @@ const unsigned long long otherpattern = 0x0123456789abcdefULL;
 
 static int memory_post_dataline(unsigned long long * pmem)
 {
-       unsigned long long temp64;
+       unsigned long long temp64 = 0;
        int num_patterns = sizeof(pattern)/ sizeof(pattern[0]);
        int i;
        unsigned int hi, lo, pathi, patlo;
@@ -418,14 +418,14 @@ static int memory_post_tests (unsigned long start, unsigned long size)
        int ret = 0;
 
        if (ret == 0)
-               ret = memory_post_dataline ((long long *)start);
+               ret = memory_post_dataline ((unsigned long long *)start);
        WATCHDOG_RESET ();
        if (ret == 0)
-               ret = memory_post_addrline ((long *)start, (long *)start, size);
+               ret = memory_post_addrline ((ulong *)start, (ulong *)start, size);
        WATCHDOG_RESET ();
        if (ret == 0)
-               ret = memory_post_addrline ((long *)(start + size - 8),
-                                           (long *)start, size);
+               ret = memory_post_addrline ((ulong *)(start + size - 8),
+                                           (ulong *)start, size);
        WATCHDOG_RESET ();
        if (ret == 0)
                ret = memory_post_test1 (start, size, 0x00000000);
index ec5616a677634d451a15447ce9437a351052994a..98dce899a97f7998b11f58e8c7897ba9f7e0b95a 100644 (file)
@@ -226,7 +226,7 @@ rtc_init(void)
 
        if (bbclk.year>9) {
                printf("ds1302: Year was corrupted, fixing\n");
-               bbclk.year10=100;       /* 2000 - why not? ;) */
+               bbclk.year10=100/10;    /* 2000 - why not? ;) */
                bbclk.year=0;
                mod=1;
        }
index 8e728e23c3e4f0e63085342c2e944a29a62882cf..98be6176675fbd0bba6baf14b8f5ceee6139f388 100644 (file)
@@ -46,7 +46,7 @@ int main (int argc, char *argv[])
        FILE    *fp;
        bitmap_t bmp;
        bitmap_t *b = &bmp;
-       uint16_t n_colors;
+       uint16_t data_offset, n_colors;
 
        if (argc < 2) {
                fprintf (stderr, "Usage: %s file\n", argv[0]);
@@ -67,7 +67,9 @@ int main (int argc, char *argv[])
         * read width and height of the image, and the number of colors used;
         * ignore the rest
         */
-       skip_bytes (fp, 16);
+       skip_bytes (fp, 8);
+       fread (&data_offset, sizeof (uint16_t), 1, fp);
+       skip_bytes (fp, 6);
        fread (&b->width,   sizeof (uint16_t), 1, fp);
        skip_bytes (fp, 2);
        fread (&b->height,  sizeof (uint16_t), 1, fp);
@@ -78,6 +80,7 @@ int main (int argc, char *argv[])
        /*
         * Repair endianess.
         */
+       data_offset = le_short(data_offset);
        b->width = le_short(b->width);
        b->height = le_short(b->height);
        n_colors = le_short(n_colors);
@@ -129,6 +132,9 @@ int main (int argc, char *argv[])
                );
        }
 
+       /* seek to offset indicated by file header */
+       fseek(fp, (long)data_offset, SEEK_SET);
+
        /* read the bitmap; leave room for default color map */
        printf ("\n");
        printf ("};\n");
index 09b8b5d7a7c40754d36a69d2b3402ae9a1083f02..74c0498d5a671c415f785b1386d8965585e89405 100644 (file)
@@ -726,7 +726,7 @@ static int parse_config ()
        if (HaveRedundEnv && stat (DEVNAME (1), &st)) {
                fprintf (stderr,
                        "Cannot access MTD device %s: %s\n",
-                       DEVNAME (2), strerror (errno));
+                       DEVNAME (1), strerror (errno));
                return 1;
        }
        return 0;
index cc2ff09572e8fed800a44c556d9ed9ac74988d6f..13c45a278092f9f97af51d99c120f03d37bda6f0 100644 (file)
@@ -43,8 +43,8 @@
 #define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
 #define CONFIG_BOOTCOMMAND                                                     \
        "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs nfsroot=$(serverip):$(rootpath) "        \
-       "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off; "   \
+       "setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "        \
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
        "bootm"
 
 extern         void  fw_printenv(int argc, char *argv[]);
index fbc1a12549c06b446bb6bc085de7940188a334e6..70452db1c086c1f20d4cd236e671473c29c516e2 100644 (file)
@@ -383,7 +383,7 @@ NXTARG:             ;
 
        if (opt_type == IH_TYPE_MULTI || opt_type == IH_TYPE_SCRIPT) {
                char *file = datafile;
-               unsigned long size;
+               uint32_t size;
 
                for (;;) {
                        char *sep = NULL;
index 99b17195e571d0f425773b57b0fc1e7127e867b1..32a17677aaf97bdc9de2a8ebfaf5065e36d96e66 100644 (file)
@@ -24,7 +24,7 @@
 #include <common.h>
 #include <flash.h>
 
-extern flash_info_t  flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+extern flash_info_t  flash_info[]; /* info for FLASH chips */
 
 /*-----------------------------------------------------------------------
  * Functions
index 62d1083c4686eecf4e57c748c4613f0e27ab00b8..2d9b8c880286acdedb27d0e7e70fa0397019813e 100644 (file)
@@ -39,7 +39,7 @@
 #endif
 /*---------------------------------------------------------------------*/
 
-flash_info_t   flash_info[CFG_MAX_FLASH_BANKS];
+flash_info_t   flash_info[];
 
 static ulong flash_get_size (ulong addr, flash_info_t *info);
 static int flash_get_offsets (ulong base, flash_info_t *info);